packaging: Enable testing infrastructure
[external/binutils.git] / bfd / elfxx-mips.c
1 /* MIPS-specific support for ELF
2    Copyright (C) 1993-2019 Free Software Foundation, Inc.
3
4    Most of the information added by Ian Lance Taylor, Cygnus Support,
5    <ian@cygnus.com>.
6    N32/64 ABI support added by Mark Mitchell, CodeSourcery, LLC.
7    <mark@codesourcery.com>
8    Traditional MIPS targets support added by Koundinya.K, Dansk Data
9    Elektronik & Operations Research Group. <kk@ddeorg.soft.net>
10
11    This file is part of BFD, the Binary File Descriptor library.
12
13    This program is free software; you can redistribute it and/or modify
14    it under the terms of the GNU General Public License as published by
15    the Free Software Foundation; either version 3 of the License, or
16    (at your option) any later version.
17
18    This program is distributed in the hope that it will be useful,
19    but WITHOUT ANY WARRANTY; without even the implied warranty of
20    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21    GNU General Public License for more details.
22
23    You should have received a copy of the GNU General Public License
24    along with this program; if not, write to the Free Software
25    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
26    MA 02110-1301, USA.  */
27
28
29 /* This file handles functionality common to the different MIPS ABI's.  */
30
31 #include "sysdep.h"
32 #include "bfd.h"
33 #include "libbfd.h"
34 #include "libiberty.h"
35 #include "elf-bfd.h"
36 #include "elfxx-mips.h"
37 #include "elf/mips.h"
38 #include "elf-vxworks.h"
39 #include "dwarf2.h"
40
41 /* Get the ECOFF swapping routines.  */
42 #include "coff/sym.h"
43 #include "coff/symconst.h"
44 #include "coff/ecoff.h"
45 #include "coff/mips.h"
46
47 #include "hashtab.h"
48
49 /* Types of TLS GOT entry.  */
50 enum mips_got_tls_type {
51   GOT_TLS_NONE,
52   GOT_TLS_GD,
53   GOT_TLS_LDM,
54   GOT_TLS_IE
55 };
56
57 /* This structure is used to hold information about one GOT entry.
58    There are four types of entry:
59
60       (1) an absolute address
61             requires: abfd == NULL
62             fields: d.address
63
64       (2) a SYMBOL + OFFSET address, where SYMBOL is local to an input bfd
65             requires: abfd != NULL, symndx >= 0, tls_type != GOT_TLS_LDM
66             fields: abfd, symndx, d.addend, tls_type
67
68       (3) a SYMBOL address, where SYMBOL is not local to an input bfd
69             requires: abfd != NULL, symndx == -1
70             fields: d.h, tls_type
71
72       (4) a TLS LDM slot
73             requires: abfd != NULL, symndx == 0, tls_type == GOT_TLS_LDM
74             fields: none; there's only one of these per GOT.  */
75 struct mips_got_entry
76 {
77   /* One input bfd that needs the GOT entry.  */
78   bfd *abfd;
79   /* The index of the symbol, as stored in the relocation r_info, if
80      we have a local symbol; -1 otherwise.  */
81   long symndx;
82   union
83   {
84     /* If abfd == NULL, an address that must be stored in the got.  */
85     bfd_vma address;
86     /* If abfd != NULL && symndx != -1, the addend of the relocation
87        that should be added to the symbol value.  */
88     bfd_vma addend;
89     /* If abfd != NULL && symndx == -1, the hash table entry
90        corresponding to a symbol in the GOT.  The symbol's entry
91        is in the local area if h->global_got_area is GGA_NONE,
92        otherwise it is in the global area.  */
93     struct mips_elf_link_hash_entry *h;
94   } d;
95
96   /* The TLS type of this GOT entry.  An LDM GOT entry will be a local
97      symbol entry with r_symndx == 0.  */
98   unsigned char tls_type;
99
100   /* True if we have filled in the GOT contents for a TLS entry,
101      and created the associated relocations.  */
102   unsigned char tls_initialized;
103
104   /* The offset from the beginning of the .got section to the entry
105      corresponding to this symbol+addend.  If it's a global symbol
106      whose offset is yet to be decided, it's going to be -1.  */
107   long gotidx;
108 };
109
110 /* This structure represents a GOT page reference from an input bfd.
111    Each instance represents a symbol + ADDEND, where the representation
112    of the symbol depends on whether it is local to the input bfd.
113    If it is, then SYMNDX >= 0, and the symbol has index SYMNDX in U.ABFD.
114    Otherwise, SYMNDX < 0 and U.H points to the symbol's hash table entry.
115
116    Page references with SYMNDX >= 0 always become page references
117    in the output.  Page references with SYMNDX < 0 only become page
118    references if the symbol binds locally; in other cases, the page
119    reference decays to a global GOT reference.  */
120 struct mips_got_page_ref
121 {
122   long symndx;
123   union
124   {
125     struct mips_elf_link_hash_entry *h;
126     bfd *abfd;
127   } u;
128   bfd_vma addend;
129 };
130
131 /* This structure describes a range of addends: [MIN_ADDEND, MAX_ADDEND].
132    The structures form a non-overlapping list that is sorted by increasing
133    MIN_ADDEND.  */
134 struct mips_got_page_range
135 {
136   struct mips_got_page_range *next;
137   bfd_signed_vma min_addend;
138   bfd_signed_vma max_addend;
139 };
140
141 /* This structure describes the range of addends that are applied to page
142    relocations against a given section.  */
143 struct mips_got_page_entry
144 {
145   /* The section that these entries are based on.  */
146   asection *sec;
147   /* The ranges for this page entry.  */
148   struct mips_got_page_range *ranges;
149   /* The maximum number of page entries needed for RANGES.  */
150   bfd_vma num_pages;
151 };
152
153 /* This structure is used to hold .got information when linking.  */
154
155 struct mips_got_info
156 {
157   /* The number of global .got entries.  */
158   unsigned int global_gotno;
159   /* The number of global .got entries that are in the GGA_RELOC_ONLY area.  */
160   unsigned int reloc_only_gotno;
161   /* The number of .got slots used for TLS.  */
162   unsigned int tls_gotno;
163   /* The first unused TLS .got entry.  Used only during
164      mips_elf_initialize_tls_index.  */
165   unsigned int tls_assigned_gotno;
166   /* The number of local .got entries, eventually including page entries.  */
167   unsigned int local_gotno;
168   /* The maximum number of page entries needed.  */
169   unsigned int page_gotno;
170   /* The number of relocations needed for the GOT entries.  */
171   unsigned int relocs;
172   /* The first unused local .got entry.  */
173   unsigned int assigned_low_gotno;
174   /* The last unused local .got entry.  */
175   unsigned int assigned_high_gotno;
176   /* A hash table holding members of the got.  */
177   struct htab *got_entries;
178   /* A hash table holding mips_got_page_ref structures.  */
179   struct htab *got_page_refs;
180   /* A hash table of mips_got_page_entry structures.  */
181   struct htab *got_page_entries;
182   /* In multi-got links, a pointer to the next got (err, rather, most
183      of the time, it points to the previous got).  */
184   struct mips_got_info *next;
185 };
186
187 /* Structure passed when merging bfds' gots.  */
188
189 struct mips_elf_got_per_bfd_arg
190 {
191   /* The output bfd.  */
192   bfd *obfd;
193   /* The link information.  */
194   struct bfd_link_info *info;
195   /* A pointer to the primary got, i.e., the one that's going to get
196      the implicit relocations from DT_MIPS_LOCAL_GOTNO and
197      DT_MIPS_GOTSYM.  */
198   struct mips_got_info *primary;
199   /* A non-primary got we're trying to merge with other input bfd's
200      gots.  */
201   struct mips_got_info *current;
202   /* The maximum number of got entries that can be addressed with a
203      16-bit offset.  */
204   unsigned int max_count;
205   /* The maximum number of page entries needed by each got.  */
206   unsigned int max_pages;
207   /* The total number of global entries which will live in the
208      primary got and be automatically relocated.  This includes
209      those not referenced by the primary GOT but included in
210      the "master" GOT.  */
211   unsigned int global_count;
212 };
213
214 /* A structure used to pass information to htab_traverse callbacks
215    when laying out the GOT.  */
216
217 struct mips_elf_traverse_got_arg
218 {
219   struct bfd_link_info *info;
220   struct mips_got_info *g;
221   int value;
222 };
223
224 struct _mips_elf_section_data
225 {
226   struct bfd_elf_section_data elf;
227   union
228   {
229     bfd_byte *tdata;
230   } u;
231 };
232
233 #define mips_elf_section_data(sec) \
234   ((struct _mips_elf_section_data *) elf_section_data (sec))
235
236 #define is_mips_elf(bfd)                                \
237   (bfd_get_flavour (bfd) == bfd_target_elf_flavour      \
238    && elf_tdata (bfd) != NULL                           \
239    && elf_object_id (bfd) == MIPS_ELF_DATA)
240
241 /* The ABI says that every symbol used by dynamic relocations must have
242    a global GOT entry.  Among other things, this provides the dynamic
243    linker with a free, directly-indexed cache.  The GOT can therefore
244    contain symbols that are not referenced by GOT relocations themselves
245    (in other words, it may have symbols that are not referenced by things
246    like R_MIPS_GOT16 and R_MIPS_GOT_PAGE).
247
248    GOT relocations are less likely to overflow if we put the associated
249    GOT entries towards the beginning.  We therefore divide the global
250    GOT entries into two areas: "normal" and "reloc-only".  Entries in
251    the first area can be used for both dynamic relocations and GP-relative
252    accesses, while those in the "reloc-only" area are for dynamic
253    relocations only.
254
255    These GGA_* ("Global GOT Area") values are organised so that lower
256    values are more general than higher values.  Also, non-GGA_NONE
257    values are ordered by the position of the area in the GOT.  */
258 #define GGA_NORMAL 0
259 #define GGA_RELOC_ONLY 1
260 #define GGA_NONE 2
261
262 /* Information about a non-PIC interface to a PIC function.  There are
263    two ways of creating these interfaces.  The first is to add:
264
265         lui     $25,%hi(func)
266         addiu   $25,$25,%lo(func)
267
268    immediately before a PIC function "func".  The second is to add:
269
270         lui     $25,%hi(func)
271         j       func
272         addiu   $25,$25,%lo(func)
273
274    to a separate trampoline section.
275
276    Stubs of the first kind go in a new section immediately before the
277    target function.  Stubs of the second kind go in a single section
278    pointed to by the hash table's "strampoline" field.  */
279 struct mips_elf_la25_stub {
280   /* The generated section that contains this stub.  */
281   asection *stub_section;
282
283   /* The offset of the stub from the start of STUB_SECTION.  */
284   bfd_vma offset;
285
286   /* One symbol for the original function.  Its location is available
287      in H->root.root.u.def.  */
288   struct mips_elf_link_hash_entry *h;
289 };
290
291 /* Macros for populating a mips_elf_la25_stub.  */
292
293 #define LA25_LUI(VAL) (0x3c190000 | (VAL))      /* lui t9,VAL */
294 #define LA25_J(VAL) (0x08000000 | (((VAL) >> 2) & 0x3ffffff)) /* j VAL */
295 #define LA25_BC(VAL) (0xc8000000 | (((VAL) >> 2) & 0x3ffffff)) /* bc VAL */
296 #define LA25_ADDIU(VAL) (0x27390000 | (VAL))    /* addiu t9,t9,VAL */
297 #define LA25_LUI_MICROMIPS(VAL)                                         \
298   (0x41b90000 | (VAL))                          /* lui t9,VAL */
299 #define LA25_J_MICROMIPS(VAL)                                           \
300   (0xd4000000 | (((VAL) >> 1) & 0x3ffffff))     /* j VAL */
301 #define LA25_ADDIU_MICROMIPS(VAL)                                       \
302   (0x33390000 | (VAL))                          /* addiu t9,t9,VAL */
303
304 /* This structure is passed to mips_elf_sort_hash_table_f when sorting
305    the dynamic symbols.  */
306
307 struct mips_elf_hash_sort_data
308 {
309   /* The symbol in the global GOT with the lowest dynamic symbol table
310      index.  */
311   struct elf_link_hash_entry *low;
312   /* The least dynamic symbol table index corresponding to a non-TLS
313      symbol with a GOT entry.  */
314   bfd_size_type min_got_dynindx;
315   /* The greatest dynamic symbol table index corresponding to a symbol
316      with a GOT entry that is not referenced (e.g., a dynamic symbol
317      with dynamic relocations pointing to it from non-primary GOTs).  */
318   bfd_size_type max_unref_got_dynindx;
319   /* The greatest dynamic symbol table index corresponding to a local
320      symbol.  */
321   bfd_size_type max_local_dynindx;
322   /* The greatest dynamic symbol table index corresponding to an external
323      symbol without a GOT entry.  */
324   bfd_size_type max_non_got_dynindx;
325   /* If non-NULL, output BFD for .MIPS.xhash finalization.  */
326   bfd *output_bfd;
327   /* If non-NULL, pointer to contents of .MIPS.xhash for filling in
328      real final dynindx.  */
329   bfd_byte *mipsxhash;
330 };
331
332 /* We make up to two PLT entries if needed, one for standard MIPS code
333    and one for compressed code, either a MIPS16 or microMIPS one.  We
334    keep a separate record of traditional lazy-binding stubs, for easier
335    processing.  */
336
337 struct plt_entry
338 {
339   /* Traditional SVR4 stub offset, or -1 if none.  */
340   bfd_vma stub_offset;
341
342   /* Standard PLT entry offset, or -1 if none.  */
343   bfd_vma mips_offset;
344
345   /* Compressed PLT entry offset, or -1 if none.  */
346   bfd_vma comp_offset;
347
348   /* The corresponding .got.plt index, or -1 if none.  */
349   bfd_vma gotplt_index;
350
351   /* Whether we need a standard PLT entry.  */
352   unsigned int need_mips : 1;
353
354   /* Whether we need a compressed PLT entry.  */
355   unsigned int need_comp : 1;
356 };
357
358 /* The MIPS ELF linker needs additional information for each symbol in
359    the global hash table.  */
360
361 struct mips_elf_link_hash_entry
362 {
363   struct elf_link_hash_entry root;
364
365   /* External symbol information.  */
366   EXTR esym;
367
368   /* The la25 stub we have created for ths symbol, if any.  */
369   struct mips_elf_la25_stub *la25_stub;
370
371   /* Number of R_MIPS_32, R_MIPS_REL32, or R_MIPS_64 relocs against
372      this symbol.  */
373   unsigned int possibly_dynamic_relocs;
374
375   /* If there is a stub that 32 bit functions should use to call this
376      16 bit function, this points to the section containing the stub.  */
377   asection *fn_stub;
378
379   /* If there is a stub that 16 bit functions should use to call this
380      32 bit function, this points to the section containing the stub.  */
381   asection *call_stub;
382
383   /* This is like the call_stub field, but it is used if the function
384      being called returns a floating point value.  */
385   asection *call_fp_stub;
386
387   /* If non-zero, location in .MIPS.xhash to write real final dynindx.  */
388   bfd_vma mipsxhash_loc;
389
390   /* The highest GGA_* value that satisfies all references to this symbol.  */
391   unsigned int global_got_area : 2;
392
393   /* True if all GOT relocations against this symbol are for calls.  This is
394      a looser condition than no_fn_stub below, because there may be other
395      non-call non-GOT relocations against the symbol.  */
396   unsigned int got_only_for_calls : 1;
397
398   /* True if one of the relocations described by possibly_dynamic_relocs
399      is against a readonly section.  */
400   unsigned int readonly_reloc : 1;
401
402   /* True if there is a relocation against this symbol that must be
403      resolved by the static linker (in other words, if the relocation
404      cannot possibly be made dynamic).  */
405   unsigned int has_static_relocs : 1;
406
407   /* True if we must not create a .MIPS.stubs entry for this symbol.
408      This is set, for example, if there are relocations related to
409      taking the function's address, i.e. any but R_MIPS_CALL*16 ones.
410      See "MIPS ABI Supplement, 3rd Edition", p. 4-20.  */
411   unsigned int no_fn_stub : 1;
412
413   /* Whether we need the fn_stub; this is true if this symbol appears
414      in any relocs other than a 16 bit call.  */
415   unsigned int need_fn_stub : 1;
416
417   /* True if this symbol is referenced by branch relocations from
418      any non-PIC input file.  This is used to determine whether an
419      la25 stub is required.  */
420   unsigned int has_nonpic_branches : 1;
421
422   /* Does this symbol need a traditional MIPS lazy-binding stub
423      (as opposed to a PLT entry)?  */
424   unsigned int needs_lazy_stub : 1;
425
426   /* Does this symbol resolve to a PLT entry?  */
427   unsigned int use_plt_entry : 1;
428 };
429
430 /* MIPS ELF linker hash table.  */
431
432 struct mips_elf_link_hash_table
433 {
434   struct elf_link_hash_table root;
435
436   /* The number of .rtproc entries.  */
437   bfd_size_type procedure_count;
438
439   /* The size of the .compact_rel section (if SGI_COMPAT).  */
440   bfd_size_type compact_rel_size;
441
442   /* This flag indicates that the value of DT_MIPS_RLD_MAP dynamic entry
443      is set to the address of __rld_obj_head as in IRIX5 and IRIX6.  */
444   bfd_boolean use_rld_obj_head;
445
446   /* The  __rld_map or __rld_obj_head symbol. */
447   struct elf_link_hash_entry *rld_symbol;
448
449   /* This is set if we see any mips16 stub sections.  */
450   bfd_boolean mips16_stubs_seen;
451
452   /* True if we can generate copy relocs and PLTs.  */
453   bfd_boolean use_plts_and_copy_relocs;
454
455   /* True if we can only use 32-bit microMIPS instructions.  */
456   bfd_boolean insn32;
457
458   /* True if we suppress checks for invalid branches between ISA modes.  */
459   bfd_boolean ignore_branch_isa;
460
461   /* True if we are targetting R6 compact branches.  */
462   bfd_boolean compact_branches;
463
464   /* True if we're generating code for VxWorks.  */
465   bfd_boolean is_vxworks;
466
467   /* True if we already reported the small-data section overflow.  */
468   bfd_boolean small_data_overflow_reported;
469
470   /* True if we use the special `__gnu_absolute_zero' symbol.  */
471   bfd_boolean use_absolute_zero;
472
473   /* True if we have been configured for a GNU target.  */
474   bfd_boolean gnu_target;
475
476   /* Shortcuts to some dynamic sections, or NULL if they are not
477      being used.  */
478   asection *srelplt2;
479   asection *sstubs;
480
481   /* The master GOT information.  */
482   struct mips_got_info *got_info;
483
484   /* The global symbol in the GOT with the lowest index in the dynamic
485      symbol table.  */
486   struct elf_link_hash_entry *global_gotsym;
487
488   /* The size of the PLT header in bytes.  */
489   bfd_vma plt_header_size;
490
491   /* The size of a standard PLT entry in bytes.  */
492   bfd_vma plt_mips_entry_size;
493
494   /* The size of a compressed PLT entry in bytes.  */
495   bfd_vma plt_comp_entry_size;
496
497   /* The offset of the next standard PLT entry to create.  */
498   bfd_vma plt_mips_offset;
499
500   /* The offset of the next compressed PLT entry to create.  */
501   bfd_vma plt_comp_offset;
502
503   /* The index of the next .got.plt entry to create.  */
504   bfd_vma plt_got_index;
505
506   /* The number of functions that need a lazy-binding stub.  */
507   bfd_vma lazy_stub_count;
508
509   /* The size of a function stub entry in bytes.  */
510   bfd_vma function_stub_size;
511
512   /* The number of reserved entries at the beginning of the GOT.  */
513   unsigned int reserved_gotno;
514
515   /* The section used for mips_elf_la25_stub trampolines.
516      See the comment above that structure for details.  */
517   asection *strampoline;
518
519   /* A table of mips_elf_la25_stubs, indexed by (input_section, offset)
520      pairs.  */
521   htab_t la25_stubs;
522
523   /* A function FN (NAME, IS, OS) that creates a new input section
524      called NAME and links it to output section OS.  If IS is nonnull,
525      the new section should go immediately before it, otherwise it
526      should go at the (current) beginning of OS.
527
528      The function returns the new section on success, otherwise it
529      returns null.  */
530   asection *(*add_stub_section) (const char *, asection *, asection *);
531
532   /* Small local sym cache.  */
533   struct sym_cache sym_cache;
534
535   /* Is the PLT header compressed?  */
536   unsigned int plt_header_is_comp : 1;
537 };
538
539 /* Get the MIPS ELF linker hash table from a link_info structure.  */
540
541 #define mips_elf_hash_table(p) \
542   (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
543   == MIPS_ELF_DATA ? ((struct mips_elf_link_hash_table *) ((p)->hash)) : NULL)
544
545 /* A structure used to communicate with htab_traverse callbacks.  */
546 struct mips_htab_traverse_info
547 {
548   /* The usual link-wide information.  */
549   struct bfd_link_info *info;
550   bfd *output_bfd;
551
552   /* Starts off FALSE and is set to TRUE if the link should be aborted.  */
553   bfd_boolean error;
554 };
555
556 /* MIPS ELF private object data.  */
557
558 struct mips_elf_obj_tdata
559 {
560   /* Generic ELF private object data.  */
561   struct elf_obj_tdata root;
562
563   /* Input BFD providing Tag_GNU_MIPS_ABI_FP attribute for output.  */
564   bfd *abi_fp_bfd;
565
566   /* Input BFD providing Tag_GNU_MIPS_ABI_MSA attribute for output.  */
567   bfd *abi_msa_bfd;
568
569   /* The abiflags for this object.  */
570   Elf_Internal_ABIFlags_v0 abiflags;
571   bfd_boolean abiflags_valid;
572
573   /* The GOT requirements of input bfds.  */
574   struct mips_got_info *got;
575
576   /* Used by _bfd_mips_elf_find_nearest_line.  The structure could be
577      included directly in this one, but there's no point to wasting
578      the memory just for the infrequently called find_nearest_line.  */
579   struct mips_elf_find_line *find_line_info;
580
581   /* An array of stub sections indexed by symbol number.  */
582   asection **local_stubs;
583   asection **local_call_stubs;
584
585   /* The Irix 5 support uses two virtual sections, which represent
586      text/data symbols defined in dynamic objects.  */
587   asymbol *elf_data_symbol;
588   asymbol *elf_text_symbol;
589   asection *elf_data_section;
590   asection *elf_text_section;
591 };
592
593 /* Get MIPS ELF private object data from BFD's tdata.  */
594
595 #define mips_elf_tdata(bfd) \
596   ((struct mips_elf_obj_tdata *) (bfd)->tdata.any)
597
598 #define TLS_RELOC_P(r_type) \
599   (r_type == R_MIPS_TLS_DTPMOD32                \
600    || r_type == R_MIPS_TLS_DTPMOD64             \
601    || r_type == R_MIPS_TLS_DTPREL32             \
602    || r_type == R_MIPS_TLS_DTPREL64             \
603    || r_type == R_MIPS_TLS_GD                   \
604    || r_type == R_MIPS_TLS_LDM                  \
605    || r_type == R_MIPS_TLS_DTPREL_HI16          \
606    || r_type == R_MIPS_TLS_DTPREL_LO16          \
607    || r_type == R_MIPS_TLS_GOTTPREL             \
608    || r_type == R_MIPS_TLS_TPREL32              \
609    || r_type == R_MIPS_TLS_TPREL64              \
610    || r_type == R_MIPS_TLS_TPREL_HI16           \
611    || r_type == R_MIPS_TLS_TPREL_LO16           \
612    || r_type == R_MIPS16_TLS_GD                 \
613    || r_type == R_MIPS16_TLS_LDM                \
614    || r_type == R_MIPS16_TLS_DTPREL_HI16        \
615    || r_type == R_MIPS16_TLS_DTPREL_LO16        \
616    || r_type == R_MIPS16_TLS_GOTTPREL           \
617    || r_type == R_MIPS16_TLS_TPREL_HI16         \
618    || r_type == R_MIPS16_TLS_TPREL_LO16         \
619    || r_type == R_MICROMIPS_TLS_GD              \
620    || r_type == R_MICROMIPS_TLS_LDM             \
621    || r_type == R_MICROMIPS_TLS_DTPREL_HI16     \
622    || r_type == R_MICROMIPS_TLS_DTPREL_LO16     \
623    || r_type == R_MICROMIPS_TLS_GOTTPREL        \
624    || r_type == R_MICROMIPS_TLS_TPREL_HI16      \
625    || r_type == R_MICROMIPS_TLS_TPREL_LO16)
626
627 /* Structure used to pass information to mips_elf_output_extsym.  */
628
629 struct extsym_info
630 {
631   bfd *abfd;
632   struct bfd_link_info *info;
633   struct ecoff_debug_info *debug;
634   const struct ecoff_debug_swap *swap;
635   bfd_boolean failed;
636 };
637
638 /* The names of the runtime procedure table symbols used on IRIX5.  */
639
640 static const char * const mips_elf_dynsym_rtproc_names[] =
641 {
642   "_procedure_table",
643   "_procedure_string_table",
644   "_procedure_table_size",
645   NULL
646 };
647
648 /* These structures are used to generate the .compact_rel section on
649    IRIX5.  */
650
651 typedef struct
652 {
653   unsigned long id1;            /* Always one?  */
654   unsigned long num;            /* Number of compact relocation entries.  */
655   unsigned long id2;            /* Always two?  */
656   unsigned long offset;         /* The file offset of the first relocation.  */
657   unsigned long reserved0;      /* Zero?  */
658   unsigned long reserved1;      /* Zero?  */
659 } Elf32_compact_rel;
660
661 typedef struct
662 {
663   bfd_byte id1[4];
664   bfd_byte num[4];
665   bfd_byte id2[4];
666   bfd_byte offset[4];
667   bfd_byte reserved0[4];
668   bfd_byte reserved1[4];
669 } Elf32_External_compact_rel;
670
671 typedef struct
672 {
673   unsigned int ctype : 1;       /* 1: long 0: short format. See below.  */
674   unsigned int rtype : 4;       /* Relocation types. See below.  */
675   unsigned int dist2to : 8;
676   unsigned int relvaddr : 19;   /* (VADDR - vaddr of the previous entry)/ 4 */
677   unsigned long konst;          /* KONST field. See below.  */
678   unsigned long vaddr;          /* VADDR to be relocated.  */
679 } Elf32_crinfo;
680
681 typedef struct
682 {
683   unsigned int ctype : 1;       /* 1: long 0: short format. See below.  */
684   unsigned int rtype : 4;       /* Relocation types. See below.  */
685   unsigned int dist2to : 8;
686   unsigned int relvaddr : 19;   /* (VADDR - vaddr of the previous entry)/ 4 */
687   unsigned long konst;          /* KONST field. See below.  */
688 } Elf32_crinfo2;
689
690 typedef struct
691 {
692   bfd_byte info[4];
693   bfd_byte konst[4];
694   bfd_byte vaddr[4];
695 } Elf32_External_crinfo;
696
697 typedef struct
698 {
699   bfd_byte info[4];
700   bfd_byte konst[4];
701 } Elf32_External_crinfo2;
702
703 /* These are the constants used to swap the bitfields in a crinfo.  */
704
705 #define CRINFO_CTYPE (0x1)
706 #define CRINFO_CTYPE_SH (31)
707 #define CRINFO_RTYPE (0xf)
708 #define CRINFO_RTYPE_SH (27)
709 #define CRINFO_DIST2TO (0xff)
710 #define CRINFO_DIST2TO_SH (19)
711 #define CRINFO_RELVADDR (0x7ffff)
712 #define CRINFO_RELVADDR_SH (0)
713
714 /* A compact relocation info has long (3 words) or short (2 words)
715    formats.  A short format doesn't have VADDR field and relvaddr
716    fields contains ((VADDR - vaddr of the previous entry) >> 2).  */
717 #define CRF_MIPS_LONG                   1
718 #define CRF_MIPS_SHORT                  0
719
720 /* There are 4 types of compact relocation at least. The value KONST
721    has different meaning for each type:
722
723    (type)               (konst)
724    CT_MIPS_REL32        Address in data
725    CT_MIPS_WORD         Address in word (XXX)
726    CT_MIPS_GPHI_LO      GP - vaddr
727    CT_MIPS_JMPAD        Address to jump
728    */
729
730 #define CRT_MIPS_REL32                  0xa
731 #define CRT_MIPS_WORD                   0xb
732 #define CRT_MIPS_GPHI_LO                0xc
733 #define CRT_MIPS_JMPAD                  0xd
734
735 #define mips_elf_set_cr_format(x,format)        ((x).ctype = (format))
736 #define mips_elf_set_cr_type(x,type)            ((x).rtype = (type))
737 #define mips_elf_set_cr_dist2to(x,v)            ((x).dist2to = (v))
738 #define mips_elf_set_cr_relvaddr(x,d)           ((x).relvaddr = (d)<<2)
739 \f
740 /* The structure of the runtime procedure descriptor created by the
741    loader for use by the static exception system.  */
742
743 typedef struct runtime_pdr {
744         bfd_vma adr;            /* Memory address of start of procedure.  */
745         long    regmask;        /* Save register mask.  */
746         long    regoffset;      /* Save register offset.  */
747         long    fregmask;       /* Save floating point register mask.  */
748         long    fregoffset;     /* Save floating point register offset.  */
749         long    frameoffset;    /* Frame size.  */
750         short   framereg;       /* Frame pointer register.  */
751         short   pcreg;          /* Offset or reg of return pc.  */
752         long    irpss;          /* Index into the runtime string table.  */
753         long    reserved;
754         struct exception_info *exception_info;/* Pointer to exception array.  */
755 } RPDR, *pRPDR;
756 #define cbRPDR sizeof (RPDR)
757 #define rpdNil ((pRPDR) 0)
758 \f
759 static struct mips_got_entry *mips_elf_create_local_got_entry
760   (bfd *, struct bfd_link_info *, bfd *, bfd_vma, unsigned long,
761    struct mips_elf_link_hash_entry *, int);
762 static bfd_boolean mips_elf_sort_hash_table_f
763   (struct mips_elf_link_hash_entry *, void *);
764 static bfd_vma mips_elf_high
765   (bfd_vma);
766 static bfd_boolean mips_elf_create_dynamic_relocation
767   (bfd *, struct bfd_link_info *, const Elf_Internal_Rela *,
768    struct mips_elf_link_hash_entry *, asection *, bfd_vma,
769    bfd_vma *, asection *);
770 static bfd_vma mips_elf_adjust_gp
771   (bfd *, struct mips_got_info *, bfd *);
772
773 /* This will be used when we sort the dynamic relocation records.  */
774 static bfd *reldyn_sorting_bfd;
775
776 /* True if ABFD is for CPUs with load interlocking that include
777    non-MIPS1 CPUs and R3900.  */
778 #define LOAD_INTERLOCKS_P(abfd) \
779   (   ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) != E_MIPS_ARCH_1) \
780    || ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == E_MIPS_MACH_3900))
781
782 /* True if ABFD is for CPUs that are faster if JAL is converted to BAL.
783    This should be safe for all architectures.  We enable this predicate
784    for RM9000 for now.  */
785 #define JAL_TO_BAL_P(abfd) \
786   ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == E_MIPS_MACH_9000)
787
788 /* True if ABFD is for CPUs that are faster if JALR is converted to BAL.
789    This should be safe for all architectures.  We enable this predicate for
790    all CPUs.  */
791 #define JALR_TO_BAL_P(abfd) 1
792
793 /* True if ABFD is for CPUs that are faster if JR is converted to B.
794    This should be safe for all architectures.  We enable this predicate for
795    all CPUs.  */
796 #define JR_TO_B_P(abfd) 1
797
798 /* True if ABFD is a PIC object.  */
799 #define PIC_OBJECT_P(abfd) \
800   ((elf_elfheader (abfd)->e_flags & EF_MIPS_PIC) != 0)
801
802 /* Nonzero if ABFD is using the O32 ABI.  */
803 #define ABI_O32_P(abfd) \
804   ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O32)
805
806 /* Nonzero if ABFD is using the N32 ABI.  */
807 #define ABI_N32_P(abfd) \
808   ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI2) != 0)
809
810 /* Nonzero if ABFD is using the N64 ABI.  */
811 #define ABI_64_P(abfd) \
812   (get_elf_backend_data (abfd)->s->elfclass == ELFCLASS64)
813
814 /* Nonzero if ABFD is using NewABI conventions.  */
815 #define NEWABI_P(abfd) (ABI_N32_P (abfd) || ABI_64_P (abfd))
816
817 /* Nonzero if ABFD has microMIPS code.  */
818 #define MICROMIPS_P(abfd) \
819   ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MICROMIPS) != 0)
820
821 /* Nonzero if ABFD is MIPS R6.  */
822 #define MIPSR6_P(abfd) \
823   ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R6 \
824     || (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64R6)
825
826 /* The IRIX compatibility level we are striving for.  */
827 #define IRIX_COMPAT(abfd) \
828   (get_elf_backend_data (abfd)->elf_backend_mips_irix_compat (abfd))
829
830 /* Whether we are trying to be compatible with IRIX at all.  */
831 #define SGI_COMPAT(abfd) \
832   (IRIX_COMPAT (abfd) != ict_none)
833
834 /* The name of the options section.  */
835 #define MIPS_ELF_OPTIONS_SECTION_NAME(abfd) \
836   (NEWABI_P (abfd) ? ".MIPS.options" : ".options")
837
838 /* True if NAME is the recognized name of any SHT_MIPS_OPTIONS section.
839    Some IRIX system files do not use MIPS_ELF_OPTIONS_SECTION_NAME.  */
840 #define MIPS_ELF_OPTIONS_SECTION_NAME_P(NAME) \
841   (strcmp (NAME, ".MIPS.options") == 0 || strcmp (NAME, ".options") == 0)
842
843 /* True if NAME is the recognized name of any SHT_MIPS_ABIFLAGS section.  */
844 #define MIPS_ELF_ABIFLAGS_SECTION_NAME_P(NAME) \
845   (strcmp (NAME, ".MIPS.abiflags") == 0)
846
847 /* Whether the section is readonly.  */
848 #define MIPS_ELF_READONLY_SECTION(sec) \
849   ((sec->flags & (SEC_ALLOC | SEC_LOAD | SEC_READONLY))         \
850    == (SEC_ALLOC | SEC_LOAD | SEC_READONLY))
851
852 /* The name of the stub section.  */
853 #define MIPS_ELF_STUB_SECTION_NAME(abfd) ".MIPS.stubs"
854
855 /* The size of an external REL relocation.  */
856 #define MIPS_ELF_REL_SIZE(abfd) \
857   (get_elf_backend_data (abfd)->s->sizeof_rel)
858
859 /* The size of an external RELA relocation.  */
860 #define MIPS_ELF_RELA_SIZE(abfd) \
861   (get_elf_backend_data (abfd)->s->sizeof_rela)
862
863 /* The size of an external dynamic table entry.  */
864 #define MIPS_ELF_DYN_SIZE(abfd) \
865   (get_elf_backend_data (abfd)->s->sizeof_dyn)
866
867 /* The size of a GOT entry.  */
868 #define MIPS_ELF_GOT_SIZE(abfd) \
869   (get_elf_backend_data (abfd)->s->arch_size / 8)
870
871 /* The size of the .rld_map section. */
872 #define MIPS_ELF_RLD_MAP_SIZE(abfd) \
873   (get_elf_backend_data (abfd)->s->arch_size / 8)
874
875 /* The size of a symbol-table entry.  */
876 #define MIPS_ELF_SYM_SIZE(abfd) \
877   (get_elf_backend_data (abfd)->s->sizeof_sym)
878
879 /* The default alignment for sections, as a power of two.  */
880 #define MIPS_ELF_LOG_FILE_ALIGN(abfd)                           \
881   (get_elf_backend_data (abfd)->s->log_file_align)
882
883 /* Get word-sized data.  */
884 #define MIPS_ELF_GET_WORD(abfd, ptr) \
885   (ABI_64_P (abfd) ? bfd_get_64 (abfd, ptr) : bfd_get_32 (abfd, ptr))
886
887 /* Put out word-sized data.  */
888 #define MIPS_ELF_PUT_WORD(abfd, val, ptr)       \
889   (ABI_64_P (abfd)                              \
890    ? bfd_put_64 (abfd, val, ptr)                \
891    : bfd_put_32 (abfd, val, ptr))
892
893 /* The opcode for word-sized loads (LW or LD).  */
894 #define MIPS_ELF_LOAD_WORD(abfd) \
895   (ABI_64_P (abfd) ? 0xdc000000 : 0x8c000000)
896
897 /* Add a dynamic symbol table-entry.  */
898 #define MIPS_ELF_ADD_DYNAMIC_ENTRY(info, tag, val)      \
899   _bfd_elf_add_dynamic_entry (info, tag, val)
900
901 #define MIPS_ELF_RTYPE_TO_HOWTO(abfd, rtype, rela)                      \
902   (get_elf_backend_data (abfd)->elf_backend_mips_rtype_to_howto (abfd, rtype, rela))
903
904 /* The name of the dynamic relocation section.  */
905 #define MIPS_ELF_REL_DYN_NAME(INFO) \
906   (mips_elf_hash_table (INFO)->is_vxworks ? ".rela.dyn" : ".rel.dyn")
907
908 /* In case we're on a 32-bit machine, construct a 64-bit "-1" value
909    from smaller values.  Start with zero, widen, *then* decrement.  */
910 #define MINUS_ONE       (((bfd_vma)0) - 1)
911 #define MINUS_TWO       (((bfd_vma)0) - 2)
912
913 /* The value to write into got[1] for SVR4 targets, to identify it is
914    a GNU object.  The dynamic linker can then use got[1] to store the
915    module pointer.  */
916 #define MIPS_ELF_GNU_GOT1_MASK(abfd) \
917   ((bfd_vma) 1 << (ABI_64_P (abfd) ? 63 : 31))
918
919 /* The offset of $gp from the beginning of the .got section.  */
920 #define ELF_MIPS_GP_OFFSET(INFO) \
921   (mips_elf_hash_table (INFO)->is_vxworks ? 0x0 : 0x7ff0)
922
923 /* The maximum size of the GOT for it to be addressable using 16-bit
924    offsets from $gp.  */
925 #define MIPS_ELF_GOT_MAX_SIZE(INFO) (ELF_MIPS_GP_OFFSET (INFO) + 0x7fff)
926
927 /* Instructions which appear in a stub.  */
928 #define STUB_LW(abfd)                                                   \
929   ((ABI_64_P (abfd)                                                     \
930     ? 0xdf998010                                /* ld t9,0x8010(gp) */  \
931     : 0x8f998010))                              /* lw t9,0x8010(gp) */
932 #define STUB_MOVE 0x03e07825                    /* or t7,ra,zero */
933 #define STUB_LUI(VAL) (0x3c180000 + (VAL))      /* lui t8,VAL */
934 #define STUB_JALR 0x0320f809                    /* jalr ra,t9 */
935 #define STUB_JALRC 0xf8190000                   /* jalrc ra,t9 */
936 #define STUB_ORI(VAL) (0x37180000 + (VAL))      /* ori t8,t8,VAL */
937 #define STUB_LI16U(VAL) (0x34180000 + (VAL))    /* ori t8,zero,VAL unsigned */
938 #define STUB_LI16S(abfd, VAL)                                           \
939    ((ABI_64_P (abfd)                                                    \
940     ? (0x64180000 + (VAL))      /* daddiu t8,zero,VAL sign extended */  \
941     : (0x24180000 + (VAL))))    /* addiu t8,zero,VAL sign extended */
942
943 /* Likewise for the microMIPS ASE.  */
944 #define STUB_LW_MICROMIPS(abfd)                                         \
945   (ABI_64_P (abfd)                                                      \
946    ? 0xdf3c8010                                 /* ld t9,0x8010(gp) */  \
947    : 0xff3c8010)                                /* lw t9,0x8010(gp) */
948 #define STUB_MOVE_MICROMIPS 0x0dff              /* move t7,ra */
949 #define STUB_MOVE32_MICROMIPS 0x001f7a90        /* or t7,ra,zero */
950 #define STUB_LUI_MICROMIPS(VAL)                                         \
951    (0x41b80000 + (VAL))                         /* lui t8,VAL */
952 #define STUB_JALR_MICROMIPS 0x45d9              /* jalr t9 */
953 #define STUB_JALR32_MICROMIPS 0x03f90f3c        /* jalr ra,t9 */
954 #define STUB_ORI_MICROMIPS(VAL)                                         \
955   (0x53180000 + (VAL))                          /* ori t8,t8,VAL */
956 #define STUB_LI16U_MICROMIPS(VAL)                                       \
957   (0x53000000 + (VAL))                          /* ori t8,zero,VAL unsigned */
958 #define STUB_LI16S_MICROMIPS(abfd, VAL)                                 \
959    (ABI_64_P (abfd)                                                     \
960     ? 0x5f000000 + (VAL)        /* daddiu t8,zero,VAL sign extended */  \
961     : 0x33000000 + (VAL))       /* addiu t8,zero,VAL sign extended */
962
963 #define MIPS_FUNCTION_STUB_NORMAL_SIZE 16
964 #define MIPS_FUNCTION_STUB_BIG_SIZE 20
965 #define MICROMIPS_FUNCTION_STUB_NORMAL_SIZE 12
966 #define MICROMIPS_FUNCTION_STUB_BIG_SIZE 16
967 #define MICROMIPS_INSN32_FUNCTION_STUB_NORMAL_SIZE 16
968 #define MICROMIPS_INSN32_FUNCTION_STUB_BIG_SIZE 20
969
970 /* The name of the dynamic interpreter.  This is put in the .interp
971    section.  */
972
973 #define ELF_DYNAMIC_INTERPRETER(abfd)           \
974    (ABI_N32_P (abfd) ? "/usr/lib32/libc.so.1"   \
975     : ABI_64_P (abfd) ? "/usr/lib64/libc.so.1"  \
976     : "/usr/lib/libc.so.1")
977
978 #ifdef BFD64
979 #define MNAME(bfd,pre,pos) \
980   (ABI_64_P (bfd) ? CONCAT4 (pre,64,_,pos) : CONCAT4 (pre,32,_,pos))
981 #define ELF_R_SYM(bfd, i)                                       \
982   (ABI_64_P (bfd) ? ELF64_R_SYM (i) : ELF32_R_SYM (i))
983 #define ELF_R_TYPE(bfd, i)                                      \
984   (ABI_64_P (bfd) ? ELF64_MIPS_R_TYPE (i) : ELF32_R_TYPE (i))
985 #define ELF_R_INFO(bfd, s, t)                                   \
986   (ABI_64_P (bfd) ? ELF64_R_INFO (s, t) : ELF32_R_INFO (s, t))
987 #else
988 #define MNAME(bfd,pre,pos) CONCAT4 (pre,32,_,pos)
989 #define ELF_R_SYM(bfd, i)                                       \
990   (ELF32_R_SYM (i))
991 #define ELF_R_TYPE(bfd, i)                                      \
992   (ELF32_R_TYPE (i))
993 #define ELF_R_INFO(bfd, s, t)                                   \
994   (ELF32_R_INFO (s, t))
995 #endif
996 \f
997   /* The mips16 compiler uses a couple of special sections to handle
998      floating point arguments.
999
1000      Section names that look like .mips16.fn.FNNAME contain stubs that
1001      copy floating point arguments from the fp regs to the gp regs and
1002      then jump to FNNAME.  If any 32 bit function calls FNNAME, the
1003      call should be redirected to the stub instead.  If no 32 bit
1004      function calls FNNAME, the stub should be discarded.  We need to
1005      consider any reference to the function, not just a call, because
1006      if the address of the function is taken we will need the stub,
1007      since the address might be passed to a 32 bit function.
1008
1009      Section names that look like .mips16.call.FNNAME contain stubs
1010      that copy floating point arguments from the gp regs to the fp
1011      regs and then jump to FNNAME.  If FNNAME is a 32 bit function,
1012      then any 16 bit function that calls FNNAME should be redirected
1013      to the stub instead.  If FNNAME is not a 32 bit function, the
1014      stub should be discarded.
1015
1016      .mips16.call.fp.FNNAME sections are similar, but contain stubs
1017      which call FNNAME and then copy the return value from the fp regs
1018      to the gp regs.  These stubs store the return value in $18 while
1019      calling FNNAME; any function which might call one of these stubs
1020      must arrange to save $18 around the call.  (This case is not
1021      needed for 32 bit functions that call 16 bit functions, because
1022      16 bit functions always return floating point values in both
1023      $f0/$f1 and $2/$3.)
1024
1025      Note that in all cases FNNAME might be defined statically.
1026      Therefore, FNNAME is not used literally.  Instead, the relocation
1027      information will indicate which symbol the section is for.
1028
1029      We record any stubs that we find in the symbol table.  */
1030
1031 #define FN_STUB ".mips16.fn."
1032 #define CALL_STUB ".mips16.call."
1033 #define CALL_FP_STUB ".mips16.call.fp."
1034
1035 #define FN_STUB_P(name) CONST_STRNEQ (name, FN_STUB)
1036 #define CALL_STUB_P(name) CONST_STRNEQ (name, CALL_STUB)
1037 #define CALL_FP_STUB_P(name) CONST_STRNEQ (name, CALL_FP_STUB)
1038 \f
1039 /* The format of the first PLT entry in an O32 executable.  */
1040 static const bfd_vma mips_o32_exec_plt0_entry[] =
1041 {
1042   0x3c1c0000,   /* lui $28, %hi(&GOTPLT[0])                             */
1043   0x8f990000,   /* lw $25, %lo(&GOTPLT[0])($28)                         */
1044   0x279c0000,   /* addiu $28, $28, %lo(&GOTPLT[0])                      */
1045   0x031cc023,   /* subu $24, $24, $28                                   */
1046   0x03e07825,   /* or t7, ra, zero                                      */
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 O32 executable using compact
1053    jumps.  */
1054 static const bfd_vma mipsr6_o32_exec_plt0_entry_compact[] =
1055 {
1056   0x3c1c0000,   /* lui $28, %hi(&GOTPLT[0])                             */
1057   0x8f990000,   /* lw $25, %lo(&GOTPLT[0])($28)                         */
1058   0x279c0000,   /* addiu $28, $28, %lo(&GOTPLT[0])                      */
1059   0x031cc023,   /* subu $24, $24, $28                                   */
1060   0x03e07821,   /* move $15, $31        # 32-bit move (addu)            */
1061   0x0018c082,   /* srl $24, $24, 2                                      */
1062   0x2718fffe,   /* subu $24, $24, 2                                     */
1063   0xf8190000    /* jalrc $25                                            */
1064 };
1065
1066 /* The format of the first PLT entry in an N32 executable.  Different
1067    because gp ($28) is not available; we use t2 ($14) instead.  */
1068 static const bfd_vma mips_n32_exec_plt0_entry[] =
1069 {
1070   0x3c0e0000,   /* lui $14, %hi(&GOTPLT[0])                             */
1071   0x8dd90000,   /* lw $25, %lo(&GOTPLT[0])($14)                         */
1072   0x25ce0000,   /* addiu $14, $14, %lo(&GOTPLT[0])                      */
1073   0x030ec023,   /* subu $24, $24, $14                                   */
1074   0x03e07825,   /* or t7, ra, zero                                      */
1075   0x0018c082,   /* srl $24, $24, 2                                      */
1076   0x0320f809,   /* jalr $25                                             */
1077   0x2718fffe    /* subu $24, $24, 2                                     */
1078 };
1079
1080 /* The format of the first PLT entry in an N32 executable using compact
1081    jumps.  Different because gp ($28) is not available; we use t2 ($14)
1082    instead.  */
1083 static const bfd_vma mipsr6_n32_exec_plt0_entry_compact[] =
1084 {
1085   0x3c0e0000,   /* lui $14, %hi(&GOTPLT[0])                             */
1086   0x8dd90000,   /* lw $25, %lo(&GOTPLT[0])($14)                         */
1087   0x25ce0000,   /* addiu $14, $14, %lo(&GOTPLT[0])                      */
1088   0x030ec023,   /* subu $24, $24, $14                                   */
1089   0x03e07821,   /* move $15, $31        # 32-bit move (addu)            */
1090   0x0018c082,   /* srl $24, $24, 2                                      */
1091   0x2718fffe,   /* subu $24, $24, 2                                     */
1092   0xf8190000    /* jalrc $25                                            */
1093 };
1094
1095 /* The format of the first PLT entry in an N64 executable.  Different
1096    from N32 because of the increased size of GOT entries.  */
1097 static const bfd_vma mips_n64_exec_plt0_entry[] =
1098 {
1099   0x3c0e0000,   /* lui $14, %hi(&GOTPLT[0])                             */
1100   0xddd90000,   /* ld $25, %lo(&GOTPLT[0])($14)                         */
1101   0x25ce0000,   /* addiu $14, $14, %lo(&GOTPLT[0])                      */
1102   0x030ec023,   /* subu $24, $24, $14                                   */
1103   0x03e07825,   /* or t7, ra, zero                                      */
1104   0x0018c0c2,   /* srl $24, $24, 3                                      */
1105   0x0320f809,   /* jalr $25                                             */
1106   0x2718fffe    /* subu $24, $24, 2                                     */
1107 };
1108
1109 /* The format of the first PLT entry in an N64 executable using compact
1110    jumps.  Different from N32 because of the increased size of GOT
1111    entries.  */
1112 static const bfd_vma mipsr6_n64_exec_plt0_entry_compact[] =
1113 {
1114   0x3c0e0000,   /* lui $14, %hi(&GOTPLT[0])                             */
1115   0xddd90000,   /* ld $25, %lo(&GOTPLT[0])($14)                         */
1116   0x25ce0000,   /* addiu $14, $14, %lo(&GOTPLT[0])                      */
1117   0x030ec023,   /* subu $24, $24, $14                                   */
1118   0x03e0782d,   /* move $15, $31        # 64-bit move (daddu)           */
1119   0x0018c0c2,   /* srl $24, $24, 3                                      */
1120   0x2718fffe,   /* subu $24, $24, 2                                     */
1121   0xf8190000    /* jalrc $25                                            */
1122 };
1123
1124
1125 /* The format of the microMIPS first PLT entry in an O32 executable.
1126    We rely on v0 ($2) rather than t8 ($24) to contain the address
1127    of the GOTPLT entry handled, so this stub may only be used when
1128    all the subsequent PLT entries are microMIPS code too.
1129
1130    The trailing NOP is for alignment and correct disassembly only.  */
1131 static const bfd_vma micromips_o32_exec_plt0_entry[] =
1132 {
1133   0x7980, 0x0000,       /* addiupc $3, (&GOTPLT[0]) - .                 */
1134   0xff23, 0x0000,       /* lw $25, 0($3)                                */
1135   0x0535,               /* subu $2, $2, $3                              */
1136   0x2525,               /* srl $2, $2, 2                                */
1137   0x3302, 0xfffe,       /* subu $24, $2, 2                              */
1138   0x0dff,               /* move $15, $31                                */
1139   0x45f9,               /* jalrs $25                                    */
1140   0x0f83,               /* move $28, $3                                 */
1141   0x0c00                /* nop                                          */
1142 };
1143
1144 /* The format of the microMIPS first PLT entry in an O32 executable
1145    in the insn32 mode.  */
1146 static const bfd_vma micromips_insn32_o32_exec_plt0_entry[] =
1147 {
1148   0x41bc, 0x0000,       /* lui $28, %hi(&GOTPLT[0])                     */
1149   0xff3c, 0x0000,       /* lw $25, %lo(&GOTPLT[0])($28)                 */
1150   0x339c, 0x0000,       /* addiu $28, $28, %lo(&GOTPLT[0])              */
1151   0x0398, 0xc1d0,       /* subu $24, $24, $28                           */
1152   0x001f, 0x7a90,       /* or $15, $31, zero                            */
1153   0x0318, 0x1040,       /* srl $24, $24, 2                              */
1154   0x03f9, 0x0f3c,       /* jalr $25                                     */
1155   0x3318, 0xfffe        /* subu $24, $24, 2                             */
1156 };
1157
1158 /* The format of subsequent standard PLT entries.  */
1159 static const bfd_vma mips_exec_plt_entry[] =
1160 {
1161   0x3c0f0000,   /* lui $15, %hi(.got.plt entry)                 */
1162   0x01f90000,   /* l[wd] $25, %lo(.got.plt entry)($15)          */
1163   0x25f80000,   /* addiu $24, $15, %lo(.got.plt entry)          */
1164   0x03200008    /* jr $25                                       */
1165 };
1166
1167 static const bfd_vma mipsr6_exec_plt_entry[] =
1168 {
1169   0x3c0f0000,   /* lui $15, %hi(.got.plt entry)                 */
1170   0x01f90000,   /* l[wd] $25, %lo(.got.plt entry)($15)          */
1171   0x25f80000,   /* addiu $24, $15, %lo(.got.plt entry)          */
1172   0x03200009    /* jr $25                                       */
1173 };
1174
1175 static const bfd_vma mipsr6_exec_plt_entry_compact[] =
1176 {
1177   0x3c0f0000,   /* lui $15, %hi(.got.plt entry)                 */
1178   0x01f90000,   /* l[wd] $25, %lo(.got.plt entry)($15)          */
1179   0x25f80000,   /* addiu $24, $15, %lo(.got.plt entry)          */
1180   0xd8190000    /* jic $25, 0                                   */
1181 };
1182
1183 /* The format of subsequent MIPS16 o32 PLT entries.  We use v0 ($2)
1184    and v1 ($3) as temporaries because t8 ($24) and t9 ($25) are not
1185    directly addressable.  */
1186 static const bfd_vma mips16_o32_exec_plt_entry[] =
1187 {
1188   0xb203,               /* lw $2, 12($pc)                       */
1189   0x9a60,               /* lw $3, 0($2)                         */
1190   0x651a,               /* move $24, $2                         */
1191   0xeb00,               /* jr $3                                */
1192   0x653b,               /* move $25, $3                         */
1193   0x6500,               /* nop                                  */
1194   0x0000, 0x0000        /* .word (.got.plt entry)               */
1195 };
1196
1197 /* The format of subsequent microMIPS o32 PLT entries.  We use v0 ($2)
1198    as a temporary because t8 ($24) is not addressable with ADDIUPC.  */
1199 static const bfd_vma micromips_o32_exec_plt_entry[] =
1200 {
1201   0x7900, 0x0000,       /* addiupc $2, (.got.plt entry) - .     */
1202   0xff22, 0x0000,       /* lw $25, 0($2)                        */
1203   0x4599,               /* jr $25                               */
1204   0x0f02                /* move $24, $2                         */
1205 };
1206
1207 /* The format of subsequent microMIPS o32 PLT entries in the insn32 mode.  */
1208 static const bfd_vma micromips_insn32_o32_exec_plt_entry[] =
1209 {
1210   0x41af, 0x0000,       /* lui $15, %hi(.got.plt entry)         */
1211   0xff2f, 0x0000,       /* lw $25, %lo(.got.plt entry)($15)     */
1212   0x0019, 0x0f3c,       /* jr $25                               */
1213   0x330f, 0x0000        /* addiu $24, $15, %lo(.got.plt entry)  */
1214 };
1215
1216 /* The format of the first PLT entry in a VxWorks executable.  */
1217 static const bfd_vma mips_vxworks_exec_plt0_entry[] =
1218 {
1219   0x3c190000,   /* lui t9, %hi(_GLOBAL_OFFSET_TABLE_)           */
1220   0x27390000,   /* addiu t9, t9, %lo(_GLOBAL_OFFSET_TABLE_)     */
1221   0x8f390008,   /* lw t9, 8(t9)                                 */
1222   0x00000000,   /* nop                                          */
1223   0x03200008,   /* jr t9                                        */
1224   0x00000000    /* nop                                          */
1225 };
1226
1227 /* The format of subsequent PLT entries.  */
1228 static const bfd_vma mips_vxworks_exec_plt_entry[] =
1229 {
1230   0x10000000,   /* b .PLT_resolver                      */
1231   0x24180000,   /* li t8, <pltindex>                    */
1232   0x3c190000,   /* lui t9, %hi(<.got.plt slot>)         */
1233   0x27390000,   /* addiu t9, t9, %lo(<.got.plt slot>)   */
1234   0x8f390000,   /* lw t9, 0(t9)                         */
1235   0x00000000,   /* nop                                  */
1236   0x03200008,   /* jr t9                                */
1237   0x00000000    /* nop                                  */
1238 };
1239
1240 /* The format of the first PLT entry in a VxWorks shared object.  */
1241 static const bfd_vma mips_vxworks_shared_plt0_entry[] =
1242 {
1243   0x8f990008,   /* lw t9, 8(gp)         */
1244   0x00000000,   /* nop                  */
1245   0x03200008,   /* jr t9                */
1246   0x00000000,   /* nop                  */
1247   0x00000000,   /* nop                  */
1248   0x00000000    /* nop                  */
1249 };
1250
1251 /* The format of subsequent PLT entries.  */
1252 static const bfd_vma mips_vxworks_shared_plt_entry[] =
1253 {
1254   0x10000000,   /* b .PLT_resolver      */
1255   0x24180000    /* li t8, <pltindex>    */
1256 };
1257 \f
1258 /* microMIPS 32-bit opcode helper installer.  */
1259
1260 static void
1261 bfd_put_micromips_32 (const bfd *abfd, bfd_vma opcode, bfd_byte *ptr)
1262 {
1263   bfd_put_16 (abfd, (opcode >> 16) & 0xffff, ptr);
1264   bfd_put_16 (abfd,  opcode        & 0xffff, ptr + 2);
1265 }
1266
1267 /* microMIPS 32-bit opcode helper retriever.  */
1268
1269 static bfd_vma
1270 bfd_get_micromips_32 (const bfd *abfd, const bfd_byte *ptr)
1271 {
1272   return (bfd_get_16 (abfd, ptr) << 16) | bfd_get_16 (abfd, ptr + 2);
1273 }
1274 \f
1275 /* Look up an entry in a MIPS ELF linker hash table.  */
1276
1277 #define mips_elf_link_hash_lookup(table, string, create, copy, follow)  \
1278   ((struct mips_elf_link_hash_entry *)                                  \
1279    elf_link_hash_lookup (&(table)->root, (string), (create),            \
1280                          (copy), (follow)))
1281
1282 /* Traverse a MIPS ELF linker hash table.  */
1283
1284 #define mips_elf_link_hash_traverse(table, func, info)                  \
1285   (elf_link_hash_traverse                                               \
1286    (&(table)->root,                                                     \
1287     (bfd_boolean (*) (struct elf_link_hash_entry *, void *)) (func),    \
1288     (info)))
1289
1290 /* Find the base offsets for thread-local storage in this object,
1291    for GD/LD and IE/LE respectively.  */
1292
1293 #define TP_OFFSET 0x7000
1294 #define DTP_OFFSET 0x8000
1295
1296 static bfd_vma
1297 dtprel_base (struct bfd_link_info *info)
1298 {
1299   /* If tls_sec is NULL, we should have signalled an error already.  */
1300   if (elf_hash_table (info)->tls_sec == NULL)
1301     return 0;
1302   return elf_hash_table (info)->tls_sec->vma + DTP_OFFSET;
1303 }
1304
1305 static bfd_vma
1306 tprel_base (struct bfd_link_info *info)
1307 {
1308   /* If tls_sec is NULL, we should have signalled an error already.  */
1309   if (elf_hash_table (info)->tls_sec == NULL)
1310     return 0;
1311   return elf_hash_table (info)->tls_sec->vma + TP_OFFSET;
1312 }
1313
1314 /* Create an entry in a MIPS ELF linker hash table.  */
1315
1316 static struct bfd_hash_entry *
1317 mips_elf_link_hash_newfunc (struct bfd_hash_entry *entry,
1318                             struct bfd_hash_table *table, const char *string)
1319 {
1320   struct mips_elf_link_hash_entry *ret =
1321     (struct mips_elf_link_hash_entry *) entry;
1322
1323   /* Allocate the structure if it has not already been allocated by a
1324      subclass.  */
1325   if (ret == NULL)
1326     ret = bfd_hash_allocate (table, sizeof (struct mips_elf_link_hash_entry));
1327   if (ret == NULL)
1328     return (struct bfd_hash_entry *) ret;
1329
1330   /* Call the allocation method of the superclass.  */
1331   ret = ((struct mips_elf_link_hash_entry *)
1332          _bfd_elf_link_hash_newfunc ((struct bfd_hash_entry *) ret,
1333                                      table, string));
1334   if (ret != NULL)
1335     {
1336       /* Set local fields.  */
1337       memset (&ret->esym, 0, sizeof (EXTR));
1338       /* We use -2 as a marker to indicate that the information has
1339          not been set.  -1 means there is no associated ifd.  */
1340       ret->esym.ifd = -2;
1341       ret->la25_stub = 0;
1342       ret->possibly_dynamic_relocs = 0;
1343       ret->fn_stub = NULL;
1344       ret->call_stub = NULL;
1345       ret->call_fp_stub = NULL;
1346       ret->mipsxhash_loc = 0;
1347       ret->global_got_area = GGA_NONE;
1348       ret->got_only_for_calls = TRUE;
1349       ret->readonly_reloc = FALSE;
1350       ret->has_static_relocs = FALSE;
1351       ret->no_fn_stub = FALSE;
1352       ret->need_fn_stub = FALSE;
1353       ret->has_nonpic_branches = FALSE;
1354       ret->needs_lazy_stub = FALSE;
1355       ret->use_plt_entry = FALSE;
1356     }
1357
1358   return (struct bfd_hash_entry *) ret;
1359 }
1360
1361 /* Allocate MIPS ELF private object data.  */
1362
1363 bfd_boolean
1364 _bfd_mips_elf_mkobject (bfd *abfd)
1365 {
1366   return bfd_elf_allocate_object (abfd, sizeof (struct mips_elf_obj_tdata),
1367                                   MIPS_ELF_DATA);
1368 }
1369
1370 bfd_boolean
1371 _bfd_mips_elf_new_section_hook (bfd *abfd, asection *sec)
1372 {
1373   if (!sec->used_by_bfd)
1374     {
1375       struct _mips_elf_section_data *sdata;
1376       bfd_size_type amt = sizeof (*sdata);
1377
1378       sdata = bfd_zalloc (abfd, amt);
1379       if (sdata == NULL)
1380         return FALSE;
1381       sec->used_by_bfd = sdata;
1382     }
1383
1384   return _bfd_elf_new_section_hook (abfd, sec);
1385 }
1386 \f
1387 /* Read ECOFF debugging information from a .mdebug section into a
1388    ecoff_debug_info structure.  */
1389
1390 bfd_boolean
1391 _bfd_mips_elf_read_ecoff_info (bfd *abfd, asection *section,
1392                                struct ecoff_debug_info *debug)
1393 {
1394   HDRR *symhdr;
1395   const struct ecoff_debug_swap *swap;
1396   char *ext_hdr;
1397
1398   swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
1399   memset (debug, 0, sizeof (*debug));
1400
1401   ext_hdr = bfd_malloc (swap->external_hdr_size);
1402   if (ext_hdr == NULL && swap->external_hdr_size != 0)
1403     goto error_return;
1404
1405   if (! bfd_get_section_contents (abfd, section, ext_hdr, 0,
1406                                   swap->external_hdr_size))
1407     goto error_return;
1408
1409   symhdr = &debug->symbolic_header;
1410   (*swap->swap_hdr_in) (abfd, ext_hdr, symhdr);
1411
1412   /* The symbolic header contains absolute file offsets and sizes to
1413      read.  */
1414 #define READ(ptr, offset, count, size, type)                            \
1415   if (symhdr->count == 0)                                               \
1416     debug->ptr = NULL;                                                  \
1417   else                                                                  \
1418     {                                                                   \
1419       bfd_size_type amt = (bfd_size_type) size * symhdr->count;         \
1420       debug->ptr = bfd_malloc (amt);                                    \
1421       if (debug->ptr == NULL)                                           \
1422         goto error_return;                                              \
1423       if (bfd_seek (abfd, symhdr->offset, SEEK_SET) != 0                \
1424           || bfd_bread (debug->ptr, amt, abfd) != amt)                  \
1425         goto error_return;                                              \
1426     }
1427
1428   READ (line, cbLineOffset, cbLine, sizeof (unsigned char), unsigned char *);
1429   READ (external_dnr, cbDnOffset, idnMax, swap->external_dnr_size, void *);
1430   READ (external_pdr, cbPdOffset, ipdMax, swap->external_pdr_size, void *);
1431   READ (external_sym, cbSymOffset, isymMax, swap->external_sym_size, void *);
1432   READ (external_opt, cbOptOffset, ioptMax, swap->external_opt_size, void *);
1433   READ (external_aux, cbAuxOffset, iauxMax, sizeof (union aux_ext),
1434         union aux_ext *);
1435   READ (ss, cbSsOffset, issMax, sizeof (char), char *);
1436   READ (ssext, cbSsExtOffset, issExtMax, sizeof (char), char *);
1437   READ (external_fdr, cbFdOffset, ifdMax, swap->external_fdr_size, void *);
1438   READ (external_rfd, cbRfdOffset, crfd, swap->external_rfd_size, void *);
1439   READ (external_ext, cbExtOffset, iextMax, swap->external_ext_size, void *);
1440 #undef READ
1441
1442   debug->fdr = NULL;
1443
1444   return TRUE;
1445
1446  error_return:
1447   if (ext_hdr != NULL)
1448     free (ext_hdr);
1449   if (debug->line != NULL)
1450     free (debug->line);
1451   if (debug->external_dnr != NULL)
1452     free (debug->external_dnr);
1453   if (debug->external_pdr != NULL)
1454     free (debug->external_pdr);
1455   if (debug->external_sym != NULL)
1456     free (debug->external_sym);
1457   if (debug->external_opt != NULL)
1458     free (debug->external_opt);
1459   if (debug->external_aux != NULL)
1460     free (debug->external_aux);
1461   if (debug->ss != NULL)
1462     free (debug->ss);
1463   if (debug->ssext != NULL)
1464     free (debug->ssext);
1465   if (debug->external_fdr != NULL)
1466     free (debug->external_fdr);
1467   if (debug->external_rfd != NULL)
1468     free (debug->external_rfd);
1469   if (debug->external_ext != NULL)
1470     free (debug->external_ext);
1471   return FALSE;
1472 }
1473 \f
1474 /* Swap RPDR (runtime procedure table entry) for output.  */
1475
1476 static void
1477 ecoff_swap_rpdr_out (bfd *abfd, const RPDR *in, struct rpdr_ext *ex)
1478 {
1479   H_PUT_S32 (abfd, in->adr, ex->p_adr);
1480   H_PUT_32 (abfd, in->regmask, ex->p_regmask);
1481   H_PUT_32 (abfd, in->regoffset, ex->p_regoffset);
1482   H_PUT_32 (abfd, in->fregmask, ex->p_fregmask);
1483   H_PUT_32 (abfd, in->fregoffset, ex->p_fregoffset);
1484   H_PUT_32 (abfd, in->frameoffset, ex->p_frameoffset);
1485
1486   H_PUT_16 (abfd, in->framereg, ex->p_framereg);
1487   H_PUT_16 (abfd, in->pcreg, ex->p_pcreg);
1488
1489   H_PUT_32 (abfd, in->irpss, ex->p_irpss);
1490 }
1491
1492 /* Create a runtime procedure table from the .mdebug section.  */
1493
1494 static bfd_boolean
1495 mips_elf_create_procedure_table (void *handle, bfd *abfd,
1496                                  struct bfd_link_info *info, asection *s,
1497                                  struct ecoff_debug_info *debug)
1498 {
1499   const struct ecoff_debug_swap *swap;
1500   HDRR *hdr = &debug->symbolic_header;
1501   RPDR *rpdr, *rp;
1502   struct rpdr_ext *erp;
1503   void *rtproc;
1504   struct pdr_ext *epdr;
1505   struct sym_ext *esym;
1506   char *ss, **sv;
1507   char *str;
1508   bfd_size_type size;
1509   bfd_size_type count;
1510   unsigned long sindex;
1511   unsigned long i;
1512   PDR pdr;
1513   SYMR sym;
1514   const char *no_name_func = _("static procedure (no name)");
1515
1516   epdr = NULL;
1517   rpdr = NULL;
1518   esym = NULL;
1519   ss = NULL;
1520   sv = NULL;
1521
1522   swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
1523
1524   sindex = strlen (no_name_func) + 1;
1525   count = hdr->ipdMax;
1526   if (count > 0)
1527     {
1528       size = swap->external_pdr_size;
1529
1530       epdr = bfd_malloc (size * count);
1531       if (epdr == NULL)
1532         goto error_return;
1533
1534       if (! _bfd_ecoff_get_accumulated_pdr (handle, (bfd_byte *) epdr))
1535         goto error_return;
1536
1537       size = sizeof (RPDR);
1538       rp = rpdr = bfd_malloc (size * count);
1539       if (rpdr == NULL)
1540         goto error_return;
1541
1542       size = sizeof (char *);
1543       sv = bfd_malloc (size * count);
1544       if (sv == NULL)
1545         goto error_return;
1546
1547       count = hdr->isymMax;
1548       size = swap->external_sym_size;
1549       esym = bfd_malloc (size * count);
1550       if (esym == NULL)
1551         goto error_return;
1552
1553       if (! _bfd_ecoff_get_accumulated_sym (handle, (bfd_byte *) esym))
1554         goto error_return;
1555
1556       count = hdr->issMax;
1557       ss = bfd_malloc (count);
1558       if (ss == NULL)
1559         goto error_return;
1560       if (! _bfd_ecoff_get_accumulated_ss (handle, (bfd_byte *) ss))
1561         goto error_return;
1562
1563       count = hdr->ipdMax;
1564       for (i = 0; i < (unsigned long) count; i++, rp++)
1565         {
1566           (*swap->swap_pdr_in) (abfd, epdr + i, &pdr);
1567           (*swap->swap_sym_in) (abfd, &esym[pdr.isym], &sym);
1568           rp->adr = sym.value;
1569           rp->regmask = pdr.regmask;
1570           rp->regoffset = pdr.regoffset;
1571           rp->fregmask = pdr.fregmask;
1572           rp->fregoffset = pdr.fregoffset;
1573           rp->frameoffset = pdr.frameoffset;
1574           rp->framereg = pdr.framereg;
1575           rp->pcreg = pdr.pcreg;
1576           rp->irpss = sindex;
1577           sv[i] = ss + sym.iss;
1578           sindex += strlen (sv[i]) + 1;
1579         }
1580     }
1581
1582   size = sizeof (struct rpdr_ext) * (count + 2) + sindex;
1583   size = BFD_ALIGN (size, 16);
1584   rtproc = bfd_alloc (abfd, size);
1585   if (rtproc == NULL)
1586     {
1587       mips_elf_hash_table (info)->procedure_count = 0;
1588       goto error_return;
1589     }
1590
1591   mips_elf_hash_table (info)->procedure_count = count + 2;
1592
1593   erp = rtproc;
1594   memset (erp, 0, sizeof (struct rpdr_ext));
1595   erp++;
1596   str = (char *) rtproc + sizeof (struct rpdr_ext) * (count + 2);
1597   strcpy (str, no_name_func);
1598   str += strlen (no_name_func) + 1;
1599   for (i = 0; i < count; i++)
1600     {
1601       ecoff_swap_rpdr_out (abfd, rpdr + i, erp + i);
1602       strcpy (str, sv[i]);
1603       str += strlen (sv[i]) + 1;
1604     }
1605   H_PUT_S32 (abfd, -1, (erp + count)->p_adr);
1606
1607   /* Set the size and contents of .rtproc section.  */
1608   s->size = size;
1609   s->contents = rtproc;
1610
1611   /* Skip this section later on (I don't think this currently
1612      matters, but someday it might).  */
1613   s->map_head.link_order = NULL;
1614
1615   if (epdr != NULL)
1616     free (epdr);
1617   if (rpdr != NULL)
1618     free (rpdr);
1619   if (esym != NULL)
1620     free (esym);
1621   if (ss != NULL)
1622     free (ss);
1623   if (sv != NULL)
1624     free (sv);
1625
1626   return TRUE;
1627
1628  error_return:
1629   if (epdr != NULL)
1630     free (epdr);
1631   if (rpdr != NULL)
1632     free (rpdr);
1633   if (esym != NULL)
1634     free (esym);
1635   if (ss != NULL)
1636     free (ss);
1637   if (sv != NULL)
1638     free (sv);
1639   return FALSE;
1640 }
1641 \f
1642 /* We're going to create a stub for H.  Create a symbol for the stub's
1643    value and size, to help make the disassembly easier to read.  */
1644
1645 static bfd_boolean
1646 mips_elf_create_stub_symbol (struct bfd_link_info *info,
1647                              struct mips_elf_link_hash_entry *h,
1648                              const char *prefix, asection *s, bfd_vma value,
1649                              bfd_vma size)
1650 {
1651   bfd_boolean micromips_p = ELF_ST_IS_MICROMIPS (h->root.other);
1652   struct bfd_link_hash_entry *bh;
1653   struct elf_link_hash_entry *elfh;
1654   char *name;
1655   bfd_boolean res;
1656
1657   if (micromips_p)
1658     value |= 1;
1659
1660   /* Create a new symbol.  */
1661   name = concat (prefix, h->root.root.root.string, NULL);
1662   bh = NULL;
1663   res = _bfd_generic_link_add_one_symbol (info, s->owner, name,
1664                                           BSF_LOCAL, s, value, NULL,
1665                                           TRUE, FALSE, &bh);
1666   free (name);
1667   if (! res)
1668     return FALSE;
1669
1670   /* Make it a local function.  */
1671   elfh = (struct elf_link_hash_entry *) bh;
1672   elfh->type = ELF_ST_INFO (STB_LOCAL, STT_FUNC);
1673   elfh->size = size;
1674   elfh->forced_local = 1;
1675   if (micromips_p)
1676     elfh->other = ELF_ST_SET_MICROMIPS (elfh->other);
1677   return TRUE;
1678 }
1679
1680 /* We're about to redefine H.  Create a symbol to represent H's
1681    current value and size, to help make the disassembly easier
1682    to read.  */
1683
1684 static bfd_boolean
1685 mips_elf_create_shadow_symbol (struct bfd_link_info *info,
1686                                struct mips_elf_link_hash_entry *h,
1687                                const char *prefix)
1688 {
1689   struct bfd_link_hash_entry *bh;
1690   struct elf_link_hash_entry *elfh;
1691   char *name;
1692   asection *s;
1693   bfd_vma value;
1694   bfd_boolean res;
1695
1696   /* Read the symbol's value.  */
1697   BFD_ASSERT (h->root.root.type == bfd_link_hash_defined
1698               || h->root.root.type == bfd_link_hash_defweak);
1699   s = h->root.root.u.def.section;
1700   value = h->root.root.u.def.value;
1701
1702   /* Create a new symbol.  */
1703   name = concat (prefix, h->root.root.root.string, NULL);
1704   bh = NULL;
1705   res = _bfd_generic_link_add_one_symbol (info, s->owner, name,
1706                                           BSF_LOCAL, s, value, NULL,
1707                                           TRUE, FALSE, &bh);
1708   free (name);
1709   if (! res)
1710     return FALSE;
1711
1712   /* Make it local and copy the other attributes from H.  */
1713   elfh = (struct elf_link_hash_entry *) bh;
1714   elfh->type = ELF_ST_INFO (STB_LOCAL, ELF_ST_TYPE (h->root.type));
1715   elfh->other = h->root.other;
1716   elfh->size = h->root.size;
1717   elfh->forced_local = 1;
1718   return TRUE;
1719 }
1720
1721 /* Return TRUE if relocations in SECTION can refer directly to a MIPS16
1722    function rather than to a hard-float stub.  */
1723
1724 static bfd_boolean
1725 section_allows_mips16_refs_p (asection *section)
1726 {
1727   const char *name;
1728
1729   name = bfd_get_section_name (section->owner, section);
1730   return (FN_STUB_P (name)
1731           || CALL_STUB_P (name)
1732           || CALL_FP_STUB_P (name)
1733           || strcmp (name, ".pdr") == 0);
1734 }
1735
1736 /* [RELOCS, RELEND) are the relocations against SEC, which is a MIPS16
1737    stub section of some kind.  Return the R_SYMNDX of the target
1738    function, or 0 if we can't decide which function that is.  */
1739
1740 static unsigned long
1741 mips16_stub_symndx (const struct elf_backend_data *bed,
1742                     asection *sec ATTRIBUTE_UNUSED,
1743                     const Elf_Internal_Rela *relocs,
1744                     const Elf_Internal_Rela *relend)
1745 {
1746   int int_rels_per_ext_rel = bed->s->int_rels_per_ext_rel;
1747   const Elf_Internal_Rela *rel;
1748
1749   /* Trust the first R_MIPS_NONE relocation, if any, but not a subsequent
1750      one in a compound relocation.  */
1751   for (rel = relocs; rel < relend; rel += int_rels_per_ext_rel)
1752     if (ELF_R_TYPE (sec->owner, rel->r_info) == R_MIPS_NONE)
1753       return ELF_R_SYM (sec->owner, rel->r_info);
1754
1755   /* Otherwise trust the first relocation, whatever its kind.  This is
1756      the traditional behavior.  */
1757   if (relocs < relend)
1758     return ELF_R_SYM (sec->owner, relocs->r_info);
1759
1760   return 0;
1761 }
1762
1763 /* Check the mips16 stubs for a particular symbol, and see if we can
1764    discard them.  */
1765
1766 static void
1767 mips_elf_check_mips16_stubs (struct bfd_link_info *info,
1768                              struct mips_elf_link_hash_entry *h)
1769 {
1770   /* Dynamic symbols must use the standard call interface, in case other
1771      objects try to call them.  */
1772   if (h->fn_stub != NULL
1773       && h->root.dynindx != -1)
1774     {
1775       mips_elf_create_shadow_symbol (info, h, ".mips16.");
1776       h->need_fn_stub = TRUE;
1777     }
1778
1779   if (h->fn_stub != NULL
1780       && ! h->need_fn_stub)
1781     {
1782       /* We don't need the fn_stub; the only references to this symbol
1783          are 16 bit calls.  Clobber the size to 0 to prevent it from
1784          being included in the link.  */
1785       h->fn_stub->size = 0;
1786       h->fn_stub->flags &= ~SEC_RELOC;
1787       h->fn_stub->reloc_count = 0;
1788       h->fn_stub->flags |= SEC_EXCLUDE;
1789       h->fn_stub->output_section = bfd_abs_section_ptr;
1790     }
1791
1792   if (h->call_stub != NULL
1793       && ELF_ST_IS_MIPS16 (h->root.other))
1794     {
1795       /* We don't need the call_stub; this is a 16 bit function, so
1796          calls from other 16 bit functions are OK.  Clobber the size
1797          to 0 to prevent it from being included in the link.  */
1798       h->call_stub->size = 0;
1799       h->call_stub->flags &= ~SEC_RELOC;
1800       h->call_stub->reloc_count = 0;
1801       h->call_stub->flags |= SEC_EXCLUDE;
1802       h->call_stub->output_section = bfd_abs_section_ptr;
1803     }
1804
1805   if (h->call_fp_stub != NULL
1806       && ELF_ST_IS_MIPS16 (h->root.other))
1807     {
1808       /* We don't need the call_stub; this is a 16 bit function, so
1809          calls from other 16 bit functions are OK.  Clobber the size
1810          to 0 to prevent it from being included in the link.  */
1811       h->call_fp_stub->size = 0;
1812       h->call_fp_stub->flags &= ~SEC_RELOC;
1813       h->call_fp_stub->reloc_count = 0;
1814       h->call_fp_stub->flags |= SEC_EXCLUDE;
1815       h->call_fp_stub->output_section = bfd_abs_section_ptr;
1816     }
1817 }
1818
1819 /* Hashtable callbacks for mips_elf_la25_stubs.  */
1820
1821 static hashval_t
1822 mips_elf_la25_stub_hash (const void *entry_)
1823 {
1824   const struct mips_elf_la25_stub *entry;
1825
1826   entry = (struct mips_elf_la25_stub *) entry_;
1827   return entry->h->root.root.u.def.section->id
1828     + entry->h->root.root.u.def.value;
1829 }
1830
1831 static int
1832 mips_elf_la25_stub_eq (const void *entry1_, const void *entry2_)
1833 {
1834   const struct mips_elf_la25_stub *entry1, *entry2;
1835
1836   entry1 = (struct mips_elf_la25_stub *) entry1_;
1837   entry2 = (struct mips_elf_la25_stub *) entry2_;
1838   return ((entry1->h->root.root.u.def.section
1839            == entry2->h->root.root.u.def.section)
1840           && (entry1->h->root.root.u.def.value
1841               == entry2->h->root.root.u.def.value));
1842 }
1843
1844 /* Called by the linker to set up the la25 stub-creation code.  FN is
1845    the linker's implementation of add_stub_function.  Return true on
1846    success.  */
1847
1848 bfd_boolean
1849 _bfd_mips_elf_init_stubs (struct bfd_link_info *info,
1850                           asection *(*fn) (const char *, asection *,
1851                                            asection *))
1852 {
1853   struct mips_elf_link_hash_table *htab;
1854
1855   htab = mips_elf_hash_table (info);
1856   if (htab == NULL)
1857     return FALSE;
1858
1859   htab->add_stub_section = fn;
1860   htab->la25_stubs = htab_try_create (1, mips_elf_la25_stub_hash,
1861                                       mips_elf_la25_stub_eq, NULL);
1862   if (htab->la25_stubs == NULL)
1863     return FALSE;
1864
1865   return TRUE;
1866 }
1867
1868 /* Return true if H is a locally-defined PIC function, in the sense
1869    that it or its fn_stub might need $25 to be valid on entry.
1870    Note that MIPS16 functions set up $gp using PC-relative instructions,
1871    so they themselves never need $25 to be valid.  Only non-MIPS16
1872    entry points are of interest here.  */
1873
1874 static bfd_boolean
1875 mips_elf_local_pic_function_p (struct mips_elf_link_hash_entry *h)
1876 {
1877   return ((h->root.root.type == bfd_link_hash_defined
1878            || h->root.root.type == bfd_link_hash_defweak)
1879           && h->root.def_regular
1880           && !bfd_is_abs_section (h->root.root.u.def.section)
1881           && !bfd_is_und_section (h->root.root.u.def.section)
1882           && (!ELF_ST_IS_MIPS16 (h->root.other)
1883               || (h->fn_stub && h->need_fn_stub))
1884           && (PIC_OBJECT_P (h->root.root.u.def.section->owner)
1885               || ELF_ST_IS_MIPS_PIC (h->root.other)));
1886 }
1887
1888 /* Set *SEC to the input section that contains the target of STUB.
1889    Return the offset of the target from the start of that section.  */
1890
1891 static bfd_vma
1892 mips_elf_get_la25_target (struct mips_elf_la25_stub *stub,
1893                           asection **sec)
1894 {
1895   if (ELF_ST_IS_MIPS16 (stub->h->root.other))
1896     {
1897       BFD_ASSERT (stub->h->need_fn_stub);
1898       *sec = stub->h->fn_stub;
1899       return 0;
1900     }
1901   else
1902     {
1903       *sec = stub->h->root.root.u.def.section;
1904       return stub->h->root.root.u.def.value;
1905     }
1906 }
1907
1908 /* STUB describes an la25 stub that we have decided to implement
1909    by inserting an LUI/ADDIU pair before the target function.
1910    Create the section and redirect the function symbol to it.  */
1911
1912 static bfd_boolean
1913 mips_elf_add_la25_intro (struct mips_elf_la25_stub *stub,
1914                          struct bfd_link_info *info)
1915 {
1916   struct mips_elf_link_hash_table *htab;
1917   char *name;
1918   asection *s, *input_section;
1919   unsigned int align;
1920
1921   htab = mips_elf_hash_table (info);
1922   if (htab == NULL)
1923     return FALSE;
1924
1925   /* Create a unique name for the new section.  */
1926   name = bfd_malloc (11 + sizeof (".text.stub."));
1927   if (name == NULL)
1928     return FALSE;
1929   sprintf (name, ".text.stub.%d", (int) htab_elements (htab->la25_stubs));
1930
1931   /* Create the section.  */
1932   mips_elf_get_la25_target (stub, &input_section);
1933   s = htab->add_stub_section (name, input_section,
1934                               input_section->output_section);
1935   if (s == NULL)
1936     return FALSE;
1937
1938   /* Make sure that any padding goes before the stub.  */
1939   align = input_section->alignment_power;
1940   if (!bfd_set_section_alignment (s->owner, s, align))
1941     return FALSE;
1942   if (align > 3)
1943     s->size = (1 << align) - 8;
1944
1945   /* Create a symbol for the stub.  */
1946   mips_elf_create_stub_symbol (info, stub->h, ".pic.", s, s->size, 8);
1947   stub->stub_section = s;
1948   stub->offset = s->size;
1949
1950   /* Allocate room for it.  */
1951   s->size += 8;
1952   return TRUE;
1953 }
1954
1955 /* STUB describes an la25 stub that we have decided to implement
1956    with a separate trampoline.  Allocate room for it and redirect
1957    the function symbol to it.  */
1958
1959 static bfd_boolean
1960 mips_elf_add_la25_trampoline (struct mips_elf_la25_stub *stub,
1961                               struct bfd_link_info *info)
1962 {
1963   struct mips_elf_link_hash_table *htab;
1964   asection *s;
1965
1966   htab = mips_elf_hash_table (info);
1967   if (htab == NULL)
1968     return FALSE;
1969
1970   /* Create a trampoline section, if we haven't already.  */
1971   s = htab->strampoline;
1972   if (s == NULL)
1973     {
1974       asection *input_section = stub->h->root.root.u.def.section;
1975       s = htab->add_stub_section (".text", NULL,
1976                                   input_section->output_section);
1977       if (s == NULL || !bfd_set_section_alignment (s->owner, s, 4))
1978         return FALSE;
1979       htab->strampoline = s;
1980     }
1981
1982   /* Create a symbol for the stub.  */
1983   mips_elf_create_stub_symbol (info, stub->h, ".pic.", s, s->size, 16);
1984   stub->stub_section = s;
1985   stub->offset = s->size;
1986
1987   /* Allocate room for it.  */
1988   s->size += 16;
1989   return TRUE;
1990 }
1991
1992 /* H describes a symbol that needs an la25 stub.  Make sure that an
1993    appropriate stub exists and point H at it.  */
1994
1995 static bfd_boolean
1996 mips_elf_add_la25_stub (struct bfd_link_info *info,
1997                         struct mips_elf_link_hash_entry *h)
1998 {
1999   struct mips_elf_link_hash_table *htab;
2000   struct mips_elf_la25_stub search, *stub;
2001   bfd_boolean use_trampoline_p;
2002   asection *s;
2003   bfd_vma value;
2004   void **slot;
2005
2006   /* Describe the stub we want.  */
2007   search.stub_section = NULL;
2008   search.offset = 0;
2009   search.h = h;
2010
2011   /* See if we've already created an equivalent stub.  */
2012   htab = mips_elf_hash_table (info);
2013   if (htab == NULL)
2014     return FALSE;
2015
2016   slot = htab_find_slot (htab->la25_stubs, &search, INSERT);
2017   if (slot == NULL)
2018     return FALSE;
2019
2020   stub = (struct mips_elf_la25_stub *) *slot;
2021   if (stub != NULL)
2022     {
2023       /* We can reuse the existing stub.  */
2024       h->la25_stub = stub;
2025       return TRUE;
2026     }
2027
2028   /* Create a permanent copy of ENTRY and add it to the hash table.  */
2029   stub = bfd_malloc (sizeof (search));
2030   if (stub == NULL)
2031     return FALSE;
2032   *stub = search;
2033   *slot = stub;
2034
2035   /* Prefer to use LUI/ADDIU stubs if the function is at the beginning
2036      of the section and if we would need no more than 2 nops.  */
2037   value = mips_elf_get_la25_target (stub, &s);
2038   if (ELF_ST_IS_MICROMIPS (stub->h->root.other))
2039     value &= ~1;
2040   use_trampoline_p = (value != 0 || s->alignment_power > 4);
2041
2042   h->la25_stub = stub;
2043   return (use_trampoline_p
2044           ? mips_elf_add_la25_trampoline (stub, info)
2045           : mips_elf_add_la25_intro (stub, info));
2046 }
2047
2048 /* A mips_elf_link_hash_traverse callback that is called before sizing
2049    sections.  DATA points to a mips_htab_traverse_info structure.  */
2050
2051 static bfd_boolean
2052 mips_elf_check_symbols (struct mips_elf_link_hash_entry *h, void *data)
2053 {
2054   struct mips_htab_traverse_info *hti;
2055
2056   hti = (struct mips_htab_traverse_info *) data;
2057   if (!bfd_link_relocatable (hti->info))
2058     mips_elf_check_mips16_stubs (hti->info, h);
2059
2060   if (mips_elf_local_pic_function_p (h))
2061     {
2062       /* PR 12845: If H is in a section that has been garbage
2063          collected it will have its output section set to *ABS*.  */
2064       if (bfd_is_abs_section (h->root.root.u.def.section->output_section))
2065         return TRUE;
2066
2067       /* H is a function that might need $25 to be valid on entry.
2068          If we're creating a non-PIC relocatable object, mark H as
2069          being PIC.  If we're creating a non-relocatable object with
2070          non-PIC branches and jumps to H, make sure that H has an la25
2071          stub.  */
2072       if (bfd_link_relocatable (hti->info))
2073         {
2074           if (!PIC_OBJECT_P (hti->output_bfd))
2075             h->root.other = ELF_ST_SET_MIPS_PIC (h->root.other);
2076         }
2077       else if (h->has_nonpic_branches && !mips_elf_add_la25_stub (hti->info, h))
2078         {
2079           hti->error = TRUE;
2080           return FALSE;
2081         }
2082     }
2083   return TRUE;
2084 }
2085 \f
2086 /* R_MIPS16_26 is used for the mips16 jal and jalx instructions.
2087    Most mips16 instructions are 16 bits, but these instructions
2088    are 32 bits.
2089
2090    The format of these instructions is:
2091
2092    +--------------+--------------------------------+
2093    |     JALX     | X|   Imm 20:16  |   Imm 25:21  |
2094    +--------------+--------------------------------+
2095    |                Immediate  15:0                |
2096    +-----------------------------------------------+
2097
2098    JALX is the 5-bit value 00011.  X is 0 for jal, 1 for jalx.
2099    Note that the immediate value in the first word is swapped.
2100
2101    When producing a relocatable object file, R_MIPS16_26 is
2102    handled mostly like R_MIPS_26.  In particular, the addend is
2103    stored as a straight 26-bit value in a 32-bit instruction.
2104    (gas makes life simpler for itself by never adjusting a
2105    R_MIPS16_26 reloc to be against a section, so the addend is
2106    always zero).  However, the 32 bit instruction is stored as 2
2107    16-bit values, rather than a single 32-bit value.  In a
2108    big-endian file, the result is the same; in a little-endian
2109    file, the two 16-bit halves of the 32 bit value are swapped.
2110    This is so that a disassembler can recognize the jal
2111    instruction.
2112
2113    When doing a final link, R_MIPS16_26 is treated as a 32 bit
2114    instruction stored as two 16-bit values.  The addend A is the
2115    contents of the targ26 field.  The calculation is the same as
2116    R_MIPS_26.  When storing the calculated value, reorder the
2117    immediate value as shown above, and don't forget to store the
2118    value as two 16-bit values.
2119
2120    To put it in MIPS ABI terms, the relocation field is T-targ26-16,
2121    defined as
2122
2123    big-endian:
2124    +--------+----------------------+
2125    |        |                      |
2126    |        |    targ26-16         |
2127    |31    26|25                   0|
2128    +--------+----------------------+
2129
2130    little-endian:
2131    +----------+------+-------------+
2132    |          |      |             |
2133    |  sub1    |      |     sub2    |
2134    |0        9|10  15|16         31|
2135    +----------+--------------------+
2136    where targ26-16 is sub1 followed by sub2 (i.e., the addend field A is
2137    ((sub1 << 16) | sub2)).
2138
2139    When producing a relocatable object file, the calculation is
2140    (((A < 2) | ((P + 4) & 0xf0000000) + S) >> 2)
2141    When producing a fully linked file, the calculation is
2142    let R = (((A < 2) | ((P + 4) & 0xf0000000) + S) >> 2)
2143    ((R & 0x1f0000) << 5) | ((R & 0x3e00000) >> 5) | (R & 0xffff)
2144
2145    The table below lists the other MIPS16 instruction relocations.
2146    Each one is calculated in the same way as the non-MIPS16 relocation
2147    given on the right, but using the extended MIPS16 layout of 16-bit
2148    immediate fields:
2149
2150         R_MIPS16_GPREL          R_MIPS_GPREL16
2151         R_MIPS16_GOT16          R_MIPS_GOT16
2152         R_MIPS16_CALL16         R_MIPS_CALL16
2153         R_MIPS16_HI16           R_MIPS_HI16
2154         R_MIPS16_LO16           R_MIPS_LO16
2155
2156    A typical instruction will have a format like this:
2157
2158    +--------------+--------------------------------+
2159    |    EXTEND    |     Imm 10:5    |   Imm 15:11  |
2160    +--------------+--------------------------------+
2161    |    Major     |   rx   |   ry   |   Imm  4:0   |
2162    +--------------+--------------------------------+
2163
2164    EXTEND is the five bit value 11110.  Major is the instruction
2165    opcode.
2166
2167    All we need to do here is shuffle the bits appropriately.
2168    As above, the two 16-bit halves must be swapped on a
2169    little-endian system.
2170
2171    Finally R_MIPS16_PC16_S1 corresponds to R_MIPS_PC16, however the
2172    relocatable field is shifted by 1 rather than 2 and the same bit
2173    shuffling is done as with the relocations above.  */
2174
2175 static inline bfd_boolean
2176 mips16_reloc_p (int r_type)
2177 {
2178   switch (r_type)
2179     {
2180     case R_MIPS16_26:
2181     case R_MIPS16_GPREL:
2182     case R_MIPS16_GOT16:
2183     case R_MIPS16_CALL16:
2184     case R_MIPS16_HI16:
2185     case R_MIPS16_LO16:
2186     case R_MIPS16_TLS_GD:
2187     case R_MIPS16_TLS_LDM:
2188     case R_MIPS16_TLS_DTPREL_HI16:
2189     case R_MIPS16_TLS_DTPREL_LO16:
2190     case R_MIPS16_TLS_GOTTPREL:
2191     case R_MIPS16_TLS_TPREL_HI16:
2192     case R_MIPS16_TLS_TPREL_LO16:
2193     case R_MIPS16_PC16_S1:
2194       return TRUE;
2195
2196     default:
2197       return FALSE;
2198     }
2199 }
2200
2201 /* Check if a microMIPS reloc.  */
2202
2203 static inline bfd_boolean
2204 micromips_reloc_p (unsigned int r_type)
2205 {
2206   return r_type >= R_MICROMIPS_min && r_type < R_MICROMIPS_max;
2207 }
2208
2209 /* Similar to MIPS16, the two 16-bit halves in microMIPS must be swapped
2210    on a little-endian system.  This does not apply to R_MICROMIPS_PC7_S1
2211    and R_MICROMIPS_PC10_S1 relocs that apply to 16-bit instructions.  */
2212
2213 static inline bfd_boolean
2214 micromips_reloc_shuffle_p (unsigned int r_type)
2215 {
2216   return (micromips_reloc_p (r_type)
2217           && r_type != R_MICROMIPS_PC7_S1
2218           && r_type != R_MICROMIPS_PC10_S1);
2219 }
2220
2221 static inline bfd_boolean
2222 got16_reloc_p (int r_type)
2223 {
2224   return (r_type == R_MIPS_GOT16
2225           || r_type == R_MIPS16_GOT16
2226           || r_type == R_MICROMIPS_GOT16);
2227 }
2228
2229 static inline bfd_boolean
2230 call16_reloc_p (int r_type)
2231 {
2232   return (r_type == R_MIPS_CALL16
2233           || r_type == R_MIPS16_CALL16
2234           || r_type == R_MICROMIPS_CALL16);
2235 }
2236
2237 static inline bfd_boolean
2238 got_disp_reloc_p (unsigned int r_type)
2239 {
2240   return r_type == R_MIPS_GOT_DISP || r_type == R_MICROMIPS_GOT_DISP;
2241 }
2242
2243 static inline bfd_boolean
2244 got_page_reloc_p (unsigned int r_type)
2245 {
2246   return r_type == R_MIPS_GOT_PAGE || r_type == R_MICROMIPS_GOT_PAGE;
2247 }
2248
2249 static inline bfd_boolean
2250 got_lo16_reloc_p (unsigned int r_type)
2251 {
2252   return r_type == R_MIPS_GOT_LO16 || r_type == R_MICROMIPS_GOT_LO16;
2253 }
2254
2255 static inline bfd_boolean
2256 call_hi16_reloc_p (unsigned int r_type)
2257 {
2258   return r_type == R_MIPS_CALL_HI16 || r_type == R_MICROMIPS_CALL_HI16;
2259 }
2260
2261 static inline bfd_boolean
2262 call_lo16_reloc_p (unsigned int r_type)
2263 {
2264   return r_type == R_MIPS_CALL_LO16 || r_type == R_MICROMIPS_CALL_LO16;
2265 }
2266
2267 static inline bfd_boolean
2268 hi16_reloc_p (int r_type)
2269 {
2270   return (r_type == R_MIPS_HI16
2271           || r_type == R_MIPS16_HI16
2272           || r_type == R_MICROMIPS_HI16
2273           || r_type == R_MIPS_PCHI16);
2274 }
2275
2276 static inline bfd_boolean
2277 lo16_reloc_p (int r_type)
2278 {
2279   return (r_type == R_MIPS_LO16
2280           || r_type == R_MIPS16_LO16
2281           || r_type == R_MICROMIPS_LO16
2282           || r_type == R_MIPS_PCLO16);
2283 }
2284
2285 static inline bfd_boolean
2286 mips16_call_reloc_p (int r_type)
2287 {
2288   return r_type == R_MIPS16_26 || r_type == R_MIPS16_CALL16;
2289 }
2290
2291 static inline bfd_boolean
2292 jal_reloc_p (int r_type)
2293 {
2294   return (r_type == R_MIPS_26
2295           || r_type == R_MIPS16_26
2296           || r_type == R_MICROMIPS_26_S1);
2297 }
2298
2299 static inline bfd_boolean
2300 b_reloc_p (int r_type)
2301 {
2302   return (r_type == R_MIPS_PC26_S2
2303           || r_type == R_MIPS_PC21_S2
2304           || r_type == R_MIPS_PC16
2305           || r_type == R_MIPS_GNU_REL16_S2
2306           || r_type == R_MIPS16_PC16_S1
2307           || r_type == R_MICROMIPS_PC16_S1
2308           || r_type == R_MICROMIPS_PC10_S1
2309           || r_type == R_MICROMIPS_PC7_S1);
2310 }
2311
2312 static inline bfd_boolean
2313 aligned_pcrel_reloc_p (int r_type)
2314 {
2315   return (r_type == R_MIPS_PC18_S3
2316           || r_type == R_MIPS_PC19_S2);
2317 }
2318
2319 static inline bfd_boolean
2320 branch_reloc_p (int r_type)
2321 {
2322   return (r_type == R_MIPS_26
2323           || r_type == R_MIPS_PC26_S2
2324           || r_type == R_MIPS_PC21_S2
2325           || r_type == R_MIPS_PC16
2326           || r_type == R_MIPS_GNU_REL16_S2);
2327 }
2328
2329 static inline bfd_boolean
2330 mips16_branch_reloc_p (int r_type)
2331 {
2332   return (r_type == R_MIPS16_26
2333           || r_type == R_MIPS16_PC16_S1);
2334 }
2335
2336 static inline bfd_boolean
2337 micromips_branch_reloc_p (int r_type)
2338 {
2339   return (r_type == R_MICROMIPS_26_S1
2340           || r_type == R_MICROMIPS_PC16_S1
2341           || r_type == R_MICROMIPS_PC10_S1
2342           || r_type == R_MICROMIPS_PC7_S1);
2343 }
2344
2345 static inline bfd_boolean
2346 tls_gd_reloc_p (unsigned int r_type)
2347 {
2348   return (r_type == R_MIPS_TLS_GD
2349           || r_type == R_MIPS16_TLS_GD
2350           || r_type == R_MICROMIPS_TLS_GD);
2351 }
2352
2353 static inline bfd_boolean
2354 tls_ldm_reloc_p (unsigned int r_type)
2355 {
2356   return (r_type == R_MIPS_TLS_LDM
2357           || r_type == R_MIPS16_TLS_LDM
2358           || r_type == R_MICROMIPS_TLS_LDM);
2359 }
2360
2361 static inline bfd_boolean
2362 tls_gottprel_reloc_p (unsigned int r_type)
2363 {
2364   return (r_type == R_MIPS_TLS_GOTTPREL
2365           || r_type == R_MIPS16_TLS_GOTTPREL
2366           || r_type == R_MICROMIPS_TLS_GOTTPREL);
2367 }
2368
2369 void
2370 _bfd_mips_elf_reloc_unshuffle (bfd *abfd, int r_type,
2371                                bfd_boolean jal_shuffle, bfd_byte *data)
2372 {
2373   bfd_vma first, second, val;
2374
2375   if (!mips16_reloc_p (r_type) && !micromips_reloc_shuffle_p (r_type))
2376     return;
2377
2378   /* Pick up the first and second halfwords of the instruction.  */
2379   first = bfd_get_16 (abfd, data);
2380   second = bfd_get_16 (abfd, data + 2);
2381   if (micromips_reloc_p (r_type) || (r_type == R_MIPS16_26 && !jal_shuffle))
2382     val = first << 16 | second;
2383   else if (r_type != R_MIPS16_26)
2384     val = (((first & 0xf800) << 16) | ((second & 0xffe0) << 11)
2385            | ((first & 0x1f) << 11) | (first & 0x7e0) | (second & 0x1f));
2386   else
2387     val = (((first & 0xfc00) << 16) | ((first & 0x3e0) << 11)
2388            | ((first & 0x1f) << 21) | second);
2389   bfd_put_32 (abfd, val, data);
2390 }
2391
2392 void
2393 _bfd_mips_elf_reloc_shuffle (bfd *abfd, int r_type,
2394                              bfd_boolean jal_shuffle, bfd_byte *data)
2395 {
2396   bfd_vma first, second, val;
2397
2398   if (!mips16_reloc_p (r_type) && !micromips_reloc_shuffle_p (r_type))
2399     return;
2400
2401   val = bfd_get_32 (abfd, data);
2402   if (micromips_reloc_p (r_type) || (r_type == R_MIPS16_26 && !jal_shuffle))
2403     {
2404       second = val & 0xffff;
2405       first = val >> 16;
2406     }
2407   else if (r_type != R_MIPS16_26)
2408     {
2409       second = ((val >> 11) & 0xffe0) | (val & 0x1f);
2410       first = ((val >> 16) & 0xf800) | ((val >> 11) & 0x1f) | (val & 0x7e0);
2411     }
2412   else
2413     {
2414       second = val & 0xffff;
2415       first = ((val >> 16) & 0xfc00) | ((val >> 11) & 0x3e0)
2416                | ((val >> 21) & 0x1f);
2417     }
2418   bfd_put_16 (abfd, second, data + 2);
2419   bfd_put_16 (abfd, first, data);
2420 }
2421
2422 bfd_reloc_status_type
2423 _bfd_mips_elf_gprel16_with_gp (bfd *abfd, asymbol *symbol,
2424                                arelent *reloc_entry, asection *input_section,
2425                                bfd_boolean relocatable, void *data, bfd_vma gp)
2426 {
2427   bfd_vma relocation;
2428   bfd_signed_vma val;
2429   bfd_reloc_status_type status;
2430
2431   if (bfd_is_com_section (symbol->section))
2432     relocation = 0;
2433   else
2434     relocation = symbol->value;
2435
2436   relocation += symbol->section->output_section->vma;
2437   relocation += symbol->section->output_offset;
2438
2439   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2440     return bfd_reloc_outofrange;
2441
2442   /* Set val to the offset into the section or symbol.  */
2443   val = reloc_entry->addend;
2444
2445   _bfd_mips_elf_sign_extend (val, 16);
2446
2447   /* Adjust val for the final section location and GP value.  If we
2448      are producing relocatable output, we don't want to do this for
2449      an external symbol.  */
2450   if (! relocatable
2451       || (symbol->flags & BSF_SECTION_SYM) != 0)
2452     val += relocation - gp;
2453
2454   if (reloc_entry->howto->partial_inplace)
2455     {
2456       status = _bfd_relocate_contents (reloc_entry->howto, abfd, val,
2457                                        (bfd_byte *) data
2458                                        + reloc_entry->address);
2459       if (status != bfd_reloc_ok)
2460         return status;
2461     }
2462   else
2463     reloc_entry->addend = val;
2464
2465   if (relocatable)
2466     reloc_entry->address += input_section->output_offset;
2467
2468   return bfd_reloc_ok;
2469 }
2470
2471 /* Used to store a REL high-part relocation such as R_MIPS_HI16 or
2472    R_MIPS_GOT16.  REL is the relocation, INPUT_SECTION is the section
2473    that contains the relocation field and DATA points to the start of
2474    INPUT_SECTION.  */
2475
2476 struct mips_hi16
2477 {
2478   struct mips_hi16 *next;
2479   bfd_byte *data;
2480   asection *input_section;
2481   arelent rel;
2482 };
2483
2484 /* FIXME: This should not be a static variable.  */
2485
2486 static struct mips_hi16 *mips_hi16_list;
2487
2488 /* A howto special_function for REL *HI16 relocations.  We can only
2489    calculate the correct value once we've seen the partnering
2490    *LO16 relocation, so just save the information for later.
2491
2492    The ABI requires that the *LO16 immediately follow the *HI16.
2493    However, as a GNU extension, we permit an arbitrary number of
2494    *HI16s to be associated with a single *LO16.  This significantly
2495    simplies the relocation handling in gcc.  */
2496
2497 bfd_reloc_status_type
2498 _bfd_mips_elf_hi16_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry,
2499                           asymbol *symbol ATTRIBUTE_UNUSED, void *data,
2500                           asection *input_section, bfd *output_bfd,
2501                           char **error_message ATTRIBUTE_UNUSED)
2502 {
2503   struct mips_hi16 *n;
2504
2505   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2506     return bfd_reloc_outofrange;
2507
2508   n = bfd_malloc (sizeof *n);
2509   if (n == NULL)
2510     return bfd_reloc_outofrange;
2511
2512   n->next = mips_hi16_list;
2513   n->data = data;
2514   n->input_section = input_section;
2515   n->rel = *reloc_entry;
2516   mips_hi16_list = n;
2517
2518   if (output_bfd != NULL)
2519     reloc_entry->address += input_section->output_offset;
2520
2521   return bfd_reloc_ok;
2522 }
2523
2524 /* A howto special_function for REL R_MIPS*_GOT16 relocations.  This is just
2525    like any other 16-bit relocation when applied to global symbols, but is
2526    treated in the same as R_MIPS_HI16 when applied to local symbols.  */
2527
2528 bfd_reloc_status_type
2529 _bfd_mips_elf_got16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2530                            void *data, asection *input_section,
2531                            bfd *output_bfd, char **error_message)
2532 {
2533   if ((symbol->flags & (BSF_GLOBAL | BSF_WEAK)) != 0
2534       || bfd_is_und_section (bfd_get_section (symbol))
2535       || bfd_is_com_section (bfd_get_section (symbol)))
2536     /* The relocation is against a global symbol.  */
2537     return _bfd_mips_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2538                                         input_section, output_bfd,
2539                                         error_message);
2540
2541   return _bfd_mips_elf_hi16_reloc (abfd, reloc_entry, symbol, data,
2542                                    input_section, output_bfd, error_message);
2543 }
2544
2545 /* A howto special_function for REL *LO16 relocations.  The *LO16 itself
2546    is a straightforward 16 bit inplace relocation, but we must deal with
2547    any partnering high-part relocations as well.  */
2548
2549 bfd_reloc_status_type
2550 _bfd_mips_elf_lo16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2551                           void *data, asection *input_section,
2552                           bfd *output_bfd, char **error_message)
2553 {
2554   bfd_vma vallo;
2555   bfd_byte *location = (bfd_byte *) data + reloc_entry->address;
2556
2557   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2558     return bfd_reloc_outofrange;
2559
2560   _bfd_mips_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, FALSE,
2561                                  location);
2562   vallo = bfd_get_32 (abfd, location);
2563   _bfd_mips_elf_reloc_shuffle (abfd, reloc_entry->howto->type, FALSE,
2564                                location);
2565
2566   while (mips_hi16_list != NULL)
2567     {
2568       bfd_reloc_status_type ret;
2569       struct mips_hi16 *hi;
2570
2571       hi = mips_hi16_list;
2572
2573       /* R_MIPS*_GOT16 relocations are something of a special case.  We
2574          want to install the addend in the same way as for a R_MIPS*_HI16
2575          relocation (with a rightshift of 16).  However, since GOT16
2576          relocations can also be used with global symbols, their howto
2577          has a rightshift of 0.  */
2578       if (hi->rel.howto->type == R_MIPS_GOT16)
2579         hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MIPS_HI16, FALSE);
2580       else if (hi->rel.howto->type == R_MIPS16_GOT16)
2581         hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MIPS16_HI16, FALSE);
2582       else if (hi->rel.howto->type == R_MICROMIPS_GOT16)
2583         hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MICROMIPS_HI16, FALSE);
2584
2585       /* VALLO is a signed 16-bit number.  Bias it by 0x8000 so that any
2586          carry or borrow will induce a change of +1 or -1 in the high part.  */
2587       hi->rel.addend += (vallo + 0x8000) & 0xffff;
2588
2589       ret = _bfd_mips_elf_generic_reloc (abfd, &hi->rel, symbol, hi->data,
2590                                          hi->input_section, output_bfd,
2591                                          error_message);
2592       if (ret != bfd_reloc_ok)
2593         return ret;
2594
2595       mips_hi16_list = hi->next;
2596       free (hi);
2597     }
2598
2599   return _bfd_mips_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2600                                       input_section, output_bfd,
2601                                       error_message);
2602 }
2603
2604 /* A generic howto special_function.  This calculates and installs the
2605    relocation itself, thus avoiding the oft-discussed problems in
2606    bfd_perform_relocation and bfd_install_relocation.  */
2607
2608 bfd_reloc_status_type
2609 _bfd_mips_elf_generic_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry,
2610                              asymbol *symbol, void *data ATTRIBUTE_UNUSED,
2611                              asection *input_section, bfd *output_bfd,
2612                              char **error_message ATTRIBUTE_UNUSED)
2613 {
2614   bfd_signed_vma val;
2615   bfd_reloc_status_type status;
2616   bfd_boolean relocatable;
2617
2618   relocatable = (output_bfd != NULL);
2619
2620   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2621     return bfd_reloc_outofrange;
2622
2623   /* Build up the field adjustment in VAL.  */
2624   val = 0;
2625   if (!relocatable || (symbol->flags & BSF_SECTION_SYM) != 0)
2626     {
2627       /* Either we're calculating the final field value or we have a
2628          relocation against a section symbol.  Add in the section's
2629          offset or address.  */
2630       val += symbol->section->output_section->vma;
2631       val += symbol->section->output_offset;
2632     }
2633
2634   if (!relocatable)
2635     {
2636       /* We're calculating the final field value.  Add in the symbol's value
2637          and, if pc-relative, subtract the address of the field itself.  */
2638       val += symbol->value;
2639       if (reloc_entry->howto->pc_relative)
2640         {
2641           val -= input_section->output_section->vma;
2642           val -= input_section->output_offset;
2643           val -= reloc_entry->address;
2644         }
2645     }
2646
2647   /* VAL is now the final adjustment.  If we're keeping this relocation
2648      in the output file, and if the relocation uses a separate addend,
2649      we just need to add VAL to that addend.  Otherwise we need to add
2650      VAL to the relocation field itself.  */
2651   if (relocatable && !reloc_entry->howto->partial_inplace)
2652     reloc_entry->addend += val;
2653   else
2654     {
2655       bfd_byte *location = (bfd_byte *) data + reloc_entry->address;
2656
2657       /* Add in the separate addend, if any.  */
2658       val += reloc_entry->addend;
2659
2660       /* Add VAL to the relocation field.  */
2661       _bfd_mips_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, FALSE,
2662                                      location);
2663       status = _bfd_relocate_contents (reloc_entry->howto, abfd, val,
2664                                        location);
2665       _bfd_mips_elf_reloc_shuffle (abfd, reloc_entry->howto->type, FALSE,
2666                                    location);
2667
2668       if (status != bfd_reloc_ok)
2669         return status;
2670     }
2671
2672   if (relocatable)
2673     reloc_entry->address += input_section->output_offset;
2674
2675   return bfd_reloc_ok;
2676 }
2677 \f
2678 /* Swap an entry in a .gptab section.  Note that these routines rely
2679    on the equivalence of the two elements of the union.  */
2680
2681 static void
2682 bfd_mips_elf32_swap_gptab_in (bfd *abfd, const Elf32_External_gptab *ex,
2683                               Elf32_gptab *in)
2684 {
2685   in->gt_entry.gt_g_value = H_GET_32 (abfd, ex->gt_entry.gt_g_value);
2686   in->gt_entry.gt_bytes = H_GET_32 (abfd, ex->gt_entry.gt_bytes);
2687 }
2688
2689 static void
2690 bfd_mips_elf32_swap_gptab_out (bfd *abfd, const Elf32_gptab *in,
2691                                Elf32_External_gptab *ex)
2692 {
2693   H_PUT_32 (abfd, in->gt_entry.gt_g_value, ex->gt_entry.gt_g_value);
2694   H_PUT_32 (abfd, in->gt_entry.gt_bytes, ex->gt_entry.gt_bytes);
2695 }
2696
2697 static void
2698 bfd_elf32_swap_compact_rel_out (bfd *abfd, const Elf32_compact_rel *in,
2699                                 Elf32_External_compact_rel *ex)
2700 {
2701   H_PUT_32 (abfd, in->id1, ex->id1);
2702   H_PUT_32 (abfd, in->num, ex->num);
2703   H_PUT_32 (abfd, in->id2, ex->id2);
2704   H_PUT_32 (abfd, in->offset, ex->offset);
2705   H_PUT_32 (abfd, in->reserved0, ex->reserved0);
2706   H_PUT_32 (abfd, in->reserved1, ex->reserved1);
2707 }
2708
2709 static void
2710 bfd_elf32_swap_crinfo_out (bfd *abfd, const Elf32_crinfo *in,
2711                            Elf32_External_crinfo *ex)
2712 {
2713   unsigned long l;
2714
2715   l = (((in->ctype & CRINFO_CTYPE) << CRINFO_CTYPE_SH)
2716        | ((in->rtype & CRINFO_RTYPE) << CRINFO_RTYPE_SH)
2717        | ((in->dist2to & CRINFO_DIST2TO) << CRINFO_DIST2TO_SH)
2718        | ((in->relvaddr & CRINFO_RELVADDR) << CRINFO_RELVADDR_SH));
2719   H_PUT_32 (abfd, l, ex->info);
2720   H_PUT_32 (abfd, in->konst, ex->konst);
2721   H_PUT_32 (abfd, in->vaddr, ex->vaddr);
2722 }
2723 \f
2724 /* A .reginfo section holds a single Elf32_RegInfo structure.  These
2725    routines swap this structure in and out.  They are used outside of
2726    BFD, so they are globally visible.  */
2727
2728 void
2729 bfd_mips_elf32_swap_reginfo_in (bfd *abfd, const Elf32_External_RegInfo *ex,
2730                                 Elf32_RegInfo *in)
2731 {
2732   in->ri_gprmask = H_GET_32 (abfd, ex->ri_gprmask);
2733   in->ri_cprmask[0] = H_GET_32 (abfd, ex->ri_cprmask[0]);
2734   in->ri_cprmask[1] = H_GET_32 (abfd, ex->ri_cprmask[1]);
2735   in->ri_cprmask[2] = H_GET_32 (abfd, ex->ri_cprmask[2]);
2736   in->ri_cprmask[3] = H_GET_32 (abfd, ex->ri_cprmask[3]);
2737   in->ri_gp_value = H_GET_32 (abfd, ex->ri_gp_value);
2738 }
2739
2740 void
2741 bfd_mips_elf32_swap_reginfo_out (bfd *abfd, const Elf32_RegInfo *in,
2742                                  Elf32_External_RegInfo *ex)
2743 {
2744   H_PUT_32 (abfd, in->ri_gprmask, ex->ri_gprmask);
2745   H_PUT_32 (abfd, in->ri_cprmask[0], ex->ri_cprmask[0]);
2746   H_PUT_32 (abfd, in->ri_cprmask[1], ex->ri_cprmask[1]);
2747   H_PUT_32 (abfd, in->ri_cprmask[2], ex->ri_cprmask[2]);
2748   H_PUT_32 (abfd, in->ri_cprmask[3], ex->ri_cprmask[3]);
2749   H_PUT_32 (abfd, in->ri_gp_value, ex->ri_gp_value);
2750 }
2751
2752 /* In the 64 bit ABI, the .MIPS.options section holds register
2753    information in an Elf64_Reginfo structure.  These routines swap
2754    them in and out.  They are globally visible because they are used
2755    outside of BFD.  These routines are here so that gas can call them
2756    without worrying about whether the 64 bit ABI has been included.  */
2757
2758 void
2759 bfd_mips_elf64_swap_reginfo_in (bfd *abfd, const Elf64_External_RegInfo *ex,
2760                                 Elf64_Internal_RegInfo *in)
2761 {
2762   in->ri_gprmask = H_GET_32 (abfd, ex->ri_gprmask);
2763   in->ri_pad = H_GET_32 (abfd, ex->ri_pad);
2764   in->ri_cprmask[0] = H_GET_32 (abfd, ex->ri_cprmask[0]);
2765   in->ri_cprmask[1] = H_GET_32 (abfd, ex->ri_cprmask[1]);
2766   in->ri_cprmask[2] = H_GET_32 (abfd, ex->ri_cprmask[2]);
2767   in->ri_cprmask[3] = H_GET_32 (abfd, ex->ri_cprmask[3]);
2768   in->ri_gp_value = H_GET_64 (abfd, ex->ri_gp_value);
2769 }
2770
2771 void
2772 bfd_mips_elf64_swap_reginfo_out (bfd *abfd, const Elf64_Internal_RegInfo *in,
2773                                  Elf64_External_RegInfo *ex)
2774 {
2775   H_PUT_32 (abfd, in->ri_gprmask, ex->ri_gprmask);
2776   H_PUT_32 (abfd, in->ri_pad, ex->ri_pad);
2777   H_PUT_32 (abfd, in->ri_cprmask[0], ex->ri_cprmask[0]);
2778   H_PUT_32 (abfd, in->ri_cprmask[1], ex->ri_cprmask[1]);
2779   H_PUT_32 (abfd, in->ri_cprmask[2], ex->ri_cprmask[2]);
2780   H_PUT_32 (abfd, in->ri_cprmask[3], ex->ri_cprmask[3]);
2781   H_PUT_64 (abfd, in->ri_gp_value, ex->ri_gp_value);
2782 }
2783
2784 /* Swap in an options header.  */
2785
2786 void
2787 bfd_mips_elf_swap_options_in (bfd *abfd, const Elf_External_Options *ex,
2788                               Elf_Internal_Options *in)
2789 {
2790   in->kind = H_GET_8 (abfd, ex->kind);
2791   in->size = H_GET_8 (abfd, ex->size);
2792   in->section = H_GET_16 (abfd, ex->section);
2793   in->info = H_GET_32 (abfd, ex->info);
2794 }
2795
2796 /* Swap out an options header.  */
2797
2798 void
2799 bfd_mips_elf_swap_options_out (bfd *abfd, const Elf_Internal_Options *in,
2800                                Elf_External_Options *ex)
2801 {
2802   H_PUT_8 (abfd, in->kind, ex->kind);
2803   H_PUT_8 (abfd, in->size, ex->size);
2804   H_PUT_16 (abfd, in->section, ex->section);
2805   H_PUT_32 (abfd, in->info, ex->info);
2806 }
2807
2808 /* Swap in an abiflags structure.  */
2809
2810 void
2811 bfd_mips_elf_swap_abiflags_v0_in (bfd *abfd,
2812                                   const Elf_External_ABIFlags_v0 *ex,
2813                                   Elf_Internal_ABIFlags_v0 *in)
2814 {
2815   in->version = H_GET_16 (abfd, ex->version);
2816   in->isa_level = H_GET_8 (abfd, ex->isa_level);
2817   in->isa_rev = H_GET_8 (abfd, ex->isa_rev);
2818   in->gpr_size = H_GET_8 (abfd, ex->gpr_size);
2819   in->cpr1_size = H_GET_8 (abfd, ex->cpr1_size);
2820   in->cpr2_size = H_GET_8 (abfd, ex->cpr2_size);
2821   in->fp_abi = H_GET_8 (abfd, ex->fp_abi);
2822   in->isa_ext = H_GET_32 (abfd, ex->isa_ext);
2823   in->ases = H_GET_32 (abfd, ex->ases);
2824   in->flags1 = H_GET_32 (abfd, ex->flags1);
2825   in->flags2 = H_GET_32 (abfd, ex->flags2);
2826 }
2827
2828 /* Swap out an abiflags structure.  */
2829
2830 void
2831 bfd_mips_elf_swap_abiflags_v0_out (bfd *abfd,
2832                                    const Elf_Internal_ABIFlags_v0 *in,
2833                                    Elf_External_ABIFlags_v0 *ex)
2834 {
2835   H_PUT_16 (abfd, in->version, ex->version);
2836   H_PUT_8 (abfd, in->isa_level, ex->isa_level);
2837   H_PUT_8 (abfd, in->isa_rev, ex->isa_rev);
2838   H_PUT_8 (abfd, in->gpr_size, ex->gpr_size);
2839   H_PUT_8 (abfd, in->cpr1_size, ex->cpr1_size);
2840   H_PUT_8 (abfd, in->cpr2_size, ex->cpr2_size);
2841   H_PUT_8 (abfd, in->fp_abi, ex->fp_abi);
2842   H_PUT_32 (abfd, in->isa_ext, ex->isa_ext);
2843   H_PUT_32 (abfd, in->ases, ex->ases);
2844   H_PUT_32 (abfd, in->flags1, ex->flags1);
2845   H_PUT_32 (abfd, in->flags2, ex->flags2);
2846 }
2847 \f
2848 /* This function is called via qsort() to sort the dynamic relocation
2849    entries by increasing r_symndx value.  */
2850
2851 static int
2852 sort_dynamic_relocs (const void *arg1, const void *arg2)
2853 {
2854   Elf_Internal_Rela int_reloc1;
2855   Elf_Internal_Rela int_reloc2;
2856   int diff;
2857
2858   bfd_elf32_swap_reloc_in (reldyn_sorting_bfd, arg1, &int_reloc1);
2859   bfd_elf32_swap_reloc_in (reldyn_sorting_bfd, arg2, &int_reloc2);
2860
2861   diff = ELF32_R_SYM (int_reloc1.r_info) - ELF32_R_SYM (int_reloc2.r_info);
2862   if (diff != 0)
2863     return diff;
2864
2865   if (int_reloc1.r_offset < int_reloc2.r_offset)
2866     return -1;
2867   if (int_reloc1.r_offset > int_reloc2.r_offset)
2868     return 1;
2869   return 0;
2870 }
2871
2872 /* Like sort_dynamic_relocs, but used for elf64 relocations.  */
2873
2874 static int
2875 sort_dynamic_relocs_64 (const void *arg1 ATTRIBUTE_UNUSED,
2876                         const void *arg2 ATTRIBUTE_UNUSED)
2877 {
2878 #ifdef BFD64
2879   Elf_Internal_Rela int_reloc1[3];
2880   Elf_Internal_Rela int_reloc2[3];
2881
2882   (*get_elf_backend_data (reldyn_sorting_bfd)->s->swap_reloc_in)
2883     (reldyn_sorting_bfd, arg1, int_reloc1);
2884   (*get_elf_backend_data (reldyn_sorting_bfd)->s->swap_reloc_in)
2885     (reldyn_sorting_bfd, arg2, int_reloc2);
2886
2887   if (ELF64_R_SYM (int_reloc1[0].r_info) < ELF64_R_SYM (int_reloc2[0].r_info))
2888     return -1;
2889   if (ELF64_R_SYM (int_reloc1[0].r_info) > ELF64_R_SYM (int_reloc2[0].r_info))
2890     return 1;
2891
2892   if (int_reloc1[0].r_offset < int_reloc2[0].r_offset)
2893     return -1;
2894   if (int_reloc1[0].r_offset > int_reloc2[0].r_offset)
2895     return 1;
2896   return 0;
2897 #else
2898   abort ();
2899 #endif
2900 }
2901
2902
2903 /* This routine is used to write out ECOFF debugging external symbol
2904    information.  It is called via mips_elf_link_hash_traverse.  The
2905    ECOFF external symbol information must match the ELF external
2906    symbol information.  Unfortunately, at this point we don't know
2907    whether a symbol is required by reloc information, so the two
2908    tables may wind up being different.  We must sort out the external
2909    symbol information before we can set the final size of the .mdebug
2910    section, and we must set the size of the .mdebug section before we
2911    can relocate any sections, and we can't know which symbols are
2912    required by relocation until we relocate the sections.
2913    Fortunately, it is relatively unlikely that any symbol will be
2914    stripped but required by a reloc.  In particular, it can not happen
2915    when generating a final executable.  */
2916
2917 static bfd_boolean
2918 mips_elf_output_extsym (struct mips_elf_link_hash_entry *h, void *data)
2919 {
2920   struct extsym_info *einfo = data;
2921   bfd_boolean strip;
2922   asection *sec, *output_section;
2923
2924   if (h->root.indx == -2)
2925     strip = FALSE;
2926   else if ((h->root.def_dynamic
2927             || h->root.ref_dynamic
2928             || h->root.type == bfd_link_hash_new)
2929            && !h->root.def_regular
2930            && !h->root.ref_regular)
2931     strip = TRUE;
2932   else if (einfo->info->strip == strip_all
2933            || (einfo->info->strip == strip_some
2934                && bfd_hash_lookup (einfo->info->keep_hash,
2935                                    h->root.root.root.string,
2936                                    FALSE, FALSE) == NULL))
2937     strip = TRUE;
2938   else
2939     strip = FALSE;
2940
2941   if (strip)
2942     return TRUE;
2943
2944   if (h->esym.ifd == -2)
2945     {
2946       h->esym.jmptbl = 0;
2947       h->esym.cobol_main = 0;
2948       h->esym.weakext = 0;
2949       h->esym.reserved = 0;
2950       h->esym.ifd = ifdNil;
2951       h->esym.asym.value = 0;
2952       h->esym.asym.st = stGlobal;
2953
2954       if (h->root.root.type == bfd_link_hash_undefined
2955           || h->root.root.type == bfd_link_hash_undefweak)
2956         {
2957           const char *name;
2958
2959           /* Use undefined class.  Also, set class and type for some
2960              special symbols.  */
2961           name = h->root.root.root.string;
2962           if (strcmp (name, mips_elf_dynsym_rtproc_names[0]) == 0
2963               || strcmp (name, mips_elf_dynsym_rtproc_names[1]) == 0)
2964             {
2965               h->esym.asym.sc = scData;
2966               h->esym.asym.st = stLabel;
2967               h->esym.asym.value = 0;
2968             }
2969           else if (strcmp (name, mips_elf_dynsym_rtproc_names[2]) == 0)
2970             {
2971               h->esym.asym.sc = scAbs;
2972               h->esym.asym.st = stLabel;
2973               h->esym.asym.value =
2974                 mips_elf_hash_table (einfo->info)->procedure_count;
2975             }
2976           else
2977             h->esym.asym.sc = scUndefined;
2978         }
2979       else if (h->root.root.type != bfd_link_hash_defined
2980           && h->root.root.type != bfd_link_hash_defweak)
2981         h->esym.asym.sc = scAbs;
2982       else
2983         {
2984           const char *name;
2985
2986           sec = h->root.root.u.def.section;
2987           output_section = sec->output_section;
2988
2989           /* When making a shared library and symbol h is the one from
2990              the another shared library, OUTPUT_SECTION may be null.  */
2991           if (output_section == NULL)
2992             h->esym.asym.sc = scUndefined;
2993           else
2994             {
2995               name = bfd_section_name (output_section->owner, output_section);
2996
2997               if (strcmp (name, ".text") == 0)
2998                 h->esym.asym.sc = scText;
2999               else if (strcmp (name, ".data") == 0)
3000                 h->esym.asym.sc = scData;
3001               else if (strcmp (name, ".sdata") == 0)
3002                 h->esym.asym.sc = scSData;
3003               else if (strcmp (name, ".rodata") == 0
3004                        || strcmp (name, ".rdata") == 0)
3005                 h->esym.asym.sc = scRData;
3006               else if (strcmp (name, ".bss") == 0)
3007                 h->esym.asym.sc = scBss;
3008               else if (strcmp (name, ".sbss") == 0)
3009                 h->esym.asym.sc = scSBss;
3010               else if (strcmp (name, ".init") == 0)
3011                 h->esym.asym.sc = scInit;
3012               else if (strcmp (name, ".fini") == 0)
3013                 h->esym.asym.sc = scFini;
3014               else
3015                 h->esym.asym.sc = scAbs;
3016             }
3017         }
3018
3019       h->esym.asym.reserved = 0;
3020       h->esym.asym.index = indexNil;
3021     }
3022
3023   if (h->root.root.type == bfd_link_hash_common)
3024     h->esym.asym.value = h->root.root.u.c.size;
3025   else if (h->root.root.type == bfd_link_hash_defined
3026            || h->root.root.type == bfd_link_hash_defweak)
3027     {
3028       if (h->esym.asym.sc == scCommon)
3029         h->esym.asym.sc = scBss;
3030       else if (h->esym.asym.sc == scSCommon)
3031         h->esym.asym.sc = scSBss;
3032
3033       sec = h->root.root.u.def.section;
3034       output_section = sec->output_section;
3035       if (output_section != NULL)
3036         h->esym.asym.value = (h->root.root.u.def.value
3037                               + sec->output_offset
3038                               + output_section->vma);
3039       else
3040         h->esym.asym.value = 0;
3041     }
3042   else
3043     {
3044       struct mips_elf_link_hash_entry *hd = h;
3045
3046       while (hd->root.root.type == bfd_link_hash_indirect)
3047         hd = (struct mips_elf_link_hash_entry *)h->root.root.u.i.link;
3048
3049       if (hd->needs_lazy_stub)
3050         {
3051           BFD_ASSERT (hd->root.plt.plist != NULL);
3052           BFD_ASSERT (hd->root.plt.plist->stub_offset != MINUS_ONE);
3053           /* Set type and value for a symbol with a function stub.  */
3054           h->esym.asym.st = stProc;
3055           sec = hd->root.root.u.def.section;
3056           if (sec == NULL)
3057             h->esym.asym.value = 0;
3058           else
3059             {
3060               output_section = sec->output_section;
3061               if (output_section != NULL)
3062                 h->esym.asym.value = (hd->root.plt.plist->stub_offset
3063                                       + sec->output_offset
3064                                       + output_section->vma);
3065               else
3066                 h->esym.asym.value = 0;
3067             }
3068         }
3069     }
3070
3071   if (! bfd_ecoff_debug_one_external (einfo->abfd, einfo->debug, einfo->swap,
3072                                       h->root.root.root.string,
3073                                       &h->esym))
3074     {
3075       einfo->failed = TRUE;
3076       return FALSE;
3077     }
3078
3079   return TRUE;
3080 }
3081
3082 /* A comparison routine used to sort .gptab entries.  */
3083
3084 static int
3085 gptab_compare (const void *p1, const void *p2)
3086 {
3087   const Elf32_gptab *a1 = p1;
3088   const Elf32_gptab *a2 = p2;
3089
3090   return a1->gt_entry.gt_g_value - a2->gt_entry.gt_g_value;
3091 }
3092 \f
3093 /* Functions to manage the got entry hash table.  */
3094
3095 /* Use all 64 bits of a bfd_vma for the computation of a 32-bit
3096    hash number.  */
3097
3098 static INLINE hashval_t
3099 mips_elf_hash_bfd_vma (bfd_vma addr)
3100 {
3101 #ifdef BFD64
3102   return addr + (addr >> 32);
3103 #else
3104   return addr;
3105 #endif
3106 }
3107
3108 static hashval_t
3109 mips_elf_got_entry_hash (const void *entry_)
3110 {
3111   const struct mips_got_entry *entry = (struct mips_got_entry *)entry_;
3112
3113   return (entry->symndx
3114           + ((entry->tls_type == GOT_TLS_LDM) << 18)
3115           + (entry->tls_type == GOT_TLS_LDM ? 0
3116              : !entry->abfd ? mips_elf_hash_bfd_vma (entry->d.address)
3117              : entry->symndx >= 0 ? (entry->abfd->id
3118                                      + mips_elf_hash_bfd_vma (entry->d.addend))
3119              : entry->d.h->root.root.root.hash));
3120 }
3121
3122 static int
3123 mips_elf_got_entry_eq (const void *entry1, const void *entry2)
3124 {
3125   const struct mips_got_entry *e1 = (struct mips_got_entry *)entry1;
3126   const struct mips_got_entry *e2 = (struct mips_got_entry *)entry2;
3127
3128   return (e1->symndx == e2->symndx
3129           && e1->tls_type == e2->tls_type
3130           && (e1->tls_type == GOT_TLS_LDM ? TRUE
3131               : !e1->abfd ? !e2->abfd && e1->d.address == e2->d.address
3132               : e1->symndx >= 0 ? (e1->abfd == e2->abfd
3133                                    && e1->d.addend == e2->d.addend)
3134               : e2->abfd && e1->d.h == e2->d.h));
3135 }
3136
3137 static hashval_t
3138 mips_got_page_ref_hash (const void *ref_)
3139 {
3140   const struct mips_got_page_ref *ref;
3141
3142   ref = (const struct mips_got_page_ref *) ref_;
3143   return ((ref->symndx >= 0
3144            ? (hashval_t) (ref->u.abfd->id + ref->symndx)
3145            : ref->u.h->root.root.root.hash)
3146           + mips_elf_hash_bfd_vma (ref->addend));
3147 }
3148
3149 static int
3150 mips_got_page_ref_eq (const void *ref1_, const void *ref2_)
3151 {
3152   const struct mips_got_page_ref *ref1, *ref2;
3153
3154   ref1 = (const struct mips_got_page_ref *) ref1_;
3155   ref2 = (const struct mips_got_page_ref *) ref2_;
3156   return (ref1->symndx == ref2->symndx
3157           && (ref1->symndx < 0
3158               ? ref1->u.h == ref2->u.h
3159               : ref1->u.abfd == ref2->u.abfd)
3160           && ref1->addend == ref2->addend);
3161 }
3162
3163 static hashval_t
3164 mips_got_page_entry_hash (const void *entry_)
3165 {
3166   const struct mips_got_page_entry *entry;
3167
3168   entry = (const struct mips_got_page_entry *) entry_;
3169   return entry->sec->id;
3170 }
3171
3172 static int
3173 mips_got_page_entry_eq (const void *entry1_, const void *entry2_)
3174 {
3175   const struct mips_got_page_entry *entry1, *entry2;
3176
3177   entry1 = (const struct mips_got_page_entry *) entry1_;
3178   entry2 = (const struct mips_got_page_entry *) entry2_;
3179   return entry1->sec == entry2->sec;
3180 }
3181 \f
3182 /* Create and return a new mips_got_info structure.  */
3183
3184 static struct mips_got_info *
3185 mips_elf_create_got_info (bfd *abfd)
3186 {
3187   struct mips_got_info *g;
3188
3189   g = bfd_zalloc (abfd, sizeof (struct mips_got_info));
3190   if (g == NULL)
3191     return NULL;
3192
3193   g->got_entries = htab_try_create (1, mips_elf_got_entry_hash,
3194                                     mips_elf_got_entry_eq, NULL);
3195   if (g->got_entries == NULL)
3196     return NULL;
3197
3198   g->got_page_refs = htab_try_create (1, mips_got_page_ref_hash,
3199                                       mips_got_page_ref_eq, NULL);
3200   if (g->got_page_refs == NULL)
3201     return NULL;
3202
3203   return g;
3204 }
3205
3206 /* Return the GOT info for input bfd ABFD, trying to create a new one if
3207    CREATE_P and if ABFD doesn't already have a GOT.  */
3208
3209 static struct mips_got_info *
3210 mips_elf_bfd_got (bfd *abfd, bfd_boolean create_p)
3211 {
3212   struct mips_elf_obj_tdata *tdata;
3213
3214   if (!is_mips_elf (abfd))
3215     return NULL;
3216
3217   tdata = mips_elf_tdata (abfd);
3218   if (!tdata->got && create_p)
3219     tdata->got = mips_elf_create_got_info (abfd);
3220   return tdata->got;
3221 }
3222
3223 /* Record that ABFD should use output GOT G.  */
3224
3225 static void
3226 mips_elf_replace_bfd_got (bfd *abfd, struct mips_got_info *g)
3227 {
3228   struct mips_elf_obj_tdata *tdata;
3229
3230   BFD_ASSERT (is_mips_elf (abfd));
3231   tdata = mips_elf_tdata (abfd);
3232   if (tdata->got)
3233     {
3234       /* The GOT structure itself and the hash table entries are
3235          allocated to a bfd, but the hash tables aren't.  */
3236       htab_delete (tdata->got->got_entries);
3237       htab_delete (tdata->got->got_page_refs);
3238       if (tdata->got->got_page_entries)
3239         htab_delete (tdata->got->got_page_entries);
3240     }
3241   tdata->got = g;
3242 }
3243
3244 /* Return the dynamic relocation section.  If it doesn't exist, try to
3245    create a new it if CREATE_P, otherwise return NULL.  Also return NULL
3246    if creation fails.  */
3247
3248 static asection *
3249 mips_elf_rel_dyn_section (struct bfd_link_info *info, bfd_boolean create_p)
3250 {
3251   const char *dname;
3252   asection *sreloc;
3253   bfd *dynobj;
3254
3255   dname = MIPS_ELF_REL_DYN_NAME (info);
3256   dynobj = elf_hash_table (info)->dynobj;
3257   sreloc = bfd_get_linker_section (dynobj, dname);
3258   if (sreloc == NULL && create_p)
3259     {
3260       sreloc = bfd_make_section_anyway_with_flags (dynobj, dname,
3261                                                    (SEC_ALLOC
3262                                                     | SEC_LOAD
3263                                                     | SEC_HAS_CONTENTS
3264                                                     | SEC_IN_MEMORY
3265                                                     | SEC_LINKER_CREATED
3266                                                     | SEC_READONLY));
3267       if (sreloc == NULL
3268           || ! bfd_set_section_alignment (dynobj, sreloc,
3269                                           MIPS_ELF_LOG_FILE_ALIGN (dynobj)))
3270         return NULL;
3271     }
3272   return sreloc;
3273 }
3274
3275 /* Return the GOT_TLS_* type required by relocation type R_TYPE.  */
3276
3277 static int
3278 mips_elf_reloc_tls_type (unsigned int r_type)
3279 {
3280   if (tls_gd_reloc_p (r_type))
3281     return GOT_TLS_GD;
3282
3283   if (tls_ldm_reloc_p (r_type))
3284     return GOT_TLS_LDM;
3285
3286   if (tls_gottprel_reloc_p (r_type))
3287     return GOT_TLS_IE;
3288
3289   return GOT_TLS_NONE;
3290 }
3291
3292 /* Return the number of GOT slots needed for GOT TLS type TYPE.  */
3293
3294 static int
3295 mips_tls_got_entries (unsigned int type)
3296 {
3297   switch (type)
3298     {
3299     case GOT_TLS_GD:
3300     case GOT_TLS_LDM:
3301       return 2;
3302
3303     case GOT_TLS_IE:
3304       return 1;
3305
3306     case GOT_TLS_NONE:
3307       return 0;
3308     }
3309   abort ();
3310 }
3311
3312 /* Count the number of relocations needed for a TLS GOT entry, with
3313    access types from TLS_TYPE, and symbol H (or a local symbol if H
3314    is NULL).  */
3315
3316 static int
3317 mips_tls_got_relocs (struct bfd_link_info *info, unsigned char tls_type,
3318                      struct elf_link_hash_entry *h)
3319 {
3320   int indx = 0;
3321   bfd_boolean need_relocs = FALSE;
3322   bfd_boolean dyn = elf_hash_table (info)->dynamic_sections_created;
3323
3324   if (h != NULL
3325       && h->dynindx != -1
3326       && WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info), h)
3327       && (bfd_link_dll (info) || !SYMBOL_REFERENCES_LOCAL (info, h)))
3328     indx = h->dynindx;
3329
3330   if ((bfd_link_dll (info) || indx != 0)
3331       && (h == NULL
3332           || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
3333           || h->root.type != bfd_link_hash_undefweak))
3334     need_relocs = TRUE;
3335
3336   if (!need_relocs)
3337     return 0;
3338
3339   switch (tls_type)
3340     {
3341     case GOT_TLS_GD:
3342       return indx != 0 ? 2 : 1;
3343
3344     case GOT_TLS_IE:
3345       return 1;
3346
3347     case GOT_TLS_LDM:
3348       return bfd_link_dll (info) ? 1 : 0;
3349
3350     default:
3351       return 0;
3352     }
3353 }
3354
3355 /* Add the number of GOT entries and TLS relocations required by ENTRY
3356    to G.  */
3357
3358 static void
3359 mips_elf_count_got_entry (struct bfd_link_info *info,
3360                           struct mips_got_info *g,
3361                           struct mips_got_entry *entry)
3362 {
3363   if (entry->tls_type)
3364     {
3365       g->tls_gotno += mips_tls_got_entries (entry->tls_type);
3366       g->relocs += mips_tls_got_relocs (info, entry->tls_type,
3367                                         entry->symndx < 0
3368                                         ? &entry->d.h->root : NULL);
3369     }
3370   else if (entry->symndx >= 0 || entry->d.h->global_got_area == GGA_NONE)
3371     g->local_gotno += 1;
3372   else
3373     g->global_gotno += 1;
3374 }
3375
3376 /* Output a simple dynamic relocation into SRELOC.  */
3377
3378 static void
3379 mips_elf_output_dynamic_relocation (bfd *output_bfd,
3380                                     asection *sreloc,
3381                                     unsigned long reloc_index,
3382                                     unsigned long indx,
3383                                     int r_type,
3384                                     bfd_vma offset)
3385 {
3386   Elf_Internal_Rela rel[3];
3387
3388   memset (rel, 0, sizeof (rel));
3389
3390   rel[0].r_info = ELF_R_INFO (output_bfd, indx, r_type);
3391   rel[0].r_offset = rel[1].r_offset = rel[2].r_offset = offset;
3392
3393   if (ABI_64_P (output_bfd))
3394     {
3395       (*get_elf_backend_data (output_bfd)->s->swap_reloc_out)
3396         (output_bfd, &rel[0],
3397          (sreloc->contents
3398           + reloc_index * sizeof (Elf64_Mips_External_Rel)));
3399     }
3400   else
3401     bfd_elf32_swap_reloc_out
3402       (output_bfd, &rel[0],
3403        (sreloc->contents
3404         + reloc_index * sizeof (Elf32_External_Rel)));
3405 }
3406
3407 /* Initialize a set of TLS GOT entries for one symbol.  */
3408
3409 static void
3410 mips_elf_initialize_tls_slots (bfd *abfd, struct bfd_link_info *info,
3411                                struct mips_got_entry *entry,
3412                                struct mips_elf_link_hash_entry *h,
3413                                bfd_vma value)
3414 {
3415   bfd_boolean dyn = elf_hash_table (info)->dynamic_sections_created;
3416   struct mips_elf_link_hash_table *htab;
3417   int indx;
3418   asection *sreloc, *sgot;
3419   bfd_vma got_offset, got_offset2;
3420   bfd_boolean need_relocs = FALSE;
3421
3422   htab = mips_elf_hash_table (info);
3423   if (htab == NULL)
3424     return;
3425
3426   sgot = htab->root.sgot;
3427
3428   indx = 0;
3429   if (h != NULL
3430       && h->root.dynindx != -1
3431       && WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info), &h->root)
3432       && (bfd_link_dll (info) || !SYMBOL_REFERENCES_LOCAL (info, &h->root)))
3433     indx = h->root.dynindx;
3434
3435   if (entry->tls_initialized)
3436     return;
3437
3438   if ((bfd_link_dll (info) || indx != 0)
3439       && (h == NULL
3440           || ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT
3441           || h->root.type != bfd_link_hash_undefweak))
3442     need_relocs = TRUE;
3443
3444   /* MINUS_ONE means the symbol is not defined in this object.  It may not
3445      be defined at all; assume that the value doesn't matter in that
3446      case.  Otherwise complain if we would use the value.  */
3447   BFD_ASSERT (value != MINUS_ONE || (indx != 0 && need_relocs)
3448               || h->root.root.type == bfd_link_hash_undefweak);
3449
3450   /* Emit necessary relocations.  */
3451   sreloc = mips_elf_rel_dyn_section (info, FALSE);
3452   got_offset = entry->gotidx;
3453
3454   switch (entry->tls_type)
3455     {
3456     case GOT_TLS_GD:
3457       /* General Dynamic.  */
3458       got_offset2 = got_offset + MIPS_ELF_GOT_SIZE (abfd);
3459
3460       if (need_relocs)
3461         {
3462           mips_elf_output_dynamic_relocation
3463             (abfd, sreloc, sreloc->reloc_count++, indx,
3464              ABI_64_P (abfd) ? R_MIPS_TLS_DTPMOD64 : R_MIPS_TLS_DTPMOD32,
3465              sgot->output_offset + sgot->output_section->vma + got_offset);
3466
3467           if (indx)
3468             mips_elf_output_dynamic_relocation
3469               (abfd, sreloc, sreloc->reloc_count++, indx,
3470                ABI_64_P (abfd) ? R_MIPS_TLS_DTPREL64 : R_MIPS_TLS_DTPREL32,
3471                sgot->output_offset + sgot->output_section->vma + got_offset2);
3472           else
3473             MIPS_ELF_PUT_WORD (abfd, value - dtprel_base (info),
3474                                sgot->contents + got_offset2);
3475         }
3476       else
3477         {
3478           MIPS_ELF_PUT_WORD (abfd, 1,
3479                              sgot->contents + got_offset);
3480           MIPS_ELF_PUT_WORD (abfd, value - dtprel_base (info),
3481                              sgot->contents + got_offset2);
3482         }
3483       break;
3484
3485     case GOT_TLS_IE:
3486       /* Initial Exec model.  */
3487       if (need_relocs)
3488         {
3489           if (indx == 0)
3490             MIPS_ELF_PUT_WORD (abfd, value - elf_hash_table (info)->tls_sec->vma,
3491                                sgot->contents + got_offset);
3492           else
3493             MIPS_ELF_PUT_WORD (abfd, 0,
3494                                sgot->contents + got_offset);
3495
3496           mips_elf_output_dynamic_relocation
3497             (abfd, sreloc, sreloc->reloc_count++, indx,
3498              ABI_64_P (abfd) ? R_MIPS_TLS_TPREL64 : R_MIPS_TLS_TPREL32,
3499              sgot->output_offset + sgot->output_section->vma + got_offset);
3500         }
3501       else
3502         MIPS_ELF_PUT_WORD (abfd, value - tprel_base (info),
3503                            sgot->contents + got_offset);
3504       break;
3505
3506     case GOT_TLS_LDM:
3507       /* The initial offset is zero, and the LD offsets will include the
3508          bias by DTP_OFFSET.  */
3509       MIPS_ELF_PUT_WORD (abfd, 0,
3510                          sgot->contents + got_offset
3511                          + MIPS_ELF_GOT_SIZE (abfd));
3512
3513       if (!bfd_link_dll (info))
3514         MIPS_ELF_PUT_WORD (abfd, 1,
3515                            sgot->contents + got_offset);
3516       else
3517         mips_elf_output_dynamic_relocation
3518           (abfd, sreloc, sreloc->reloc_count++, indx,
3519            ABI_64_P (abfd) ? R_MIPS_TLS_DTPMOD64 : R_MIPS_TLS_DTPMOD32,
3520            sgot->output_offset + sgot->output_section->vma + got_offset);
3521       break;
3522
3523     default:
3524       abort ();
3525     }
3526
3527   entry->tls_initialized = TRUE;
3528 }
3529
3530 /* Return the offset from _GLOBAL_OFFSET_TABLE_ of the .got.plt entry
3531    for global symbol H.  .got.plt comes before the GOT, so the offset
3532    will be negative.  */
3533
3534 static bfd_vma
3535 mips_elf_gotplt_index (struct bfd_link_info *info,
3536                        struct elf_link_hash_entry *h)
3537 {
3538   bfd_vma got_address, got_value;
3539   struct mips_elf_link_hash_table *htab;
3540
3541   htab = mips_elf_hash_table (info);
3542   BFD_ASSERT (htab != NULL);
3543
3544   BFD_ASSERT (h->plt.plist != NULL);
3545   BFD_ASSERT (h->plt.plist->gotplt_index != MINUS_ONE);
3546
3547   /* Calculate the address of the associated .got.plt entry.  */
3548   got_address = (htab->root.sgotplt->output_section->vma
3549                  + htab->root.sgotplt->output_offset
3550                  + (h->plt.plist->gotplt_index
3551                     * MIPS_ELF_GOT_SIZE (info->output_bfd)));
3552
3553   /* Calculate the value of _GLOBAL_OFFSET_TABLE_.  */
3554   got_value = (htab->root.hgot->root.u.def.section->output_section->vma
3555                + htab->root.hgot->root.u.def.section->output_offset
3556                + htab->root.hgot->root.u.def.value);
3557
3558   return got_address - got_value;
3559 }
3560
3561 /* Return the GOT offset for address VALUE.   If there is not yet a GOT
3562    entry for this value, create one.  If R_SYMNDX refers to a TLS symbol,
3563    create a TLS GOT entry instead.  Return -1 if no satisfactory GOT
3564    offset can be found.  */
3565
3566 static bfd_vma
3567 mips_elf_local_got_index (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
3568                           bfd_vma value, unsigned long r_symndx,
3569                           struct mips_elf_link_hash_entry *h, int r_type)
3570 {
3571   struct mips_elf_link_hash_table *htab;
3572   struct mips_got_entry *entry;
3573
3574   htab = mips_elf_hash_table (info);
3575   BFD_ASSERT (htab != NULL);
3576
3577   entry = mips_elf_create_local_got_entry (abfd, info, ibfd, value,
3578                                            r_symndx, h, r_type);
3579   if (!entry)
3580     return MINUS_ONE;
3581
3582   if (entry->tls_type)
3583     mips_elf_initialize_tls_slots (abfd, info, entry, h, value);
3584   return entry->gotidx;
3585 }
3586
3587 /* Return the GOT index of global symbol H in the primary GOT.  */
3588
3589 static bfd_vma
3590 mips_elf_primary_global_got_index (bfd *obfd, struct bfd_link_info *info,
3591                                    struct elf_link_hash_entry *h)
3592 {
3593   struct mips_elf_link_hash_table *htab;
3594   long global_got_dynindx;
3595   struct mips_got_info *g;
3596   bfd_vma got_index;
3597
3598   htab = mips_elf_hash_table (info);
3599   BFD_ASSERT (htab != NULL);
3600
3601   global_got_dynindx = 0;
3602   if (htab->global_gotsym != NULL)
3603     global_got_dynindx = htab->global_gotsym->dynindx;
3604
3605   /* Once we determine the global GOT entry with the lowest dynamic
3606      symbol table index, we must put all dynamic symbols with greater
3607      indices into the primary GOT.  That makes it easy to calculate the
3608      GOT offset.  */
3609   BFD_ASSERT (h->dynindx >= global_got_dynindx);
3610   g = mips_elf_bfd_got (obfd, FALSE);
3611   got_index = ((h->dynindx - global_got_dynindx + g->local_gotno)
3612                * MIPS_ELF_GOT_SIZE (obfd));
3613   BFD_ASSERT (got_index < htab->root.sgot->size);
3614
3615   return got_index;
3616 }
3617
3618 /* Return the GOT index for the global symbol indicated by H, which is
3619    referenced by a relocation of type R_TYPE in IBFD.  */
3620
3621 static bfd_vma
3622 mips_elf_global_got_index (bfd *obfd, struct bfd_link_info *info, bfd *ibfd,
3623                            struct elf_link_hash_entry *h, int r_type)
3624 {
3625   struct mips_elf_link_hash_table *htab;
3626   struct mips_got_info *g;
3627   struct mips_got_entry lookup, *entry;
3628   bfd_vma gotidx;
3629
3630   htab = mips_elf_hash_table (info);
3631   BFD_ASSERT (htab != NULL);
3632
3633   g = mips_elf_bfd_got (ibfd, FALSE);
3634   BFD_ASSERT (g);
3635
3636   lookup.tls_type = mips_elf_reloc_tls_type (r_type);
3637   if (!lookup.tls_type && g == mips_elf_bfd_got (obfd, FALSE))
3638     return mips_elf_primary_global_got_index (obfd, info, h);
3639
3640   lookup.abfd = ibfd;
3641   lookup.symndx = -1;
3642   lookup.d.h = (struct mips_elf_link_hash_entry *) h;
3643   entry = htab_find (g->got_entries, &lookup);
3644   BFD_ASSERT (entry);
3645
3646   gotidx = entry->gotidx;
3647   BFD_ASSERT (gotidx > 0 && gotidx < htab->root.sgot->size);
3648
3649   if (lookup.tls_type)
3650     {
3651       bfd_vma value = MINUS_ONE;
3652
3653       if ((h->root.type == bfd_link_hash_defined
3654            || h->root.type == bfd_link_hash_defweak)
3655           && h->root.u.def.section->output_section)
3656         value = (h->root.u.def.value
3657                  + h->root.u.def.section->output_offset
3658                  + h->root.u.def.section->output_section->vma);
3659
3660       mips_elf_initialize_tls_slots (obfd, info, entry, lookup.d.h, value);
3661     }
3662   return gotidx;
3663 }
3664
3665 /* Find a GOT page entry that points to within 32KB of VALUE.  These
3666    entries are supposed to be placed at small offsets in the GOT, i.e.,
3667    within 32KB of GP.  Return the index of the GOT entry, or -1 if no
3668    entry could be created.  If OFFSETP is nonnull, use it to return the
3669    offset of the GOT entry from VALUE.  */
3670
3671 static bfd_vma
3672 mips_elf_got_page (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
3673                    bfd_vma value, bfd_vma *offsetp)
3674 {
3675   bfd_vma page, got_index;
3676   struct mips_got_entry *entry;
3677
3678   page = (value + 0x8000) & ~(bfd_vma) 0xffff;
3679   entry = mips_elf_create_local_got_entry (abfd, info, ibfd, page, 0,
3680                                            NULL, R_MIPS_GOT_PAGE);
3681
3682   if (!entry)
3683     return MINUS_ONE;
3684
3685   got_index = entry->gotidx;
3686
3687   if (offsetp)
3688     *offsetp = value - entry->d.address;
3689
3690   return got_index;
3691 }
3692
3693 /* Find a local GOT entry for an R_MIPS*_GOT16 relocation against VALUE.
3694    EXTERNAL is true if the relocation was originally against a global
3695    symbol that binds locally.  */
3696
3697 static bfd_vma
3698 mips_elf_got16_entry (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
3699                       bfd_vma value, bfd_boolean external)
3700 {
3701   struct mips_got_entry *entry;
3702
3703   /* GOT16 relocations against local symbols are followed by a LO16
3704      relocation; those against global symbols are not.  Thus if the
3705      symbol was originally local, the GOT16 relocation should load the
3706      equivalent of %hi(VALUE), otherwise it should load VALUE itself.  */
3707   if (! external)
3708     value = mips_elf_high (value) << 16;
3709
3710   /* It doesn't matter whether the original relocation was R_MIPS_GOT16,
3711      R_MIPS16_GOT16, R_MIPS_CALL16, etc.  The format of the entry is the
3712      same in all cases.  */
3713   entry = mips_elf_create_local_got_entry (abfd, info, ibfd, value, 0,
3714                                            NULL, R_MIPS_GOT16);
3715   if (entry)
3716     return entry->gotidx;
3717   else
3718     return MINUS_ONE;
3719 }
3720
3721 /* Returns the offset for the entry at the INDEXth position
3722    in the GOT.  */
3723
3724 static bfd_vma
3725 mips_elf_got_offset_from_index (struct bfd_link_info *info, bfd *output_bfd,
3726                                 bfd *input_bfd, bfd_vma got_index)
3727 {
3728   struct mips_elf_link_hash_table *htab;
3729   asection *sgot;
3730   bfd_vma gp;
3731
3732   htab = mips_elf_hash_table (info);
3733   BFD_ASSERT (htab != NULL);
3734
3735   sgot = htab->root.sgot;
3736   gp = _bfd_get_gp_value (output_bfd)
3737     + mips_elf_adjust_gp (output_bfd, htab->got_info, input_bfd);
3738
3739   return sgot->output_section->vma + sgot->output_offset + got_index - gp;
3740 }
3741
3742 /* Create and return a local GOT entry for VALUE, which was calculated
3743    from a symbol belonging to INPUT_SECTON.  Return NULL if it could not
3744    be created.  If R_SYMNDX refers to a TLS symbol, create a TLS entry
3745    instead.  */
3746
3747 static struct mips_got_entry *
3748 mips_elf_create_local_got_entry (bfd *abfd, struct bfd_link_info *info,
3749                                  bfd *ibfd, bfd_vma value,
3750                                  unsigned long r_symndx,
3751                                  struct mips_elf_link_hash_entry *h,
3752                                  int r_type)
3753 {
3754   struct mips_got_entry lookup, *entry;
3755   void **loc;
3756   struct mips_got_info *g;
3757   struct mips_elf_link_hash_table *htab;
3758   bfd_vma gotidx;
3759
3760   htab = mips_elf_hash_table (info);
3761   BFD_ASSERT (htab != NULL);
3762
3763   g = mips_elf_bfd_got (ibfd, FALSE);
3764   if (g == NULL)
3765     {
3766       g = mips_elf_bfd_got (abfd, FALSE);
3767       BFD_ASSERT (g != NULL);
3768     }
3769
3770   /* This function shouldn't be called for symbols that live in the global
3771      area of the GOT.  */
3772   BFD_ASSERT (h == NULL || h->global_got_area == GGA_NONE);
3773
3774   lookup.tls_type = mips_elf_reloc_tls_type (r_type);
3775   if (lookup.tls_type)
3776     {
3777       lookup.abfd = ibfd;
3778       if (tls_ldm_reloc_p (r_type))
3779         {
3780           lookup.symndx = 0;
3781           lookup.d.addend = 0;
3782         }
3783       else if (h == NULL)
3784         {
3785           lookup.symndx = r_symndx;
3786           lookup.d.addend = 0;
3787         }
3788       else
3789         {
3790           lookup.symndx = -1;
3791           lookup.d.h = h;
3792         }
3793
3794       entry = (struct mips_got_entry *) htab_find (g->got_entries, &lookup);
3795       BFD_ASSERT (entry);
3796
3797       gotidx = entry->gotidx;
3798       BFD_ASSERT (gotidx > 0 && gotidx < htab->root.sgot->size);
3799
3800       return entry;
3801     }
3802
3803   lookup.abfd = NULL;
3804   lookup.symndx = -1;
3805   lookup.d.address = value;
3806   loc = htab_find_slot (g->got_entries, &lookup, INSERT);
3807   if (!loc)
3808     return NULL;
3809
3810   entry = (struct mips_got_entry *) *loc;
3811   if (entry)
3812     return entry;
3813
3814   if (g->assigned_low_gotno > g->assigned_high_gotno)
3815     {
3816       /* We didn't allocate enough space in the GOT.  */
3817       _bfd_error_handler
3818         (_("not enough GOT space for local GOT entries"));
3819       bfd_set_error (bfd_error_bad_value);
3820       return NULL;
3821     }
3822
3823   entry = (struct mips_got_entry *) bfd_alloc (abfd, sizeof (*entry));
3824   if (!entry)
3825     return NULL;
3826
3827   if (got16_reloc_p (r_type)
3828       || call16_reloc_p (r_type)
3829       || got_page_reloc_p (r_type)
3830       || got_disp_reloc_p (r_type))
3831     lookup.gotidx = MIPS_ELF_GOT_SIZE (abfd) * g->assigned_low_gotno++;
3832   else
3833     lookup.gotidx = MIPS_ELF_GOT_SIZE (abfd) * g->assigned_high_gotno--;
3834
3835   *entry = lookup;
3836   *loc = entry;
3837
3838   MIPS_ELF_PUT_WORD (abfd, value, htab->root.sgot->contents + entry->gotidx);
3839
3840   /* These GOT entries need a dynamic relocation on VxWorks.  */
3841   if (htab->is_vxworks)
3842     {
3843       Elf_Internal_Rela outrel;
3844       asection *s;
3845       bfd_byte *rloc;
3846       bfd_vma got_address;
3847
3848       s = mips_elf_rel_dyn_section (info, FALSE);
3849       got_address = (htab->root.sgot->output_section->vma
3850                      + htab->root.sgot->output_offset
3851                      + entry->gotidx);
3852
3853       rloc = s->contents + (s->reloc_count++ * sizeof (Elf32_External_Rela));
3854       outrel.r_offset = got_address;
3855       outrel.r_info = ELF32_R_INFO (STN_UNDEF, R_MIPS_32);
3856       outrel.r_addend = value;
3857       bfd_elf32_swap_reloca_out (abfd, &outrel, rloc);
3858     }
3859
3860   return entry;
3861 }
3862
3863 /* Return the number of dynamic section symbols required by OUTPUT_BFD.
3864    The number might be exact or a worst-case estimate, depending on how
3865    much information is available to elf_backend_omit_section_dynsym at
3866    the current linking stage.  */
3867
3868 static bfd_size_type
3869 count_section_dynsyms (bfd *output_bfd, struct bfd_link_info *info)
3870 {
3871   bfd_size_type count;
3872
3873   count = 0;
3874   if (bfd_link_pic (info)
3875       || elf_hash_table (info)->is_relocatable_executable)
3876     {
3877       asection *p;
3878       const struct elf_backend_data *bed;
3879
3880       bed = get_elf_backend_data (output_bfd);
3881       for (p = output_bfd->sections; p ; p = p->next)
3882         if ((p->flags & SEC_EXCLUDE) == 0
3883             && (p->flags & SEC_ALLOC) != 0
3884             && elf_hash_table (info)->dynamic_relocs
3885             && !(*bed->elf_backend_omit_section_dynsym) (output_bfd, info, p))
3886           ++count;
3887     }
3888   return count;
3889 }
3890
3891 /* Sort the dynamic symbol table so that symbols that need GOT entries
3892    appear towards the end.  */
3893
3894 static bfd_boolean
3895 mips_elf_sort_hash_table (bfd *abfd, struct bfd_link_info *info)
3896 {
3897   struct mips_elf_link_hash_table *htab;
3898   struct mips_elf_hash_sort_data hsd;
3899   struct mips_got_info *g;
3900
3901   htab = mips_elf_hash_table (info);
3902   BFD_ASSERT (htab != NULL);
3903
3904   if (htab->root.dynsymcount == 0)
3905     return TRUE;
3906
3907   g = htab->got_info;
3908   if (g == NULL)
3909     return TRUE;
3910
3911   hsd.low = NULL;
3912   hsd.max_unref_got_dynindx
3913     = hsd.min_got_dynindx
3914     = (htab->root.dynsymcount - g->reloc_only_gotno);
3915   /* Add 1 to local symbol indices to account for the mandatory NULL entry
3916      at the head of the table; see `_bfd_elf_link_renumber_dynsyms'.  */
3917   hsd.max_local_dynindx = count_section_dynsyms (abfd, info) + 1;
3918   hsd.max_non_got_dynindx = htab->root.local_dynsymcount + 1;
3919   hsd.output_bfd = abfd;
3920   if (htab->root.dynobj != NULL
3921       && htab->root.dynamic_sections_created
3922       && info->emit_gnu_hash)
3923     {
3924       asection *s = bfd_get_linker_section (htab->root.dynobj, ".MIPS.xhash");
3925       BFD_ASSERT (s != NULL);
3926       hsd.mipsxhash = s->contents;
3927       BFD_ASSERT (hsd.mipsxhash != NULL);
3928     }
3929   else
3930     hsd.mipsxhash = NULL;
3931   mips_elf_link_hash_traverse (htab, mips_elf_sort_hash_table_f, &hsd);
3932
3933   /* There should have been enough room in the symbol table to
3934      accommodate both the GOT and non-GOT symbols.  */
3935   BFD_ASSERT (hsd.max_local_dynindx <= htab->root.local_dynsymcount + 1);
3936   BFD_ASSERT (hsd.max_non_got_dynindx <= hsd.min_got_dynindx);
3937   BFD_ASSERT (hsd.max_unref_got_dynindx == htab->root.dynsymcount);
3938   BFD_ASSERT (htab->root.dynsymcount - hsd.min_got_dynindx == g->global_gotno);
3939
3940   /* Now we know which dynamic symbol has the lowest dynamic symbol
3941      table index in the GOT.  */
3942   htab->global_gotsym = hsd.low;
3943
3944   return TRUE;
3945 }
3946
3947 /* If H needs a GOT entry, assign it the highest available dynamic
3948    index.  Otherwise, assign it the lowest available dynamic
3949    index.  */
3950
3951 static bfd_boolean
3952 mips_elf_sort_hash_table_f (struct mips_elf_link_hash_entry *h, void *data)
3953 {
3954   struct mips_elf_hash_sort_data *hsd = data;
3955
3956   /* Symbols without dynamic symbol table entries aren't interesting
3957      at all.  */
3958   if (h->root.dynindx == -1)
3959     return TRUE;
3960
3961   switch (h->global_got_area)
3962     {
3963     case GGA_NONE:
3964       if (h->root.forced_local)
3965         h->root.dynindx = hsd->max_local_dynindx++;
3966       else
3967         h->root.dynindx = hsd->max_non_got_dynindx++;
3968       break;
3969
3970     case GGA_NORMAL:
3971       h->root.dynindx = --hsd->min_got_dynindx;
3972       hsd->low = (struct elf_link_hash_entry *) h;
3973       break;
3974
3975     case GGA_RELOC_ONLY:
3976       if (hsd->max_unref_got_dynindx == hsd->min_got_dynindx)
3977         hsd->low = (struct elf_link_hash_entry *) h;
3978       h->root.dynindx = hsd->max_unref_got_dynindx++;
3979       break;
3980     }
3981
3982   /* Populate the .MIPS.xhash translation table entry with
3983      the symbol dynindx.  */
3984   if (h->mipsxhash_loc != 0 && hsd->mipsxhash != NULL)
3985     bfd_put_32 (hsd->output_bfd, h->root.dynindx,
3986                 hsd->mipsxhash + h->mipsxhash_loc);
3987
3988   return TRUE;
3989 }
3990
3991 /* Record that input bfd ABFD requires a GOT entry like *LOOKUP
3992    (which is owned by the caller and shouldn't be added to the
3993    hash table directly).  */
3994
3995 static bfd_boolean
3996 mips_elf_record_got_entry (struct bfd_link_info *info, bfd *abfd,
3997                            struct mips_got_entry *lookup)
3998 {
3999   struct mips_elf_link_hash_table *htab;
4000   struct mips_got_entry *entry;
4001   struct mips_got_info *g;
4002   void **loc, **bfd_loc;
4003
4004   /* Make sure there's a slot for this entry in the master GOT.  */
4005   htab = mips_elf_hash_table (info);
4006   g = htab->got_info;
4007   loc = htab_find_slot (g->got_entries, lookup, INSERT);
4008   if (!loc)
4009     return FALSE;
4010
4011   /* Populate the entry if it isn't already.  */
4012   entry = (struct mips_got_entry *) *loc;
4013   if (!entry)
4014     {
4015       entry = (struct mips_got_entry *) bfd_alloc (abfd, sizeof (*entry));
4016       if (!entry)
4017         return FALSE;
4018
4019       lookup->tls_initialized = FALSE;
4020       lookup->gotidx = -1;
4021       *entry = *lookup;
4022       *loc = entry;
4023     }
4024
4025   /* Reuse the same GOT entry for the BFD's GOT.  */
4026   g = mips_elf_bfd_got (abfd, TRUE);
4027   if (!g)
4028     return FALSE;
4029
4030   bfd_loc = htab_find_slot (g->got_entries, lookup, INSERT);
4031   if (!bfd_loc)
4032     return FALSE;
4033
4034   if (!*bfd_loc)
4035     *bfd_loc = entry;
4036   return TRUE;
4037 }
4038
4039 /* ABFD has a GOT relocation of type R_TYPE against H.  Reserve a GOT
4040    entry for it.  FOR_CALL is true if the caller is only interested in
4041    using the GOT entry for calls.  */
4042
4043 static bfd_boolean
4044 mips_elf_record_global_got_symbol (struct elf_link_hash_entry *h,
4045                                    bfd *abfd, struct bfd_link_info *info,
4046                                    bfd_boolean for_call, int r_type)
4047 {
4048   struct mips_elf_link_hash_table *htab;
4049   struct mips_elf_link_hash_entry *hmips;
4050   struct mips_got_entry entry;
4051   unsigned char tls_type;
4052
4053   htab = mips_elf_hash_table (info);
4054   BFD_ASSERT (htab != NULL);
4055
4056   hmips = (struct mips_elf_link_hash_entry *) h;
4057   if (!for_call)
4058     hmips->got_only_for_calls = FALSE;
4059
4060   /* A global symbol in the GOT must also be in the dynamic symbol
4061      table.  */
4062   if (h->dynindx == -1)
4063     {
4064       switch (ELF_ST_VISIBILITY (h->other))
4065         {
4066         case STV_INTERNAL:
4067         case STV_HIDDEN:
4068           _bfd_mips_elf_hide_symbol (info, h, TRUE);
4069           break;
4070         }
4071       if (!bfd_elf_link_record_dynamic_symbol (info, h))
4072         return FALSE;
4073     }
4074
4075   tls_type = mips_elf_reloc_tls_type (r_type);
4076   if (tls_type == GOT_TLS_NONE && hmips->global_got_area > GGA_NORMAL)
4077     hmips->global_got_area = GGA_NORMAL;
4078
4079   entry.abfd = abfd;
4080   entry.symndx = -1;
4081   entry.d.h = (struct mips_elf_link_hash_entry *) h;
4082   entry.tls_type = tls_type;
4083   return mips_elf_record_got_entry (info, abfd, &entry);
4084 }
4085
4086 /* ABFD has a GOT relocation of type R_TYPE against symbol SYMNDX + ADDEND,
4087    where SYMNDX is a local symbol.  Reserve a GOT entry for it.  */
4088
4089 static bfd_boolean
4090 mips_elf_record_local_got_symbol (bfd *abfd, long symndx, bfd_vma addend,
4091                                   struct bfd_link_info *info, int r_type)
4092 {
4093   struct mips_elf_link_hash_table *htab;
4094   struct mips_got_info *g;
4095   struct mips_got_entry entry;
4096
4097   htab = mips_elf_hash_table (info);
4098   BFD_ASSERT (htab != NULL);
4099
4100   g = htab->got_info;
4101   BFD_ASSERT (g != NULL);
4102
4103   entry.abfd = abfd;
4104   entry.symndx = symndx;
4105   entry.d.addend = addend;
4106   entry.tls_type = mips_elf_reloc_tls_type (r_type);
4107   return mips_elf_record_got_entry (info, abfd, &entry);
4108 }
4109
4110 /* Record that ABFD has a page relocation against SYMNDX + ADDEND.
4111    H is the symbol's hash table entry, or null if SYMNDX is local
4112    to ABFD.  */
4113
4114 static bfd_boolean
4115 mips_elf_record_got_page_ref (struct bfd_link_info *info, bfd *abfd,
4116                               long symndx, struct elf_link_hash_entry *h,
4117                               bfd_signed_vma addend)
4118 {
4119   struct mips_elf_link_hash_table *htab;
4120   struct mips_got_info *g1, *g2;
4121   struct mips_got_page_ref lookup, *entry;
4122   void **loc, **bfd_loc;
4123
4124   htab = mips_elf_hash_table (info);
4125   BFD_ASSERT (htab != NULL);
4126
4127   g1 = htab->got_info;
4128   BFD_ASSERT (g1 != NULL);
4129
4130   if (h)
4131     {
4132       lookup.symndx = -1;
4133       lookup.u.h = (struct mips_elf_link_hash_entry *) h;
4134     }
4135   else
4136     {
4137       lookup.symndx = symndx;
4138       lookup.u.abfd = abfd;
4139     }
4140   lookup.addend = addend;
4141   loc = htab_find_slot (g1->got_page_refs, &lookup, INSERT);
4142   if (loc == NULL)
4143     return FALSE;
4144
4145   entry = (struct mips_got_page_ref *) *loc;
4146   if (!entry)
4147     {
4148       entry = bfd_alloc (abfd, sizeof (*entry));
4149       if (!entry)
4150         return FALSE;
4151
4152       *entry = lookup;
4153       *loc = entry;
4154     }
4155
4156   /* Add the same entry to the BFD's GOT.  */
4157   g2 = mips_elf_bfd_got (abfd, TRUE);
4158   if (!g2)
4159     return FALSE;
4160
4161   bfd_loc = htab_find_slot (g2->got_page_refs, &lookup, INSERT);
4162   if (!bfd_loc)
4163     return FALSE;
4164
4165   if (!*bfd_loc)
4166     *bfd_loc = entry;
4167
4168   return TRUE;
4169 }
4170
4171 /* Add room for N relocations to the .rel(a).dyn section in ABFD.  */
4172
4173 static void
4174 mips_elf_allocate_dynamic_relocations (bfd *abfd, struct bfd_link_info *info,
4175                                        unsigned int n)
4176 {
4177   asection *s;
4178   struct mips_elf_link_hash_table *htab;
4179
4180   htab = mips_elf_hash_table (info);
4181   BFD_ASSERT (htab != NULL);
4182
4183   s = mips_elf_rel_dyn_section (info, FALSE);
4184   BFD_ASSERT (s != NULL);
4185
4186   if (htab->is_vxworks)
4187     s->size += n * MIPS_ELF_RELA_SIZE (abfd);
4188   else
4189     {
4190       if (s->size == 0)
4191         {
4192           /* Make room for a null element.  */
4193           s->size += MIPS_ELF_REL_SIZE (abfd);
4194           ++s->reloc_count;
4195         }
4196       s->size += n * MIPS_ELF_REL_SIZE (abfd);
4197     }
4198 }
4199 \f
4200 /* A htab_traverse callback for GOT entries, with DATA pointing to a
4201    mips_elf_traverse_got_arg structure.  Count the number of GOT
4202    entries and TLS relocs.  Set DATA->value to true if we need
4203    to resolve indirect or warning symbols and then recreate the GOT.  */
4204
4205 static int
4206 mips_elf_check_recreate_got (void **entryp, void *data)
4207 {
4208   struct mips_got_entry *entry;
4209   struct mips_elf_traverse_got_arg *arg;
4210
4211   entry = (struct mips_got_entry *) *entryp;
4212   arg = (struct mips_elf_traverse_got_arg *) data;
4213   if (entry->abfd != NULL && entry->symndx == -1)
4214     {
4215       struct mips_elf_link_hash_entry *h;
4216
4217       h = entry->d.h;
4218       if (h->root.root.type == bfd_link_hash_indirect
4219           || h->root.root.type == bfd_link_hash_warning)
4220         {
4221           arg->value = TRUE;
4222           return 0;
4223         }
4224     }
4225   mips_elf_count_got_entry (arg->info, arg->g, entry);
4226   return 1;
4227 }
4228
4229 /* A htab_traverse callback for GOT entries, with DATA pointing to a
4230    mips_elf_traverse_got_arg structure.  Add all entries to DATA->g,
4231    converting entries for indirect and warning symbols into entries
4232    for the target symbol.  Set DATA->g to null on error.  */
4233
4234 static int
4235 mips_elf_recreate_got (void **entryp, void *data)
4236 {
4237   struct mips_got_entry new_entry, *entry;
4238   struct mips_elf_traverse_got_arg *arg;
4239   void **slot;
4240
4241   entry = (struct mips_got_entry *) *entryp;
4242   arg = (struct mips_elf_traverse_got_arg *) data;
4243   if (entry->abfd != NULL
4244       && entry->symndx == -1
4245       && (entry->d.h->root.root.type == bfd_link_hash_indirect
4246           || entry->d.h->root.root.type == bfd_link_hash_warning))
4247     {
4248       struct mips_elf_link_hash_entry *h;
4249
4250       new_entry = *entry;
4251       entry = &new_entry;
4252       h = entry->d.h;
4253       do
4254         {
4255           BFD_ASSERT (h->global_got_area == GGA_NONE);
4256           h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
4257         }
4258       while (h->root.root.type == bfd_link_hash_indirect
4259              || h->root.root.type == bfd_link_hash_warning);
4260       entry->d.h = h;
4261     }
4262   slot = htab_find_slot (arg->g->got_entries, entry, INSERT);
4263   if (slot == NULL)
4264     {
4265       arg->g = NULL;
4266       return 0;
4267     }
4268   if (*slot == NULL)
4269     {
4270       if (entry == &new_entry)
4271         {
4272           entry = bfd_alloc (entry->abfd, sizeof (*entry));
4273           if (!entry)
4274             {
4275               arg->g = NULL;
4276               return 0;
4277             }
4278           *entry = new_entry;
4279         }
4280       *slot = entry;
4281       mips_elf_count_got_entry (arg->info, arg->g, entry);
4282     }
4283   return 1;
4284 }
4285
4286 /* Return the maximum number of GOT page entries required for RANGE.  */
4287
4288 static bfd_vma
4289 mips_elf_pages_for_range (const struct mips_got_page_range *range)
4290 {
4291   return (range->max_addend - range->min_addend + 0x1ffff) >> 16;
4292 }
4293
4294 /* Record that G requires a page entry that can reach SEC + ADDEND.  */
4295
4296 static bfd_boolean
4297 mips_elf_record_got_page_entry (struct mips_elf_traverse_got_arg *arg,
4298                                 asection *sec, bfd_signed_vma addend)
4299 {
4300   struct mips_got_info *g = arg->g;
4301   struct mips_got_page_entry lookup, *entry;
4302   struct mips_got_page_range **range_ptr, *range;
4303   bfd_vma old_pages, new_pages;
4304   void **loc;
4305
4306   /* Find the mips_got_page_entry hash table entry for this section.  */
4307   lookup.sec = sec;
4308   loc = htab_find_slot (g->got_page_entries, &lookup, INSERT);
4309   if (loc == NULL)
4310     return FALSE;
4311
4312   /* Create a mips_got_page_entry if this is the first time we've
4313      seen the section.  */
4314   entry = (struct mips_got_page_entry *) *loc;
4315   if (!entry)
4316     {
4317       entry = bfd_zalloc (arg->info->output_bfd, sizeof (*entry));
4318       if (!entry)
4319         return FALSE;
4320
4321       entry->sec = sec;
4322       *loc = entry;
4323     }
4324
4325   /* Skip over ranges whose maximum extent cannot share a page entry
4326      with ADDEND.  */
4327   range_ptr = &entry->ranges;
4328   while (*range_ptr && addend > (*range_ptr)->max_addend + 0xffff)
4329     range_ptr = &(*range_ptr)->next;
4330
4331   /* If we scanned to the end of the list, or found a range whose
4332      minimum extent cannot share a page entry with ADDEND, create
4333      a new singleton range.  */
4334   range = *range_ptr;
4335   if (!range || addend < range->min_addend - 0xffff)
4336     {
4337       range = bfd_zalloc (arg->info->output_bfd, sizeof (*range));
4338       if (!range)
4339         return FALSE;
4340
4341       range->next = *range_ptr;
4342       range->min_addend = addend;
4343       range->max_addend = addend;
4344
4345       *range_ptr = range;
4346       entry->num_pages++;
4347       g->page_gotno++;
4348       return TRUE;
4349     }
4350
4351   /* Remember how many pages the old range contributed.  */
4352   old_pages = mips_elf_pages_for_range (range);
4353
4354   /* Update the ranges.  */
4355   if (addend < range->min_addend)
4356     range->min_addend = addend;
4357   else if (addend > range->max_addend)
4358     {
4359       if (range->next && addend >= range->next->min_addend - 0xffff)
4360         {
4361           old_pages += mips_elf_pages_for_range (range->next);
4362           range->max_addend = range->next->max_addend;
4363           range->next = range->next->next;
4364         }
4365       else
4366         range->max_addend = addend;
4367     }
4368
4369   /* Record any change in the total estimate.  */
4370   new_pages = mips_elf_pages_for_range (range);
4371   if (old_pages != new_pages)
4372     {
4373       entry->num_pages += new_pages - old_pages;
4374       g->page_gotno += new_pages - old_pages;
4375     }
4376
4377   return TRUE;
4378 }
4379
4380 /* A htab_traverse callback for which *REFP points to a mips_got_page_ref
4381    and for which DATA points to a mips_elf_traverse_got_arg.  Work out
4382    whether the page reference described by *REFP needs a GOT page entry,
4383    and record that entry in DATA->g if so.  Set DATA->g to null on failure.  */
4384
4385 static bfd_boolean
4386 mips_elf_resolve_got_page_ref (void **refp, void *data)
4387 {
4388   struct mips_got_page_ref *ref;
4389   struct mips_elf_traverse_got_arg *arg;
4390   struct mips_elf_link_hash_table *htab;
4391   asection *sec;
4392   bfd_vma addend;
4393
4394   ref = (struct mips_got_page_ref *) *refp;
4395   arg = (struct mips_elf_traverse_got_arg *) data;
4396   htab = mips_elf_hash_table (arg->info);
4397
4398   if (ref->symndx < 0)
4399     {
4400       struct mips_elf_link_hash_entry *h;
4401
4402       /* Global GOT_PAGEs decay to GOT_DISP and so don't need page entries.  */
4403       h = ref->u.h;
4404       if (!SYMBOL_REFERENCES_LOCAL (arg->info, &h->root))
4405         return 1;
4406
4407       /* Ignore undefined symbols; we'll issue an error later if
4408          appropriate.  */
4409       if (!((h->root.root.type == bfd_link_hash_defined
4410              || h->root.root.type == bfd_link_hash_defweak)
4411             && h->root.root.u.def.section))
4412         return 1;
4413
4414       sec = h->root.root.u.def.section;
4415       addend = h->root.root.u.def.value + ref->addend;
4416     }
4417   else
4418     {
4419       Elf_Internal_Sym *isym;
4420
4421       /* Read in the symbol.  */
4422       isym = bfd_sym_from_r_symndx (&htab->sym_cache, ref->u.abfd,
4423                                     ref->symndx);
4424       if (isym == NULL)
4425         {
4426           arg->g = NULL;
4427           return 0;
4428         }
4429
4430       /* Get the associated input section.  */
4431       sec = bfd_section_from_elf_index (ref->u.abfd, isym->st_shndx);
4432       if (sec == NULL)
4433         {
4434           arg->g = NULL;
4435           return 0;
4436         }
4437
4438       /* If this is a mergable section, work out the section and offset
4439          of the merged data.  For section symbols, the addend specifies
4440          of the offset _of_ the first byte in the data, otherwise it
4441          specifies the offset _from_ the first byte.  */
4442       if (sec->flags & SEC_MERGE)
4443         {
4444           void *secinfo;
4445
4446           secinfo = elf_section_data (sec)->sec_info;
4447           if (ELF_ST_TYPE (isym->st_info) == STT_SECTION)
4448             addend = _bfd_merged_section_offset (ref->u.abfd, &sec, secinfo,
4449                                                  isym->st_value + ref->addend);
4450           else
4451             addend = _bfd_merged_section_offset (ref->u.abfd, &sec, secinfo,
4452                                                  isym->st_value) + ref->addend;
4453         }
4454       else
4455         addend = isym->st_value + ref->addend;
4456     }
4457   if (!mips_elf_record_got_page_entry (arg, sec, addend))
4458     {
4459       arg->g = NULL;
4460       return 0;
4461     }
4462   return 1;
4463 }
4464
4465 /* If any entries in G->got_entries are for indirect or warning symbols,
4466    replace them with entries for the target symbol.  Convert g->got_page_refs
4467    into got_page_entry structures and estimate the number of page entries
4468    that they require.  */
4469
4470 static bfd_boolean
4471 mips_elf_resolve_final_got_entries (struct bfd_link_info *info,
4472                                     struct mips_got_info *g)
4473 {
4474   struct mips_elf_traverse_got_arg tga;
4475   struct mips_got_info oldg;
4476
4477   oldg = *g;
4478
4479   tga.info = info;
4480   tga.g = g;
4481   tga.value = FALSE;
4482   htab_traverse (g->got_entries, mips_elf_check_recreate_got, &tga);
4483   if (tga.value)
4484     {
4485       *g = oldg;
4486       g->got_entries = htab_create (htab_size (oldg.got_entries),
4487                                     mips_elf_got_entry_hash,
4488                                     mips_elf_got_entry_eq, NULL);
4489       if (!g->got_entries)
4490         return FALSE;
4491
4492       htab_traverse (oldg.got_entries, mips_elf_recreate_got, &tga);
4493       if (!tga.g)
4494         return FALSE;
4495
4496       htab_delete (oldg.got_entries);
4497     }
4498
4499   g->got_page_entries = htab_try_create (1, mips_got_page_entry_hash,
4500                                          mips_got_page_entry_eq, NULL);
4501   if (g->got_page_entries == NULL)
4502     return FALSE;
4503
4504   tga.info = info;
4505   tga.g = g;
4506   htab_traverse (g->got_page_refs, mips_elf_resolve_got_page_ref, &tga);
4507
4508   return TRUE;
4509 }
4510
4511 /* Return true if a GOT entry for H should live in the local rather than
4512    global GOT area.  */
4513
4514 static bfd_boolean
4515 mips_use_local_got_p (struct bfd_link_info *info,
4516                       struct mips_elf_link_hash_entry *h)
4517 {
4518   /* Symbols that aren't in the dynamic symbol table must live in the
4519      local GOT.  This includes symbols that are completely undefined
4520      and which therefore don't bind locally.  We'll report undefined
4521      symbols later if appropriate.  */
4522   if (h->root.dynindx == -1)
4523     return TRUE;
4524
4525   /* Absolute symbols, if ever they need a GOT entry, cannot ever go
4526      to the local GOT, as they would be implicitly relocated by the
4527      base address by the dynamic loader.  */
4528   if (bfd_is_abs_symbol (&h->root.root))
4529     return FALSE;
4530
4531   /* Symbols that bind locally can (and in the case of forced-local
4532      symbols, must) live in the local GOT.  */
4533   if (h->got_only_for_calls
4534       ? SYMBOL_CALLS_LOCAL (info, &h->root)
4535       : SYMBOL_REFERENCES_LOCAL (info, &h->root))
4536     return TRUE;
4537
4538   /* If this is an executable that must provide a definition of the symbol,
4539      either though PLTs or copy relocations, then that address should go in
4540      the local rather than global GOT.  */
4541   if (bfd_link_executable (info) && h->has_static_relocs)
4542     return TRUE;
4543
4544   return FALSE;
4545 }
4546
4547 /* A mips_elf_link_hash_traverse callback for which DATA points to the
4548    link_info structure.  Decide whether the hash entry needs an entry in
4549    the global part of the primary GOT, setting global_got_area accordingly.
4550    Count the number of global symbols that are in the primary GOT only
4551    because they have relocations against them (reloc_only_gotno).  */
4552
4553 static int
4554 mips_elf_count_got_symbols (struct mips_elf_link_hash_entry *h, void *data)
4555 {
4556   struct bfd_link_info *info;
4557   struct mips_elf_link_hash_table *htab;
4558   struct mips_got_info *g;
4559
4560   info = (struct bfd_link_info *) data;
4561   htab = mips_elf_hash_table (info);
4562   g = htab->got_info;
4563   if (h->global_got_area != GGA_NONE)
4564     {
4565       /* Make a final decision about whether the symbol belongs in the
4566          local or global GOT.  */
4567       if (mips_use_local_got_p (info, h))
4568         /* The symbol belongs in the local GOT.  We no longer need this
4569            entry if it was only used for relocations; those relocations
4570            will be against the null or section symbol instead of H.  */
4571         h->global_got_area = GGA_NONE;
4572       else if (htab->is_vxworks
4573                && h->got_only_for_calls
4574                && h->root.plt.plist->mips_offset != MINUS_ONE)
4575         /* On VxWorks, calls can refer directly to the .got.plt entry;
4576            they don't need entries in the regular GOT.  .got.plt entries
4577            will be allocated by _bfd_mips_elf_adjust_dynamic_symbol.  */
4578         h->global_got_area = GGA_NONE;
4579       else if (h->global_got_area == GGA_RELOC_ONLY)
4580         {
4581           g->reloc_only_gotno++;
4582           g->global_gotno++;
4583         }
4584     }
4585   return 1;
4586 }
4587 \f
4588 /* A htab_traverse callback for GOT entries.  Add each one to the GOT
4589    given in mips_elf_traverse_got_arg DATA.  Clear DATA->G on error.  */
4590
4591 static int
4592 mips_elf_add_got_entry (void **entryp, void *data)
4593 {
4594   struct mips_got_entry *entry;
4595   struct mips_elf_traverse_got_arg *arg;
4596   void **slot;
4597
4598   entry = (struct mips_got_entry *) *entryp;
4599   arg = (struct mips_elf_traverse_got_arg *) data;
4600   slot = htab_find_slot (arg->g->got_entries, entry, INSERT);
4601   if (!slot)
4602     {
4603       arg->g = NULL;
4604       return 0;
4605     }
4606   if (!*slot)
4607     {
4608       *slot = entry;
4609       mips_elf_count_got_entry (arg->info, arg->g, entry);
4610     }
4611   return 1;
4612 }
4613
4614 /* A htab_traverse callback for GOT page entries.  Add each one to the GOT
4615    given in mips_elf_traverse_got_arg DATA.  Clear DATA->G on error.  */
4616
4617 static int
4618 mips_elf_add_got_page_entry (void **entryp, void *data)
4619 {
4620   struct mips_got_page_entry *entry;
4621   struct mips_elf_traverse_got_arg *arg;
4622   void **slot;
4623
4624   entry = (struct mips_got_page_entry *) *entryp;
4625   arg = (struct mips_elf_traverse_got_arg *) data;
4626   slot = htab_find_slot (arg->g->got_page_entries, entry, INSERT);
4627   if (!slot)
4628     {
4629       arg->g = NULL;
4630       return 0;
4631     }
4632   if (!*slot)
4633     {
4634       *slot = entry;
4635       arg->g->page_gotno += entry->num_pages;
4636     }
4637   return 1;
4638 }
4639
4640 /* Consider merging FROM, which is ABFD's GOT, into TO.  Return -1 if
4641    this would lead to overflow, 1 if they were merged successfully,
4642    and 0 if a merge failed due to lack of memory.  (These values are chosen
4643    so that nonnegative return values can be returned by a htab_traverse
4644    callback.)  */
4645
4646 static int
4647 mips_elf_merge_got_with (bfd *abfd, struct mips_got_info *from,
4648                          struct mips_got_info *to,
4649                          struct mips_elf_got_per_bfd_arg *arg)
4650 {
4651   struct mips_elf_traverse_got_arg tga;
4652   unsigned int estimate;
4653
4654   /* Work out how many page entries we would need for the combined GOT.  */
4655   estimate = arg->max_pages;
4656   if (estimate >= from->page_gotno + to->page_gotno)
4657     estimate = from->page_gotno + to->page_gotno;
4658
4659   /* And conservatively estimate how many local and TLS entries
4660      would be needed.  */
4661   estimate += from->local_gotno + to->local_gotno;
4662   estimate += from->tls_gotno + to->tls_gotno;
4663
4664   /* If we're merging with the primary got, any TLS relocations will
4665      come after the full set of global entries.  Otherwise estimate those
4666      conservatively as well.  */
4667   if (to == arg->primary && from->tls_gotno + to->tls_gotno)
4668     estimate += arg->global_count;
4669   else
4670     estimate += from->global_gotno + to->global_gotno;
4671
4672   /* Bail out if the combined GOT might be too big.  */
4673   if (estimate > arg->max_count)
4674     return -1;
4675
4676   /* Transfer the bfd's got information from FROM to TO.  */
4677   tga.info = arg->info;
4678   tga.g = to;
4679   htab_traverse (from->got_entries, mips_elf_add_got_entry, &tga);
4680   if (!tga.g)
4681     return 0;
4682
4683   htab_traverse (from->got_page_entries, mips_elf_add_got_page_entry, &tga);
4684   if (!tga.g)
4685     return 0;
4686
4687   mips_elf_replace_bfd_got (abfd, to);
4688   return 1;
4689 }
4690
4691 /* Attempt to merge GOT G, which belongs to ABFD.  Try to use as much
4692    as possible of the primary got, since it doesn't require explicit
4693    dynamic relocations, but don't use bfds that would reference global
4694    symbols out of the addressable range.  Failing the primary got,
4695    attempt to merge with the current got, or finish the current got
4696    and then make make the new got current.  */
4697
4698 static bfd_boolean
4699 mips_elf_merge_got (bfd *abfd, struct mips_got_info *g,
4700                     struct mips_elf_got_per_bfd_arg *arg)
4701 {
4702   unsigned int estimate;
4703   int result;
4704
4705   if (!mips_elf_resolve_final_got_entries (arg->info, g))
4706     return FALSE;
4707
4708   /* Work out the number of page, local and TLS entries.  */
4709   estimate = arg->max_pages;
4710   if (estimate > g->page_gotno)
4711     estimate = g->page_gotno;
4712   estimate += g->local_gotno + g->tls_gotno;
4713
4714   /* We place TLS GOT entries after both locals and globals.  The globals
4715      for the primary GOT may overflow the normal GOT size limit, so be
4716      sure not to merge a GOT which requires TLS with the primary GOT in that
4717      case.  This doesn't affect non-primary GOTs.  */
4718   estimate += (g->tls_gotno > 0 ? arg->global_count : g->global_gotno);
4719
4720   if (estimate <= arg->max_count)
4721     {
4722       /* If we don't have a primary GOT, use it as
4723          a starting point for the primary GOT.  */
4724       if (!arg->primary)
4725         {
4726           arg->primary = g;
4727           return TRUE;
4728         }
4729
4730       /* Try merging with the primary GOT.  */
4731       result = mips_elf_merge_got_with (abfd, g, arg->primary, arg);
4732       if (result >= 0)
4733         return result;
4734     }
4735
4736   /* If we can merge with the last-created got, do it.  */
4737   if (arg->current)
4738     {
4739       result = mips_elf_merge_got_with (abfd, g, arg->current, arg);
4740       if (result >= 0)
4741         return result;
4742     }
4743
4744   /* Well, we couldn't merge, so create a new GOT.  Don't check if it
4745      fits; if it turns out that it doesn't, we'll get relocation
4746      overflows anyway.  */
4747   g->next = arg->current;
4748   arg->current = g;
4749
4750   return TRUE;
4751 }
4752
4753 /* ENTRYP is a hash table entry for a mips_got_entry.  Set its gotidx
4754    to GOTIDX, duplicating the entry if it has already been assigned
4755    an index in a different GOT.  */
4756
4757 static bfd_boolean
4758 mips_elf_set_gotidx (void **entryp, long gotidx)
4759 {
4760   struct mips_got_entry *entry;
4761
4762   entry = (struct mips_got_entry *) *entryp;
4763   if (entry->gotidx > 0)
4764     {
4765       struct mips_got_entry *new_entry;
4766
4767       new_entry = bfd_alloc (entry->abfd, sizeof (*entry));
4768       if (!new_entry)
4769         return FALSE;
4770
4771       *new_entry = *entry;
4772       *entryp = new_entry;
4773       entry = new_entry;
4774     }
4775   entry->gotidx = gotidx;
4776   return TRUE;
4777 }
4778
4779 /* Set the TLS GOT index for the GOT entry in ENTRYP.  DATA points to a
4780    mips_elf_traverse_got_arg in which DATA->value is the size of one
4781    GOT entry.  Set DATA->g to null on failure.  */
4782
4783 static int
4784 mips_elf_initialize_tls_index (void **entryp, void *data)
4785 {
4786   struct mips_got_entry *entry;
4787   struct mips_elf_traverse_got_arg *arg;
4788
4789   /* We're only interested in TLS symbols.  */
4790   entry = (struct mips_got_entry *) *entryp;
4791   if (entry->tls_type == GOT_TLS_NONE)
4792     return 1;
4793
4794   arg = (struct mips_elf_traverse_got_arg *) data;
4795   if (!mips_elf_set_gotidx (entryp, arg->value * arg->g->tls_assigned_gotno))
4796     {
4797       arg->g = NULL;
4798       return 0;
4799     }
4800
4801   /* Account for the entries we've just allocated.  */
4802   arg->g->tls_assigned_gotno += mips_tls_got_entries (entry->tls_type);
4803   return 1;
4804 }
4805
4806 /* A htab_traverse callback for GOT entries, where DATA points to a
4807    mips_elf_traverse_got_arg.  Set the global_got_area of each global
4808    symbol to DATA->value.  */
4809
4810 static int
4811 mips_elf_set_global_got_area (void **entryp, void *data)
4812 {
4813   struct mips_got_entry *entry;
4814   struct mips_elf_traverse_got_arg *arg;
4815
4816   entry = (struct mips_got_entry *) *entryp;
4817   arg = (struct mips_elf_traverse_got_arg *) data;
4818   if (entry->abfd != NULL
4819       && entry->symndx == -1
4820       && entry->d.h->global_got_area != GGA_NONE)
4821     entry->d.h->global_got_area = arg->value;
4822   return 1;
4823 }
4824
4825 /* A htab_traverse callback for secondary GOT entries, where DATA points
4826    to a mips_elf_traverse_got_arg.  Assign GOT indices to global entries
4827    and record the number of relocations they require.  DATA->value is
4828    the size of one GOT entry.  Set DATA->g to null on failure.  */
4829
4830 static int
4831 mips_elf_set_global_gotidx (void **entryp, void *data)
4832 {
4833   struct mips_got_entry *entry;
4834   struct mips_elf_traverse_got_arg *arg;
4835
4836   entry = (struct mips_got_entry *) *entryp;
4837   arg = (struct mips_elf_traverse_got_arg *) data;
4838   if (entry->abfd != NULL
4839       && entry->symndx == -1
4840       && entry->d.h->global_got_area != GGA_NONE)
4841     {
4842       if (!mips_elf_set_gotidx (entryp, arg->value * arg->g->assigned_low_gotno))
4843         {
4844           arg->g = NULL;
4845           return 0;
4846         }
4847       arg->g->assigned_low_gotno += 1;
4848
4849       if (bfd_link_pic (arg->info)
4850           || (elf_hash_table (arg->info)->dynamic_sections_created
4851               && entry->d.h->root.def_dynamic
4852               && !entry->d.h->root.def_regular))
4853         arg->g->relocs += 1;
4854     }
4855
4856   return 1;
4857 }
4858
4859 /* A htab_traverse callback for GOT entries for which DATA is the
4860    bfd_link_info.  Forbid any global symbols from having traditional
4861    lazy-binding stubs.  */
4862
4863 static int
4864 mips_elf_forbid_lazy_stubs (void **entryp, void *data)
4865 {
4866   struct bfd_link_info *info;
4867   struct mips_elf_link_hash_table *htab;
4868   struct mips_got_entry *entry;
4869
4870   entry = (struct mips_got_entry *) *entryp;
4871   info = (struct bfd_link_info *) data;
4872   htab = mips_elf_hash_table (info);
4873   BFD_ASSERT (htab != NULL);
4874
4875   if (entry->abfd != NULL
4876       && entry->symndx == -1
4877       && entry->d.h->needs_lazy_stub)
4878     {
4879       entry->d.h->needs_lazy_stub = FALSE;
4880       htab->lazy_stub_count--;
4881     }
4882
4883   return 1;
4884 }
4885
4886 /* Return the offset of an input bfd IBFD's GOT from the beginning of
4887    the primary GOT.  */
4888 static bfd_vma
4889 mips_elf_adjust_gp (bfd *abfd, struct mips_got_info *g, bfd *ibfd)
4890 {
4891   if (!g->next)
4892     return 0;
4893
4894   g = mips_elf_bfd_got (ibfd, FALSE);
4895   if (! g)
4896     return 0;
4897
4898   BFD_ASSERT (g->next);
4899
4900   g = g->next;
4901
4902   return (g->local_gotno + g->global_gotno + g->tls_gotno)
4903     * MIPS_ELF_GOT_SIZE (abfd);
4904 }
4905
4906 /* Turn a single GOT that is too big for 16-bit addressing into
4907    a sequence of GOTs, each one 16-bit addressable.  */
4908
4909 static bfd_boolean
4910 mips_elf_multi_got (bfd *abfd, struct bfd_link_info *info,
4911                     asection *got, bfd_size_type pages)
4912 {
4913   struct mips_elf_link_hash_table *htab;
4914   struct mips_elf_got_per_bfd_arg got_per_bfd_arg;
4915   struct mips_elf_traverse_got_arg tga;
4916   struct mips_got_info *g, *gg;
4917   unsigned int assign, needed_relocs;
4918   bfd *dynobj, *ibfd;
4919
4920   dynobj = elf_hash_table (info)->dynobj;
4921   htab = mips_elf_hash_table (info);
4922   BFD_ASSERT (htab != NULL);
4923
4924   g = htab->got_info;
4925
4926   got_per_bfd_arg.obfd = abfd;
4927   got_per_bfd_arg.info = info;
4928   got_per_bfd_arg.current = NULL;
4929   got_per_bfd_arg.primary = NULL;
4930   got_per_bfd_arg.max_count = ((MIPS_ELF_GOT_MAX_SIZE (info)
4931                                 / MIPS_ELF_GOT_SIZE (abfd))
4932                                - htab->reserved_gotno);
4933   got_per_bfd_arg.max_pages = pages;
4934   /* The number of globals that will be included in the primary GOT.
4935      See the calls to mips_elf_set_global_got_area below for more
4936      information.  */
4937   got_per_bfd_arg.global_count = g->global_gotno;
4938
4939   /* Try to merge the GOTs of input bfds together, as long as they
4940      don't seem to exceed the maximum GOT size, choosing one of them
4941      to be the primary GOT.  */
4942   for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link.next)
4943     {
4944       gg = mips_elf_bfd_got (ibfd, FALSE);
4945       if (gg && !mips_elf_merge_got (ibfd, gg, &got_per_bfd_arg))
4946         return FALSE;
4947     }
4948
4949   /* If we do not find any suitable primary GOT, create an empty one.  */
4950   if (got_per_bfd_arg.primary == NULL)
4951     g->next = mips_elf_create_got_info (abfd);
4952   else
4953     g->next = got_per_bfd_arg.primary;
4954   g->next->next = got_per_bfd_arg.current;
4955
4956   /* GG is now the master GOT, and G is the primary GOT.  */
4957   gg = g;
4958   g = g->next;
4959
4960   /* Map the output bfd to the primary got.  That's what we're going
4961      to use for bfds that use GOT16 or GOT_PAGE relocations that we
4962      didn't mark in check_relocs, and we want a quick way to find it.
4963      We can't just use gg->next because we're going to reverse the
4964      list.  */
4965   mips_elf_replace_bfd_got (abfd, g);
4966
4967   /* Every symbol that is referenced in a dynamic relocation must be
4968      present in the primary GOT, so arrange for them to appear after
4969      those that are actually referenced.  */
4970   gg->reloc_only_gotno = gg->global_gotno - g->global_gotno;
4971   g->global_gotno = gg->global_gotno;
4972
4973   tga.info = info;
4974   tga.value = GGA_RELOC_ONLY;
4975   htab_traverse (gg->got_entries, mips_elf_set_global_got_area, &tga);
4976   tga.value = GGA_NORMAL;
4977   htab_traverse (g->got_entries, mips_elf_set_global_got_area, &tga);
4978
4979   /* Now go through the GOTs assigning them offset ranges.
4980      [assigned_low_gotno, local_gotno[ will be set to the range of local
4981      entries in each GOT.  We can then compute the end of a GOT by
4982      adding local_gotno to global_gotno.  We reverse the list and make
4983      it circular since then we'll be able to quickly compute the
4984      beginning of a GOT, by computing the end of its predecessor.  To
4985      avoid special cases for the primary GOT, while still preserving
4986      assertions that are valid for both single- and multi-got links,
4987      we arrange for the main got struct to have the right number of
4988      global entries, but set its local_gotno such that the initial
4989      offset of the primary GOT is zero.  Remember that the primary GOT
4990      will become the last item in the circular linked list, so it
4991      points back to the master GOT.  */
4992   gg->local_gotno = -g->global_gotno;
4993   gg->global_gotno = g->global_gotno;
4994   gg->tls_gotno = 0;
4995   assign = 0;
4996   gg->next = gg;
4997
4998   do
4999     {
5000       struct mips_got_info *gn;
5001
5002       assign += htab->reserved_gotno;
5003       g->assigned_low_gotno = assign;
5004       g->local_gotno += assign;
5005       g->local_gotno += (pages < g->page_gotno ? pages : g->page_gotno);
5006       g->assigned_high_gotno = g->local_gotno - 1;
5007       assign = g->local_gotno + g->global_gotno + g->tls_gotno;
5008
5009       /* Take g out of the direct list, and push it onto the reversed
5010          list that gg points to.  g->next is guaranteed to be nonnull after
5011          this operation, as required by mips_elf_initialize_tls_index. */
5012       gn = g->next;
5013       g->next = gg->next;
5014       gg->next = g;
5015
5016       /* Set up any TLS entries.  We always place the TLS entries after
5017          all non-TLS entries.  */
5018       g->tls_assigned_gotno = g->local_gotno + g->global_gotno;
5019       tga.g = g;
5020       tga.value = MIPS_ELF_GOT_SIZE (abfd);
5021       htab_traverse (g->got_entries, mips_elf_initialize_tls_index, &tga);
5022       if (!tga.g)
5023         return FALSE;
5024       BFD_ASSERT (g->tls_assigned_gotno == assign);
5025
5026       /* Move onto the next GOT.  It will be a secondary GOT if nonull.  */
5027       g = gn;
5028
5029       /* Forbid global symbols in every non-primary GOT from having
5030          lazy-binding stubs.  */
5031       if (g)
5032         htab_traverse (g->got_entries, mips_elf_forbid_lazy_stubs, info);
5033     }
5034   while (g);
5035
5036   got->size = assign * MIPS_ELF_GOT_SIZE (abfd);
5037
5038   needed_relocs = 0;
5039   for (g = gg->next; g && g->next != gg; g = g->next)
5040     {
5041       unsigned int save_assign;
5042
5043       /* Assign offsets to global GOT entries and count how many
5044          relocations they need.  */
5045       save_assign = g->assigned_low_gotno;
5046       g->assigned_low_gotno = g->local_gotno;
5047       tga.info = info;
5048       tga.value = MIPS_ELF_GOT_SIZE (abfd);
5049       tga.g = g;
5050       htab_traverse (g->got_entries, mips_elf_set_global_gotidx, &tga);
5051       if (!tga.g)
5052         return FALSE;
5053       BFD_ASSERT (g->assigned_low_gotno == g->local_gotno + g->global_gotno);
5054       g->assigned_low_gotno = save_assign;
5055
5056       if (bfd_link_pic (info))
5057         {
5058           g->relocs += g->local_gotno - g->assigned_low_gotno;
5059           BFD_ASSERT (g->assigned_low_gotno == g->next->local_gotno
5060                       + g->next->global_gotno
5061                       + g->next->tls_gotno
5062                       + htab->reserved_gotno);
5063         }
5064       needed_relocs += g->relocs;
5065     }
5066   needed_relocs += g->relocs;
5067
5068   if (needed_relocs)
5069     mips_elf_allocate_dynamic_relocations (dynobj, info,
5070                                            needed_relocs);
5071
5072   return TRUE;
5073 }
5074
5075 \f
5076 /* Returns the first relocation of type r_type found, beginning with
5077    RELOCATION.  RELEND is one-past-the-end of the relocation table.  */
5078
5079 static const Elf_Internal_Rela *
5080 mips_elf_next_relocation (bfd *abfd ATTRIBUTE_UNUSED, unsigned int r_type,
5081                           const Elf_Internal_Rela *relocation,
5082                           const Elf_Internal_Rela *relend)
5083 {
5084   unsigned long r_symndx = ELF_R_SYM (abfd, relocation->r_info);
5085
5086   while (relocation < relend)
5087     {
5088       if (ELF_R_TYPE (abfd, relocation->r_info) == r_type
5089           && ELF_R_SYM (abfd, relocation->r_info) == r_symndx)
5090         return relocation;
5091
5092       ++relocation;
5093     }
5094
5095   /* We didn't find it.  */
5096   return NULL;
5097 }
5098
5099 /* Return whether an input relocation is against a local symbol.  */
5100
5101 static bfd_boolean
5102 mips_elf_local_relocation_p (bfd *input_bfd,
5103                              const Elf_Internal_Rela *relocation,
5104                              asection **local_sections)
5105 {
5106   unsigned long r_symndx;
5107   Elf_Internal_Shdr *symtab_hdr;
5108   size_t extsymoff;
5109
5110   r_symndx = ELF_R_SYM (input_bfd, relocation->r_info);
5111   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
5112   extsymoff = (elf_bad_symtab (input_bfd)) ? 0 : symtab_hdr->sh_info;
5113
5114   if (r_symndx < extsymoff)
5115     return TRUE;
5116   if (elf_bad_symtab (input_bfd) && local_sections[r_symndx] != NULL)
5117     return TRUE;
5118
5119   return FALSE;
5120 }
5121 \f
5122 /* Sign-extend VALUE, which has the indicated number of BITS.  */
5123
5124 bfd_vma
5125 _bfd_mips_elf_sign_extend (bfd_vma value, int bits)
5126 {
5127   if (value & ((bfd_vma) 1 << (bits - 1)))
5128     /* VALUE is negative.  */
5129     value |= ((bfd_vma) - 1) << bits;
5130
5131   return value;
5132 }
5133
5134 /* Return non-zero if the indicated VALUE has overflowed the maximum
5135    range expressible by a signed number with the indicated number of
5136    BITS.  */
5137
5138 static bfd_boolean
5139 mips_elf_overflow_p (bfd_vma value, int bits)
5140 {
5141   bfd_signed_vma svalue = (bfd_signed_vma) value;
5142
5143   if (svalue > (1 << (bits - 1)) - 1)
5144     /* The value is too big.  */
5145     return TRUE;
5146   else if (svalue < -(1 << (bits - 1)))
5147     /* The value is too small.  */
5148     return TRUE;
5149
5150   /* All is well.  */
5151   return FALSE;
5152 }
5153
5154 /* Calculate the %high function.  */
5155
5156 static bfd_vma
5157 mips_elf_high (bfd_vma value)
5158 {
5159   return ((value + (bfd_vma) 0x8000) >> 16) & 0xffff;
5160 }
5161
5162 /* Calculate the %higher function.  */
5163
5164 static bfd_vma
5165 mips_elf_higher (bfd_vma value ATTRIBUTE_UNUSED)
5166 {
5167 #ifdef BFD64
5168   return ((value + (bfd_vma) 0x80008000) >> 32) & 0xffff;
5169 #else
5170   abort ();
5171   return MINUS_ONE;
5172 #endif
5173 }
5174
5175 /* Calculate the %highest function.  */
5176
5177 static bfd_vma
5178 mips_elf_highest (bfd_vma value ATTRIBUTE_UNUSED)
5179 {
5180 #ifdef BFD64
5181   return ((value + (((bfd_vma) 0x8000 << 32) | 0x80008000)) >> 48) & 0xffff;
5182 #else
5183   abort ();
5184   return MINUS_ONE;
5185 #endif
5186 }
5187 \f
5188 /* Create the .compact_rel section.  */
5189
5190 static bfd_boolean
5191 mips_elf_create_compact_rel_section
5192   (bfd *abfd, struct bfd_link_info *info ATTRIBUTE_UNUSED)
5193 {
5194   flagword flags;
5195   register asection *s;
5196
5197   if (bfd_get_linker_section (abfd, ".compact_rel") == NULL)
5198     {
5199       flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED
5200                | SEC_READONLY);
5201
5202       s = bfd_make_section_anyway_with_flags (abfd, ".compact_rel", flags);
5203       if (s == NULL
5204           || ! bfd_set_section_alignment (abfd, s,
5205                                           MIPS_ELF_LOG_FILE_ALIGN (abfd)))
5206         return FALSE;
5207
5208       s->size = sizeof (Elf32_External_compact_rel);
5209     }
5210
5211   return TRUE;
5212 }
5213
5214 /* Create the .got section to hold the global offset table.  */
5215
5216 static bfd_boolean
5217 mips_elf_create_got_section (bfd *abfd, struct bfd_link_info *info)
5218 {
5219   flagword flags;
5220   register asection *s;
5221   struct elf_link_hash_entry *h;
5222   struct bfd_link_hash_entry *bh;
5223   struct mips_elf_link_hash_table *htab;
5224
5225   htab = mips_elf_hash_table (info);
5226   BFD_ASSERT (htab != NULL);
5227
5228   /* This function may be called more than once.  */
5229   if (htab->root.sgot)
5230     return TRUE;
5231
5232   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
5233            | SEC_LINKER_CREATED);
5234
5235   /* We have to use an alignment of 2**4 here because this is hardcoded
5236      in the function stub generation and in the linker script.  */
5237   s = bfd_make_section_anyway_with_flags (abfd, ".got", flags);
5238   if (s == NULL
5239       || ! bfd_set_section_alignment (abfd, s, 4))
5240     return FALSE;
5241   htab->root.sgot = s;
5242
5243   /* Define the symbol _GLOBAL_OFFSET_TABLE_.  We don't do this in the
5244      linker script because we don't want to define the symbol if we
5245      are not creating a global offset table.  */
5246   bh = NULL;
5247   if (! (_bfd_generic_link_add_one_symbol
5248          (info, abfd, "_GLOBAL_OFFSET_TABLE_", BSF_GLOBAL, s,
5249           0, NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
5250     return FALSE;
5251
5252   h = (struct elf_link_hash_entry *) bh;
5253   h->non_elf = 0;
5254   h->def_regular = 1;
5255   h->type = STT_OBJECT;
5256   h->other = (h->other & ~ELF_ST_VISIBILITY (-1)) | STV_HIDDEN;
5257   elf_hash_table (info)->hgot = h;
5258
5259   if (bfd_link_pic (info)
5260       && ! bfd_elf_link_record_dynamic_symbol (info, h))
5261     return FALSE;
5262
5263   htab->got_info = mips_elf_create_got_info (abfd);
5264   mips_elf_section_data (s)->elf.this_hdr.sh_flags
5265     |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL;
5266
5267   /* We also need a .got.plt section when generating PLTs.  */
5268   s = bfd_make_section_anyway_with_flags (abfd, ".got.plt",
5269                                           SEC_ALLOC | SEC_LOAD
5270                                           | SEC_HAS_CONTENTS
5271                                           | SEC_IN_MEMORY
5272                                           | SEC_LINKER_CREATED);
5273   if (s == NULL)
5274     return FALSE;
5275   htab->root.sgotplt = s;
5276
5277   return TRUE;
5278 }
5279 \f
5280 /* Return true if H refers to the special VxWorks __GOTT_BASE__ or
5281    __GOTT_INDEX__ symbols.  These symbols are only special for
5282    shared objects; they are not used in executables.  */
5283
5284 static bfd_boolean
5285 is_gott_symbol (struct bfd_link_info *info, struct elf_link_hash_entry *h)
5286 {
5287   return (mips_elf_hash_table (info)->is_vxworks
5288           && bfd_link_pic (info)
5289           && (strcmp (h->root.root.string, "__GOTT_BASE__") == 0
5290               || strcmp (h->root.root.string, "__GOTT_INDEX__") == 0));
5291 }
5292
5293 /* Return TRUE if a relocation of type R_TYPE from INPUT_BFD might
5294    require an la25 stub.  See also mips_elf_local_pic_function_p,
5295    which determines whether the destination function ever requires a
5296    stub.  */
5297
5298 static bfd_boolean
5299 mips_elf_relocation_needs_la25_stub (bfd *input_bfd, int r_type,
5300                                      bfd_boolean target_is_16_bit_code_p)
5301 {
5302   /* We specifically ignore branches and jumps from EF_PIC objects,
5303      where the onus is on the compiler or programmer to perform any
5304      necessary initialization of $25.  Sometimes such initialization
5305      is unnecessary; for example, -mno-shared functions do not use
5306      the incoming value of $25, and may therefore be called directly.  */
5307   if (PIC_OBJECT_P (input_bfd))
5308     return FALSE;
5309
5310   switch (r_type)
5311     {
5312     case R_MIPS_26:
5313     case R_MIPS_PC16:
5314     case R_MIPS_PC21_S2:
5315     case R_MIPS_PC26_S2:
5316     case R_MICROMIPS_26_S1:
5317     case R_MICROMIPS_PC7_S1:
5318     case R_MICROMIPS_PC10_S1:
5319     case R_MICROMIPS_PC16_S1:
5320     case R_MICROMIPS_PC23_S2:
5321       return TRUE;
5322
5323     case R_MIPS16_26:
5324       return !target_is_16_bit_code_p;
5325
5326     default:
5327       return FALSE;
5328     }
5329 }
5330 \f
5331 /* Obtain the field relocated by RELOCATION.  */
5332
5333 static bfd_vma
5334 mips_elf_obtain_contents (reloc_howto_type *howto,
5335                           const Elf_Internal_Rela *relocation,
5336                           bfd *input_bfd, bfd_byte *contents)
5337 {
5338   bfd_vma x = 0;
5339   bfd_byte *location = contents + relocation->r_offset;
5340   unsigned int size = bfd_get_reloc_size (howto);
5341
5342   /* Obtain the bytes.  */
5343   if (size != 0)
5344     x = bfd_get (8 * size, input_bfd, location);
5345
5346   return x;
5347 }
5348
5349 /* Store the field relocated by RELOCATION.  */
5350
5351 static void
5352 mips_elf_store_contents (reloc_howto_type *howto,
5353                          const Elf_Internal_Rela *relocation,
5354                          bfd *input_bfd, bfd_byte *contents, bfd_vma x)
5355 {
5356   bfd_byte *location = contents + relocation->r_offset;
5357   unsigned int size = bfd_get_reloc_size (howto);
5358
5359   /* Put the value into the output.  */
5360   if (size != 0)
5361     bfd_put (8 * size, input_bfd, x, location);
5362 }
5363
5364 /* Try to patch a load from GOT instruction in CONTENTS pointed to by
5365    RELOCATION described by HOWTO, with a move of 0 to the load target
5366    register, returning TRUE if that is successful and FALSE otherwise.
5367    If DOIT is FALSE, then only determine it patching is possible and
5368    return status without actually changing CONTENTS.
5369 */
5370
5371 static bfd_boolean
5372 mips_elf_nullify_got_load (bfd *input_bfd, bfd_byte *contents,
5373                            const Elf_Internal_Rela *relocation,
5374                            reloc_howto_type *howto, bfd_boolean doit)
5375 {
5376   int r_type = ELF_R_TYPE (input_bfd, relocation->r_info);
5377   bfd_byte *location = contents + relocation->r_offset;
5378   bfd_boolean nullified = TRUE;
5379   bfd_vma x;
5380
5381   _bfd_mips_elf_reloc_unshuffle (input_bfd, r_type, FALSE, location);
5382
5383   /* Obtain the current value.  */
5384   x = mips_elf_obtain_contents (howto, relocation, input_bfd, contents);
5385
5386   /* Note that in the unshuffled MIPS16 encoding RX is at bits [21:19]
5387      while RY is at bits [18:16] of the combined 32-bit instruction word.  */
5388   if (mips16_reloc_p (r_type)
5389       && (((x >> 22) & 0x3ff) == 0x3d3                          /* LW */
5390           || ((x >> 22) & 0x3ff) == 0x3c7))                     /* LD */
5391     x = (0x3cd << 22) | (x & (7 << 16)) << 3;                   /* LI */
5392   else if (micromips_reloc_p (r_type)
5393            && ((x >> 26) & 0x37) == 0x37)                       /* LW/LD */
5394     x = (0xc << 26) | (x & (0x1f << 21));                       /* ADDIU */
5395   else if (((x >> 26) & 0x3f) == 0x23                           /* LW */
5396            || ((x >> 26) & 0x3f) == 0x37)                       /* LD */
5397     x = (0x9 << 26) | (x & (0x1f << 16));                       /* ADDIU */
5398   else
5399     nullified = FALSE;
5400
5401   /* Put the value into the output.  */
5402   if (doit && nullified)
5403     mips_elf_store_contents (howto, relocation, input_bfd, contents, x);
5404
5405   _bfd_mips_elf_reloc_shuffle (input_bfd, r_type, FALSE, location);
5406
5407   return nullified;
5408 }
5409
5410 /* Calculate the value produced by the RELOCATION (which comes from
5411    the INPUT_BFD).  The ADDEND is the addend to use for this
5412    RELOCATION; RELOCATION->R_ADDEND is ignored.
5413
5414    The result of the relocation calculation is stored in VALUEP.
5415    On exit, set *CROSS_MODE_JUMP_P to true if the relocation field
5416    is a MIPS16 or microMIPS jump to standard MIPS code, or vice versa.
5417
5418    This function returns bfd_reloc_continue if the caller need take no
5419    further action regarding this relocation, bfd_reloc_notsupported if
5420    something goes dramatically wrong, bfd_reloc_overflow if an
5421    overflow occurs, and bfd_reloc_ok to indicate success.  */
5422
5423 static bfd_reloc_status_type
5424 mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
5425                                asection *input_section, bfd_byte *contents,
5426                                struct bfd_link_info *info,
5427                                const Elf_Internal_Rela *relocation,
5428                                bfd_vma addend, reloc_howto_type *howto,
5429                                Elf_Internal_Sym *local_syms,
5430                                asection **local_sections, bfd_vma *valuep,
5431                                const char **namep,
5432                                bfd_boolean *cross_mode_jump_p,
5433                                bfd_boolean save_addend)
5434 {
5435   /* The eventual value we will return.  */
5436   bfd_vma value;
5437   /* The address of the symbol against which the relocation is
5438      occurring.  */
5439   bfd_vma symbol = 0;
5440   /* The final GP value to be used for the relocatable, executable, or
5441      shared object file being produced.  */
5442   bfd_vma gp;
5443   /* The place (section offset or address) of the storage unit being
5444      relocated.  */
5445   bfd_vma p;
5446   /* The value of GP used to create the relocatable object.  */
5447   bfd_vma gp0;
5448   /* The offset into the global offset table at which the address of
5449      the relocation entry symbol, adjusted by the addend, resides
5450      during execution.  */
5451   bfd_vma g = MINUS_ONE;
5452   /* The section in which the symbol referenced by the relocation is
5453      located.  */
5454   asection *sec = NULL;
5455   struct mips_elf_link_hash_entry *h = NULL;
5456   /* TRUE if the symbol referred to by this relocation is a local
5457      symbol.  */
5458   bfd_boolean local_p, was_local_p;
5459   /* TRUE if the symbol referred to by this relocation is a section
5460      symbol.  */
5461   bfd_boolean section_p = FALSE;
5462   /* TRUE if the symbol referred to by this relocation is "_gp_disp".  */
5463   bfd_boolean gp_disp_p = FALSE;
5464   /* TRUE if the symbol referred to by this relocation is
5465      "__gnu_local_gp".  */
5466   bfd_boolean gnu_local_gp_p = FALSE;
5467   Elf_Internal_Shdr *symtab_hdr;
5468   size_t extsymoff;
5469   unsigned long r_symndx;
5470   int r_type;
5471   /* TRUE if overflow occurred during the calculation of the
5472      relocation value.  */
5473   bfd_boolean overflowed_p;
5474   /* TRUE if this relocation refers to a MIPS16 function.  */
5475   bfd_boolean target_is_16_bit_code_p = FALSE;
5476   bfd_boolean target_is_micromips_code_p = FALSE;
5477   struct mips_elf_link_hash_table *htab;
5478   bfd *dynobj;
5479   bfd_boolean resolved_to_zero;
5480
5481   dynobj = elf_hash_table (info)->dynobj;
5482   htab = mips_elf_hash_table (info);
5483   BFD_ASSERT (htab != NULL);
5484
5485   /* Parse the relocation.  */
5486   r_symndx = ELF_R_SYM (input_bfd, relocation->r_info);
5487   r_type = ELF_R_TYPE (input_bfd, relocation->r_info);
5488   p = (input_section->output_section->vma
5489        + input_section->output_offset
5490        + relocation->r_offset);
5491
5492   /* Assume that there will be no overflow.  */
5493   overflowed_p = FALSE;
5494
5495   /* Figure out whether or not the symbol is local, and get the offset
5496      used in the array of hash table entries.  */
5497   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
5498   local_p = mips_elf_local_relocation_p (input_bfd, relocation,
5499                                          local_sections);
5500   was_local_p = local_p;
5501   if (! elf_bad_symtab (input_bfd))
5502     extsymoff = symtab_hdr->sh_info;
5503   else
5504     {
5505       /* The symbol table does not follow the rule that local symbols
5506          must come before globals.  */
5507       extsymoff = 0;
5508     }
5509
5510   /* Figure out the value of the symbol.  */
5511   if (local_p)
5512     {
5513       bfd_boolean micromips_p = MICROMIPS_P (abfd);
5514       Elf_Internal_Sym *sym;
5515
5516       sym = local_syms + r_symndx;
5517       sec = local_sections[r_symndx];
5518
5519       section_p = ELF_ST_TYPE (sym->st_info) == STT_SECTION;
5520
5521       symbol = sec->output_section->vma + sec->output_offset;
5522       if (!section_p || (sec->flags & SEC_MERGE))
5523         symbol += sym->st_value;
5524       if ((sec->flags & SEC_MERGE) && section_p)
5525         {
5526           addend = _bfd_elf_rel_local_sym (abfd, sym, &sec, addend);
5527           addend -= symbol;
5528           addend += sec->output_section->vma + sec->output_offset;
5529         }
5530
5531       /* MIPS16/microMIPS text labels should be treated as odd.  */
5532       if (ELF_ST_IS_COMPRESSED (sym->st_other))
5533         ++symbol;
5534
5535       /* Record the name of this symbol, for our caller.  */
5536       *namep = bfd_elf_string_from_elf_section (input_bfd,
5537                                                 symtab_hdr->sh_link,
5538                                                 sym->st_name);
5539       if (*namep == NULL || **namep == '\0')
5540         *namep = bfd_section_name (input_bfd, sec);
5541
5542       /* For relocations against a section symbol and ones against no
5543          symbol (absolute relocations) infer the ISA mode from the addend.  */
5544       if (section_p || r_symndx == STN_UNDEF)
5545         {
5546           target_is_16_bit_code_p = (addend & 1) && !micromips_p;
5547           target_is_micromips_code_p = (addend & 1) && micromips_p;
5548         }
5549       /* For relocations against an absolute symbol infer the ISA mode
5550          from the value of the symbol plus addend.  */
5551       else if (bfd_is_abs_section (sec))
5552         {
5553           target_is_16_bit_code_p = ((symbol + addend) & 1) && !micromips_p;
5554           target_is_micromips_code_p = ((symbol + addend) & 1) && micromips_p;
5555         }
5556       /* Otherwise just use the regular symbol annotation available.  */
5557       else
5558         {
5559           target_is_16_bit_code_p = ELF_ST_IS_MIPS16 (sym->st_other);
5560           target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (sym->st_other);
5561         }
5562     }
5563   else
5564     {
5565       /* ??? Could we use RELOC_FOR_GLOBAL_SYMBOL here ?  */
5566
5567       /* For global symbols we look up the symbol in the hash-table.  */
5568       h = ((struct mips_elf_link_hash_entry *)
5569            elf_sym_hashes (input_bfd) [r_symndx - extsymoff]);
5570       /* Find the real hash-table entry for this symbol.  */
5571       while (h->root.root.type == bfd_link_hash_indirect
5572              || h->root.root.type == bfd_link_hash_warning)
5573         h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
5574
5575       /* Record the name of this symbol, for our caller.  */
5576       *namep = h->root.root.root.string;
5577
5578       /* See if this is the special _gp_disp symbol.  Note that such a
5579          symbol must always be a global symbol.  */
5580       if (strcmp (*namep, "_gp_disp") == 0
5581           && ! NEWABI_P (input_bfd))
5582         {
5583           /* Relocations against _gp_disp are permitted only with
5584              R_MIPS_HI16 and R_MIPS_LO16 relocations.  */
5585           if (!hi16_reloc_p (r_type) && !lo16_reloc_p (r_type))
5586             return bfd_reloc_notsupported;
5587
5588           gp_disp_p = TRUE;
5589         }
5590       /* See if this is the special _gp symbol.  Note that such a
5591          symbol must always be a global symbol.  */
5592       else if (strcmp (*namep, "__gnu_local_gp") == 0)
5593         gnu_local_gp_p = TRUE;
5594
5595
5596       /* If this symbol is defined, calculate its address.  Note that
5597          _gp_disp is a magic symbol, always implicitly defined by the
5598          linker, so it's inappropriate to check to see whether or not
5599          its defined.  */
5600       else if ((h->root.root.type == bfd_link_hash_defined
5601                 || h->root.root.type == bfd_link_hash_defweak)
5602                && h->root.root.u.def.section)
5603         {
5604           sec = h->root.root.u.def.section;
5605           if (sec->output_section)
5606             symbol = (h->root.root.u.def.value
5607                       + sec->output_section->vma
5608                       + sec->output_offset);
5609           else
5610             symbol = h->root.root.u.def.value;
5611         }
5612       else if (h->root.root.type == bfd_link_hash_undefweak)
5613         /* We allow relocations against undefined weak symbols, giving
5614            it the value zero, so that you can undefined weak functions
5615            and check to see if they exist by looking at their
5616            addresses.  */
5617         symbol = 0;
5618       else if (info->unresolved_syms_in_objects == RM_IGNORE
5619                && ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT)
5620         symbol = 0;
5621       else if (strcmp (*namep, SGI_COMPAT (input_bfd)
5622                        ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING") == 0)
5623         {
5624           /* If this is a dynamic link, we should have created a
5625              _DYNAMIC_LINK symbol or _DYNAMIC_LINKING(for normal mips) symbol
5626              in _bfd_mips_elf_create_dynamic_sections.
5627              Otherwise, we should define the symbol with a value of 0.
5628              FIXME: It should probably get into the symbol table
5629              somehow as well.  */
5630           BFD_ASSERT (! bfd_link_pic (info));
5631           BFD_ASSERT (bfd_get_section_by_name (abfd, ".dynamic") == NULL);
5632           symbol = 0;
5633         }
5634       else if (ELF_MIPS_IS_OPTIONAL (h->root.other))
5635         {
5636           /* This is an optional symbol - an Irix specific extension to the
5637              ELF spec.  Ignore it for now.
5638              XXX - FIXME - there is more to the spec for OPTIONAL symbols
5639              than simply ignoring them, but we do not handle this for now.
5640              For information see the "64-bit ELF Object File Specification"
5641              which is available from here:
5642              http://techpubs.sgi.com/library/manuals/4000/007-4658-001/pdf/007-4658-001.pdf  */
5643           symbol = 0;
5644         }
5645       else
5646         {
5647           bfd_boolean reject_undefined
5648             = (info->unresolved_syms_in_objects == RM_GENERATE_ERROR
5649                || ELF_ST_VISIBILITY (h->root.other) != STV_DEFAULT);
5650
5651           (*info->callbacks->undefined_symbol)
5652             (info, h->root.root.root.string, input_bfd,
5653              input_section, relocation->r_offset, reject_undefined);
5654
5655           if (reject_undefined)
5656             return bfd_reloc_undefined;
5657
5658           symbol = 0;
5659         }
5660
5661       target_is_16_bit_code_p = ELF_ST_IS_MIPS16 (h->root.other);
5662       target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (h->root.other);
5663     }
5664
5665   /* If this is a reference to a 16-bit function with a stub, we need
5666      to redirect the relocation to the stub unless:
5667
5668      (a) the relocation is for a MIPS16 JAL;
5669
5670      (b) the relocation is for a MIPS16 PIC call, and there are no
5671          non-MIPS16 uses of the GOT slot; or
5672
5673      (c) the section allows direct references to MIPS16 functions.  */
5674   if (r_type != R_MIPS16_26
5675       && !bfd_link_relocatable (info)
5676       && ((h != NULL
5677            && h->fn_stub != NULL
5678            && (r_type != R_MIPS16_CALL16 || h->need_fn_stub))
5679           || (local_p
5680               && mips_elf_tdata (input_bfd)->local_stubs != NULL
5681               && mips_elf_tdata (input_bfd)->local_stubs[r_symndx] != NULL))
5682       && !section_allows_mips16_refs_p (input_section))
5683     {
5684       /* This is a 32- or 64-bit call to a 16-bit function.  We should
5685          have already noticed that we were going to need the
5686          stub.  */
5687       if (local_p)
5688         {
5689           sec = mips_elf_tdata (input_bfd)->local_stubs[r_symndx];
5690           value = 0;
5691         }
5692       else
5693         {
5694           BFD_ASSERT (h->need_fn_stub);
5695           if (h->la25_stub)
5696             {
5697               /* If a LA25 header for the stub itself exists, point to the
5698                  prepended LUI/ADDIU sequence.  */
5699               sec = h->la25_stub->stub_section;
5700               value = h->la25_stub->offset;
5701             }
5702           else
5703             {
5704               sec = h->fn_stub;
5705               value = 0;
5706             }
5707         }
5708
5709       symbol = sec->output_section->vma + sec->output_offset + value;
5710       /* The target is 16-bit, but the stub isn't.  */
5711       target_is_16_bit_code_p = FALSE;
5712     }
5713   /* If this is a MIPS16 call with a stub, that is made through the PLT or
5714      to a standard MIPS function, we need to redirect the call to the stub.
5715      Note that we specifically exclude R_MIPS16_CALL16 from this behavior;
5716      indirect calls should use an indirect stub instead.  */
5717   else if (r_type == R_MIPS16_26 && !bfd_link_relocatable (info)
5718            && ((h != NULL && (h->call_stub != NULL || h->call_fp_stub != NULL))
5719                || (local_p
5720                    && mips_elf_tdata (input_bfd)->local_call_stubs != NULL
5721                    && mips_elf_tdata (input_bfd)->local_call_stubs[r_symndx] != NULL))
5722            && ((h != NULL && h->use_plt_entry) || !target_is_16_bit_code_p))
5723     {
5724       if (local_p)
5725         sec = mips_elf_tdata (input_bfd)->local_call_stubs[r_symndx];
5726       else
5727         {
5728           /* If both call_stub and call_fp_stub are defined, we can figure
5729              out which one to use by checking which one appears in the input
5730              file.  */
5731           if (h->call_stub != NULL && h->call_fp_stub != NULL)
5732             {
5733               asection *o;
5734
5735               sec = NULL;
5736               for (o = input_bfd->sections; o != NULL; o = o->next)
5737                 {
5738                   if (CALL_FP_STUB_P (bfd_get_section_name (input_bfd, o)))
5739                     {
5740                       sec = h->call_fp_stub;
5741                       break;
5742                     }
5743                 }
5744               if (sec == NULL)
5745                 sec = h->call_stub;
5746             }
5747           else if (h->call_stub != NULL)
5748             sec = h->call_stub;
5749           else
5750             sec = h->call_fp_stub;
5751         }
5752
5753       BFD_ASSERT (sec->size > 0);
5754       symbol = sec->output_section->vma + sec->output_offset;
5755     }
5756   /* If this is a direct call to a PIC function, redirect to the
5757      non-PIC stub.  */
5758   else if (h != NULL && h->la25_stub
5759            && mips_elf_relocation_needs_la25_stub (input_bfd, r_type,
5760                                                    target_is_16_bit_code_p))
5761     {
5762         symbol = (h->la25_stub->stub_section->output_section->vma
5763                   + h->la25_stub->stub_section->output_offset
5764                   + h->la25_stub->offset);
5765         if (ELF_ST_IS_MICROMIPS (h->root.other))
5766           symbol |= 1;
5767     }
5768   /* For direct MIPS16 and microMIPS calls make sure the compressed PLT
5769      entry is used if a standard PLT entry has also been made.  In this
5770      case the symbol will have been set by mips_elf_set_plt_sym_value
5771      to point to the standard PLT entry, so redirect to the compressed
5772      one.  */
5773   else if ((mips16_branch_reloc_p (r_type)
5774             || micromips_branch_reloc_p (r_type))
5775            && !bfd_link_relocatable (info)
5776            && h != NULL
5777            && h->use_plt_entry
5778            && h->root.plt.plist->comp_offset != MINUS_ONE
5779            && h->root.plt.plist->mips_offset != MINUS_ONE)
5780     {
5781       bfd_boolean micromips_p = MICROMIPS_P (abfd);
5782
5783       sec = htab->root.splt;
5784       symbol = (sec->output_section->vma
5785                 + sec->output_offset
5786                 + htab->plt_header_size
5787                 + htab->plt_mips_offset
5788                 + h->root.plt.plist->comp_offset
5789                 + 1);
5790
5791       target_is_16_bit_code_p = !micromips_p;
5792       target_is_micromips_code_p = micromips_p;
5793     }
5794
5795   /* Make sure MIPS16 and microMIPS are not used together.  */
5796   if ((mips16_branch_reloc_p (r_type) && target_is_micromips_code_p)
5797       || (micromips_branch_reloc_p (r_type) && target_is_16_bit_code_p))
5798    {
5799       _bfd_error_handler
5800         (_("MIPS16 and microMIPS functions cannot call each other"));
5801       return bfd_reloc_notsupported;
5802    }
5803
5804   /* Calls from 16-bit code to 32-bit code and vice versa require the
5805      mode change.  However, we can ignore calls to undefined weak symbols,
5806      which should never be executed at runtime.  This exception is important
5807      because the assembly writer may have "known" that any definition of the
5808      symbol would be 16-bit code, and that direct jumps were therefore
5809      acceptable.  */
5810   *cross_mode_jump_p = (!bfd_link_relocatable (info)
5811                         && !(h && h->root.root.type == bfd_link_hash_undefweak)
5812                         && ((mips16_branch_reloc_p (r_type)
5813                              && !target_is_16_bit_code_p)
5814                             || (micromips_branch_reloc_p (r_type)
5815                                 && !target_is_micromips_code_p)
5816                             || ((branch_reloc_p (r_type)
5817                                  || r_type == R_MIPS_JALR)
5818                                 && (target_is_16_bit_code_p
5819                                     || target_is_micromips_code_p))));
5820
5821   resolved_to_zero = (h != NULL
5822                       && UNDEFWEAK_NO_DYNAMIC_RELOC (info, &h->root));
5823
5824   switch (r_type)
5825     {
5826     case R_MIPS16_CALL16:
5827     case R_MIPS16_GOT16:
5828     case R_MIPS_CALL16:
5829     case R_MIPS_GOT16:
5830     case R_MIPS_GOT_PAGE:
5831     case R_MIPS_GOT_DISP:
5832     case R_MIPS_GOT_LO16:
5833     case R_MIPS_CALL_LO16:
5834     case R_MICROMIPS_CALL16:
5835     case R_MICROMIPS_GOT16:
5836     case R_MICROMIPS_GOT_PAGE:
5837     case R_MICROMIPS_GOT_DISP:
5838     case R_MICROMIPS_GOT_LO16:
5839     case R_MICROMIPS_CALL_LO16:
5840       if (resolved_to_zero
5841           && !bfd_link_relocatable (info)
5842           && mips_elf_nullify_got_load (input_bfd, contents,
5843                                         relocation, howto, TRUE))
5844         return bfd_reloc_continue;
5845
5846       /* Fall through.  */
5847     case R_MIPS_GOT_HI16:
5848     case R_MIPS_CALL_HI16:
5849     case R_MICROMIPS_GOT_HI16:
5850     case R_MICROMIPS_CALL_HI16:
5851       if (resolved_to_zero
5852           && htab->use_absolute_zero
5853           && bfd_link_pic (info))
5854         {
5855           /* Redirect to the special `__gnu_absolute_zero' symbol.  */
5856           h = mips_elf_link_hash_lookup (htab, "__gnu_absolute_zero",
5857                                          FALSE, FALSE, FALSE);
5858           BFD_ASSERT (h != NULL);
5859         }
5860       break;
5861     }
5862
5863   local_p = (h == NULL || mips_use_local_got_p (info, h));
5864
5865   gp0 = _bfd_get_gp_value (input_bfd);
5866   gp = _bfd_get_gp_value (abfd);
5867   if (htab->got_info)
5868     gp += mips_elf_adjust_gp (abfd, htab->got_info, input_bfd);
5869
5870   if (gnu_local_gp_p)
5871     symbol = gp;
5872
5873   /* Global R_MIPS_GOT_PAGE/R_MICROMIPS_GOT_PAGE relocations are equivalent
5874      to R_MIPS_GOT_DISP/R_MICROMIPS_GOT_DISP.  The addend is applied by the
5875      corresponding R_MIPS_GOT_OFST/R_MICROMIPS_GOT_OFST.  */
5876   if (got_page_reloc_p (r_type) && !local_p)
5877     {
5878       r_type = (micromips_reloc_p (r_type)
5879                 ? R_MICROMIPS_GOT_DISP : R_MIPS_GOT_DISP);
5880       addend = 0;
5881     }
5882
5883   /* If we haven't already determined the GOT offset, and we're going
5884      to need it, get it now.  */
5885   switch (r_type)
5886     {
5887     case R_MIPS16_CALL16:
5888     case R_MIPS16_GOT16:
5889     case R_MIPS_CALL16:
5890     case R_MIPS_GOT16:
5891     case R_MIPS_GOT_DISP:
5892     case R_MIPS_GOT_HI16:
5893     case R_MIPS_CALL_HI16:
5894     case R_MIPS_GOT_LO16:
5895     case R_MIPS_CALL_LO16:
5896     case R_MICROMIPS_CALL16:
5897     case R_MICROMIPS_GOT16:
5898     case R_MICROMIPS_GOT_DISP:
5899     case R_MICROMIPS_GOT_HI16:
5900     case R_MICROMIPS_CALL_HI16:
5901     case R_MICROMIPS_GOT_LO16:
5902     case R_MICROMIPS_CALL_LO16:
5903     case R_MIPS_TLS_GD:
5904     case R_MIPS_TLS_GOTTPREL:
5905     case R_MIPS_TLS_LDM:
5906     case R_MIPS16_TLS_GD:
5907     case R_MIPS16_TLS_GOTTPREL:
5908     case R_MIPS16_TLS_LDM:
5909     case R_MICROMIPS_TLS_GD:
5910     case R_MICROMIPS_TLS_GOTTPREL:
5911     case R_MICROMIPS_TLS_LDM:
5912       /* Find the index into the GOT where this value is located.  */
5913       if (tls_ldm_reloc_p (r_type))
5914         {
5915           g = mips_elf_local_got_index (abfd, input_bfd, info,
5916                                         0, 0, NULL, r_type);
5917           if (g == MINUS_ONE)
5918             return bfd_reloc_outofrange;
5919         }
5920       else if (!local_p)
5921         {
5922           /* On VxWorks, CALL relocations should refer to the .got.plt
5923              entry, which is initialized to point at the PLT stub.  */
5924           if (htab->is_vxworks
5925               && (call_hi16_reloc_p (r_type)
5926                   || call_lo16_reloc_p (r_type)
5927                   || call16_reloc_p (r_type)))
5928             {
5929               BFD_ASSERT (addend == 0);
5930               BFD_ASSERT (h->root.needs_plt);
5931               g = mips_elf_gotplt_index (info, &h->root);
5932             }
5933           else
5934             {
5935               BFD_ASSERT (addend == 0);
5936               g = mips_elf_global_got_index (abfd, info, input_bfd,
5937                                              &h->root, r_type);
5938               if (!TLS_RELOC_P (r_type)
5939                   && !elf_hash_table (info)->dynamic_sections_created)
5940                 /* This is a static link.  We must initialize the GOT entry.  */
5941                 MIPS_ELF_PUT_WORD (dynobj, symbol, htab->root.sgot->contents + g);
5942             }
5943         }
5944       else if (!htab->is_vxworks
5945                && (call16_reloc_p (r_type) || got16_reloc_p (r_type)))
5946         /* The calculation below does not involve "g".  */
5947         break;
5948       else
5949         {
5950           g = mips_elf_local_got_index (abfd, input_bfd, info,
5951                                         symbol + addend, r_symndx, h, r_type);
5952           if (g == MINUS_ONE)
5953             return bfd_reloc_outofrange;
5954         }
5955
5956       /* Convert GOT indices to actual offsets.  */
5957       g = mips_elf_got_offset_from_index (info, abfd, input_bfd, g);
5958       break;
5959     }
5960
5961   /* Relocations against the VxWorks __GOTT_BASE__ and __GOTT_INDEX__
5962      symbols are resolved by the loader.  Add them to .rela.dyn.  */
5963   if (h != NULL && is_gott_symbol (info, &h->root))
5964     {
5965       Elf_Internal_Rela outrel;
5966       bfd_byte *loc;
5967       asection *s;
5968
5969       s = mips_elf_rel_dyn_section (info, FALSE);
5970       loc = s->contents + s->reloc_count++ * sizeof (Elf32_External_Rela);
5971
5972       outrel.r_offset = (input_section->output_section->vma
5973                          + input_section->output_offset
5974                          + relocation->r_offset);
5975       outrel.r_info = ELF32_R_INFO (h->root.dynindx, r_type);
5976       outrel.r_addend = addend;
5977       bfd_elf32_swap_reloca_out (abfd, &outrel, loc);
5978
5979       /* If we've written this relocation for a readonly section,
5980          we need to set DF_TEXTREL again, so that we do not delete the
5981          DT_TEXTREL tag.  */
5982       if (MIPS_ELF_READONLY_SECTION (input_section))
5983         info->flags |= DF_TEXTREL;
5984
5985       *valuep = 0;
5986       return bfd_reloc_ok;
5987     }
5988
5989   /* Figure out what kind of relocation is being performed.  */
5990   switch (r_type)
5991     {
5992     case R_MIPS_NONE:
5993       return bfd_reloc_continue;
5994
5995     case R_MIPS_16:
5996       if (howto->partial_inplace)
5997         addend = _bfd_mips_elf_sign_extend (addend, 16);
5998       value = symbol + addend;
5999       overflowed_p = mips_elf_overflow_p (value, 16);
6000       break;
6001
6002     case R_MIPS_32:
6003     case R_MIPS_REL32:
6004     case R_MIPS_64:
6005       if ((bfd_link_pic (info)
6006            || (htab->root.dynamic_sections_created
6007                && h != NULL
6008                && h->root.def_dynamic
6009                && !h->root.def_regular
6010                && !h->has_static_relocs))
6011           && r_symndx != STN_UNDEF
6012           && (h == NULL
6013               || h->root.root.type != bfd_link_hash_undefweak
6014               || (ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT
6015                   && !resolved_to_zero))
6016           && (input_section->flags & SEC_ALLOC) != 0)
6017         {
6018           /* If we're creating a shared library, then we can't know
6019              where the symbol will end up.  So, we create a relocation
6020              record in the output, and leave the job up to the dynamic
6021              linker.  We must do the same for executable references to
6022              shared library symbols, unless we've decided to use copy
6023              relocs or PLTs instead.  */
6024           value = addend;
6025           if (!mips_elf_create_dynamic_relocation (abfd,
6026                                                    info,
6027                                                    relocation,
6028                                                    h,
6029                                                    sec,
6030                                                    symbol,
6031                                                    &value,
6032                                                    input_section))
6033             return bfd_reloc_undefined;
6034         }
6035       else
6036         {
6037           if (r_type != R_MIPS_REL32)
6038             value = symbol + addend;
6039           else
6040             value = addend;
6041         }
6042       value &= howto->dst_mask;
6043       break;
6044
6045     case R_MIPS_PC32:
6046       value = symbol + addend - p;
6047       value &= howto->dst_mask;
6048       break;
6049
6050     case R_MIPS16_26:
6051       /* The calculation for R_MIPS16_26 is just the same as for an
6052          R_MIPS_26.  It's only the storage of the relocated field into
6053          the output file that's different.  That's handled in
6054          mips_elf_perform_relocation.  So, we just fall through to the
6055          R_MIPS_26 case here.  */
6056     case R_MIPS_26:
6057     case R_MICROMIPS_26_S1:
6058       {
6059         unsigned int shift;
6060
6061         /* Shift is 2, unusually, for microMIPS JALX.  */
6062         shift = (!*cross_mode_jump_p && r_type == R_MICROMIPS_26_S1) ? 1 : 2;
6063
6064         if (howto->partial_inplace && !section_p)
6065           value = _bfd_mips_elf_sign_extend (addend, 26 + shift);
6066         else
6067           value = addend;
6068         value += symbol;
6069
6070         /* Make sure the target of a jump is suitably aligned.  Bit 0 must
6071            be the correct ISA mode selector except for weak undefined
6072            symbols.  */
6073         if ((was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6074             && (*cross_mode_jump_p
6075                 ? (value & 3) != (r_type == R_MIPS_26)
6076                 : (value & ((1 << shift) - 1)) != (r_type != R_MIPS_26)))
6077           return bfd_reloc_outofrange;
6078
6079         value >>= shift;
6080         if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6081           overflowed_p = (value >> 26) != ((p + 4) >> (26 + shift));
6082         value &= howto->dst_mask;
6083       }
6084       break;
6085
6086     case R_MIPS_TLS_DTPREL_HI16:
6087     case R_MIPS16_TLS_DTPREL_HI16:
6088     case R_MICROMIPS_TLS_DTPREL_HI16:
6089       value = (mips_elf_high (addend + symbol - dtprel_base (info))
6090                & howto->dst_mask);
6091       break;
6092
6093     case R_MIPS_TLS_DTPREL_LO16:
6094     case R_MIPS_TLS_DTPREL32:
6095     case R_MIPS_TLS_DTPREL64:
6096     case R_MIPS16_TLS_DTPREL_LO16:
6097     case R_MICROMIPS_TLS_DTPREL_LO16:
6098       value = (symbol + addend - dtprel_base (info)) & howto->dst_mask;
6099       break;
6100
6101     case R_MIPS_TLS_TPREL_HI16:
6102     case R_MIPS16_TLS_TPREL_HI16:
6103     case R_MICROMIPS_TLS_TPREL_HI16:
6104       value = (mips_elf_high (addend + symbol - tprel_base (info))
6105                & howto->dst_mask);
6106       break;
6107
6108     case R_MIPS_TLS_TPREL_LO16:
6109     case R_MIPS_TLS_TPREL32:
6110     case R_MIPS_TLS_TPREL64:
6111     case R_MIPS16_TLS_TPREL_LO16:
6112     case R_MICROMIPS_TLS_TPREL_LO16:
6113       value = (symbol + addend - tprel_base (info)) & howto->dst_mask;
6114       break;
6115
6116     case R_MIPS_HI16:
6117     case R_MIPS16_HI16:
6118     case R_MICROMIPS_HI16:
6119       if (!gp_disp_p)
6120         {
6121           value = mips_elf_high (addend + symbol);
6122           value &= howto->dst_mask;
6123         }
6124       else
6125         {
6126           /* For MIPS16 ABI code we generate this sequence
6127                 0: li      $v0,%hi(_gp_disp)
6128                 4: addiupc $v1,%lo(_gp_disp)
6129                 8: sll     $v0,16
6130                12: addu    $v0,$v1
6131                14: move    $gp,$v0
6132              So the offsets of hi and lo relocs are the same, but the
6133              base $pc is that used by the ADDIUPC instruction at $t9 + 4.
6134              ADDIUPC clears the low two bits of the instruction address,
6135              so the base is ($t9 + 4) & ~3.  */
6136           if (r_type == R_MIPS16_HI16)
6137             value = mips_elf_high (addend + gp - ((p + 4) & ~(bfd_vma) 0x3));
6138           /* The microMIPS .cpload sequence uses the same assembly
6139              instructions as the traditional psABI version, but the
6140              incoming $t9 has the low bit set.  */
6141           else if (r_type == R_MICROMIPS_HI16)
6142             value = mips_elf_high (addend + gp - p - 1);
6143           else
6144             value = mips_elf_high (addend + gp - p);
6145         }
6146       break;
6147
6148     case R_MIPS_LO16:
6149     case R_MIPS16_LO16:
6150     case R_MICROMIPS_LO16:
6151     case R_MICROMIPS_HI0_LO16:
6152       if (!gp_disp_p)
6153         value = (symbol + addend) & howto->dst_mask;
6154       else
6155         {
6156           /* See the comment for R_MIPS16_HI16 above for the reason
6157              for this conditional.  */
6158           if (r_type == R_MIPS16_LO16)
6159             value = addend + gp - (p & ~(bfd_vma) 0x3);
6160           else if (r_type == R_MICROMIPS_LO16
6161                    || r_type == R_MICROMIPS_HI0_LO16)
6162             value = addend + gp - p + 3;
6163           else
6164             value = addend + gp - p + 4;
6165           /* The MIPS ABI requires checking the R_MIPS_LO16 relocation
6166              for overflow.  But, on, say, IRIX5, relocations against
6167              _gp_disp are normally generated from the .cpload
6168              pseudo-op.  It generates code that normally looks like
6169              this:
6170
6171                lui    $gp,%hi(_gp_disp)
6172                addiu  $gp,$gp,%lo(_gp_disp)
6173                addu   $gp,$gp,$t9
6174
6175              Here $t9 holds the address of the function being called,
6176              as required by the MIPS ELF ABI.  The R_MIPS_LO16
6177              relocation can easily overflow in this situation, but the
6178              R_MIPS_HI16 relocation will handle the overflow.
6179              Therefore, we consider this a bug in the MIPS ABI, and do
6180              not check for overflow here.  */
6181         }
6182       break;
6183
6184     case R_MIPS_LITERAL:
6185     case R_MICROMIPS_LITERAL:
6186       /* Because we don't merge literal sections, we can handle this
6187          just like R_MIPS_GPREL16.  In the long run, we should merge
6188          shared literals, and then we will need to additional work
6189          here.  */
6190
6191       /* Fall through.  */
6192
6193     case R_MIPS16_GPREL:
6194       /* The R_MIPS16_GPREL performs the same calculation as
6195          R_MIPS_GPREL16, but stores the relocated bits in a different
6196          order.  We don't need to do anything special here; the
6197          differences are handled in mips_elf_perform_relocation.  */
6198     case R_MIPS_GPREL16:
6199     case R_MICROMIPS_GPREL7_S2:
6200     case R_MICROMIPS_GPREL16:
6201       /* Only sign-extend the addend if it was extracted from the
6202          instruction.  If the addend was separate, leave it alone,
6203          otherwise we may lose significant bits.  */
6204       if (howto->partial_inplace)
6205         addend = _bfd_mips_elf_sign_extend (addend, 16);
6206       value = symbol + addend - gp;
6207       /* If the symbol was local, any earlier relocatable links will
6208          have adjusted its addend with the gp offset, so compensate
6209          for that now.  Don't do it for symbols forced local in this
6210          link, though, since they won't have had the gp offset applied
6211          to them before.  */
6212       if (was_local_p)
6213         value += gp0;
6214       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6215         overflowed_p = mips_elf_overflow_p (value, 16);
6216       break;
6217
6218     case R_MIPS16_GOT16:
6219     case R_MIPS16_CALL16:
6220     case R_MIPS_GOT16:
6221     case R_MIPS_CALL16:
6222     case R_MICROMIPS_GOT16:
6223     case R_MICROMIPS_CALL16:
6224       /* VxWorks does not have separate local and global semantics for
6225          R_MIPS*_GOT16; every relocation evaluates to "G".  */
6226       if (!htab->is_vxworks && local_p)
6227         {
6228           value = mips_elf_got16_entry (abfd, input_bfd, info,
6229                                         symbol + addend, !was_local_p);
6230           if (value == MINUS_ONE)
6231             return bfd_reloc_outofrange;
6232           value
6233             = mips_elf_got_offset_from_index (info, abfd, input_bfd, value);
6234           overflowed_p = mips_elf_overflow_p (value, 16);
6235           break;
6236         }
6237
6238       /* Fall through.  */
6239
6240     case R_MIPS_TLS_GD:
6241     case R_MIPS_TLS_GOTTPREL:
6242     case R_MIPS_TLS_LDM:
6243     case R_MIPS_GOT_DISP:
6244     case R_MIPS16_TLS_GD:
6245     case R_MIPS16_TLS_GOTTPREL:
6246     case R_MIPS16_TLS_LDM:
6247     case R_MICROMIPS_TLS_GD:
6248     case R_MICROMIPS_TLS_GOTTPREL:
6249     case R_MICROMIPS_TLS_LDM:
6250     case R_MICROMIPS_GOT_DISP:
6251       value = g;
6252       overflowed_p = mips_elf_overflow_p (value, 16);
6253       break;
6254
6255     case R_MIPS_GPREL32:
6256       value = (addend + symbol + gp0 - gp);
6257       if (!save_addend)
6258         value &= howto->dst_mask;
6259       break;
6260
6261     case R_MIPS_PC16:
6262     case R_MIPS_GNU_REL16_S2:
6263       if (howto->partial_inplace)
6264         addend = _bfd_mips_elf_sign_extend (addend, 18);
6265
6266       /* No need to exclude weak undefined symbols here as they resolve
6267          to 0 and never set `*cross_mode_jump_p', so this alignment check
6268          will never trigger for them.  */
6269       if (*cross_mode_jump_p
6270           ? ((symbol + addend) & 3) != 1
6271           : ((symbol + addend) & 3) != 0)
6272         return bfd_reloc_outofrange;
6273
6274       value = symbol + addend - p;
6275       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6276         overflowed_p = mips_elf_overflow_p (value, 18);
6277       value >>= howto->rightshift;
6278       value &= howto->dst_mask;
6279       break;
6280
6281     case R_MIPS16_PC16_S1:
6282       if (howto->partial_inplace)
6283         addend = _bfd_mips_elf_sign_extend (addend, 17);
6284
6285       if ((was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6286           && (*cross_mode_jump_p
6287               ? ((symbol + addend) & 3) != 0
6288               : ((symbol + addend) & 1) == 0))
6289         return bfd_reloc_outofrange;
6290
6291       value = symbol + addend - p;
6292       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6293         overflowed_p = mips_elf_overflow_p (value, 17);
6294       value >>= howto->rightshift;
6295       value &= howto->dst_mask;
6296       break;
6297
6298     case R_MIPS_PC21_S2:
6299       if (howto->partial_inplace)
6300         addend = _bfd_mips_elf_sign_extend (addend, 23);
6301
6302       if ((symbol + addend) & 3)
6303         return bfd_reloc_outofrange;
6304
6305       value = symbol + addend - p;
6306       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6307         overflowed_p = mips_elf_overflow_p (value, 23);
6308       value >>= howto->rightshift;
6309       value &= howto->dst_mask;
6310       break;
6311
6312     case R_MIPS_PC26_S2:
6313       if (howto->partial_inplace)
6314         addend = _bfd_mips_elf_sign_extend (addend, 28);
6315
6316       if ((symbol + addend) & 3)
6317         return bfd_reloc_outofrange;
6318
6319       value = symbol + addend - p;
6320       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6321         overflowed_p = mips_elf_overflow_p (value, 28);
6322       value >>= howto->rightshift;
6323       value &= howto->dst_mask;
6324       break;
6325
6326     case R_MIPS_PC18_S3:
6327       if (howto->partial_inplace)
6328         addend = _bfd_mips_elf_sign_extend (addend, 21);
6329
6330       if ((symbol + addend) & 7)
6331         return bfd_reloc_outofrange;
6332
6333       value = symbol + addend - ((p | 7) ^ 7);
6334       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6335         overflowed_p = mips_elf_overflow_p (value, 21);
6336       value >>= howto->rightshift;
6337       value &= howto->dst_mask;
6338       break;
6339
6340     case R_MIPS_PC19_S2:
6341       if (howto->partial_inplace)
6342         addend = _bfd_mips_elf_sign_extend (addend, 21);
6343
6344       if ((symbol + addend) & 3)
6345         return bfd_reloc_outofrange;
6346
6347       value = symbol + addend - p;
6348       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6349         overflowed_p = mips_elf_overflow_p (value, 21);
6350       value >>= howto->rightshift;
6351       value &= howto->dst_mask;
6352       break;
6353
6354     case R_MIPS_PCHI16:
6355       value = mips_elf_high (symbol + addend - p);
6356       value &= howto->dst_mask;
6357       break;
6358
6359     case R_MIPS_PCLO16:
6360       if (howto->partial_inplace)
6361         addend = _bfd_mips_elf_sign_extend (addend, 16);
6362       value = symbol + addend - p;
6363       value &= howto->dst_mask;
6364       break;
6365
6366     case R_MICROMIPS_PC7_S1:
6367       if (howto->partial_inplace)
6368         addend = _bfd_mips_elf_sign_extend (addend, 8);
6369
6370       if ((was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6371           && (*cross_mode_jump_p
6372               ? ((symbol + addend + 2) & 3) != 0
6373               : ((symbol + addend + 2) & 1) == 0))
6374         return bfd_reloc_outofrange;
6375
6376       value = symbol + addend - p;
6377       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6378         overflowed_p = mips_elf_overflow_p (value, 8);
6379       value >>= howto->rightshift;
6380       value &= howto->dst_mask;
6381       break;
6382
6383     case R_MICROMIPS_PC10_S1:
6384       if (howto->partial_inplace)
6385         addend = _bfd_mips_elf_sign_extend (addend, 11);
6386
6387       if ((was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6388           && (*cross_mode_jump_p
6389               ? ((symbol + addend + 2) & 3) != 0
6390               : ((symbol + addend + 2) & 1) == 0))
6391         return bfd_reloc_outofrange;
6392
6393       value = symbol + addend - p;
6394       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6395         overflowed_p = mips_elf_overflow_p (value, 11);
6396       value >>= howto->rightshift;
6397       value &= howto->dst_mask;
6398       break;
6399
6400     case R_MICROMIPS_PC16_S1:
6401       if (howto->partial_inplace)
6402         addend = _bfd_mips_elf_sign_extend (addend, 17);
6403
6404       if ((was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6405           && (*cross_mode_jump_p
6406               ? ((symbol + addend) & 3) != 0
6407               : ((symbol + addend) & 1) == 0))
6408         return bfd_reloc_outofrange;
6409
6410       value = symbol + addend - p;
6411       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6412         overflowed_p = mips_elf_overflow_p (value, 17);
6413       value >>= howto->rightshift;
6414       value &= howto->dst_mask;
6415       break;
6416
6417     case R_MICROMIPS_PC23_S2:
6418       if (howto->partial_inplace)
6419         addend = _bfd_mips_elf_sign_extend (addend, 25);
6420       value = symbol + addend - ((p | 3) ^ 3);
6421       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6422         overflowed_p = mips_elf_overflow_p (value, 25);
6423       value >>= howto->rightshift;
6424       value &= howto->dst_mask;
6425       break;
6426
6427     case R_MIPS_GOT_HI16:
6428     case R_MIPS_CALL_HI16:
6429     case R_MICROMIPS_GOT_HI16:
6430     case R_MICROMIPS_CALL_HI16:
6431       /* We're allowed to handle these two relocations identically.
6432          The dynamic linker is allowed to handle the CALL relocations
6433          differently by creating a lazy evaluation stub.  */
6434       value = g;
6435       value = mips_elf_high (value);
6436       value &= howto->dst_mask;
6437       break;
6438
6439     case R_MIPS_GOT_LO16:
6440     case R_MIPS_CALL_LO16:
6441     case R_MICROMIPS_GOT_LO16:
6442     case R_MICROMIPS_CALL_LO16:
6443       value = g & howto->dst_mask;
6444       break;
6445
6446     case R_MIPS_GOT_PAGE:
6447     case R_MICROMIPS_GOT_PAGE:
6448       value = mips_elf_got_page (abfd, input_bfd, info, symbol + addend, NULL);
6449       if (value == MINUS_ONE)
6450         return bfd_reloc_outofrange;
6451       value = mips_elf_got_offset_from_index (info, abfd, input_bfd, value);
6452       overflowed_p = mips_elf_overflow_p (value, 16);
6453       break;
6454
6455     case R_MIPS_GOT_OFST:
6456     case R_MICROMIPS_GOT_OFST:
6457       if (local_p)
6458         mips_elf_got_page (abfd, input_bfd, info, symbol + addend, &value);
6459       else
6460         value = addend;
6461       overflowed_p = mips_elf_overflow_p (value, 16);
6462       break;
6463
6464     case R_MIPS_SUB:
6465     case R_MICROMIPS_SUB:
6466       value = symbol - addend;
6467       value &= howto->dst_mask;
6468       break;
6469
6470     case R_MIPS_HIGHER:
6471     case R_MICROMIPS_HIGHER:
6472       value = mips_elf_higher (addend + symbol);
6473       value &= howto->dst_mask;
6474       break;
6475
6476     case R_MIPS_HIGHEST:
6477     case R_MICROMIPS_HIGHEST:
6478       value = mips_elf_highest (addend + symbol);
6479       value &= howto->dst_mask;
6480       break;
6481
6482     case R_MIPS_SCN_DISP:
6483     case R_MICROMIPS_SCN_DISP:
6484       value = symbol + addend - sec->output_offset;
6485       value &= howto->dst_mask;
6486       break;
6487
6488     case R_MIPS_JALR:
6489     case R_MICROMIPS_JALR:
6490       /* This relocation is only a hint.  In some cases, we optimize
6491          it into a bal instruction.  But we don't try to optimize
6492          when the symbol does not resolve locally.  */
6493       if (h != NULL && !SYMBOL_CALLS_LOCAL (info, &h->root))
6494         return bfd_reloc_continue;
6495       /* We can't optimize cross-mode jumps either.  */
6496       if (*cross_mode_jump_p)
6497         return bfd_reloc_continue;
6498       value = symbol + addend;
6499       /* Neither we can non-instruction-aligned targets.  */
6500       if (r_type == R_MIPS_JALR ? (value & 3) != 0 : (value & 1) == 0)
6501         return bfd_reloc_continue;
6502       break;
6503
6504     case R_MIPS_PJUMP:
6505     case R_MIPS_GNU_VTINHERIT:
6506     case R_MIPS_GNU_VTENTRY:
6507       /* We don't do anything with these at present.  */
6508       return bfd_reloc_continue;
6509
6510     default:
6511       /* An unrecognized relocation type.  */
6512       return bfd_reloc_notsupported;
6513     }
6514
6515   /* Store the VALUE for our caller.  */
6516   *valuep = value;
6517   return overflowed_p ? bfd_reloc_overflow : bfd_reloc_ok;
6518 }
6519
6520 /* It has been determined that the result of the RELOCATION is the
6521    VALUE.  Use HOWTO to place VALUE into the output file at the
6522    appropriate position.  The SECTION is the section to which the
6523    relocation applies.
6524    CROSS_MODE_JUMP_P is true if the relocation field
6525    is a MIPS16 or microMIPS jump to standard MIPS code, or vice versa.
6526
6527    Returns FALSE if anything goes wrong.  */
6528
6529 static bfd_boolean
6530 mips_elf_perform_relocation (struct bfd_link_info *info,
6531                              reloc_howto_type *howto,
6532                              const Elf_Internal_Rela *relocation,
6533                              bfd_vma value, bfd *input_bfd,
6534                              asection *input_section, bfd_byte *contents,
6535                              bfd_boolean cross_mode_jump_p)
6536 {
6537   bfd_vma x;
6538   bfd_byte *location;
6539   int r_type = ELF_R_TYPE (input_bfd, relocation->r_info);
6540
6541   /* Figure out where the relocation is occurring.  */
6542   location = contents + relocation->r_offset;
6543
6544   _bfd_mips_elf_reloc_unshuffle (input_bfd, r_type, FALSE, location);
6545
6546   /* Obtain the current value.  */
6547   x = mips_elf_obtain_contents (howto, relocation, input_bfd, contents);
6548
6549   /* Clear the field we are setting.  */
6550   x &= ~howto->dst_mask;
6551
6552   /* Set the field.  */
6553   x |= (value & howto->dst_mask);
6554
6555   /* Detect incorrect JALX usage.  If required, turn JAL or BAL into JALX.  */
6556   if (!cross_mode_jump_p && jal_reloc_p (r_type))
6557     {
6558       bfd_vma opcode = x >> 26;
6559
6560       if (r_type == R_MIPS16_26 ? opcode == 0x7
6561           : r_type == R_MICROMIPS_26_S1 ? opcode == 0x3c
6562           : opcode == 0x1d)
6563         {
6564           info->callbacks->einfo
6565             (_("%X%H: unsupported JALX to the same ISA mode\n"),
6566              input_bfd, input_section, relocation->r_offset);
6567           return TRUE;
6568         }
6569     }
6570   if (cross_mode_jump_p && jal_reloc_p (r_type))
6571     {
6572       bfd_boolean ok;
6573       bfd_vma opcode = x >> 26;
6574       bfd_vma jalx_opcode;
6575
6576       /* Check to see if the opcode is already JAL or JALX.  */
6577       if (r_type == R_MIPS16_26)
6578         {
6579           ok = ((opcode == 0x6) || (opcode == 0x7));
6580           jalx_opcode = 0x7;
6581         }
6582       else if (r_type == R_MICROMIPS_26_S1)
6583         {
6584           ok = ((opcode == 0x3d) || (opcode == 0x3c));
6585           jalx_opcode = 0x3c;
6586         }
6587       else
6588         {
6589           ok = ((opcode == 0x3) || (opcode == 0x1d));
6590           jalx_opcode = 0x1d;
6591         }
6592
6593       /* If the opcode is not JAL or JALX, there's a problem.  We cannot
6594          convert J or JALS to JALX.  */
6595       if (!ok)
6596         {
6597           info->callbacks->einfo
6598             (_("%X%H: unsupported jump between ISA modes; "
6599                "consider recompiling with interlinking enabled\n"),
6600              input_bfd, input_section, relocation->r_offset);
6601           return TRUE;
6602         }
6603
6604       /* Make this the JALX opcode.  */
6605       x = (x & ~(0x3f << 26)) | (jalx_opcode << 26);
6606     }
6607   else if (cross_mode_jump_p && b_reloc_p (r_type))
6608     {
6609       bfd_boolean ok = FALSE;
6610       bfd_vma opcode = x >> 16;
6611       bfd_vma jalx_opcode = 0;
6612       bfd_vma sign_bit = 0;
6613       bfd_vma addr;
6614       bfd_vma dest;
6615
6616       if (r_type == R_MICROMIPS_PC16_S1)
6617         {
6618           ok = opcode == 0x4060;
6619           jalx_opcode = 0x3c;
6620           sign_bit = 0x10000;
6621           value <<= 1;
6622         }
6623       else if (r_type == R_MIPS_PC16 || r_type == R_MIPS_GNU_REL16_S2)
6624         {
6625           ok = opcode == 0x411;
6626           jalx_opcode = 0x1d;
6627           sign_bit = 0x20000;
6628           value <<= 2;
6629         }
6630
6631       if (ok && !bfd_link_pic (info))
6632         {
6633           addr = (input_section->output_section->vma
6634                   + input_section->output_offset
6635                   + relocation->r_offset
6636                   + 4);
6637           dest = (addr
6638                   + (((value & ((sign_bit << 1) - 1)) ^ sign_bit) - sign_bit));
6639
6640           if ((addr >> 28) << 28 != (dest >> 28) << 28)
6641             {
6642               info->callbacks->einfo
6643                 (_("%X%H: cannot convert branch between ISA modes "
6644                    "to JALX: relocation out of range\n"),
6645                  input_bfd, input_section, relocation->r_offset);
6646               return TRUE;
6647             }
6648
6649           /* Make this the JALX opcode.  */
6650           x = ((dest >> 2) & 0x3ffffff) | jalx_opcode << 26;
6651         }
6652       else if (!mips_elf_hash_table (info)->ignore_branch_isa)
6653         {
6654           info->callbacks->einfo
6655             (_("%X%H: unsupported branch between ISA modes\n"),
6656              input_bfd, input_section, relocation->r_offset);
6657           return TRUE;
6658         }
6659     }
6660
6661   /* Try converting JAL to BAL and J(AL)R to B(AL), if the target is in
6662      range.  */
6663   if (!bfd_link_relocatable (info)
6664       && !cross_mode_jump_p
6665       && ((JAL_TO_BAL_P (input_bfd)
6666            && r_type == R_MIPS_26
6667            && (x >> 26) == 0x3)                 /* jal addr */
6668           || (JALR_TO_BAL_P (input_bfd)
6669               && r_type == R_MIPS_JALR
6670               && x == 0x0320f809)               /* jalr t9 */
6671           || (JR_TO_B_P (input_bfd)
6672               && r_type == R_MIPS_JALR
6673               && (x & ~1) == 0x03200008)))      /* jr t9 / jalr zero, t9 */
6674     {
6675       bfd_vma addr;
6676       bfd_vma dest;
6677       bfd_signed_vma off;
6678
6679       addr = (input_section->output_section->vma
6680               + input_section->output_offset
6681               + relocation->r_offset
6682               + 4);
6683       if (r_type == R_MIPS_26)
6684         dest = (value << 2) | ((addr >> 28) << 28);
6685       else
6686         dest = value;
6687       off = dest - addr;
6688       if (off <= 0x1ffff && off >= -0x20000)
6689         {
6690           if ((x & ~1) == 0x03200008)           /* jr t9 / jalr zero, t9 */
6691             x = 0x10000000 | (((bfd_vma) off >> 2) & 0xffff);   /* b addr */
6692           else
6693             x = 0x04110000 | (((bfd_vma) off >> 2) & 0xffff);   /* bal addr */
6694         }
6695     }
6696
6697   /* Put the value into the output.  */
6698   mips_elf_store_contents (howto, relocation, input_bfd, contents, x);
6699
6700   _bfd_mips_elf_reloc_shuffle (input_bfd, r_type, !bfd_link_relocatable (info),
6701                                location);
6702
6703   return TRUE;
6704 }
6705 \f
6706 /* Create a rel.dyn relocation for the dynamic linker to resolve.  REL
6707    is the original relocation, which is now being transformed into a
6708    dynamic relocation.  The ADDENDP is adjusted if necessary; the
6709    caller should store the result in place of the original addend.  */
6710
6711 static bfd_boolean
6712 mips_elf_create_dynamic_relocation (bfd *output_bfd,
6713                                     struct bfd_link_info *info,
6714                                     const Elf_Internal_Rela *rel,
6715                                     struct mips_elf_link_hash_entry *h,
6716                                     asection *sec, bfd_vma symbol,
6717                                     bfd_vma *addendp, asection *input_section)
6718 {
6719   Elf_Internal_Rela outrel[3];
6720   asection *sreloc;
6721   bfd *dynobj;
6722   int r_type;
6723   long indx;
6724   bfd_boolean defined_p;
6725   struct mips_elf_link_hash_table *htab;
6726
6727   htab = mips_elf_hash_table (info);
6728   BFD_ASSERT (htab != NULL);
6729
6730   r_type = ELF_R_TYPE (output_bfd, rel->r_info);
6731   dynobj = elf_hash_table (info)->dynobj;
6732   sreloc = mips_elf_rel_dyn_section (info, FALSE);
6733   BFD_ASSERT (sreloc != NULL);
6734   BFD_ASSERT (sreloc->contents != NULL);
6735   BFD_ASSERT (sreloc->reloc_count * MIPS_ELF_REL_SIZE (output_bfd)
6736               < sreloc->size);
6737
6738   outrel[0].r_offset =
6739     _bfd_elf_section_offset (output_bfd, info, input_section, rel[0].r_offset);
6740   if (ABI_64_P (output_bfd))
6741     {
6742       outrel[1].r_offset =
6743         _bfd_elf_section_offset (output_bfd, info, input_section, rel[1].r_offset);
6744       outrel[2].r_offset =
6745         _bfd_elf_section_offset (output_bfd, info, input_section, rel[2].r_offset);
6746     }
6747
6748   if (outrel[0].r_offset == MINUS_ONE)
6749     /* The relocation field has been deleted.  */
6750     return TRUE;
6751
6752   if (outrel[0].r_offset == MINUS_TWO)
6753     {
6754       /* The relocation field has been converted into a relative value of
6755          some sort.  Functions like _bfd_elf_write_section_eh_frame expect
6756          the field to be fully relocated, so add in the symbol's value.  */
6757       *addendp += symbol;
6758       return TRUE;
6759     }
6760
6761   /* We must now calculate the dynamic symbol table index to use
6762      in the relocation.  */
6763   if (h != NULL && ! SYMBOL_REFERENCES_LOCAL (info, &h->root))
6764     {
6765       BFD_ASSERT (htab->is_vxworks || h->global_got_area != GGA_NONE);
6766       indx = h->root.dynindx;
6767       if (SGI_COMPAT (output_bfd))
6768         defined_p = h->root.def_regular;
6769       else
6770         /* ??? glibc's ld.so just adds the final GOT entry to the
6771            relocation field.  It therefore treats relocs against
6772            defined symbols in the same way as relocs against
6773            undefined symbols.  */
6774         defined_p = FALSE;
6775     }
6776   else
6777     {
6778       if (sec != NULL && bfd_is_abs_section (sec))
6779         indx = 0;
6780       else if (sec == NULL || sec->owner == NULL)
6781         {
6782           bfd_set_error (bfd_error_bad_value);
6783           return FALSE;
6784         }
6785       else
6786         {
6787           indx = elf_section_data (sec->output_section)->dynindx;
6788           if (indx == 0)
6789             {
6790               asection *osec = htab->root.text_index_section;
6791               indx = elf_section_data (osec)->dynindx;
6792             }
6793           if (indx == 0)
6794             abort ();
6795         }
6796
6797       /* Instead of generating a relocation using the section
6798          symbol, we may as well make it a fully relative
6799          relocation.  We want to avoid generating relocations to
6800          local symbols because we used to generate them
6801          incorrectly, without adding the original symbol value,
6802          which is mandated by the ABI for section symbols.  In
6803          order to give dynamic loaders and applications time to
6804          phase out the incorrect use, we refrain from emitting
6805          section-relative relocations.  It's not like they're
6806          useful, after all.  This should be a bit more efficient
6807          as well.  */
6808       /* ??? Although this behavior is compatible with glibc's ld.so,
6809          the ABI says that relocations against STN_UNDEF should have
6810          a symbol value of 0.  Irix rld honors this, so relocations
6811          against STN_UNDEF have no effect.  */
6812       if (!SGI_COMPAT (output_bfd))
6813         indx = 0;
6814       defined_p = TRUE;
6815     }
6816
6817   /* If the relocation was previously an absolute relocation and
6818      this symbol will not be referred to by the relocation, we must
6819      adjust it by the value we give it in the dynamic symbol table.
6820      Otherwise leave the job up to the dynamic linker.  */
6821   if (defined_p && r_type != R_MIPS_REL32)
6822     *addendp += symbol;
6823
6824   if (htab->is_vxworks)
6825     /* VxWorks uses non-relative relocations for this.  */
6826     outrel[0].r_info = ELF32_R_INFO (indx, R_MIPS_32);
6827   else
6828     /* The relocation is always an REL32 relocation because we don't
6829        know where the shared library will wind up at load-time.  */
6830     outrel[0].r_info = ELF_R_INFO (output_bfd, (unsigned long) indx,
6831                                    R_MIPS_REL32);
6832
6833   /* For strict adherence to the ABI specification, we should
6834      generate a R_MIPS_64 relocation record by itself before the
6835      _REL32/_64 record as well, such that the addend is read in as
6836      a 64-bit value (REL32 is a 32-bit relocation, after all).
6837      However, since none of the existing ELF64 MIPS dynamic
6838      loaders seems to care, we don't waste space with these
6839      artificial relocations.  If this turns out to not be true,
6840      mips_elf_allocate_dynamic_relocation() should be tweaked so
6841      as to make room for a pair of dynamic relocations per
6842      invocation if ABI_64_P, and here we should generate an
6843      additional relocation record with R_MIPS_64 by itself for a
6844      NULL symbol before this relocation record.  */
6845   outrel[1].r_info = ELF_R_INFO (output_bfd, 0,
6846                                  ABI_64_P (output_bfd)
6847                                  ? R_MIPS_64
6848                                  : R_MIPS_NONE);
6849   outrel[2].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_NONE);
6850
6851   /* Adjust the output offset of the relocation to reference the
6852      correct location in the output file.  */
6853   outrel[0].r_offset += (input_section->output_section->vma
6854                          + input_section->output_offset);
6855   outrel[1].r_offset += (input_section->output_section->vma
6856                          + input_section->output_offset);
6857   outrel[2].r_offset += (input_section->output_section->vma
6858                          + input_section->output_offset);
6859
6860   /* Put the relocation back out.  We have to use the special
6861      relocation outputter in the 64-bit case since the 64-bit
6862      relocation format is non-standard.  */
6863   if (ABI_64_P (output_bfd))
6864     {
6865       (*get_elf_backend_data (output_bfd)->s->swap_reloc_out)
6866         (output_bfd, &outrel[0],
6867          (sreloc->contents
6868           + sreloc->reloc_count * sizeof (Elf64_Mips_External_Rel)));
6869     }
6870   else if (htab->is_vxworks)
6871     {
6872       /* VxWorks uses RELA rather than REL dynamic relocations.  */
6873       outrel[0].r_addend = *addendp;
6874       bfd_elf32_swap_reloca_out
6875         (output_bfd, &outrel[0],
6876          (sreloc->contents
6877           + sreloc->reloc_count * sizeof (Elf32_External_Rela)));
6878     }
6879   else
6880     bfd_elf32_swap_reloc_out
6881       (output_bfd, &outrel[0],
6882        (sreloc->contents + sreloc->reloc_count * sizeof (Elf32_External_Rel)));
6883
6884   /* We've now added another relocation.  */
6885   ++sreloc->reloc_count;
6886
6887   /* Make sure the output section is writable.  The dynamic linker
6888      will be writing to it.  */
6889   elf_section_data (input_section->output_section)->this_hdr.sh_flags
6890     |= SHF_WRITE;
6891
6892   /* On IRIX5, make an entry of compact relocation info.  */
6893   if (IRIX_COMPAT (output_bfd) == ict_irix5)
6894     {
6895       asection *scpt = bfd_get_linker_section (dynobj, ".compact_rel");
6896       bfd_byte *cr;
6897
6898       if (scpt)
6899         {
6900           Elf32_crinfo cptrel;
6901
6902           mips_elf_set_cr_format (cptrel, CRF_MIPS_LONG);
6903           cptrel.vaddr = (rel->r_offset
6904                           + input_section->output_section->vma
6905                           + input_section->output_offset);
6906           if (r_type == R_MIPS_REL32)
6907             mips_elf_set_cr_type (cptrel, CRT_MIPS_REL32);
6908           else
6909             mips_elf_set_cr_type (cptrel, CRT_MIPS_WORD);
6910           mips_elf_set_cr_dist2to (cptrel, 0);
6911           cptrel.konst = *addendp;
6912
6913           cr = (scpt->contents
6914                 + sizeof (Elf32_External_compact_rel));
6915           mips_elf_set_cr_relvaddr (cptrel, 0);
6916           bfd_elf32_swap_crinfo_out (output_bfd, &cptrel,
6917                                      ((Elf32_External_crinfo *) cr
6918                                       + scpt->reloc_count));
6919           ++scpt->reloc_count;
6920         }
6921     }
6922
6923   /* If we've written this relocation for a readonly section,
6924      we need to set DF_TEXTREL again, so that we do not delete the
6925      DT_TEXTREL tag.  */
6926   if (MIPS_ELF_READONLY_SECTION (input_section))
6927     info->flags |= DF_TEXTREL;
6928
6929   return TRUE;
6930 }
6931 \f
6932 /* Return the MACH for a MIPS e_flags value.  */
6933
6934 unsigned long
6935 _bfd_elf_mips_mach (flagword flags)
6936 {
6937   switch (flags & EF_MIPS_MACH)
6938     {
6939     case E_MIPS_MACH_3900:
6940       return bfd_mach_mips3900;
6941
6942     case E_MIPS_MACH_4010:
6943       return bfd_mach_mips4010;
6944
6945     case E_MIPS_MACH_4100:
6946       return bfd_mach_mips4100;
6947
6948     case E_MIPS_MACH_4111:
6949       return bfd_mach_mips4111;
6950
6951     case E_MIPS_MACH_4120:
6952       return bfd_mach_mips4120;
6953
6954     case E_MIPS_MACH_4650:
6955       return bfd_mach_mips4650;
6956
6957     case E_MIPS_MACH_5400:
6958       return bfd_mach_mips5400;
6959
6960     case E_MIPS_MACH_5500:
6961       return bfd_mach_mips5500;
6962
6963     case E_MIPS_MACH_5900:
6964       return bfd_mach_mips5900;
6965
6966     case E_MIPS_MACH_9000:
6967       return bfd_mach_mips9000;
6968
6969     case E_MIPS_MACH_SB1:
6970       return bfd_mach_mips_sb1;
6971
6972     case E_MIPS_MACH_LS2E:
6973       return bfd_mach_mips_loongson_2e;
6974
6975     case E_MIPS_MACH_LS2F:
6976       return bfd_mach_mips_loongson_2f;
6977
6978     case E_MIPS_MACH_GS464:
6979       return bfd_mach_mips_gs464;
6980
6981     case E_MIPS_MACH_GS464E:
6982       return bfd_mach_mips_gs464e;
6983
6984     case E_MIPS_MACH_GS264E:
6985       return bfd_mach_mips_gs264e;
6986
6987     case E_MIPS_MACH_OCTEON3:
6988       return bfd_mach_mips_octeon3;
6989
6990     case E_MIPS_MACH_OCTEON2:
6991       return bfd_mach_mips_octeon2;
6992
6993     case E_MIPS_MACH_OCTEON:
6994       return bfd_mach_mips_octeon;
6995
6996     case E_MIPS_MACH_XLR:
6997       return bfd_mach_mips_xlr;
6998
6999     case E_MIPS_MACH_IAMR2:
7000       return bfd_mach_mips_interaptiv_mr2;
7001
7002     default:
7003       switch (flags & EF_MIPS_ARCH)
7004         {
7005         default:
7006         case E_MIPS_ARCH_1:
7007           return bfd_mach_mips3000;
7008
7009         case E_MIPS_ARCH_2:
7010           return bfd_mach_mips6000;
7011
7012         case E_MIPS_ARCH_3:
7013           return bfd_mach_mips4000;
7014
7015         case E_MIPS_ARCH_4:
7016           return bfd_mach_mips8000;
7017
7018         case E_MIPS_ARCH_5:
7019           return bfd_mach_mips5;
7020
7021         case E_MIPS_ARCH_32:
7022           return bfd_mach_mipsisa32;
7023
7024         case E_MIPS_ARCH_64:
7025           return bfd_mach_mipsisa64;
7026
7027         case E_MIPS_ARCH_32R2:
7028           return bfd_mach_mipsisa32r2;
7029
7030         case E_MIPS_ARCH_64R2:
7031           return bfd_mach_mipsisa64r2;
7032
7033         case E_MIPS_ARCH_32R6:
7034           return bfd_mach_mipsisa32r6;
7035
7036         case E_MIPS_ARCH_64R6:
7037           return bfd_mach_mipsisa64r6;
7038         }
7039     }
7040
7041   return 0;
7042 }
7043
7044 /* Return printable name for ABI.  */
7045
7046 static INLINE char *
7047 elf_mips_abi_name (bfd *abfd)
7048 {
7049   flagword flags;
7050
7051   flags = elf_elfheader (abfd)->e_flags;
7052   switch (flags & EF_MIPS_ABI)
7053     {
7054     case 0:
7055       if (ABI_N32_P (abfd))
7056         return "N32";
7057       else if (ABI_64_P (abfd))
7058         return "64";
7059       else
7060         return "none";
7061     case E_MIPS_ABI_O32:
7062       return "O32";
7063     case E_MIPS_ABI_O64:
7064       return "O64";
7065     case E_MIPS_ABI_EABI32:
7066       return "EABI32";
7067     case E_MIPS_ABI_EABI64:
7068       return "EABI64";
7069     default:
7070       return "unknown abi";
7071     }
7072 }
7073 \f
7074 /* MIPS ELF uses two common sections.  One is the usual one, and the
7075    other is for small objects.  All the small objects are kept
7076    together, and then referenced via the gp pointer, which yields
7077    faster assembler code.  This is what we use for the small common
7078    section.  This approach is copied from ecoff.c.  */
7079 static asection mips_elf_scom_section;
7080 static asymbol mips_elf_scom_symbol;
7081 static asymbol *mips_elf_scom_symbol_ptr;
7082
7083 /* MIPS ELF also uses an acommon section, which represents an
7084    allocated common symbol which may be overridden by a
7085    definition in a shared library.  */
7086 static asection mips_elf_acom_section;
7087 static asymbol mips_elf_acom_symbol;
7088 static asymbol *mips_elf_acom_symbol_ptr;
7089
7090 /* This is used for both the 32-bit and the 64-bit ABI.  */
7091
7092 void
7093 _bfd_mips_elf_symbol_processing (bfd *abfd, asymbol *asym)
7094 {
7095   elf_symbol_type *elfsym;
7096
7097   /* Handle the special MIPS section numbers that a symbol may use.  */
7098   elfsym = (elf_symbol_type *) asym;
7099   switch (elfsym->internal_elf_sym.st_shndx)
7100     {
7101     case SHN_MIPS_ACOMMON:
7102       /* This section is used in a dynamically linked executable file.
7103          It is an allocated common section.  The dynamic linker can
7104          either resolve these symbols to something in a shared
7105          library, or it can just leave them here.  For our purposes,
7106          we can consider these symbols to be in a new section.  */
7107       if (mips_elf_acom_section.name == NULL)
7108         {
7109           /* Initialize the acommon section.  */
7110           mips_elf_acom_section.name = ".acommon";
7111           mips_elf_acom_section.flags = SEC_ALLOC;
7112           mips_elf_acom_section.output_section = &mips_elf_acom_section;
7113           mips_elf_acom_section.symbol = &mips_elf_acom_symbol;
7114           mips_elf_acom_section.symbol_ptr_ptr = &mips_elf_acom_symbol_ptr;
7115           mips_elf_acom_symbol.name = ".acommon";
7116           mips_elf_acom_symbol.flags = BSF_SECTION_SYM;
7117           mips_elf_acom_symbol.section = &mips_elf_acom_section;
7118           mips_elf_acom_symbol_ptr = &mips_elf_acom_symbol;
7119         }
7120       asym->section = &mips_elf_acom_section;
7121       break;
7122
7123     case SHN_COMMON:
7124       /* Common symbols less than the GP size are automatically
7125          treated as SHN_MIPS_SCOMMON symbols on IRIX5.  */
7126       if (asym->value > elf_gp_size (abfd)
7127           || ELF_ST_TYPE (elfsym->internal_elf_sym.st_info) == STT_TLS
7128           || IRIX_COMPAT (abfd) == ict_irix6)
7129         break;
7130       /* Fall through.  */
7131     case SHN_MIPS_SCOMMON:
7132       if (mips_elf_scom_section.name == NULL)
7133         {
7134           /* Initialize the small common section.  */
7135           mips_elf_scom_section.name = ".scommon";
7136           mips_elf_scom_section.flags = SEC_IS_COMMON;
7137           mips_elf_scom_section.output_section = &mips_elf_scom_section;
7138           mips_elf_scom_section.symbol = &mips_elf_scom_symbol;
7139           mips_elf_scom_section.symbol_ptr_ptr = &mips_elf_scom_symbol_ptr;
7140           mips_elf_scom_symbol.name = ".scommon";
7141           mips_elf_scom_symbol.flags = BSF_SECTION_SYM;
7142           mips_elf_scom_symbol.section = &mips_elf_scom_section;
7143           mips_elf_scom_symbol_ptr = &mips_elf_scom_symbol;
7144         }
7145       asym->section = &mips_elf_scom_section;
7146       asym->value = elfsym->internal_elf_sym.st_size;
7147       break;
7148
7149     case SHN_MIPS_SUNDEFINED:
7150       asym->section = bfd_und_section_ptr;
7151       break;
7152
7153     case SHN_MIPS_TEXT:
7154       {
7155         asection *section = bfd_get_section_by_name (abfd, ".text");
7156
7157         if (section != NULL)
7158           {
7159             asym->section = section;
7160             /* MIPS_TEXT is a bit special, the address is not an offset
7161                to the base of the .text section.  So subtract the section
7162                base address to make it an offset.  */
7163             asym->value -= section->vma;
7164           }
7165       }
7166       break;
7167
7168     case SHN_MIPS_DATA:
7169       {
7170         asection *section = bfd_get_section_by_name (abfd, ".data");
7171
7172         if (section != NULL)
7173           {
7174             asym->section = section;
7175             /* MIPS_DATA is a bit special, the address is not an offset
7176                to the base of the .data section.  So subtract the section
7177                base address to make it an offset.  */
7178             asym->value -= section->vma;
7179           }
7180       }
7181       break;
7182     }
7183
7184   /* If this is an odd-valued function symbol, assume it's a MIPS16
7185      or microMIPS one.  */
7186   if (ELF_ST_TYPE (elfsym->internal_elf_sym.st_info) == STT_FUNC
7187       && (asym->value & 1) != 0)
7188     {
7189       asym->value--;
7190       if (MICROMIPS_P (abfd))
7191         elfsym->internal_elf_sym.st_other
7192           = ELF_ST_SET_MICROMIPS (elfsym->internal_elf_sym.st_other);
7193       else
7194         elfsym->internal_elf_sym.st_other
7195           = ELF_ST_SET_MIPS16 (elfsym->internal_elf_sym.st_other);
7196     }
7197 }
7198 \f
7199 /* Implement elf_backend_eh_frame_address_size.  This differs from
7200    the default in the way it handles EABI64.
7201
7202    EABI64 was originally specified as an LP64 ABI, and that is what
7203    -mabi=eabi normally gives on a 64-bit target.  However, gcc has
7204    historically accepted the combination of -mabi=eabi and -mlong32,
7205    and this ILP32 variation has become semi-official over time.
7206    Both forms use elf32 and have pointer-sized FDE addresses.
7207
7208    If an EABI object was generated by GCC 4.0 or above, it will have
7209    an empty .gcc_compiled_longXX section, where XX is the size of longs
7210    in bits.  Unfortunately, ILP32 objects generated by earlier compilers
7211    have no special marking to distinguish them from LP64 objects.
7212
7213    We don't want users of the official LP64 ABI to be punished for the
7214    existence of the ILP32 variant, but at the same time, we don't want
7215    to mistakenly interpret pre-4.0 ILP32 objects as being LP64 objects.
7216    We therefore take the following approach:
7217
7218       - If ABFD contains a .gcc_compiled_longXX section, use it to
7219         determine the pointer size.
7220
7221       - Otherwise check the type of the first relocation.  Assume that
7222         the LP64 ABI is being used if the relocation is of type R_MIPS_64.
7223
7224       - Otherwise punt.
7225
7226    The second check is enough to detect LP64 objects generated by pre-4.0
7227    compilers because, in the kind of output generated by those compilers,
7228    the first relocation will be associated with either a CIE personality
7229    routine or an FDE start address.  Furthermore, the compilers never
7230    used a special (non-pointer) encoding for this ABI.
7231
7232    Checking the relocation type should also be safe because there is no
7233    reason to use R_MIPS_64 in an ILP32 object.  Pre-4.0 compilers never
7234    did so.  */
7235
7236 unsigned int
7237 _bfd_mips_elf_eh_frame_address_size (bfd *abfd, const asection *sec)
7238 {
7239   if (elf_elfheader (abfd)->e_ident[EI_CLASS] == ELFCLASS64)
7240     return 8;
7241   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI64)
7242     {
7243       bfd_boolean long32_p, long64_p;
7244
7245       long32_p = bfd_get_section_by_name (abfd, ".gcc_compiled_long32") != 0;
7246       long64_p = bfd_get_section_by_name (abfd, ".gcc_compiled_long64") != 0;
7247       if (long32_p && long64_p)
7248         return 0;
7249       if (long32_p)
7250         return 4;
7251       if (long64_p)
7252         return 8;
7253
7254       if (sec->reloc_count > 0
7255           && elf_section_data (sec)->relocs != NULL
7256           && (ELF32_R_TYPE (elf_section_data (sec)->relocs[0].r_info)
7257               == R_MIPS_64))
7258         return 8;
7259
7260       return 0;
7261     }
7262   return 4;
7263 }
7264 \f
7265 /* There appears to be a bug in the MIPSpro linker that causes GOT_DISP
7266    relocations against two unnamed section symbols to resolve to the
7267    same address.  For example, if we have code like:
7268
7269         lw      $4,%got_disp(.data)($gp)
7270         lw      $25,%got_disp(.text)($gp)
7271         jalr    $25
7272
7273    then the linker will resolve both relocations to .data and the program
7274    will jump there rather than to .text.
7275
7276    We can work around this problem by giving names to local section symbols.
7277    This is also what the MIPSpro tools do.  */
7278
7279 bfd_boolean
7280 _bfd_mips_elf_name_local_section_symbols (bfd *abfd)
7281 {
7282   return SGI_COMPAT (abfd);
7283 }
7284 \f
7285 /* Work over a section just before writing it out.  This routine is
7286    used by both the 32-bit and the 64-bit ABI.  FIXME: We recognize
7287    sections that need the SHF_MIPS_GPREL flag by name; there has to be
7288    a better way.  */
7289
7290 bfd_boolean
7291 _bfd_mips_elf_section_processing (bfd *abfd, Elf_Internal_Shdr *hdr)
7292 {
7293   if (hdr->sh_type == SHT_MIPS_REGINFO
7294       && hdr->sh_size > 0)
7295     {
7296       bfd_byte buf[4];
7297
7298       BFD_ASSERT (hdr->contents == NULL);
7299
7300       if (hdr->sh_size != sizeof (Elf32_External_RegInfo))
7301         {
7302           _bfd_error_handler
7303             (_("%pB: incorrect `.reginfo' section size; "
7304                "expected %" PRIu64 ", got %" PRIu64),
7305              abfd, (uint64_t) sizeof (Elf32_External_RegInfo),
7306              (uint64_t) hdr->sh_size);
7307           bfd_set_error (bfd_error_bad_value);
7308           return FALSE;
7309         }
7310
7311       if (bfd_seek (abfd,
7312                     hdr->sh_offset + sizeof (Elf32_External_RegInfo) - 4,
7313                     SEEK_SET) != 0)
7314         return FALSE;
7315       H_PUT_32 (abfd, elf_gp (abfd), buf);
7316       if (bfd_bwrite (buf, 4, abfd) != 4)
7317         return FALSE;
7318     }
7319
7320   if (hdr->sh_type == SHT_MIPS_OPTIONS
7321       && hdr->bfd_section != NULL
7322       && mips_elf_section_data (hdr->bfd_section) != NULL
7323       && mips_elf_section_data (hdr->bfd_section)->u.tdata != NULL)
7324     {
7325       bfd_byte *contents, *l, *lend;
7326
7327       /* We stored the section contents in the tdata field in the
7328          set_section_contents routine.  We save the section contents
7329          so that we don't have to read them again.
7330          At this point we know that elf_gp is set, so we can look
7331          through the section contents to see if there is an
7332          ODK_REGINFO structure.  */
7333
7334       contents = mips_elf_section_data (hdr->bfd_section)->u.tdata;
7335       l = contents;
7336       lend = contents + hdr->sh_size;
7337       while (l + sizeof (Elf_External_Options) <= lend)
7338         {
7339           Elf_Internal_Options intopt;
7340
7341           bfd_mips_elf_swap_options_in (abfd, (Elf_External_Options *) l,
7342                                         &intopt);
7343           if (intopt.size < sizeof (Elf_External_Options))
7344             {
7345               _bfd_error_handler
7346                 /* xgettext:c-format */
7347                 (_("%pB: warning: bad `%s' option size %u smaller than"
7348                    " its header"),
7349                 abfd, MIPS_ELF_OPTIONS_SECTION_NAME (abfd), intopt.size);
7350               break;
7351             }
7352           if (ABI_64_P (abfd) && intopt.kind == ODK_REGINFO)
7353             {
7354               bfd_byte buf[8];
7355
7356               if (bfd_seek (abfd,
7357                             (hdr->sh_offset
7358                              + (l - contents)
7359                              + sizeof (Elf_External_Options)
7360                              + (sizeof (Elf64_External_RegInfo) - 8)),
7361                              SEEK_SET) != 0)
7362                 return FALSE;
7363               H_PUT_64 (abfd, elf_gp (abfd), buf);
7364               if (bfd_bwrite (buf, 8, abfd) != 8)
7365                 return FALSE;
7366             }
7367           else if (intopt.kind == ODK_REGINFO)
7368             {
7369               bfd_byte buf[4];
7370
7371               if (bfd_seek (abfd,
7372                             (hdr->sh_offset
7373                              + (l - contents)
7374                              + sizeof (Elf_External_Options)
7375                              + (sizeof (Elf32_External_RegInfo) - 4)),
7376                             SEEK_SET) != 0)
7377                 return FALSE;
7378               H_PUT_32 (abfd, elf_gp (abfd), buf);
7379               if (bfd_bwrite (buf, 4, abfd) != 4)
7380                 return FALSE;
7381             }
7382           l += intopt.size;
7383         }
7384     }
7385
7386   if (hdr->bfd_section != NULL)
7387     {
7388       const char *name = bfd_get_section_name (abfd, hdr->bfd_section);
7389
7390       /* .sbss is not handled specially here because the GNU/Linux
7391          prelinker can convert .sbss from NOBITS to PROGBITS and
7392          changing it back to NOBITS breaks the binary.  The entry in
7393          _bfd_mips_elf_special_sections will ensure the correct flags
7394          are set on .sbss if BFD creates it without reading it from an
7395          input file, and without special handling here the flags set
7396          on it in an input file will be followed.  */
7397       if (strcmp (name, ".sdata") == 0
7398           || strcmp (name, ".lit8") == 0
7399           || strcmp (name, ".lit4") == 0)
7400         hdr->sh_flags |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL;
7401       else if (strcmp (name, ".srdata") == 0)
7402         hdr->sh_flags |= SHF_ALLOC | SHF_MIPS_GPREL;
7403       else if (strcmp (name, ".compact_rel") == 0)
7404         hdr->sh_flags = 0;
7405       else if (strcmp (name, ".rtproc") == 0)
7406         {
7407           if (hdr->sh_addralign != 0 && hdr->sh_entsize == 0)
7408             {
7409               unsigned int adjust;
7410
7411               adjust = hdr->sh_size % hdr->sh_addralign;
7412               if (adjust != 0)
7413                 hdr->sh_size += hdr->sh_addralign - adjust;
7414             }
7415         }
7416     }
7417
7418   return TRUE;
7419 }
7420
7421 /* Handle a MIPS specific section when reading an object file.  This
7422    is called when elfcode.h finds a section with an unknown type.
7423    This routine supports both the 32-bit and 64-bit ELF ABI.
7424
7425    FIXME: We need to handle the SHF_MIPS_GPREL flag, but I'm not sure
7426    how to.  */
7427
7428 bfd_boolean
7429 _bfd_mips_elf_section_from_shdr (bfd *abfd,
7430                                  Elf_Internal_Shdr *hdr,
7431                                  const char *name,
7432                                  int shindex)
7433 {
7434   flagword flags = 0;
7435
7436   /* There ought to be a place to keep ELF backend specific flags, but
7437      at the moment there isn't one.  We just keep track of the
7438      sections by their name, instead.  Fortunately, the ABI gives
7439      suggested names for all the MIPS specific sections, so we will
7440      probably get away with this.  */
7441   switch (hdr->sh_type)
7442     {
7443     case SHT_MIPS_LIBLIST:
7444       if (strcmp (name, ".liblist") != 0)
7445         return FALSE;
7446       break;
7447     case SHT_MIPS_MSYM:
7448       if (strcmp (name, ".msym") != 0)
7449         return FALSE;
7450       break;
7451     case SHT_MIPS_CONFLICT:
7452       if (strcmp (name, ".conflict") != 0)
7453         return FALSE;
7454       break;
7455     case SHT_MIPS_GPTAB:
7456       if (! CONST_STRNEQ (name, ".gptab."))
7457         return FALSE;
7458       break;
7459     case SHT_MIPS_UCODE:
7460       if (strcmp (name, ".ucode") != 0)
7461         return FALSE;
7462       break;
7463     case SHT_MIPS_DEBUG:
7464       if (strcmp (name, ".mdebug") != 0)
7465         return FALSE;
7466       flags = SEC_DEBUGGING;
7467       break;
7468     case SHT_MIPS_REGINFO:
7469       if (strcmp (name, ".reginfo") != 0
7470           || hdr->sh_size != sizeof (Elf32_External_RegInfo))
7471         return FALSE;
7472       flags = (SEC_LINK_ONCE | SEC_LINK_DUPLICATES_SAME_SIZE);
7473       break;
7474     case SHT_MIPS_IFACE:
7475       if (strcmp (name, ".MIPS.interfaces") != 0)
7476         return FALSE;
7477       break;
7478     case SHT_MIPS_CONTENT:
7479       if (! CONST_STRNEQ (name, ".MIPS.content"))
7480         return FALSE;
7481       break;
7482     case SHT_MIPS_OPTIONS:
7483       if (!MIPS_ELF_OPTIONS_SECTION_NAME_P (name))
7484         return FALSE;
7485       break;
7486     case SHT_MIPS_ABIFLAGS:
7487       if (!MIPS_ELF_ABIFLAGS_SECTION_NAME_P (name))
7488         return FALSE;
7489       flags = (SEC_LINK_ONCE | SEC_LINK_DUPLICATES_SAME_SIZE);
7490       break;
7491     case SHT_MIPS_DWARF:
7492       if (! CONST_STRNEQ (name, ".debug_")
7493           && ! CONST_STRNEQ (name, ".zdebug_"))
7494         return FALSE;
7495       break;
7496     case SHT_MIPS_SYMBOL_LIB:
7497       if (strcmp (name, ".MIPS.symlib") != 0)
7498         return FALSE;
7499       break;
7500     case SHT_MIPS_EVENTS:
7501       if (! CONST_STRNEQ (name, ".MIPS.events")
7502           && ! CONST_STRNEQ (name, ".MIPS.post_rel"))
7503         return FALSE;
7504       break;
7505     case SHT_MIPS_XHASH:
7506       if (strcmp (name, ".MIPS.xhash") != 0)
7507         return FALSE;
7508     default:
7509       break;
7510     }
7511
7512   if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
7513     return FALSE;
7514
7515   if (flags)
7516     {
7517       if (! bfd_set_section_flags (abfd, hdr->bfd_section,
7518                                    (bfd_get_section_flags (abfd,
7519                                                            hdr->bfd_section)
7520                                     | flags)))
7521         return FALSE;
7522     }
7523
7524   if (hdr->sh_type == SHT_MIPS_ABIFLAGS)
7525     {
7526       Elf_External_ABIFlags_v0 ext;
7527
7528       if (! bfd_get_section_contents (abfd, hdr->bfd_section,
7529                                       &ext, 0, sizeof ext))
7530         return FALSE;
7531       bfd_mips_elf_swap_abiflags_v0_in (abfd, &ext,
7532                                         &mips_elf_tdata (abfd)->abiflags);
7533       if (mips_elf_tdata (abfd)->abiflags.version != 0)
7534         return FALSE;
7535       mips_elf_tdata (abfd)->abiflags_valid = TRUE;
7536     }
7537
7538   /* FIXME: We should record sh_info for a .gptab section.  */
7539
7540   /* For a .reginfo section, set the gp value in the tdata information
7541      from the contents of this section.  We need the gp value while
7542      processing relocs, so we just get it now.  The .reginfo section
7543      is not used in the 64-bit MIPS ELF ABI.  */
7544   if (hdr->sh_type == SHT_MIPS_REGINFO)
7545     {
7546       Elf32_External_RegInfo ext;
7547       Elf32_RegInfo s;
7548
7549       if (! bfd_get_section_contents (abfd, hdr->bfd_section,
7550                                       &ext, 0, sizeof ext))
7551         return FALSE;
7552       bfd_mips_elf32_swap_reginfo_in (abfd, &ext, &s);
7553       elf_gp (abfd) = s.ri_gp_value;
7554     }
7555
7556   /* For a SHT_MIPS_OPTIONS section, look for a ODK_REGINFO entry, and
7557      set the gp value based on what we find.  We may see both
7558      SHT_MIPS_REGINFO and SHT_MIPS_OPTIONS/ODK_REGINFO; in that case,
7559      they should agree.  */
7560   if (hdr->sh_type == SHT_MIPS_OPTIONS)
7561     {
7562       bfd_byte *contents, *l, *lend;
7563
7564       contents = bfd_malloc (hdr->sh_size);
7565       if (contents == NULL)
7566         return FALSE;
7567       if (! bfd_get_section_contents (abfd, hdr->bfd_section, contents,
7568                                       0, hdr->sh_size))
7569         {
7570           free (contents);
7571           return FALSE;
7572         }
7573       l = contents;
7574       lend = contents + hdr->sh_size;
7575       while (l + sizeof (Elf_External_Options) <= lend)
7576         {
7577           Elf_Internal_Options intopt;
7578
7579           bfd_mips_elf_swap_options_in (abfd, (Elf_External_Options *) l,
7580                                         &intopt);
7581           if (intopt.size < sizeof (Elf_External_Options))
7582             {
7583               _bfd_error_handler
7584                 /* xgettext:c-format */
7585                 (_("%pB: warning: bad `%s' option size %u smaller than"
7586                    " its header"),
7587                 abfd, MIPS_ELF_OPTIONS_SECTION_NAME (abfd), intopt.size);
7588               break;
7589             }
7590           if (ABI_64_P (abfd) && intopt.kind == ODK_REGINFO)
7591             {
7592               Elf64_Internal_RegInfo intreg;
7593
7594               bfd_mips_elf64_swap_reginfo_in
7595                 (abfd,
7596                  ((Elf64_External_RegInfo *)
7597                   (l + sizeof (Elf_External_Options))),
7598                  &intreg);
7599               elf_gp (abfd) = intreg.ri_gp_value;
7600             }
7601           else if (intopt.kind == ODK_REGINFO)
7602             {
7603               Elf32_RegInfo intreg;
7604
7605               bfd_mips_elf32_swap_reginfo_in
7606                 (abfd,
7607                  ((Elf32_External_RegInfo *)
7608                   (l + sizeof (Elf_External_Options))),
7609                  &intreg);
7610               elf_gp (abfd) = intreg.ri_gp_value;
7611             }
7612           l += intopt.size;
7613         }
7614       free (contents);
7615     }
7616
7617   return TRUE;
7618 }
7619
7620 /* Set the correct type for a MIPS ELF section.  We do this by the
7621    section name, which is a hack, but ought to work.  This routine is
7622    used by both the 32-bit and the 64-bit ABI.  */
7623
7624 bfd_boolean
7625 _bfd_mips_elf_fake_sections (bfd *abfd, Elf_Internal_Shdr *hdr, asection *sec)
7626 {
7627   const char *name = bfd_get_section_name (abfd, sec);
7628
7629   if (strcmp (name, ".liblist") == 0)
7630     {
7631       hdr->sh_type = SHT_MIPS_LIBLIST;
7632       hdr->sh_info = sec->size / sizeof (Elf32_Lib);
7633       /* The sh_link field is set in final_write_processing.  */
7634     }
7635   else if (strcmp (name, ".conflict") == 0)
7636     hdr->sh_type = SHT_MIPS_CONFLICT;
7637   else if (CONST_STRNEQ (name, ".gptab."))
7638     {
7639       hdr->sh_type = SHT_MIPS_GPTAB;
7640       hdr->sh_entsize = sizeof (Elf32_External_gptab);
7641       /* The sh_info field is set in final_write_processing.  */
7642     }
7643   else if (strcmp (name, ".ucode") == 0)
7644     hdr->sh_type = SHT_MIPS_UCODE;
7645   else if (strcmp (name, ".mdebug") == 0)
7646     {
7647       hdr->sh_type = SHT_MIPS_DEBUG;
7648       /* In a shared object on IRIX 5.3, the .mdebug section has an
7649          entsize of 0.  FIXME: Does this matter?  */
7650       if (SGI_COMPAT (abfd) && (abfd->flags & DYNAMIC) != 0)
7651         hdr->sh_entsize = 0;
7652       else
7653         hdr->sh_entsize = 1;
7654     }
7655   else if (strcmp (name, ".reginfo") == 0)
7656     {
7657       hdr->sh_type = SHT_MIPS_REGINFO;
7658       /* In a shared object on IRIX 5.3, the .reginfo section has an
7659          entsize of 0x18.  FIXME: Does this matter?  */
7660       if (SGI_COMPAT (abfd))
7661         {
7662           if ((abfd->flags & DYNAMIC) != 0)
7663             hdr->sh_entsize = sizeof (Elf32_External_RegInfo);
7664           else
7665             hdr->sh_entsize = 1;
7666         }
7667       else
7668         hdr->sh_entsize = sizeof (Elf32_External_RegInfo);
7669     }
7670   else if (SGI_COMPAT (abfd)
7671            && (strcmp (name, ".hash") == 0
7672                || strcmp (name, ".dynamic") == 0
7673                || strcmp (name, ".dynstr") == 0))
7674     {
7675       if (SGI_COMPAT (abfd))
7676         hdr->sh_entsize = 0;
7677 #if 0
7678       /* This isn't how the IRIX6 linker behaves.  */
7679       hdr->sh_info = SIZEOF_MIPS_DYNSYM_SECNAMES;
7680 #endif
7681     }
7682   else if (strcmp (name, ".got") == 0
7683            || strcmp (name, ".srdata") == 0
7684            || strcmp (name, ".sdata") == 0
7685            || strcmp (name, ".sbss") == 0
7686            || strcmp (name, ".lit4") == 0
7687            || strcmp (name, ".lit8") == 0)
7688     hdr->sh_flags |= SHF_MIPS_GPREL;
7689   else if (strcmp (name, ".MIPS.interfaces") == 0)
7690     {
7691       hdr->sh_type = SHT_MIPS_IFACE;
7692       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7693     }
7694   else if (CONST_STRNEQ (name, ".MIPS.content"))
7695     {
7696       hdr->sh_type = SHT_MIPS_CONTENT;
7697       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7698       /* The sh_info field is set in final_write_processing.  */
7699     }
7700   else if (MIPS_ELF_OPTIONS_SECTION_NAME_P (name))
7701     {
7702       hdr->sh_type = SHT_MIPS_OPTIONS;
7703       hdr->sh_entsize = 1;
7704       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7705     }
7706   else if (CONST_STRNEQ (name, ".MIPS.abiflags"))
7707     {
7708       hdr->sh_type = SHT_MIPS_ABIFLAGS;
7709       hdr->sh_entsize = sizeof (Elf_External_ABIFlags_v0);
7710     }
7711   else if (CONST_STRNEQ (name, ".debug_")
7712            || CONST_STRNEQ (name, ".zdebug_"))
7713     {
7714       hdr->sh_type = SHT_MIPS_DWARF;
7715
7716       /* Irix facilities such as libexc expect a single .debug_frame
7717          per executable, the system ones have NOSTRIP set and the linker
7718          doesn't merge sections with different flags so ...  */
7719       if (SGI_COMPAT (abfd) && CONST_STRNEQ (name, ".debug_frame"))
7720         hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7721     }
7722   else if (strcmp (name, ".MIPS.symlib") == 0)
7723     {
7724       hdr->sh_type = SHT_MIPS_SYMBOL_LIB;
7725       /* The sh_link and sh_info fields are set in
7726          final_write_processing.  */
7727     }
7728   else if (CONST_STRNEQ (name, ".MIPS.events")
7729            || CONST_STRNEQ (name, ".MIPS.post_rel"))
7730     {
7731       hdr->sh_type = SHT_MIPS_EVENTS;
7732       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7733       /* The sh_link field is set in final_write_processing.  */
7734     }
7735   else if (strcmp (name, ".msym") == 0)
7736     {
7737       hdr->sh_type = SHT_MIPS_MSYM;
7738       hdr->sh_flags |= SHF_ALLOC;
7739       hdr->sh_entsize = 8;
7740     }
7741   else if (strcmp (name, ".MIPS.xhash") == 0)
7742     {
7743       hdr->sh_type = SHT_MIPS_XHASH;
7744       hdr->sh_flags |= SHF_ALLOC;
7745       hdr->sh_entsize = get_elf_backend_data(abfd)->s->arch_size == 64 ? 0 : 4;
7746     }
7747
7748   /* The generic elf_fake_sections will set up REL_HDR using the default
7749    kind of relocations.  We used to set up a second header for the
7750    non-default kind of relocations here, but only NewABI would use
7751    these, and the IRIX ld doesn't like resulting empty RELA sections.
7752    Thus we create those header only on demand now.  */
7753
7754   return TRUE;
7755 }
7756
7757 /* Given a BFD section, try to locate the corresponding ELF section
7758    index.  This is used by both the 32-bit and the 64-bit ABI.
7759    Actually, it's not clear to me that the 64-bit ABI supports these,
7760    but for non-PIC objects we will certainly want support for at least
7761    the .scommon section.  */
7762
7763 bfd_boolean
7764 _bfd_mips_elf_section_from_bfd_section (bfd *abfd ATTRIBUTE_UNUSED,
7765                                         asection *sec, int *retval)
7766 {
7767   if (strcmp (bfd_get_section_name (abfd, sec), ".scommon") == 0)
7768     {
7769       *retval = SHN_MIPS_SCOMMON;
7770       return TRUE;
7771     }
7772   if (strcmp (bfd_get_section_name (abfd, sec), ".acommon") == 0)
7773     {
7774       *retval = SHN_MIPS_ACOMMON;
7775       return TRUE;
7776     }
7777   return FALSE;
7778 }
7779 \f
7780 /* Hook called by the linker routine which adds symbols from an object
7781    file.  We must handle the special MIPS section numbers here.  */
7782
7783 bfd_boolean
7784 _bfd_mips_elf_add_symbol_hook (bfd *abfd, struct bfd_link_info *info,
7785                                Elf_Internal_Sym *sym, const char **namep,
7786                                flagword *flagsp ATTRIBUTE_UNUSED,
7787                                asection **secp, bfd_vma *valp)
7788 {
7789   if (SGI_COMPAT (abfd)
7790       && (abfd->flags & DYNAMIC) != 0
7791       && strcmp (*namep, "_rld_new_interface") == 0)
7792     {
7793       /* Skip IRIX5 rld entry name.  */
7794       *namep = NULL;
7795       return TRUE;
7796     }
7797
7798   /* Shared objects may have a dynamic symbol '_gp_disp' defined as
7799      a SECTION *ABS*.  This causes ld to think it can resolve _gp_disp
7800      by setting a DT_NEEDED for the shared object.  Since _gp_disp is
7801      a magic symbol resolved by the linker, we ignore this bogus definition
7802      of _gp_disp.  New ABI objects do not suffer from this problem so this
7803      is not done for them. */
7804   if (!NEWABI_P(abfd)
7805       && (sym->st_shndx == SHN_ABS)
7806       && (strcmp (*namep, "_gp_disp") == 0))
7807     {
7808       *namep = NULL;
7809       return TRUE;
7810     }
7811
7812   switch (sym->st_shndx)
7813     {
7814     case SHN_COMMON:
7815       /* Common symbols less than the GP size are automatically
7816          treated as SHN_MIPS_SCOMMON symbols.  */
7817       if (sym->st_size > elf_gp_size (abfd)
7818           || ELF_ST_TYPE (sym->st_info) == STT_TLS
7819           || IRIX_COMPAT (abfd) == ict_irix6)
7820         break;
7821       /* Fall through.  */
7822     case SHN_MIPS_SCOMMON:
7823       *secp = bfd_make_section_old_way (abfd, ".scommon");
7824       (*secp)->flags |= SEC_IS_COMMON;
7825       *valp = sym->st_size;
7826       break;
7827
7828     case SHN_MIPS_TEXT:
7829       /* This section is used in a shared object.  */
7830       if (mips_elf_tdata (abfd)->elf_text_section == NULL)
7831         {
7832           asymbol *elf_text_symbol;
7833           asection *elf_text_section;
7834           bfd_size_type amt = sizeof (asection);
7835
7836           elf_text_section = bfd_zalloc (abfd, amt);
7837           if (elf_text_section == NULL)
7838             return FALSE;
7839
7840           amt = sizeof (asymbol);
7841           elf_text_symbol = bfd_zalloc (abfd, amt);
7842           if (elf_text_symbol == NULL)
7843             return FALSE;
7844
7845           /* Initialize the section.  */
7846
7847           mips_elf_tdata (abfd)->elf_text_section = elf_text_section;
7848           mips_elf_tdata (abfd)->elf_text_symbol = elf_text_symbol;
7849
7850           elf_text_section->symbol = elf_text_symbol;
7851           elf_text_section->symbol_ptr_ptr = &mips_elf_tdata (abfd)->elf_text_symbol;
7852
7853           elf_text_section->name = ".text";
7854           elf_text_section->flags = SEC_NO_FLAGS;
7855           elf_text_section->output_section = NULL;
7856           elf_text_section->owner = abfd;
7857           elf_text_symbol->name = ".text";
7858           elf_text_symbol->flags = BSF_SECTION_SYM | BSF_DYNAMIC;
7859           elf_text_symbol->section = elf_text_section;
7860         }
7861       /* This code used to do *secp = bfd_und_section_ptr if
7862          bfd_link_pic (info).  I don't know why, and that doesn't make sense,
7863          so I took it out.  */
7864       *secp = mips_elf_tdata (abfd)->elf_text_section;
7865       break;
7866
7867     case SHN_MIPS_ACOMMON:
7868       /* Fall through. XXX Can we treat this as allocated data?  */
7869     case SHN_MIPS_DATA:
7870       /* This section is used in a shared object.  */
7871       if (mips_elf_tdata (abfd)->elf_data_section == NULL)
7872         {
7873           asymbol *elf_data_symbol;
7874           asection *elf_data_section;
7875           bfd_size_type amt = sizeof (asection);
7876
7877           elf_data_section = bfd_zalloc (abfd, amt);
7878           if (elf_data_section == NULL)
7879             return FALSE;
7880
7881           amt = sizeof (asymbol);
7882           elf_data_symbol = bfd_zalloc (abfd, amt);
7883           if (elf_data_symbol == NULL)
7884             return FALSE;
7885
7886           /* Initialize the section.  */
7887
7888           mips_elf_tdata (abfd)->elf_data_section = elf_data_section;
7889           mips_elf_tdata (abfd)->elf_data_symbol = elf_data_symbol;
7890
7891           elf_data_section->symbol = elf_data_symbol;
7892           elf_data_section->symbol_ptr_ptr = &mips_elf_tdata (abfd)->elf_data_symbol;
7893
7894           elf_data_section->name = ".data";
7895           elf_data_section->flags = SEC_NO_FLAGS;
7896           elf_data_section->output_section = NULL;
7897           elf_data_section->owner = abfd;
7898           elf_data_symbol->name = ".data";
7899           elf_data_symbol->flags = BSF_SECTION_SYM | BSF_DYNAMIC;
7900           elf_data_symbol->section = elf_data_section;
7901         }
7902       /* This code used to do *secp = bfd_und_section_ptr if
7903          bfd_link_pic (info).  I don't know why, and that doesn't make sense,
7904          so I took it out.  */
7905       *secp = mips_elf_tdata (abfd)->elf_data_section;
7906       break;
7907
7908     case SHN_MIPS_SUNDEFINED:
7909       *secp = bfd_und_section_ptr;
7910       break;
7911     }
7912
7913   if (SGI_COMPAT (abfd)
7914       && ! bfd_link_pic (info)
7915       && info->output_bfd->xvec == abfd->xvec
7916       && strcmp (*namep, "__rld_obj_head") == 0)
7917     {
7918       struct elf_link_hash_entry *h;
7919       struct bfd_link_hash_entry *bh;
7920
7921       /* Mark __rld_obj_head as dynamic.  */
7922       bh = NULL;
7923       if (! (_bfd_generic_link_add_one_symbol
7924              (info, abfd, *namep, BSF_GLOBAL, *secp, *valp, NULL, FALSE,
7925               get_elf_backend_data (abfd)->collect, &bh)))
7926         return FALSE;
7927
7928       h = (struct elf_link_hash_entry *) bh;
7929       h->non_elf = 0;
7930       h->def_regular = 1;
7931       h->type = STT_OBJECT;
7932
7933       if (! bfd_elf_link_record_dynamic_symbol (info, h))
7934         return FALSE;
7935
7936       mips_elf_hash_table (info)->use_rld_obj_head = TRUE;
7937       mips_elf_hash_table (info)->rld_symbol = h;
7938     }
7939
7940   /* If this is a mips16 text symbol, add 1 to the value to make it
7941      odd.  This will cause something like .word SYM to come up with
7942      the right value when it is loaded into the PC.  */
7943   if (ELF_ST_IS_COMPRESSED (sym->st_other))
7944     ++*valp;
7945
7946   return TRUE;
7947 }
7948
7949 /* This hook function is called before the linker writes out a global
7950    symbol.  We mark symbols as small common if appropriate.  This is
7951    also where we undo the increment of the value for a mips16 symbol.  */
7952
7953 int
7954 _bfd_mips_elf_link_output_symbol_hook
7955   (struct bfd_link_info *info ATTRIBUTE_UNUSED,
7956    const char *name ATTRIBUTE_UNUSED, Elf_Internal_Sym *sym,
7957    asection *input_sec, struct elf_link_hash_entry *h ATTRIBUTE_UNUSED)
7958 {
7959   /* If we see a common symbol, which implies a relocatable link, then
7960      if a symbol was small common in an input file, mark it as small
7961      common in the output file.  */
7962   if (sym->st_shndx == SHN_COMMON
7963       && strcmp (input_sec->name, ".scommon") == 0)
7964     sym->st_shndx = SHN_MIPS_SCOMMON;
7965
7966   if (ELF_ST_IS_COMPRESSED (sym->st_other))
7967     sym->st_value &= ~1;
7968
7969   return 1;
7970 }
7971 \f
7972 /* Functions for the dynamic linker.  */
7973
7974 /* Create dynamic sections when linking against a dynamic object.  */
7975
7976 bfd_boolean
7977 _bfd_mips_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
7978 {
7979   struct elf_link_hash_entry *h;
7980   struct bfd_link_hash_entry *bh;
7981   flagword flags;
7982   register asection *s;
7983   const char * const *namep;
7984   struct mips_elf_link_hash_table *htab;
7985
7986   htab = mips_elf_hash_table (info);
7987   BFD_ASSERT (htab != NULL);
7988
7989   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
7990            | SEC_LINKER_CREATED | SEC_READONLY);
7991
7992   /* The psABI requires a read-only .dynamic section, but the VxWorks
7993      EABI doesn't.  */
7994   if (!htab->is_vxworks)
7995     {
7996       s = bfd_get_linker_section (abfd, ".dynamic");
7997       if (s != NULL)
7998         {
7999           if (! bfd_set_section_flags (abfd, s, flags))
8000             return FALSE;
8001         }
8002     }
8003
8004   /* We need to create .got section.  */
8005   if (!mips_elf_create_got_section (abfd, info))
8006     return FALSE;
8007
8008   if (! mips_elf_rel_dyn_section (info, TRUE))
8009     return FALSE;
8010
8011   /* Create .stub section.  */
8012   s = bfd_make_section_anyway_with_flags (abfd,
8013                                           MIPS_ELF_STUB_SECTION_NAME (abfd),
8014                                           flags | SEC_CODE);
8015   if (s == NULL
8016       || ! bfd_set_section_alignment (abfd, s,
8017                                       MIPS_ELF_LOG_FILE_ALIGN (abfd)))
8018     return FALSE;
8019   htab->sstubs = s;
8020
8021   if (!mips_elf_hash_table (info)->use_rld_obj_head
8022       && bfd_link_executable (info)
8023       && bfd_get_linker_section (abfd, ".rld_map") == NULL)
8024     {
8025       s = bfd_make_section_anyway_with_flags (abfd, ".rld_map",
8026                                               flags &~ (flagword) SEC_READONLY);
8027       if (s == NULL
8028           || ! bfd_set_section_alignment (abfd, s,
8029                                           MIPS_ELF_LOG_FILE_ALIGN (abfd)))
8030         return FALSE;
8031     }
8032
8033   /* Create .MIPS.xhash section.  */
8034   if (info->emit_gnu_hash)
8035     s = bfd_make_section_anyway_with_flags (abfd, ".MIPS.xhash",
8036                                             flags | SEC_READONLY);
8037
8038   /* On IRIX5, we adjust add some additional symbols and change the
8039      alignments of several sections.  There is no ABI documentation
8040      indicating that this is necessary on IRIX6, nor any evidence that
8041      the linker takes such action.  */
8042   if (IRIX_COMPAT (abfd) == ict_irix5)
8043     {
8044       for (namep = mips_elf_dynsym_rtproc_names; *namep != NULL; namep++)
8045         {
8046           bh = NULL;
8047           if (! (_bfd_generic_link_add_one_symbol
8048                  (info, abfd, *namep, BSF_GLOBAL, bfd_und_section_ptr, 0,
8049                   NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
8050             return FALSE;
8051
8052           h = (struct elf_link_hash_entry *) bh;
8053           h->mark = 1;
8054           h->non_elf = 0;
8055           h->def_regular = 1;
8056           h->type = STT_SECTION;
8057
8058           if (! bfd_elf_link_record_dynamic_symbol (info, h))
8059             return FALSE;
8060         }
8061
8062       /* We need to create a .compact_rel section.  */
8063       if (SGI_COMPAT (abfd))
8064         {
8065           if (!mips_elf_create_compact_rel_section (abfd, info))
8066             return FALSE;
8067         }
8068
8069       /* Change alignments of some sections.  */
8070       s = bfd_get_linker_section (abfd, ".hash");
8071       if (s != NULL)
8072         (void) bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
8073
8074       s = bfd_get_linker_section (abfd, ".dynsym");
8075       if (s != NULL)
8076         (void) bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
8077
8078       s = bfd_get_linker_section (abfd, ".dynstr");
8079       if (s != NULL)
8080         (void) bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
8081
8082       /* ??? */
8083       s = bfd_get_section_by_name (abfd, ".reginfo");
8084       if (s != NULL)
8085         (void) bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
8086
8087       s = bfd_get_linker_section (abfd, ".dynamic");
8088       if (s != NULL)
8089         (void) bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
8090     }
8091
8092   if (bfd_link_executable (info))
8093     {
8094       const char *name;
8095
8096       name = SGI_COMPAT (abfd) ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING";
8097       bh = NULL;
8098       if (!(_bfd_generic_link_add_one_symbol
8099             (info, abfd, name, BSF_GLOBAL, bfd_abs_section_ptr, 0,
8100              NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
8101         return FALSE;
8102
8103       h = (struct elf_link_hash_entry *) bh;
8104       h->non_elf = 0;
8105       h->def_regular = 1;
8106       h->type = STT_SECTION;
8107
8108       if (! bfd_elf_link_record_dynamic_symbol (info, h))
8109         return FALSE;
8110
8111       if (! mips_elf_hash_table (info)->use_rld_obj_head)
8112         {
8113           /* __rld_map is a four byte word located in the .data section
8114              and is filled in by the rtld to contain a pointer to
8115              the _r_debug structure. Its symbol value will be set in
8116              _bfd_mips_elf_finish_dynamic_symbol.  */
8117           s = bfd_get_linker_section (abfd, ".rld_map");
8118           BFD_ASSERT (s != NULL);
8119
8120           name = SGI_COMPAT (abfd) ? "__rld_map" : "__RLD_MAP";
8121           bh = NULL;
8122           if (!(_bfd_generic_link_add_one_symbol
8123                 (info, abfd, name, BSF_GLOBAL, s, 0, NULL, FALSE,
8124                  get_elf_backend_data (abfd)->collect, &bh)))
8125             return FALSE;
8126
8127           h = (struct elf_link_hash_entry *) bh;
8128           h->non_elf = 0;
8129           h->def_regular = 1;
8130           h->type = STT_OBJECT;
8131
8132           if (! bfd_elf_link_record_dynamic_symbol (info, h))
8133             return FALSE;
8134           mips_elf_hash_table (info)->rld_symbol = h;
8135         }
8136     }
8137
8138   /* Create the .plt, .rel(a).plt, .dynbss and .rel(a).bss sections.
8139      Also, on VxWorks, create the _PROCEDURE_LINKAGE_TABLE_ symbol.  */
8140   if (!_bfd_elf_create_dynamic_sections (abfd, info))
8141     return FALSE;
8142
8143   /* Do the usual VxWorks handling.  */
8144   if (htab->is_vxworks
8145       && !elf_vxworks_create_dynamic_sections (abfd, info, &htab->srelplt2))
8146     return FALSE;
8147
8148   return TRUE;
8149 }
8150 \f
8151 /* Return true if relocation REL against section SEC is a REL rather than
8152    RELA relocation.  RELOCS is the first relocation in the section and
8153    ABFD is the bfd that contains SEC.  */
8154
8155 static bfd_boolean
8156 mips_elf_rel_relocation_p (bfd *abfd, asection *sec,
8157                            const Elf_Internal_Rela *relocs,
8158                            const Elf_Internal_Rela *rel)
8159 {
8160   Elf_Internal_Shdr *rel_hdr;
8161   const struct elf_backend_data *bed;
8162
8163   /* To determine which flavor of relocation this is, we depend on the
8164      fact that the INPUT_SECTION's REL_HDR is read before RELA_HDR.  */
8165   rel_hdr = elf_section_data (sec)->rel.hdr;
8166   if (rel_hdr == NULL)
8167     return FALSE;
8168   bed = get_elf_backend_data (abfd);
8169   return ((size_t) (rel - relocs)
8170           < NUM_SHDR_ENTRIES (rel_hdr) * bed->s->int_rels_per_ext_rel);
8171 }
8172
8173 /* Read the addend for REL relocation REL, which belongs to bfd ABFD.
8174    HOWTO is the relocation's howto and CONTENTS points to the contents
8175    of the section that REL is against.  */
8176
8177 static bfd_vma
8178 mips_elf_read_rel_addend (bfd *abfd, const Elf_Internal_Rela *rel,
8179                           reloc_howto_type *howto, bfd_byte *contents)
8180 {
8181   bfd_byte *location;
8182   unsigned int r_type;
8183   bfd_vma addend;
8184   bfd_vma bytes;
8185
8186   r_type = ELF_R_TYPE (abfd, rel->r_info);
8187   location = contents + rel->r_offset;
8188
8189   /* Get the addend, which is stored in the input file.  */
8190   _bfd_mips_elf_reloc_unshuffle (abfd, r_type, FALSE, location);
8191   bytes = mips_elf_obtain_contents (howto, rel, abfd, contents);
8192   _bfd_mips_elf_reloc_shuffle (abfd, r_type, FALSE, location);
8193
8194   addend = bytes & howto->src_mask;
8195
8196   /* Shift is 2, unusually, for microMIPS JALX.  Adjust the addend
8197      accordingly.  */
8198   if (r_type == R_MICROMIPS_26_S1 && (bytes >> 26) == 0x3c)
8199     addend <<= 1;
8200
8201   return addend;
8202 }
8203
8204 /* REL is a relocation in ABFD that needs a partnering LO16 relocation
8205    and *ADDEND is the addend for REL itself.  Look for the LO16 relocation
8206    and update *ADDEND with the final addend.  Return true on success
8207    or false if the LO16 could not be found.  RELEND is the exclusive
8208    upper bound on the relocations for REL's section.  */
8209
8210 static bfd_boolean
8211 mips_elf_add_lo16_rel_addend (bfd *abfd,
8212                               const Elf_Internal_Rela *rel,
8213                               const Elf_Internal_Rela *relend,
8214                               bfd_byte *contents, bfd_vma *addend)
8215 {
8216   unsigned int r_type, lo16_type;
8217   const Elf_Internal_Rela *lo16_relocation;
8218   reloc_howto_type *lo16_howto;
8219   bfd_vma l;
8220
8221   r_type = ELF_R_TYPE (abfd, rel->r_info);
8222   if (mips16_reloc_p (r_type))
8223     lo16_type = R_MIPS16_LO16;
8224   else if (micromips_reloc_p (r_type))
8225     lo16_type = R_MICROMIPS_LO16;
8226   else if (r_type == R_MIPS_PCHI16)
8227     lo16_type = R_MIPS_PCLO16;
8228   else
8229     lo16_type = R_MIPS_LO16;
8230
8231   /* The combined value is the sum of the HI16 addend, left-shifted by
8232      sixteen bits, and the LO16 addend, sign extended.  (Usually, the
8233      code does a `lui' of the HI16 value, and then an `addiu' of the
8234      LO16 value.)
8235
8236      Scan ahead to find a matching LO16 relocation.
8237
8238      According to the MIPS ELF ABI, the R_MIPS_LO16 relocation must
8239      be immediately following.  However, for the IRIX6 ABI, the next
8240      relocation may be a composed relocation consisting of several
8241      relocations for the same address.  In that case, the R_MIPS_LO16
8242      relocation may occur as one of these.  We permit a similar
8243      extension in general, as that is useful for GCC.
8244
8245      In some cases GCC dead code elimination removes the LO16 but keeps
8246      the corresponding HI16.  This is strictly speaking a violation of
8247      the ABI but not immediately harmful.  */
8248   lo16_relocation = mips_elf_next_relocation (abfd, lo16_type, rel, relend);
8249   if (lo16_relocation == NULL)
8250     return FALSE;
8251
8252   /* Obtain the addend kept there.  */
8253   lo16_howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, lo16_type, FALSE);
8254   l = mips_elf_read_rel_addend (abfd, lo16_relocation, lo16_howto, contents);
8255
8256   l <<= lo16_howto->rightshift;
8257   l = _bfd_mips_elf_sign_extend (l, 16);
8258
8259   *addend <<= 16;
8260   *addend += l;
8261   return TRUE;
8262 }
8263
8264 /* Try to read the contents of section SEC in bfd ABFD.  Return true and
8265    store the contents in *CONTENTS on success.  Assume that *CONTENTS
8266    already holds the contents if it is nonull on entry.  */
8267
8268 static bfd_boolean
8269 mips_elf_get_section_contents (bfd *abfd, asection *sec, bfd_byte **contents)
8270 {
8271   if (*contents)
8272     return TRUE;
8273
8274   /* Get cached copy if it exists.  */
8275   if (elf_section_data (sec)->this_hdr.contents != NULL)
8276     {
8277       *contents = elf_section_data (sec)->this_hdr.contents;
8278       return TRUE;
8279     }
8280
8281   return bfd_malloc_and_get_section (abfd, sec, contents);
8282 }
8283
8284 /* Make a new PLT record to keep internal data.  */
8285
8286 static struct plt_entry *
8287 mips_elf_make_plt_record (bfd *abfd)
8288 {
8289   struct plt_entry *entry;
8290
8291   entry = bfd_zalloc (abfd, sizeof (*entry));
8292   if (entry == NULL)
8293     return NULL;
8294
8295   entry->stub_offset = MINUS_ONE;
8296   entry->mips_offset = MINUS_ONE;
8297   entry->comp_offset = MINUS_ONE;
8298   entry->gotplt_index = MINUS_ONE;
8299   return entry;
8300 }
8301
8302 /* Define the special `__gnu_absolute_zero' symbol.  We only need this
8303    for PIC code, as otherwise there is no load-time relocation involved
8304    and local GOT entries whose value is zero at static link time will
8305    retain their value at load time.  */
8306
8307 static bfd_boolean
8308 mips_elf_define_absolute_zero (bfd *abfd, struct bfd_link_info *info,
8309                                struct mips_elf_link_hash_table *htab,
8310                                unsigned int r_type)
8311 {
8312   union
8313     {
8314       struct elf_link_hash_entry *eh;
8315       struct bfd_link_hash_entry *bh;
8316     }
8317   hzero;
8318
8319   BFD_ASSERT (!htab->use_absolute_zero);
8320   BFD_ASSERT (bfd_link_pic (info));
8321
8322   hzero.bh = NULL;
8323   if (!_bfd_generic_link_add_one_symbol (info, abfd, "__gnu_absolute_zero",
8324                                          BSF_GLOBAL, bfd_abs_section_ptr, 0,
8325                                          NULL, FALSE, FALSE, &hzero.bh))
8326     return FALSE;
8327
8328   BFD_ASSERT (hzero.bh != NULL);
8329   hzero.eh->size = 0;
8330   hzero.eh->type = STT_NOTYPE;
8331   hzero.eh->other = STV_PROTECTED;
8332   hzero.eh->def_regular = 1;
8333   hzero.eh->non_elf = 0;
8334
8335   if (!mips_elf_record_global_got_symbol (hzero.eh, abfd, info, TRUE, r_type))
8336     return FALSE;
8337
8338   htab->use_absolute_zero = TRUE;
8339
8340   return TRUE;
8341 }
8342
8343 /* Look through the relocs for a section during the first phase, and
8344    allocate space in the global offset table and record the need for
8345    standard MIPS and compressed procedure linkage table entries.  */
8346
8347 bfd_boolean
8348 _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
8349                             asection *sec, const Elf_Internal_Rela *relocs)
8350 {
8351   const char *name;
8352   bfd *dynobj;
8353   Elf_Internal_Shdr *symtab_hdr;
8354   struct elf_link_hash_entry **sym_hashes;
8355   size_t extsymoff;
8356   const Elf_Internal_Rela *rel;
8357   const Elf_Internal_Rela *rel_end;
8358   asection *sreloc;
8359   const struct elf_backend_data *bed;
8360   struct mips_elf_link_hash_table *htab;
8361   bfd_byte *contents;
8362   bfd_vma addend;
8363   reloc_howto_type *howto;
8364
8365   if (bfd_link_relocatable (info))
8366     return TRUE;
8367
8368   htab = mips_elf_hash_table (info);
8369   BFD_ASSERT (htab != NULL);
8370
8371   dynobj = elf_hash_table (info)->dynobj;
8372   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
8373   sym_hashes = elf_sym_hashes (abfd);
8374   extsymoff = (elf_bad_symtab (abfd)) ? 0 : symtab_hdr->sh_info;
8375
8376   bed = get_elf_backend_data (abfd);
8377   rel_end = relocs + sec->reloc_count;
8378
8379   /* Check for the mips16 stub sections.  */
8380
8381   name = bfd_get_section_name (abfd, sec);
8382   if (FN_STUB_P (name))
8383     {
8384       unsigned long r_symndx;
8385
8386       /* Look at the relocation information to figure out which symbol
8387          this is for.  */
8388
8389       r_symndx = mips16_stub_symndx (bed, sec, relocs, rel_end);
8390       if (r_symndx == 0)
8391         {
8392           _bfd_error_handler
8393             /* xgettext:c-format */
8394             (_("%pB: warning: cannot determine the target function for"
8395                " stub section `%s'"),
8396              abfd, name);
8397           bfd_set_error (bfd_error_bad_value);
8398           return FALSE;
8399         }
8400
8401       if (r_symndx < extsymoff
8402           || sym_hashes[r_symndx - extsymoff] == NULL)
8403         {
8404           asection *o;
8405
8406           /* This stub is for a local symbol.  This stub will only be
8407              needed if there is some relocation in this BFD, other
8408              than a 16 bit function call, which refers to this symbol.  */
8409           for (o = abfd->sections; o != NULL; o = o->next)
8410             {
8411               Elf_Internal_Rela *sec_relocs;
8412               const Elf_Internal_Rela *r, *rend;
8413
8414               /* We can ignore stub sections when looking for relocs.  */
8415               if ((o->flags & SEC_RELOC) == 0
8416                   || o->reloc_count == 0
8417                   || section_allows_mips16_refs_p (o))
8418                 continue;
8419
8420               sec_relocs
8421                 = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
8422                                              info->keep_memory);
8423               if (sec_relocs == NULL)
8424                 return FALSE;
8425
8426               rend = sec_relocs + o->reloc_count;
8427               for (r = sec_relocs; r < rend; r++)
8428                 if (ELF_R_SYM (abfd, r->r_info) == r_symndx
8429                     && !mips16_call_reloc_p (ELF_R_TYPE (abfd, r->r_info)))
8430                   break;
8431
8432               if (elf_section_data (o)->relocs != sec_relocs)
8433                 free (sec_relocs);
8434
8435               if (r < rend)
8436                 break;
8437             }
8438
8439           if (o == NULL)
8440             {
8441               /* There is no non-call reloc for this stub, so we do
8442                  not need it.  Since this function is called before
8443                  the linker maps input sections to output sections, we
8444                  can easily discard it by setting the SEC_EXCLUDE
8445                  flag.  */
8446               sec->flags |= SEC_EXCLUDE;
8447               return TRUE;
8448             }
8449
8450           /* Record this stub in an array of local symbol stubs for
8451              this BFD.  */
8452           if (mips_elf_tdata (abfd)->local_stubs == NULL)
8453             {
8454               unsigned long symcount;
8455               asection **n;
8456               bfd_size_type amt;
8457
8458               if (elf_bad_symtab (abfd))
8459                 symcount = NUM_SHDR_ENTRIES (symtab_hdr);
8460               else
8461                 symcount = symtab_hdr->sh_info;
8462               amt = symcount * sizeof (asection *);
8463               n = bfd_zalloc (abfd, amt);
8464               if (n == NULL)
8465                 return FALSE;
8466               mips_elf_tdata (abfd)->local_stubs = n;
8467             }
8468
8469           sec->flags |= SEC_KEEP;
8470           mips_elf_tdata (abfd)->local_stubs[r_symndx] = sec;
8471
8472           /* We don't need to set mips16_stubs_seen in this case.
8473              That flag is used to see whether we need to look through
8474              the global symbol table for stubs.  We don't need to set
8475              it here, because we just have a local stub.  */
8476         }
8477       else
8478         {
8479           struct mips_elf_link_hash_entry *h;
8480
8481           h = ((struct mips_elf_link_hash_entry *)
8482                sym_hashes[r_symndx - extsymoff]);
8483
8484           while (h->root.root.type == bfd_link_hash_indirect
8485                  || h->root.root.type == bfd_link_hash_warning)
8486             h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
8487
8488           /* H is the symbol this stub is for.  */
8489
8490           /* If we already have an appropriate stub for this function, we
8491              don't need another one, so we can discard this one.  Since
8492              this function is called before the linker maps input sections
8493              to output sections, we can easily discard it by setting the
8494              SEC_EXCLUDE flag.  */
8495           if (h->fn_stub != NULL)
8496             {
8497               sec->flags |= SEC_EXCLUDE;
8498               return TRUE;
8499             }
8500
8501           sec->flags |= SEC_KEEP;
8502           h->fn_stub = sec;
8503           mips_elf_hash_table (info)->mips16_stubs_seen = TRUE;
8504         }
8505     }
8506   else if (CALL_STUB_P (name) || CALL_FP_STUB_P (name))
8507     {
8508       unsigned long r_symndx;
8509       struct mips_elf_link_hash_entry *h;
8510       asection **loc;
8511
8512       /* Look at the relocation information to figure out which symbol
8513          this is for.  */
8514
8515       r_symndx = mips16_stub_symndx (bed, sec, relocs, rel_end);
8516       if (r_symndx == 0)
8517         {
8518           _bfd_error_handler
8519             /* xgettext:c-format */
8520             (_("%pB: warning: cannot determine the target function for"
8521                " stub section `%s'"),
8522              abfd, name);
8523           bfd_set_error (bfd_error_bad_value);
8524           return FALSE;
8525         }
8526
8527       if (r_symndx < extsymoff
8528           || sym_hashes[r_symndx - extsymoff] == NULL)
8529         {
8530           asection *o;
8531
8532           /* This stub is for a local symbol.  This stub will only be
8533              needed if there is some relocation (R_MIPS16_26) in this BFD
8534              that refers to this symbol.  */
8535           for (o = abfd->sections; o != NULL; o = o->next)
8536             {
8537               Elf_Internal_Rela *sec_relocs;
8538               const Elf_Internal_Rela *r, *rend;
8539
8540               /* We can ignore stub sections when looking for relocs.  */
8541               if ((o->flags & SEC_RELOC) == 0
8542                   || o->reloc_count == 0
8543                   || section_allows_mips16_refs_p (o))
8544                 continue;
8545
8546               sec_relocs
8547                 = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
8548                                              info->keep_memory);
8549               if (sec_relocs == NULL)
8550                 return FALSE;
8551
8552               rend = sec_relocs + o->reloc_count;
8553               for (r = sec_relocs; r < rend; r++)
8554                 if (ELF_R_SYM (abfd, r->r_info) == r_symndx
8555                     && ELF_R_TYPE (abfd, r->r_info) == R_MIPS16_26)
8556                     break;
8557
8558               if (elf_section_data (o)->relocs != sec_relocs)
8559                 free (sec_relocs);
8560
8561               if (r < rend)
8562                 break;
8563             }
8564
8565           if (o == NULL)
8566             {
8567               /* There is no non-call reloc for this stub, so we do
8568                  not need it.  Since this function is called before
8569                  the linker maps input sections to output sections, we
8570                  can easily discard it by setting the SEC_EXCLUDE
8571                  flag.  */
8572               sec->flags |= SEC_EXCLUDE;
8573               return TRUE;
8574             }
8575
8576           /* Record this stub in an array of local symbol call_stubs for
8577              this BFD.  */
8578           if (mips_elf_tdata (abfd)->local_call_stubs == NULL)
8579             {
8580               unsigned long symcount;
8581               asection **n;
8582               bfd_size_type amt;
8583
8584               if (elf_bad_symtab (abfd))
8585                 symcount = NUM_SHDR_ENTRIES (symtab_hdr);
8586               else
8587                 symcount = symtab_hdr->sh_info;
8588               amt = symcount * sizeof (asection *);
8589               n = bfd_zalloc (abfd, amt);
8590               if (n == NULL)
8591                 return FALSE;
8592               mips_elf_tdata (abfd)->local_call_stubs = n;
8593             }
8594
8595           sec->flags |= SEC_KEEP;
8596           mips_elf_tdata (abfd)->local_call_stubs[r_symndx] = sec;
8597
8598           /* We don't need to set mips16_stubs_seen in this case.
8599              That flag is used to see whether we need to look through
8600              the global symbol table for stubs.  We don't need to set
8601              it here, because we just have a local stub.  */
8602         }
8603       else
8604         {
8605           h = ((struct mips_elf_link_hash_entry *)
8606                sym_hashes[r_symndx - extsymoff]);
8607
8608           /* H is the symbol this stub is for.  */
8609
8610           if (CALL_FP_STUB_P (name))
8611             loc = &h->call_fp_stub;
8612           else
8613             loc = &h->call_stub;
8614
8615           /* If we already have an appropriate stub for this function, we
8616              don't need another one, so we can discard this one.  Since
8617              this function is called before the linker maps input sections
8618              to output sections, we can easily discard it by setting the
8619              SEC_EXCLUDE flag.  */
8620           if (*loc != NULL)
8621             {
8622               sec->flags |= SEC_EXCLUDE;
8623               return TRUE;
8624             }
8625
8626           sec->flags |= SEC_KEEP;
8627           *loc = sec;
8628           mips_elf_hash_table (info)->mips16_stubs_seen = TRUE;
8629         }
8630     }
8631
8632   sreloc = NULL;
8633   contents = NULL;
8634   for (rel = relocs; rel < rel_end; ++rel)
8635     {
8636       unsigned long r_symndx;
8637       unsigned int r_type;
8638       struct elf_link_hash_entry *h;
8639       bfd_boolean can_make_dynamic_p;
8640       bfd_boolean call_reloc_p;
8641       bfd_boolean constrain_symbol_p;
8642
8643       r_symndx = ELF_R_SYM (abfd, rel->r_info);
8644       r_type = ELF_R_TYPE (abfd, rel->r_info);
8645
8646       if (r_symndx < extsymoff)
8647         h = NULL;
8648       else if (r_symndx >= extsymoff + NUM_SHDR_ENTRIES (symtab_hdr))
8649         {
8650           _bfd_error_handler
8651             /* xgettext:c-format */
8652             (_("%pB: malformed reloc detected for section %s"),
8653              abfd, name);
8654           bfd_set_error (bfd_error_bad_value);
8655           return FALSE;
8656         }
8657       else
8658         {
8659           h = sym_hashes[r_symndx - extsymoff];
8660           if (h != NULL)
8661             {
8662               while (h->root.type == bfd_link_hash_indirect
8663                      || h->root.type == bfd_link_hash_warning)
8664                 h = (struct elf_link_hash_entry *) h->root.u.i.link;
8665             }
8666         }
8667
8668       /* Set CAN_MAKE_DYNAMIC_P to true if we can convert this
8669          relocation into a dynamic one.  */
8670       can_make_dynamic_p = FALSE;
8671
8672       /* Set CALL_RELOC_P to true if the relocation is for a call,
8673          and if pointer equality therefore doesn't matter.  */
8674       call_reloc_p = FALSE;
8675
8676       /* Set CONSTRAIN_SYMBOL_P if we need to take the relocation
8677          into account when deciding how to define the symbol.
8678          Relocations in nonallocatable sections such as .pdr and
8679          .debug* should have no effect.  */
8680       constrain_symbol_p = ((sec->flags & SEC_ALLOC) != 0);
8681
8682       switch (r_type)
8683         {
8684         case R_MIPS_CALL16:
8685         case R_MIPS_CALL_HI16:
8686         case R_MIPS_CALL_LO16:
8687         case R_MIPS16_CALL16:
8688         case R_MICROMIPS_CALL16:
8689         case R_MICROMIPS_CALL_HI16:
8690         case R_MICROMIPS_CALL_LO16:
8691           call_reloc_p = TRUE;
8692           /* Fall through.  */
8693
8694         case R_MIPS_GOT16:
8695         case R_MIPS_GOT_LO16:
8696         case R_MIPS_GOT_PAGE:
8697         case R_MIPS_GOT_DISP:
8698         case R_MIPS16_GOT16:
8699         case R_MICROMIPS_GOT16:
8700         case R_MICROMIPS_GOT_LO16:
8701         case R_MICROMIPS_GOT_PAGE:
8702         case R_MICROMIPS_GOT_DISP:
8703           /* If we have a symbol that will resolve to zero at static link
8704              time and it is used by a GOT relocation applied to code we
8705              cannot relax to an immediate zero load, then we will be using
8706              the special `__gnu_absolute_zero' symbol whose value is zero
8707              at dynamic load time.  We ignore HI16-type GOT relocations at
8708              this stage, because their handling will depend entirely on
8709              the corresponding LO16-type GOT relocation.  */
8710           if (!call_hi16_reloc_p (r_type)
8711               && h != NULL
8712               && bfd_link_pic (info)
8713               && !htab->use_absolute_zero
8714               && UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
8715             {
8716               bfd_boolean rel_reloc;
8717
8718               if (!mips_elf_get_section_contents (abfd, sec, &contents))
8719                 return FALSE;
8720
8721               rel_reloc = mips_elf_rel_relocation_p (abfd, sec, relocs, rel);
8722               howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, !rel_reloc);
8723
8724               if (!mips_elf_nullify_got_load (abfd, contents, rel, howto,
8725                                               FALSE))
8726                 if (!mips_elf_define_absolute_zero (abfd, info, htab, r_type))
8727                   return FALSE;
8728             }
8729
8730           /* Fall through.  */
8731         case R_MIPS_GOT_HI16:
8732         case R_MIPS_GOT_OFST:
8733         case R_MIPS_TLS_GOTTPREL:
8734         case R_MIPS_TLS_GD:
8735         case R_MIPS_TLS_LDM:
8736         case R_MIPS16_TLS_GOTTPREL:
8737         case R_MIPS16_TLS_GD:
8738         case R_MIPS16_TLS_LDM:
8739         case R_MICROMIPS_GOT_HI16:
8740         case R_MICROMIPS_GOT_OFST:
8741         case R_MICROMIPS_TLS_GOTTPREL:
8742         case R_MICROMIPS_TLS_GD:
8743         case R_MICROMIPS_TLS_LDM:
8744           if (dynobj == NULL)
8745             elf_hash_table (info)->dynobj = dynobj = abfd;
8746           if (!mips_elf_create_got_section (dynobj, info))
8747             return FALSE;
8748           if (htab->is_vxworks && !bfd_link_pic (info))
8749             {
8750               _bfd_error_handler
8751                 /* xgettext:c-format */
8752                 (_("%pB: GOT reloc at %#" PRIx64 " not expected in executables"),
8753                  abfd, (uint64_t) rel->r_offset);
8754               bfd_set_error (bfd_error_bad_value);
8755               return FALSE;
8756             }
8757           can_make_dynamic_p = TRUE;
8758           break;
8759
8760         case R_MIPS_NONE:
8761         case R_MIPS_JALR:
8762         case R_MICROMIPS_JALR:
8763           /* These relocations have empty fields and are purely there to
8764              provide link information.  The symbol value doesn't matter.  */
8765           constrain_symbol_p = FALSE;
8766           break;
8767
8768         case R_MIPS_GPREL16:
8769         case R_MIPS_GPREL32:
8770         case R_MIPS16_GPREL:
8771         case R_MICROMIPS_GPREL16:
8772           /* GP-relative relocations always resolve to a definition in a
8773              regular input file, ignoring the one-definition rule.  This is
8774              important for the GP setup sequence in NewABI code, which
8775              always resolves to a local function even if other relocations
8776              against the symbol wouldn't.  */
8777           constrain_symbol_p = FALSE;
8778           break;
8779
8780         case R_MIPS_32:
8781         case R_MIPS_REL32:
8782         case R_MIPS_64:
8783           /* In VxWorks executables, references to external symbols
8784              must be handled using copy relocs or PLT entries; it is not
8785              possible to convert this relocation into a dynamic one.
8786
8787              For executables that use PLTs and copy-relocs, we have a
8788              choice between converting the relocation into a dynamic
8789              one or using copy relocations or PLT entries.  It is
8790              usually better to do the former, unless the relocation is
8791              against a read-only section.  */
8792           if ((bfd_link_pic (info)
8793                || (h != NULL
8794                    && !htab->is_vxworks
8795                    && strcmp (h->root.root.string, "__gnu_local_gp") != 0
8796                    && !(!info->nocopyreloc
8797                         && !PIC_OBJECT_P (abfd)
8798                         && MIPS_ELF_READONLY_SECTION (sec))))
8799               && (sec->flags & SEC_ALLOC) != 0)
8800             {
8801               can_make_dynamic_p = TRUE;
8802               if (dynobj == NULL)
8803                 elf_hash_table (info)->dynobj = dynobj = abfd;
8804             }
8805           break;
8806
8807         case R_MIPS_26:
8808         case R_MIPS_PC16:
8809         case R_MIPS_PC21_S2:
8810         case R_MIPS_PC26_S2:
8811         case R_MIPS16_26:
8812         case R_MIPS16_PC16_S1:
8813         case R_MICROMIPS_26_S1:
8814         case R_MICROMIPS_PC7_S1:
8815         case R_MICROMIPS_PC10_S1:
8816         case R_MICROMIPS_PC16_S1:
8817         case R_MICROMIPS_PC23_S2:
8818           call_reloc_p = TRUE;
8819           break;
8820         }
8821
8822       if (h)
8823         {
8824           if (constrain_symbol_p)
8825             {
8826               if (!can_make_dynamic_p)
8827                 ((struct mips_elf_link_hash_entry *) h)->has_static_relocs = 1;
8828
8829               if (!call_reloc_p)
8830                 h->pointer_equality_needed = 1;
8831
8832               /* We must not create a stub for a symbol that has
8833                  relocations related to taking the function's address.
8834                  This doesn't apply to VxWorks, where CALL relocs refer
8835                  to a .got.plt entry instead of a normal .got entry.  */
8836               if (!htab->is_vxworks && (!can_make_dynamic_p || !call_reloc_p))
8837                 ((struct mips_elf_link_hash_entry *) h)->no_fn_stub = TRUE;
8838             }
8839
8840           /* Relocations against the special VxWorks __GOTT_BASE__ and
8841              __GOTT_INDEX__ symbols must be left to the loader.  Allocate
8842              room for them in .rela.dyn.  */
8843           if (is_gott_symbol (info, h))
8844             {
8845               if (sreloc == NULL)
8846                 {
8847                   sreloc = mips_elf_rel_dyn_section (info, TRUE);
8848                   if (sreloc == NULL)
8849                     return FALSE;
8850                 }
8851               mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
8852               if (MIPS_ELF_READONLY_SECTION (sec))
8853                 /* We tell the dynamic linker that there are
8854                    relocations against the text segment.  */
8855                 info->flags |= DF_TEXTREL;
8856             }
8857         }
8858       else if (call_lo16_reloc_p (r_type)
8859                || got_lo16_reloc_p (r_type)
8860                || got_disp_reloc_p (r_type)
8861                || (got16_reloc_p (r_type) && htab->is_vxworks))
8862         {
8863           /* We may need a local GOT entry for this relocation.  We
8864              don't count R_MIPS_GOT_PAGE because we can estimate the
8865              maximum number of pages needed by looking at the size of
8866              the segment.  Similar comments apply to R_MIPS*_GOT16 and
8867              R_MIPS*_CALL16, except on VxWorks, where GOT relocations
8868              always evaluate to "G".  We don't count R_MIPS_GOT_HI16, or
8869              R_MIPS_CALL_HI16 because these are always followed by an
8870              R_MIPS_GOT_LO16 or R_MIPS_CALL_LO16.  */
8871           if (!mips_elf_record_local_got_symbol (abfd, r_symndx,
8872                                                  rel->r_addend, info, r_type))
8873             return FALSE;
8874         }
8875
8876       if (h != NULL
8877           && mips_elf_relocation_needs_la25_stub (abfd, r_type,
8878                                                   ELF_ST_IS_MIPS16 (h->other)))
8879         ((struct mips_elf_link_hash_entry *) h)->has_nonpic_branches = TRUE;
8880
8881       switch (r_type)
8882         {
8883         case R_MIPS_CALL16:
8884         case R_MIPS16_CALL16:
8885         case R_MICROMIPS_CALL16:
8886           if (h == NULL)
8887             {
8888               _bfd_error_handler
8889                 /* xgettext:c-format */
8890                 (_("%pB: CALL16 reloc at %#" PRIx64 " not against global symbol"),
8891                  abfd, (uint64_t) rel->r_offset);
8892               bfd_set_error (bfd_error_bad_value);
8893               return FALSE;
8894             }
8895           /* Fall through.  */
8896
8897         case R_MIPS_CALL_HI16:
8898         case R_MIPS_CALL_LO16:
8899         case R_MICROMIPS_CALL_HI16:
8900         case R_MICROMIPS_CALL_LO16:
8901           if (h != NULL)
8902             {
8903               /* Make sure there is room in the regular GOT to hold the
8904                  function's address.  We may eliminate it in favour of
8905                  a .got.plt entry later; see mips_elf_count_got_symbols.  */
8906               if (!mips_elf_record_global_got_symbol (h, abfd, info, TRUE,
8907                                                       r_type))
8908                 return FALSE;
8909
8910               /* We need a stub, not a plt entry for the undefined
8911                  function.  But we record it as if it needs plt.  See
8912                  _bfd_elf_adjust_dynamic_symbol.  */
8913               h->needs_plt = 1;
8914               h->type = STT_FUNC;
8915             }
8916           break;
8917
8918         case R_MIPS_GOT_PAGE:
8919         case R_MICROMIPS_GOT_PAGE:
8920         case R_MIPS16_GOT16:
8921         case R_MIPS_GOT16:
8922         case R_MIPS_GOT_HI16:
8923         case R_MIPS_GOT_LO16:
8924         case R_MICROMIPS_GOT16:
8925         case R_MICROMIPS_GOT_HI16:
8926         case R_MICROMIPS_GOT_LO16:
8927           if (!h || got_page_reloc_p (r_type))
8928             {
8929               /* This relocation needs (or may need, if h != NULL) a
8930                  page entry in the GOT.  For R_MIPS_GOT_PAGE we do not
8931                  know for sure until we know whether the symbol is
8932                  preemptible.  */
8933               if (mips_elf_rel_relocation_p (abfd, sec, relocs, rel))
8934                 {
8935                   if (!mips_elf_get_section_contents (abfd, sec, &contents))
8936                     return FALSE;
8937                   howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, FALSE);
8938                   addend = mips_elf_read_rel_addend (abfd, rel,
8939                                                      howto, contents);
8940                   if (got16_reloc_p (r_type))
8941                     mips_elf_add_lo16_rel_addend (abfd, rel, rel_end,
8942                                                   contents, &addend);
8943                   else
8944                     addend <<= howto->rightshift;
8945                 }
8946               else
8947                 addend = rel->r_addend;
8948               if (!mips_elf_record_got_page_ref (info, abfd, r_symndx,
8949                                                  h, addend))
8950                 return FALSE;
8951
8952               if (h)
8953                 {
8954                   struct mips_elf_link_hash_entry *hmips =
8955                     (struct mips_elf_link_hash_entry *) h;
8956
8957                   /* This symbol is definitely not overridable.  */
8958                   if (hmips->root.def_regular
8959                       && ! (bfd_link_pic (info) && ! info->symbolic
8960                             && ! hmips->root.forced_local))
8961                     h = NULL;
8962                 }
8963             }
8964           /* If this is a global, overridable symbol, GOT_PAGE will
8965              decay to GOT_DISP, so we'll need a GOT entry for it.  */
8966           /* Fall through.  */
8967
8968         case R_MIPS_GOT_DISP:
8969         case R_MICROMIPS_GOT_DISP:
8970           if (h && !mips_elf_record_global_got_symbol (h, abfd, info,
8971                                                        FALSE, r_type))
8972             return FALSE;
8973           break;
8974
8975         case R_MIPS_TLS_GOTTPREL:
8976         case R_MIPS16_TLS_GOTTPREL:
8977         case R_MICROMIPS_TLS_GOTTPREL:
8978           if (bfd_link_pic (info))
8979             info->flags |= DF_STATIC_TLS;
8980           /* Fall through */
8981
8982         case R_MIPS_TLS_LDM:
8983         case R_MIPS16_TLS_LDM:
8984         case R_MICROMIPS_TLS_LDM:
8985           if (tls_ldm_reloc_p (r_type))
8986             {
8987               r_symndx = STN_UNDEF;
8988               h = NULL;
8989             }
8990           /* Fall through */
8991
8992         case R_MIPS_TLS_GD:
8993         case R_MIPS16_TLS_GD:
8994         case R_MICROMIPS_TLS_GD:
8995           /* This symbol requires a global offset table entry, or two
8996              for TLS GD relocations.  */
8997           if (h != NULL)
8998             {
8999               if (!mips_elf_record_global_got_symbol (h, abfd, info,
9000                                                       FALSE, r_type))
9001                 return FALSE;
9002             }
9003           else
9004             {
9005               if (!mips_elf_record_local_got_symbol (abfd, r_symndx,
9006                                                      rel->r_addend,
9007                                                      info, r_type))
9008                 return FALSE;
9009             }
9010           break;
9011
9012         case R_MIPS_32:
9013         case R_MIPS_REL32:
9014         case R_MIPS_64:
9015           /* In VxWorks executables, references to external symbols
9016              are handled using copy relocs or PLT stubs, so there's
9017              no need to add a .rela.dyn entry for this relocation.  */
9018           if (can_make_dynamic_p)
9019             {
9020               if (sreloc == NULL)
9021                 {
9022                   sreloc = mips_elf_rel_dyn_section (info, TRUE);
9023                   if (sreloc == NULL)
9024                     return FALSE;
9025                 }
9026               if (bfd_link_pic (info) && h == NULL)
9027                 {
9028                   /* When creating a shared object, we must copy these
9029                      reloc types into the output file as R_MIPS_REL32
9030                      relocs.  Make room for this reloc in .rel(a).dyn.  */
9031                   mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
9032                   if (MIPS_ELF_READONLY_SECTION (sec))
9033                     /* We tell the dynamic linker that there are
9034                        relocations against the text segment.  */
9035                     info->flags |= DF_TEXTREL;
9036                 }
9037               else
9038                 {
9039                   struct mips_elf_link_hash_entry *hmips;
9040
9041                   /* For a shared object, we must copy this relocation
9042                      unless the symbol turns out to be undefined and
9043                      weak with non-default visibility, in which case
9044                      it will be left as zero.
9045
9046                      We could elide R_MIPS_REL32 for locally binding symbols
9047                      in shared libraries, but do not yet do so.
9048
9049                      For an executable, we only need to copy this
9050                      reloc if the symbol is defined in a dynamic
9051                      object.  */
9052                   hmips = (struct mips_elf_link_hash_entry *) h;
9053                   ++hmips->possibly_dynamic_relocs;
9054                   if (MIPS_ELF_READONLY_SECTION (sec))
9055                     /* We need it to tell the dynamic linker if there
9056                        are relocations against the text segment.  */
9057                     hmips->readonly_reloc = TRUE;
9058                 }
9059             }
9060
9061           if (SGI_COMPAT (abfd))
9062             mips_elf_hash_table (info)->compact_rel_size +=
9063               sizeof (Elf32_External_crinfo);
9064           break;
9065
9066         case R_MIPS_26:
9067         case R_MIPS_GPREL16:
9068         case R_MIPS_LITERAL:
9069         case R_MIPS_GPREL32:
9070         case R_MICROMIPS_26_S1:
9071         case R_MICROMIPS_GPREL16:
9072         case R_MICROMIPS_LITERAL:
9073         case R_MICROMIPS_GPREL7_S2:
9074           if (SGI_COMPAT (abfd))
9075             mips_elf_hash_table (info)->compact_rel_size +=
9076               sizeof (Elf32_External_crinfo);
9077           break;
9078
9079           /* This relocation describes the C++ object vtable hierarchy.
9080              Reconstruct it for later use during GC.  */
9081         case R_MIPS_GNU_VTINHERIT:
9082           if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
9083             return FALSE;
9084           break;
9085
9086           /* This relocation describes which C++ vtable entries are actually
9087              used.  Record for later use during GC.  */
9088         case R_MIPS_GNU_VTENTRY:
9089           if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset))
9090             return FALSE;
9091           break;
9092
9093         default:
9094           break;
9095         }
9096
9097       /* Record the need for a PLT entry.  At this point we don't know
9098          yet if we are going to create a PLT in the first place, but
9099          we only record whether the relocation requires a standard MIPS
9100          or a compressed code entry anyway.  If we don't make a PLT after
9101          all, then we'll just ignore these arrangements.  Likewise if
9102          a PLT entry is not created because the symbol is satisfied
9103          locally.  */
9104       if (h != NULL
9105           && (branch_reloc_p (r_type)
9106               || mips16_branch_reloc_p (r_type)
9107               || micromips_branch_reloc_p (r_type))
9108           && !SYMBOL_CALLS_LOCAL (info, h))
9109         {
9110           if (h->plt.plist == NULL)
9111             h->plt.plist = mips_elf_make_plt_record (abfd);
9112           if (h->plt.plist == NULL)
9113             return FALSE;
9114
9115           if (branch_reloc_p (r_type))
9116             h->plt.plist->need_mips = TRUE;
9117           else
9118             h->plt.plist->need_comp = TRUE;
9119         }
9120
9121       /* See if this reloc would need to refer to a MIPS16 hard-float stub,
9122          if there is one.  We only need to handle global symbols here;
9123          we decide whether to keep or delete stubs for local symbols
9124          when processing the stub's relocations.  */
9125       if (h != NULL
9126           && !mips16_call_reloc_p (r_type)
9127           && !section_allows_mips16_refs_p (sec))
9128         {
9129           struct mips_elf_link_hash_entry *mh;
9130
9131           mh = (struct mips_elf_link_hash_entry *) h;
9132           mh->need_fn_stub = TRUE;
9133         }
9134
9135       /* Refuse some position-dependent relocations when creating a
9136          shared library.  Do not refuse R_MIPS_32 / R_MIPS_64; they're
9137          not PIC, but we can create dynamic relocations and the result
9138          will be fine.  Also do not refuse R_MIPS_LO16, which can be
9139          combined with R_MIPS_GOT16.  */
9140       if (bfd_link_pic (info))
9141         {
9142           switch (r_type)
9143             {
9144             case R_MIPS_TLS_TPREL_HI16:
9145             case R_MIPS16_TLS_TPREL_HI16:
9146             case R_MICROMIPS_TLS_TPREL_HI16:
9147             case R_MIPS_TLS_TPREL_LO16:
9148             case R_MIPS16_TLS_TPREL_LO16:
9149             case R_MICROMIPS_TLS_TPREL_LO16:
9150               /* These are okay in PIE, but not in a shared library.  */
9151               if (bfd_link_executable (info))
9152                 break;
9153
9154               /* FALLTHROUGH */
9155
9156             case R_MIPS16_HI16:
9157             case R_MIPS_HI16:
9158             case R_MIPS_HIGHER:
9159             case R_MIPS_HIGHEST:
9160             case R_MICROMIPS_HI16:
9161             case R_MICROMIPS_HIGHER:
9162             case R_MICROMIPS_HIGHEST:
9163               /* Don't refuse a high part relocation if it's against
9164                  no symbol (e.g. part of a compound relocation).  */
9165               if (r_symndx == STN_UNDEF)
9166                 break;
9167
9168               /* Likewise an absolute symbol.  */
9169               if (h != NULL && bfd_is_abs_symbol (&h->root))
9170                 break;
9171
9172               /* R_MIPS_HI16 against _gp_disp is used for $gp setup,
9173                  and has a special meaning.  */
9174               if (!NEWABI_P (abfd) && h != NULL
9175                   && strcmp (h->root.root.string, "_gp_disp") == 0)
9176                 break;
9177
9178               /* Likewise __GOTT_BASE__ and __GOTT_INDEX__ on VxWorks.  */
9179               if (is_gott_symbol (info, h))
9180                 break;
9181
9182               /* FALLTHROUGH */
9183
9184             case R_MIPS16_26:
9185             case R_MIPS_26:
9186             case R_MICROMIPS_26_S1:
9187               howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, NEWABI_P (abfd));
9188               /* An error for unsupported relocations is raised as part
9189                  of the above search, so we can skip the following.  */
9190               if (howto != NULL)
9191                 info->callbacks->einfo
9192                   /* xgettext:c-format */
9193                   (_("%X%H: relocation %s against `%s' cannot be used"
9194                      " when making a shared object; recompile with -fPIC\n"),
9195                    abfd, sec, rel->r_offset, howto->name,
9196                    (h) ? h->root.root.string : "a local symbol");
9197               break;
9198             default:
9199               break;
9200             }
9201         }
9202     }
9203
9204   return TRUE;
9205 }
9206 \f
9207 /* Allocate space for global sym dynamic relocs.  */
9208
9209 static bfd_boolean
9210 allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
9211 {
9212   struct bfd_link_info *info = inf;
9213   bfd *dynobj;
9214   struct mips_elf_link_hash_entry *hmips;
9215   struct mips_elf_link_hash_table *htab;
9216
9217   htab = mips_elf_hash_table (info);
9218   BFD_ASSERT (htab != NULL);
9219
9220   dynobj = elf_hash_table (info)->dynobj;
9221   hmips = (struct mips_elf_link_hash_entry *) h;
9222
9223   /* VxWorks executables are handled elsewhere; we only need to
9224      allocate relocations in shared objects.  */
9225   if (htab->is_vxworks && !bfd_link_pic (info))
9226     return TRUE;
9227
9228   /* Ignore indirect symbols.  All relocations against such symbols
9229      will be redirected to the target symbol.  */
9230   if (h->root.type == bfd_link_hash_indirect)
9231     return TRUE;
9232
9233   /* If this symbol is defined in a dynamic object, or we are creating
9234      a shared library, we will need to copy any R_MIPS_32 or
9235      R_MIPS_REL32 relocs against it into the output file.  */
9236   if (! bfd_link_relocatable (info)
9237       && hmips->possibly_dynamic_relocs != 0
9238       && (h->root.type == bfd_link_hash_defweak
9239           || (!h->def_regular && !ELF_COMMON_DEF_P (h))
9240           || bfd_link_pic (info)))
9241     {
9242       bfd_boolean do_copy = TRUE;
9243
9244       if (h->root.type == bfd_link_hash_undefweak)
9245         {
9246           /* Do not copy relocations for undefined weak symbols that
9247              we are not going to export.  */
9248           if (UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
9249             do_copy = FALSE;
9250
9251           /* Make sure undefined weak symbols are output as a dynamic
9252              symbol in PIEs.  */
9253           else if (h->dynindx == -1 && !h->forced_local)
9254             {
9255               if (! bfd_elf_link_record_dynamic_symbol (info, h))
9256                 return FALSE;
9257             }
9258         }
9259
9260       if (do_copy)
9261         {
9262           /* Even though we don't directly need a GOT entry for this symbol,
9263              the SVR4 psABI requires it to have a dynamic symbol table
9264              index greater that DT_MIPS_GOTSYM if there are dynamic
9265              relocations against it.
9266
9267              VxWorks does not enforce the same mapping between the GOT
9268              and the symbol table, so the same requirement does not
9269              apply there.  */
9270           if (!htab->is_vxworks)
9271             {
9272               if (hmips->global_got_area > GGA_RELOC_ONLY)
9273                 hmips->global_got_area = GGA_RELOC_ONLY;
9274               hmips->got_only_for_calls = FALSE;
9275             }
9276
9277           mips_elf_allocate_dynamic_relocations
9278             (dynobj, info, hmips->possibly_dynamic_relocs);
9279           if (hmips->readonly_reloc)
9280             /* We tell the dynamic linker that there are relocations
9281                against the text segment.  */
9282             info->flags |= DF_TEXTREL;
9283         }
9284     }
9285
9286   return TRUE;
9287 }
9288
9289 /* Adjust a symbol defined by a dynamic object and referenced by a
9290    regular object.  The current definition is in some section of the
9291    dynamic object, but we're not including those sections.  We have to
9292    change the definition to something the rest of the link can
9293    understand.  */
9294
9295 bfd_boolean
9296 _bfd_mips_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
9297                                      struct elf_link_hash_entry *h)
9298 {
9299   bfd *dynobj;
9300   struct mips_elf_link_hash_entry *hmips;
9301   struct mips_elf_link_hash_table *htab;
9302   asection *s, *srel;
9303
9304   htab = mips_elf_hash_table (info);
9305   BFD_ASSERT (htab != NULL);
9306
9307   dynobj = elf_hash_table (info)->dynobj;
9308   hmips = (struct mips_elf_link_hash_entry *) h;
9309
9310   /* Make sure we know what is going on here.  */
9311   BFD_ASSERT (dynobj != NULL
9312               && (h->needs_plt
9313                   || h->is_weakalias
9314                   || (h->def_dynamic
9315                       && h->ref_regular
9316                       && !h->def_regular)));
9317
9318   hmips = (struct mips_elf_link_hash_entry *) h;
9319
9320   /* If there are call relocations against an externally-defined symbol,
9321      see whether we can create a MIPS lazy-binding stub for it.  We can
9322      only do this if all references to the function are through call
9323      relocations, and in that case, the traditional lazy-binding stubs
9324      are much more efficient than PLT entries.
9325
9326      Traditional stubs are only available on SVR4 psABI-based systems;
9327      VxWorks always uses PLTs instead.  */
9328   if (!htab->is_vxworks && h->needs_plt && !hmips->no_fn_stub)
9329     {
9330       if (! elf_hash_table (info)->dynamic_sections_created)
9331         return TRUE;
9332
9333       /* If this symbol is not defined in a regular file, then set
9334          the symbol to the stub location.  This is required to make
9335          function pointers compare as equal between the normal
9336          executable and the shared library.  */
9337       if (!h->def_regular
9338           && !bfd_is_abs_section (htab->sstubs->output_section))
9339         {
9340           hmips->needs_lazy_stub = TRUE;
9341           htab->lazy_stub_count++;
9342           return TRUE;
9343         }
9344     }
9345   /* As above, VxWorks requires PLT entries for externally-defined
9346      functions that are only accessed through call relocations.
9347
9348      Both VxWorks and non-VxWorks targets also need PLT entries if there
9349      are static-only relocations against an externally-defined function.
9350      This can technically occur for shared libraries if there are
9351      branches to the symbol, although it is unlikely that this will be
9352      used in practice due to the short ranges involved.  It can occur
9353      for any relative or absolute relocation in executables; in that
9354      case, the PLT entry becomes the function's canonical address.  */
9355   else if (((h->needs_plt && !hmips->no_fn_stub)
9356             || (h->type == STT_FUNC && hmips->has_static_relocs))
9357            && htab->use_plts_and_copy_relocs
9358            && !SYMBOL_CALLS_LOCAL (info, h)
9359            && !(ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
9360                 && h->root.type == bfd_link_hash_undefweak))
9361     {
9362       bfd_boolean micromips_p = MICROMIPS_P (info->output_bfd);
9363       bfd_boolean newabi_p = NEWABI_P (info->output_bfd);
9364
9365       /* If this is the first symbol to need a PLT entry, then make some
9366          basic setup.  Also work out PLT entry sizes.  We'll need them
9367          for PLT offset calculations.  */
9368       if (htab->plt_mips_offset + htab->plt_comp_offset == 0)
9369         {
9370           BFD_ASSERT (htab->root.sgotplt->size == 0);
9371           BFD_ASSERT (htab->plt_got_index == 0);
9372
9373           /* If we're using the PLT additions to the psABI, each PLT
9374              entry is 16 bytes and the PLT0 entry is 32 bytes.
9375              Encourage better cache usage by aligning.  We do this
9376              lazily to avoid pessimizing traditional objects.  */
9377           if (!htab->is_vxworks
9378               && !bfd_set_section_alignment (dynobj, htab->root.splt, 5))
9379             return FALSE;
9380
9381           /* Make sure that .got.plt is word-aligned.  We do this lazily
9382              for the same reason as above.  */
9383           if (!bfd_set_section_alignment (dynobj, htab->root.sgotplt,
9384                                           MIPS_ELF_LOG_FILE_ALIGN (dynobj)))
9385             return FALSE;
9386
9387           /* On non-VxWorks targets, the first two entries in .got.plt
9388              are reserved.  */
9389           if (!htab->is_vxworks)
9390             htab->plt_got_index
9391               += (get_elf_backend_data (dynobj)->got_header_size
9392                   / MIPS_ELF_GOT_SIZE (dynobj));
9393
9394           /* On VxWorks, also allocate room for the header's
9395              .rela.plt.unloaded entries.  */
9396           if (htab->is_vxworks && !bfd_link_pic (info))
9397             htab->srelplt2->size += 2 * sizeof (Elf32_External_Rela);
9398
9399           /* Now work out the sizes of individual PLT entries.  */
9400           if (htab->is_vxworks && bfd_link_pic (info))
9401             htab->plt_mips_entry_size
9402               = 4 * ARRAY_SIZE (mips_vxworks_shared_plt_entry);
9403           else if (htab->is_vxworks)
9404             htab->plt_mips_entry_size
9405               = 4 * ARRAY_SIZE (mips_vxworks_exec_plt_entry);
9406           else if (newabi_p)
9407             htab->plt_mips_entry_size
9408               = 4 * ARRAY_SIZE (mips_exec_plt_entry);
9409           else if (!micromips_p)
9410             {
9411               htab->plt_mips_entry_size
9412                 = 4 * ARRAY_SIZE (mips_exec_plt_entry);
9413               htab->plt_comp_entry_size
9414                 = 2 * ARRAY_SIZE (mips16_o32_exec_plt_entry);
9415             }
9416           else if (htab->insn32)
9417             {
9418               htab->plt_mips_entry_size
9419                 = 4 * ARRAY_SIZE (mips_exec_plt_entry);
9420               htab->plt_comp_entry_size
9421                 = 2 * ARRAY_SIZE (micromips_insn32_o32_exec_plt_entry);
9422             }
9423           else
9424             {
9425               htab->plt_mips_entry_size
9426                 = 4 * ARRAY_SIZE (mips_exec_plt_entry);
9427               htab->plt_comp_entry_size
9428                 = 2 * ARRAY_SIZE (micromips_o32_exec_plt_entry);
9429             }
9430         }
9431
9432       if (h->plt.plist == NULL)
9433         h->plt.plist = mips_elf_make_plt_record (dynobj);
9434       if (h->plt.plist == NULL)
9435         return FALSE;
9436
9437       /* There are no defined MIPS16 or microMIPS PLT entries for VxWorks,
9438          n32 or n64, so always use a standard entry there.
9439
9440          If the symbol has a MIPS16 call stub and gets a PLT entry, then
9441          all MIPS16 calls will go via that stub, and there is no benefit
9442          to having a MIPS16 entry.  And in the case of call_stub a
9443          standard entry actually has to be used as the stub ends with a J
9444          instruction.  */
9445       if (newabi_p
9446           || htab->is_vxworks
9447           || hmips->call_stub
9448           || hmips->call_fp_stub)
9449         {
9450           h->plt.plist->need_mips = TRUE;
9451           h->plt.plist->need_comp = FALSE;
9452         }
9453
9454       /* Otherwise, if there are no direct calls to the function, we
9455          have a free choice of whether to use standard or compressed
9456          entries.  Prefer microMIPS entries if the object is known to
9457          contain microMIPS code, so that it becomes possible to create
9458          pure microMIPS binaries.  Prefer standard entries otherwise,
9459          because MIPS16 ones are no smaller and are usually slower.  */
9460       if (!h->plt.plist->need_mips && !h->plt.plist->need_comp)
9461         {
9462           if (micromips_p)
9463             h->plt.plist->need_comp = TRUE;
9464           else
9465             h->plt.plist->need_mips = TRUE;
9466         }
9467
9468       if (h->plt.plist->need_mips)
9469         {
9470           h->plt.plist->mips_offset = htab->plt_mips_offset;
9471           htab->plt_mips_offset += htab->plt_mips_entry_size;
9472         }
9473       if (h->plt.plist->need_comp)
9474         {
9475           h->plt.plist->comp_offset = htab->plt_comp_offset;
9476           htab->plt_comp_offset += htab->plt_comp_entry_size;
9477         }
9478
9479       /* Reserve the corresponding .got.plt entry now too.  */
9480       h->plt.plist->gotplt_index = htab->plt_got_index++;
9481
9482       /* If the output file has no definition of the symbol, set the
9483          symbol's value to the address of the stub.  */
9484       if (!bfd_link_pic (info) && !h->def_regular)
9485         hmips->use_plt_entry = TRUE;
9486
9487       /* Make room for the R_MIPS_JUMP_SLOT relocation.  */
9488       htab->root.srelplt->size += (htab->is_vxworks
9489                                    ? MIPS_ELF_RELA_SIZE (dynobj)
9490                                    : MIPS_ELF_REL_SIZE (dynobj));
9491
9492       /* Make room for the .rela.plt.unloaded relocations.  */
9493       if (htab->is_vxworks && !bfd_link_pic (info))
9494         htab->srelplt2->size += 3 * sizeof (Elf32_External_Rela);
9495
9496       /* All relocations against this symbol that could have been made
9497          dynamic will now refer to the PLT entry instead.  */
9498       hmips->possibly_dynamic_relocs = 0;
9499
9500       return TRUE;
9501     }
9502
9503   /* If this is a weak symbol, and there is a real definition, the
9504      processor independent code will have arranged for us to see the
9505      real definition first, and we can just use the same value.  */
9506   if (h->is_weakalias)
9507     {
9508       struct elf_link_hash_entry *def = weakdef (h);
9509       BFD_ASSERT (def->root.type == bfd_link_hash_defined);
9510       h->root.u.def.section = def->root.u.def.section;
9511       h->root.u.def.value = def->root.u.def.value;
9512       return TRUE;
9513     }
9514
9515   /* Otherwise, there is nothing further to do for symbols defined
9516      in regular objects.  */
9517   if (h->def_regular)
9518     return TRUE;
9519
9520   /* There's also nothing more to do if we'll convert all relocations
9521      against this symbol into dynamic relocations.  */
9522   if (!hmips->has_static_relocs)
9523     return TRUE;
9524
9525   /* We're now relying on copy relocations.  Complain if we have
9526      some that we can't convert.  */
9527   if (!htab->use_plts_and_copy_relocs || bfd_link_pic (info))
9528     {
9529       _bfd_error_handler (_("non-dynamic relocations refer to "
9530                             "dynamic symbol %s"),
9531                           h->root.root.string);
9532       bfd_set_error (bfd_error_bad_value);
9533       return FALSE;
9534     }
9535
9536   /* We must allocate the symbol in our .dynbss section, which will
9537      become part of the .bss section of the executable.  There will be
9538      an entry for this symbol in the .dynsym section.  The dynamic
9539      object will contain position independent code, so all references
9540      from the dynamic object to this symbol will go through the global
9541      offset table.  The dynamic linker will use the .dynsym entry to
9542      determine the address it must put in the global offset table, so
9543      both the dynamic object and the regular object will refer to the
9544      same memory location for the variable.  */
9545
9546   if ((h->root.u.def.section->flags & SEC_READONLY) != 0)
9547     {
9548       s = htab->root.sdynrelro;
9549       srel = htab->root.sreldynrelro;
9550     }
9551   else
9552     {
9553       s = htab->root.sdynbss;
9554       srel = htab->root.srelbss;
9555     }
9556   if ((h->root.u.def.section->flags & SEC_ALLOC) != 0)
9557     {
9558       if (htab->is_vxworks)
9559         srel->size += sizeof (Elf32_External_Rela);
9560       else
9561         mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
9562       h->needs_copy = 1;
9563     }
9564
9565   /* All relocations against this symbol that could have been made
9566      dynamic will now refer to the local copy instead.  */
9567   hmips->possibly_dynamic_relocs = 0;
9568
9569   return _bfd_elf_adjust_dynamic_copy (info, h, s);
9570 }
9571 \f
9572 /* This function is called after all the input files have been read,
9573    and the input sections have been assigned to output sections.  We
9574    check for any mips16 stub sections that we can discard.  */
9575
9576 bfd_boolean
9577 _bfd_mips_elf_always_size_sections (bfd *output_bfd,
9578                                     struct bfd_link_info *info)
9579 {
9580   asection *sect;
9581   struct mips_elf_link_hash_table *htab;
9582   struct mips_htab_traverse_info hti;
9583
9584   htab = mips_elf_hash_table (info);
9585   BFD_ASSERT (htab != NULL);
9586
9587   /* The .reginfo section has a fixed size.  */
9588   sect = bfd_get_section_by_name (output_bfd, ".reginfo");
9589   if (sect != NULL)
9590     {
9591       bfd_set_section_size (output_bfd, sect, sizeof (Elf32_External_RegInfo));
9592       sect->flags |= SEC_FIXED_SIZE | SEC_HAS_CONTENTS;
9593     }
9594
9595   /* The .MIPS.abiflags section has a fixed size.  */
9596   sect = bfd_get_section_by_name (output_bfd, ".MIPS.abiflags");
9597   if (sect != NULL)
9598     {
9599       bfd_set_section_size (output_bfd, sect,
9600                             sizeof (Elf_External_ABIFlags_v0));
9601       sect->flags |= SEC_FIXED_SIZE | SEC_HAS_CONTENTS;
9602     }
9603
9604   hti.info = info;
9605   hti.output_bfd = output_bfd;
9606   hti.error = FALSE;
9607   mips_elf_link_hash_traverse (mips_elf_hash_table (info),
9608                                mips_elf_check_symbols, &hti);
9609   if (hti.error)
9610     return FALSE;
9611
9612   return TRUE;
9613 }
9614
9615 /* If the link uses a GOT, lay it out and work out its size.  */
9616
9617 static bfd_boolean
9618 mips_elf_lay_out_got (bfd *output_bfd, struct bfd_link_info *info)
9619 {
9620   bfd *dynobj;
9621   asection *s;
9622   struct mips_got_info *g;
9623   bfd_size_type loadable_size = 0;
9624   bfd_size_type page_gotno;
9625   bfd *ibfd;
9626   struct mips_elf_traverse_got_arg tga;
9627   struct mips_elf_link_hash_table *htab;
9628
9629   htab = mips_elf_hash_table (info);
9630   BFD_ASSERT (htab != NULL);
9631
9632   s = htab->root.sgot;
9633   if (s == NULL)
9634     return TRUE;
9635
9636   dynobj = elf_hash_table (info)->dynobj;
9637   g = htab->got_info;
9638
9639   /* Allocate room for the reserved entries.  VxWorks always reserves
9640      3 entries; other objects only reserve 2 entries.  */
9641   BFD_ASSERT (g->assigned_low_gotno == 0);
9642   if (htab->is_vxworks)
9643     htab->reserved_gotno = 3;
9644   else
9645     htab->reserved_gotno = 2;
9646   g->local_gotno += htab->reserved_gotno;
9647   g->assigned_low_gotno = htab->reserved_gotno;
9648
9649   /* Decide which symbols need to go in the global part of the GOT and
9650      count the number of reloc-only GOT symbols.  */
9651   mips_elf_link_hash_traverse (htab, mips_elf_count_got_symbols, info);
9652
9653   if (!mips_elf_resolve_final_got_entries (info, g))
9654     return FALSE;
9655
9656   /* Calculate the total loadable size of the output.  That
9657      will give us the maximum number of GOT_PAGE entries
9658      required.  */
9659   for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link.next)
9660     {
9661       asection *subsection;
9662
9663       for (subsection = ibfd->sections;
9664            subsection;
9665            subsection = subsection->next)
9666         {
9667           if ((subsection->flags & SEC_ALLOC) == 0)
9668             continue;
9669           loadable_size += ((subsection->size + 0xf)
9670                             &~ (bfd_size_type) 0xf);
9671         }
9672     }
9673
9674   if (htab->is_vxworks)
9675     /* There's no need to allocate page entries for VxWorks; R_MIPS*_GOT16
9676        relocations against local symbols evaluate to "G", and the EABI does
9677        not include R_MIPS_GOT_PAGE.  */
9678     page_gotno = 0;
9679   else
9680     /* Assume there are two loadable segments consisting of contiguous
9681        sections.  Is 5 enough?  */
9682     page_gotno = (loadable_size >> 16) + 5;
9683
9684   /* Choose the smaller of the two page estimates; both are intended to be
9685      conservative.  */
9686   if (page_gotno > g->page_gotno)
9687     page_gotno = g->page_gotno;
9688
9689   g->local_gotno += page_gotno;
9690   g->assigned_high_gotno = g->local_gotno - 1;
9691
9692   s->size += g->local_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
9693   s->size += g->global_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
9694   s->size += g->tls_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
9695
9696   /* VxWorks does not support multiple GOTs.  It initializes $gp to
9697      __GOTT_BASE__[__GOTT_INDEX__], the value of which is set by the
9698      dynamic loader.  */
9699   if (!htab->is_vxworks && s->size > MIPS_ELF_GOT_MAX_SIZE (info))
9700     {
9701       if (!mips_elf_multi_got (output_bfd, info, s, page_gotno))
9702         return FALSE;
9703     }
9704   else
9705     {
9706       /* Record that all bfds use G.  This also has the effect of freeing
9707          the per-bfd GOTs, which we no longer need.  */
9708       for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link.next)
9709         if (mips_elf_bfd_got (ibfd, FALSE))
9710           mips_elf_replace_bfd_got (ibfd, g);
9711       mips_elf_replace_bfd_got (output_bfd, g);
9712
9713       /* Set up TLS entries.  */
9714       g->tls_assigned_gotno = g->global_gotno + g->local_gotno;
9715       tga.info = info;
9716       tga.g = g;
9717       tga.value = MIPS_ELF_GOT_SIZE (output_bfd);
9718       htab_traverse (g->got_entries, mips_elf_initialize_tls_index, &tga);
9719       if (!tga.g)
9720         return FALSE;
9721       BFD_ASSERT (g->tls_assigned_gotno
9722                   == g->global_gotno + g->local_gotno + g->tls_gotno);
9723
9724       /* Each VxWorks GOT entry needs an explicit relocation.  */
9725       if (htab->is_vxworks && bfd_link_pic (info))
9726         g->relocs += g->global_gotno + g->local_gotno - htab->reserved_gotno;
9727
9728       /* Allocate room for the TLS relocations.  */
9729       if (g->relocs)
9730         mips_elf_allocate_dynamic_relocations (dynobj, info, g->relocs);
9731     }
9732
9733   return TRUE;
9734 }
9735
9736 /* Estimate the size of the .MIPS.stubs section.  */
9737
9738 static void
9739 mips_elf_estimate_stub_size (bfd *output_bfd, struct bfd_link_info *info)
9740 {
9741   struct mips_elf_link_hash_table *htab;
9742   bfd_size_type dynsymcount;
9743
9744   htab = mips_elf_hash_table (info);
9745   BFD_ASSERT (htab != NULL);
9746
9747   if (htab->lazy_stub_count == 0)
9748     return;
9749
9750   /* IRIX rld assumes that a function stub isn't at the end of the .text
9751      section, so add a dummy entry to the end.  */
9752   htab->lazy_stub_count++;
9753
9754   /* Get a worst-case estimate of the number of dynamic symbols needed.
9755      At this point, dynsymcount does not account for section symbols
9756      and count_section_dynsyms may overestimate the number that will
9757      be needed.  */
9758   dynsymcount = (elf_hash_table (info)->dynsymcount
9759                  + count_section_dynsyms (output_bfd, info));
9760
9761   /* Determine the size of one stub entry.  There's no disadvantage
9762      from using microMIPS code here, so for the sake of pure-microMIPS
9763      binaries we prefer it whenever there's any microMIPS code in
9764      output produced at all.  This has a benefit of stubs being
9765      shorter by 4 bytes each too, unless in the insn32 mode.  */
9766   if (!MICROMIPS_P (output_bfd))
9767     htab->function_stub_size = (dynsymcount > 0x10000
9768                                 ? MIPS_FUNCTION_STUB_BIG_SIZE
9769                                 : MIPS_FUNCTION_STUB_NORMAL_SIZE);
9770   else if (htab->insn32)
9771     htab->function_stub_size = (dynsymcount > 0x10000
9772                                 ? MICROMIPS_INSN32_FUNCTION_STUB_BIG_SIZE
9773                                 : MICROMIPS_INSN32_FUNCTION_STUB_NORMAL_SIZE);
9774   else
9775     htab->function_stub_size = (dynsymcount > 0x10000
9776                                 ? MICROMIPS_FUNCTION_STUB_BIG_SIZE
9777                                 : MICROMIPS_FUNCTION_STUB_NORMAL_SIZE);
9778
9779   htab->sstubs->size = htab->lazy_stub_count * htab->function_stub_size;
9780 }
9781
9782 /* A mips_elf_link_hash_traverse callback for which DATA points to a
9783    mips_htab_traverse_info.  If H needs a traditional MIPS lazy-binding
9784    stub, allocate an entry in the stubs section.  */
9785
9786 static bfd_boolean
9787 mips_elf_allocate_lazy_stub (struct mips_elf_link_hash_entry *h, void *data)
9788 {
9789   struct mips_htab_traverse_info *hti = data;
9790   struct mips_elf_link_hash_table *htab;
9791   struct bfd_link_info *info;
9792   bfd *output_bfd;
9793
9794   info = hti->info;
9795   output_bfd = hti->output_bfd;
9796   htab = mips_elf_hash_table (info);
9797   BFD_ASSERT (htab != NULL);
9798
9799   if (h->needs_lazy_stub)
9800     {
9801       bfd_boolean micromips_p = MICROMIPS_P (output_bfd);
9802       unsigned int other = micromips_p ? STO_MICROMIPS : 0;
9803       bfd_vma isa_bit = micromips_p;
9804
9805       BFD_ASSERT (htab->root.dynobj != NULL);
9806       if (h->root.plt.plist == NULL)
9807         h->root.plt.plist = mips_elf_make_plt_record (htab->sstubs->owner);
9808       if (h->root.plt.plist == NULL)
9809         {
9810           hti->error = TRUE;
9811           return FALSE;
9812         }
9813       h->root.root.u.def.section = htab->sstubs;
9814       h->root.root.u.def.value = htab->sstubs->size + isa_bit;
9815       h->root.plt.plist->stub_offset = htab->sstubs->size;
9816       h->root.other = other;
9817       htab->sstubs->size += htab->function_stub_size;
9818     }
9819   return TRUE;
9820 }
9821
9822 /* Allocate offsets in the stubs section to each symbol that needs one.
9823    Set the final size of the .MIPS.stub section.  */
9824
9825 static bfd_boolean
9826 mips_elf_lay_out_lazy_stubs (struct bfd_link_info *info)
9827 {
9828   bfd *output_bfd = info->output_bfd;
9829   bfd_boolean micromips_p = MICROMIPS_P (output_bfd);
9830   unsigned int other = micromips_p ? STO_MICROMIPS : 0;
9831   bfd_vma isa_bit = micromips_p;
9832   struct mips_elf_link_hash_table *htab;
9833   struct mips_htab_traverse_info hti;
9834   struct elf_link_hash_entry *h;
9835   bfd *dynobj;
9836
9837   htab = mips_elf_hash_table (info);
9838   BFD_ASSERT (htab != NULL);
9839
9840   if (htab->lazy_stub_count == 0)
9841     return TRUE;
9842
9843   htab->sstubs->size = 0;
9844   hti.info = info;
9845   hti.output_bfd = output_bfd;
9846   hti.error = FALSE;
9847   mips_elf_link_hash_traverse (htab, mips_elf_allocate_lazy_stub, &hti);
9848   if (hti.error)
9849     return FALSE;
9850   htab->sstubs->size += htab->function_stub_size;
9851   BFD_ASSERT (htab->sstubs->size
9852               == htab->lazy_stub_count * htab->function_stub_size);
9853
9854   dynobj = elf_hash_table (info)->dynobj;
9855   BFD_ASSERT (dynobj != NULL);
9856   h = _bfd_elf_define_linkage_sym (dynobj, info, htab->sstubs, "_MIPS_STUBS_");
9857   if (h == NULL)
9858     return FALSE;
9859   h->root.u.def.value = isa_bit;
9860   h->other = other;
9861   h->type = STT_FUNC;
9862
9863   return TRUE;
9864 }
9865
9866 /* A mips_elf_link_hash_traverse callback for which DATA points to a
9867    bfd_link_info.  If H uses the address of a PLT entry as the value
9868    of the symbol, then set the entry in the symbol table now.  Prefer
9869    a standard MIPS PLT entry.  */
9870
9871 static bfd_boolean
9872 mips_elf_set_plt_sym_value (struct mips_elf_link_hash_entry *h, void *data)
9873 {
9874   struct bfd_link_info *info = data;
9875   bfd_boolean micromips_p = MICROMIPS_P (info->output_bfd);
9876   struct mips_elf_link_hash_table *htab;
9877   unsigned int other;
9878   bfd_vma isa_bit;
9879   bfd_vma val;
9880
9881   htab = mips_elf_hash_table (info);
9882   BFD_ASSERT (htab != NULL);
9883
9884   if (h->use_plt_entry)
9885     {
9886       BFD_ASSERT (h->root.plt.plist != NULL);
9887       BFD_ASSERT (h->root.plt.plist->mips_offset != MINUS_ONE
9888                   || h->root.plt.plist->comp_offset != MINUS_ONE);
9889
9890       val = htab->plt_header_size;
9891       if (h->root.plt.plist->mips_offset != MINUS_ONE)
9892         {
9893           isa_bit = 0;
9894           val += h->root.plt.plist->mips_offset;
9895           other = 0;
9896         }
9897       else
9898         {
9899           isa_bit = 1;
9900           val += htab->plt_mips_offset + h->root.plt.plist->comp_offset;
9901           other = micromips_p ? STO_MICROMIPS : STO_MIPS16;
9902         }
9903       val += isa_bit;
9904       /* For VxWorks, point at the PLT load stub rather than the lazy
9905          resolution stub; this stub will become the canonical function
9906          address.  */
9907       if (htab->is_vxworks)
9908         val += 8;
9909
9910       h->root.root.u.def.section = htab->root.splt;
9911       h->root.root.u.def.value = val;
9912       h->root.other = other;
9913     }
9914
9915   return TRUE;
9916 }
9917
9918 /* Set the sizes of the dynamic sections.  */
9919
9920 bfd_boolean
9921 _bfd_mips_elf_size_dynamic_sections (bfd *output_bfd,
9922                                      struct bfd_link_info *info)
9923 {
9924   bfd *dynobj;
9925   asection *s, *sreldyn;
9926   bfd_boolean reltext;
9927   struct mips_elf_link_hash_table *htab;
9928
9929   htab = mips_elf_hash_table (info);
9930   BFD_ASSERT (htab != NULL);
9931   dynobj = elf_hash_table (info)->dynobj;
9932   BFD_ASSERT (dynobj != NULL);
9933
9934   if (elf_hash_table (info)->dynamic_sections_created)
9935     {
9936       /* Set the contents of the .interp section to the interpreter.  */
9937       if (bfd_link_executable (info) && !info->nointerp)
9938         {
9939           s = bfd_get_linker_section (dynobj, ".interp");
9940           BFD_ASSERT (s != NULL);
9941           s->size
9942             = strlen (ELF_DYNAMIC_INTERPRETER (output_bfd)) + 1;
9943           s->contents
9944             = (bfd_byte *) ELF_DYNAMIC_INTERPRETER (output_bfd);
9945         }
9946
9947       /* Figure out the size of the PLT header if we know that we
9948          are using it.  For the sake of cache alignment always use
9949          a standard header whenever any standard entries are present
9950          even if microMIPS entries are present as well.  This also
9951          lets the microMIPS header rely on the value of $v0 only set
9952          by microMIPS entries, for a small size reduction.
9953
9954          Set symbol table entry values for symbols that use the
9955          address of their PLT entry now that we can calculate it.
9956
9957          Also create the _PROCEDURE_LINKAGE_TABLE_ symbol if we
9958          haven't already in _bfd_elf_create_dynamic_sections.  */
9959       if (htab->root.splt && htab->plt_mips_offset + htab->plt_comp_offset != 0)
9960         {
9961           bfd_boolean micromips_p = (MICROMIPS_P (output_bfd)
9962                                      && !htab->plt_mips_offset);
9963           unsigned int other = micromips_p ? STO_MICROMIPS : 0;
9964           bfd_vma isa_bit = micromips_p;
9965           struct elf_link_hash_entry *h;
9966           bfd_vma size;
9967
9968           BFD_ASSERT (htab->use_plts_and_copy_relocs);
9969           BFD_ASSERT (htab->root.sgotplt->size == 0);
9970           BFD_ASSERT (htab->root.splt->size == 0);
9971
9972           if (htab->is_vxworks && bfd_link_pic (info))
9973             size = 4 * ARRAY_SIZE (mips_vxworks_shared_plt0_entry);
9974           else if (htab->is_vxworks)
9975             size = 4 * ARRAY_SIZE (mips_vxworks_exec_plt0_entry);
9976           else if (ABI_64_P (output_bfd))
9977             size = 4 * ARRAY_SIZE (mips_n64_exec_plt0_entry);
9978           else if (ABI_N32_P (output_bfd))
9979             size = 4 * ARRAY_SIZE (mips_n32_exec_plt0_entry);
9980           else if (!micromips_p)
9981             size = 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry);
9982           else if (htab->insn32)
9983             size = 2 * ARRAY_SIZE (micromips_insn32_o32_exec_plt0_entry);
9984           else
9985             size = 2 * ARRAY_SIZE (micromips_o32_exec_plt0_entry);
9986
9987           htab->plt_header_is_comp = micromips_p;
9988           htab->plt_header_size = size;
9989           htab->root.splt->size = (size
9990                                    + htab->plt_mips_offset
9991                                    + htab->plt_comp_offset);
9992           htab->root.sgotplt->size = (htab->plt_got_index
9993                                       * MIPS_ELF_GOT_SIZE (dynobj));
9994
9995           mips_elf_link_hash_traverse (htab, mips_elf_set_plt_sym_value, info);
9996
9997           if (htab->root.hplt == NULL)
9998             {
9999               h = _bfd_elf_define_linkage_sym (dynobj, info, htab->root.splt,
10000                                                "_PROCEDURE_LINKAGE_TABLE_");
10001               htab->root.hplt = h;
10002               if (h == NULL)
10003                 return FALSE;
10004             }
10005
10006           h = htab->root.hplt;
10007           h->root.u.def.value = isa_bit;
10008           h->other = other;
10009           h->type = STT_FUNC;
10010         }
10011     }
10012
10013   /* Allocate space for global sym dynamic relocs.  */
10014   elf_link_hash_traverse (&htab->root, allocate_dynrelocs, info);
10015
10016   mips_elf_estimate_stub_size (output_bfd, info);
10017
10018   if (!mips_elf_lay_out_got (output_bfd, info))
10019     return FALSE;
10020
10021   mips_elf_lay_out_lazy_stubs (info);
10022
10023   /* The check_relocs and adjust_dynamic_symbol entry points have
10024      determined the sizes of the various dynamic sections.  Allocate
10025      memory for them.  */
10026   reltext = FALSE;
10027   for (s = dynobj->sections; s != NULL; s = s->next)
10028     {
10029       const char *name;
10030
10031       /* It's OK to base decisions on the section name, because none
10032          of the dynobj section names depend upon the input files.  */
10033       name = bfd_get_section_name (dynobj, s);
10034
10035       if ((s->flags & SEC_LINKER_CREATED) == 0)
10036         continue;
10037
10038       if (CONST_STRNEQ (name, ".rel"))
10039         {
10040           if (s->size != 0)
10041             {
10042               const char *outname;
10043               asection *target;
10044
10045               /* If this relocation section applies to a read only
10046                  section, then we probably need a DT_TEXTREL entry.
10047                  If the relocation section is .rel(a).dyn, we always
10048                  assert a DT_TEXTREL entry rather than testing whether
10049                  there exists a relocation to a read only section or
10050                  not.  */
10051               outname = bfd_get_section_name (output_bfd,
10052                                               s->output_section);
10053               target = bfd_get_section_by_name (output_bfd, outname + 4);
10054               if ((target != NULL
10055                    && (target->flags & SEC_READONLY) != 0
10056                    && (target->flags & SEC_ALLOC) != 0)
10057                   || strcmp (outname, MIPS_ELF_REL_DYN_NAME (info)) == 0)
10058                 reltext = TRUE;
10059
10060               /* We use the reloc_count field as a counter if we need
10061                  to copy relocs into the output file.  */
10062               if (strcmp (name, MIPS_ELF_REL_DYN_NAME (info)) != 0)
10063                 s->reloc_count = 0;
10064
10065               /* If combreloc is enabled, elf_link_sort_relocs() will
10066                  sort relocations, but in a different way than we do,
10067                  and before we're done creating relocations.  Also, it
10068                  will move them around between input sections'
10069                  relocation's contents, so our sorting would be
10070                  broken, so don't let it run.  */
10071               info->combreloc = 0;
10072             }
10073         }
10074       else if (bfd_link_executable (info)
10075                && ! mips_elf_hash_table (info)->use_rld_obj_head
10076                && CONST_STRNEQ (name, ".rld_map"))
10077         {
10078           /* We add a room for __rld_map.  It will be filled in by the
10079              rtld to contain a pointer to the _r_debug structure.  */
10080           s->size += MIPS_ELF_RLD_MAP_SIZE (output_bfd);
10081         }
10082       else if (SGI_COMPAT (output_bfd)
10083                && CONST_STRNEQ (name, ".compact_rel"))
10084         s->size += mips_elf_hash_table (info)->compact_rel_size;
10085       else if (s == htab->root.splt)
10086         {
10087           /* If the last PLT entry has a branch delay slot, allocate
10088              room for an extra nop to fill the delay slot.  This is
10089              for CPUs without load interlocking.  */
10090           if (! LOAD_INTERLOCKS_P (output_bfd)
10091               && ! htab->is_vxworks && s->size > 0)
10092             s->size += 4;
10093         }
10094       else if (! CONST_STRNEQ (name, ".init")
10095                && s != htab->root.sgot
10096                && s != htab->root.sgotplt
10097                && s != htab->sstubs
10098                && s != htab->root.sdynbss
10099                && s != htab->root.sdynrelro)
10100         {
10101           /* It's not one of our sections, so don't allocate space.  */
10102           continue;
10103         }
10104
10105       if (s->size == 0)
10106         {
10107           s->flags |= SEC_EXCLUDE;
10108           continue;
10109         }
10110
10111       if ((s->flags & SEC_HAS_CONTENTS) == 0)
10112         continue;
10113
10114       /* Allocate memory for the section contents.  */
10115       s->contents = bfd_zalloc (dynobj, s->size);
10116       if (s->contents == NULL)
10117         {
10118           bfd_set_error (bfd_error_no_memory);
10119           return FALSE;
10120         }
10121     }
10122
10123   if (elf_hash_table (info)->dynamic_sections_created)
10124     {
10125       /* Add some entries to the .dynamic section.  We fill in the
10126          values later, in _bfd_mips_elf_finish_dynamic_sections, but we
10127          must add the entries now so that we get the correct size for
10128          the .dynamic section.  */
10129
10130       /* SGI object has the equivalence of DT_DEBUG in the
10131          DT_MIPS_RLD_MAP entry.  This must come first because glibc
10132          only fills in DT_MIPS_RLD_MAP (not DT_DEBUG) and some tools
10133          may only look at the first one they see.  */
10134       if (!bfd_link_pic (info)
10135           && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_MAP, 0))
10136         return FALSE;
10137
10138       if (bfd_link_executable (info)
10139           && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_MAP_REL, 0))
10140         return FALSE;
10141
10142       /* The DT_DEBUG entry may be filled in by the dynamic linker and
10143          used by the debugger.  */
10144       if (bfd_link_executable (info)
10145           && !SGI_COMPAT (output_bfd)
10146           && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_DEBUG, 0))
10147         return FALSE;
10148
10149       if (reltext && (SGI_COMPAT (output_bfd) || htab->is_vxworks))
10150         info->flags |= DF_TEXTREL;
10151
10152       if ((info->flags & DF_TEXTREL) != 0)
10153         {
10154           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_TEXTREL, 0))
10155             return FALSE;
10156
10157           /* Clear the DF_TEXTREL flag.  It will be set again if we
10158              write out an actual text relocation; we may not, because
10159              at this point we do not know whether e.g. any .eh_frame
10160              absolute relocations have been converted to PC-relative.  */
10161           info->flags &= ~DF_TEXTREL;
10162         }
10163
10164       if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTGOT, 0))
10165         return FALSE;
10166
10167       sreldyn = mips_elf_rel_dyn_section (info, FALSE);
10168       if (htab->is_vxworks)
10169         {
10170           /* VxWorks uses .rela.dyn instead of .rel.dyn.  It does not
10171              use any of the DT_MIPS_* tags.  */
10172           if (sreldyn && sreldyn->size > 0)
10173             {
10174               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELA, 0))
10175                 return FALSE;
10176
10177               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELASZ, 0))
10178                 return FALSE;
10179
10180               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELAENT, 0))
10181                 return FALSE;
10182             }
10183         }
10184       else
10185         {
10186           if (sreldyn && sreldyn->size > 0
10187               && !bfd_is_abs_section (sreldyn->output_section))
10188             {
10189               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_REL, 0))
10190                 return FALSE;
10191
10192               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELSZ, 0))
10193                 return FALSE;
10194
10195               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELENT, 0))
10196                 return FALSE;
10197             }
10198
10199           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_VERSION, 0))
10200             return FALSE;
10201
10202           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_FLAGS, 0))
10203             return FALSE;
10204
10205           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_BASE_ADDRESS, 0))
10206             return FALSE;
10207
10208           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_LOCAL_GOTNO, 0))
10209             return FALSE;
10210
10211           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_SYMTABNO, 0))
10212             return FALSE;
10213
10214           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_UNREFEXTNO, 0))
10215             return FALSE;
10216
10217           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_GOTSYM, 0))
10218             return FALSE;
10219
10220           if (info->emit_gnu_hash
10221               && ! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_XHASH, 0))
10222             return FALSE;
10223
10224           if (IRIX_COMPAT (dynobj) == ict_irix5
10225               && ! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_HIPAGENO, 0))
10226             return FALSE;
10227
10228           if (IRIX_COMPAT (dynobj) == ict_irix6
10229               && (bfd_get_section_by_name
10230                   (output_bfd, MIPS_ELF_OPTIONS_SECTION_NAME (dynobj)))
10231               && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_OPTIONS, 0))
10232             return FALSE;
10233         }
10234       if (htab->root.splt->size > 0)
10235         {
10236           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTREL, 0))
10237             return FALSE;
10238
10239           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_JMPREL, 0))
10240             return FALSE;
10241
10242           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTRELSZ, 0))
10243             return FALSE;
10244
10245           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_PLTGOT, 0))
10246             return FALSE;
10247         }
10248       if (htab->is_vxworks
10249           && !elf_vxworks_add_dynamic_entries (output_bfd, info))
10250         return FALSE;
10251     }
10252
10253   return TRUE;
10254 }
10255 \f
10256 /* REL is a relocation in INPUT_BFD that is being copied to OUTPUT_BFD.
10257    Adjust its R_ADDEND field so that it is correct for the output file.
10258    LOCAL_SYMS and LOCAL_SECTIONS are arrays of INPUT_BFD's local symbols
10259    and sections respectively; both use symbol indexes.  */
10260
10261 static void
10262 mips_elf_adjust_addend (bfd *output_bfd, struct bfd_link_info *info,
10263                         bfd *input_bfd, Elf_Internal_Sym *local_syms,
10264                         asection **local_sections, Elf_Internal_Rela *rel)
10265 {
10266   unsigned int r_type, r_symndx;
10267   Elf_Internal_Sym *sym;
10268   asection *sec;
10269
10270   if (mips_elf_local_relocation_p (input_bfd, rel, local_sections))
10271     {
10272       r_type = ELF_R_TYPE (output_bfd, rel->r_info);
10273       if (gprel16_reloc_p (r_type)
10274           || r_type == R_MIPS_GPREL32
10275           || literal_reloc_p (r_type))
10276         {
10277           rel->r_addend += _bfd_get_gp_value (input_bfd);
10278           rel->r_addend -= _bfd_get_gp_value (output_bfd);
10279         }
10280
10281       r_symndx = ELF_R_SYM (output_bfd, rel->r_info);
10282       sym = local_syms + r_symndx;
10283
10284       /* Adjust REL's addend to account for section merging.  */
10285       if (!bfd_link_relocatable (info))
10286         {
10287           sec = local_sections[r_symndx];
10288           _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
10289         }
10290
10291       /* This would normally be done by the rela_normal code in elflink.c.  */
10292       if (ELF_ST_TYPE (sym->st_info) == STT_SECTION)
10293         rel->r_addend += local_sections[r_symndx]->output_offset;
10294     }
10295 }
10296
10297 /* Handle relocations against symbols from removed linkonce sections,
10298    or sections discarded by a linker script.  We use this wrapper around
10299    RELOC_AGAINST_DISCARDED_SECTION to handle triplets of compound relocs
10300    on 64-bit ELF targets.  In this case for any relocation handled, which
10301    always be the first in a triplet, the remaining two have to be processed
10302    together with the first, even if they are R_MIPS_NONE.  It is the symbol
10303    index referred by the first reloc that applies to all the three and the
10304    remaining two never refer to an object symbol.  And it is the final
10305    relocation (the last non-null one) that determines the output field of
10306    the whole relocation so retrieve the corresponding howto structure for
10307    the relocatable field to be cleared by RELOC_AGAINST_DISCARDED_SECTION.
10308
10309    Note that RELOC_AGAINST_DISCARDED_SECTION is a macro that uses "continue"
10310    and therefore requires to be pasted in a loop.  It also defines a block
10311    and does not protect any of its arguments, hence the extra brackets.  */
10312
10313 static void
10314 mips_reloc_against_discarded_section (bfd *output_bfd,
10315                                       struct bfd_link_info *info,
10316                                       bfd *input_bfd, asection *input_section,
10317                                       Elf_Internal_Rela **rel,
10318                                       const Elf_Internal_Rela **relend,
10319                                       bfd_boolean rel_reloc,
10320                                       reloc_howto_type *howto,
10321                                       bfd_byte *contents)
10322 {
10323   const struct elf_backend_data *bed = get_elf_backend_data (output_bfd);
10324   int count = bed->s->int_rels_per_ext_rel;
10325   unsigned int r_type;
10326   int i;
10327
10328   for (i = count - 1; i > 0; i--)
10329     {
10330       r_type = ELF_R_TYPE (output_bfd, (*rel)[i].r_info);
10331       if (r_type != R_MIPS_NONE)
10332         {
10333           howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, r_type, !rel_reloc);
10334           break;
10335         }
10336     }
10337   do
10338     {
10339        RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
10340                                         (*rel), count, (*relend),
10341                                         howto, i, contents);
10342     }
10343   while (0);
10344 }
10345
10346 /* Relocate a MIPS ELF section.  */
10347
10348 bfd_boolean
10349 _bfd_mips_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
10350                                 bfd *input_bfd, asection *input_section,
10351                                 bfd_byte *contents, Elf_Internal_Rela *relocs,
10352                                 Elf_Internal_Sym *local_syms,
10353                                 asection **local_sections)
10354 {
10355   Elf_Internal_Rela *rel;
10356   const Elf_Internal_Rela *relend;
10357   bfd_vma addend = 0;
10358   bfd_boolean use_saved_addend_p = FALSE;
10359
10360   relend = relocs + input_section->reloc_count;
10361   for (rel = relocs; rel < relend; ++rel)
10362     {
10363       const char *name;
10364       bfd_vma value = 0;
10365       reloc_howto_type *howto;
10366       bfd_boolean cross_mode_jump_p = FALSE;
10367       /* TRUE if the relocation is a RELA relocation, rather than a
10368          REL relocation.  */
10369       bfd_boolean rela_relocation_p = TRUE;
10370       unsigned int r_type = ELF_R_TYPE (output_bfd, rel->r_info);
10371       const char *msg;
10372       unsigned long r_symndx;
10373       asection *sec;
10374       Elf_Internal_Shdr *symtab_hdr;
10375       struct elf_link_hash_entry *h;
10376       bfd_boolean rel_reloc;
10377
10378       rel_reloc = (NEWABI_P (input_bfd)
10379                    && mips_elf_rel_relocation_p (input_bfd, input_section,
10380                                                  relocs, rel));
10381       /* Find the relocation howto for this relocation.  */
10382       howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, r_type, !rel_reloc);
10383
10384       r_symndx = ELF_R_SYM (input_bfd, rel->r_info);
10385       symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
10386       if (mips_elf_local_relocation_p (input_bfd, rel, local_sections))
10387         {
10388           sec = local_sections[r_symndx];
10389           h = NULL;
10390         }
10391       else
10392         {
10393           unsigned long extsymoff;
10394
10395           extsymoff = 0;
10396           if (!elf_bad_symtab (input_bfd))
10397             extsymoff = symtab_hdr->sh_info;
10398           h = elf_sym_hashes (input_bfd) [r_symndx - extsymoff];
10399           while (h->root.type == bfd_link_hash_indirect
10400                  || h->root.type == bfd_link_hash_warning)
10401             h = (struct elf_link_hash_entry *) h->root.u.i.link;
10402
10403           sec = NULL;
10404           if (h->root.type == bfd_link_hash_defined
10405               || h->root.type == bfd_link_hash_defweak)
10406             sec = h->root.u.def.section;
10407         }
10408
10409       if (sec != NULL && discarded_section (sec))
10410         {
10411           mips_reloc_against_discarded_section (output_bfd, info, input_bfd,
10412                                                 input_section, &rel, &relend,
10413                                                 rel_reloc, howto, contents);
10414           continue;
10415         }
10416
10417       if (r_type == R_MIPS_64 && ! NEWABI_P (input_bfd))
10418         {
10419           /* Some 32-bit code uses R_MIPS_64.  In particular, people use
10420              64-bit code, but make sure all their addresses are in the
10421              lowermost or uppermost 32-bit section of the 64-bit address
10422              space.  Thus, when they use an R_MIPS_64 they mean what is
10423              usually meant by R_MIPS_32, with the exception that the
10424              stored value is sign-extended to 64 bits.  */
10425           howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, R_MIPS_32, FALSE);
10426
10427           /* On big-endian systems, we need to lie about the position
10428              of the reloc.  */
10429           if (bfd_big_endian (input_bfd))
10430             rel->r_offset += 4;
10431         }
10432
10433       if (!use_saved_addend_p)
10434         {
10435           /* If these relocations were originally of the REL variety,
10436              we must pull the addend out of the field that will be
10437              relocated.  Otherwise, we simply use the contents of the
10438              RELA relocation.  */
10439           if (mips_elf_rel_relocation_p (input_bfd, input_section,
10440                                          relocs, rel))
10441             {
10442               rela_relocation_p = FALSE;
10443               addend = mips_elf_read_rel_addend (input_bfd, rel,
10444                                                  howto, contents);
10445               if (hi16_reloc_p (r_type)
10446                   || (got16_reloc_p (r_type)
10447                       && mips_elf_local_relocation_p (input_bfd, rel,
10448                                                       local_sections)))
10449                 {
10450                   if (!mips_elf_add_lo16_rel_addend (input_bfd, rel, relend,
10451                                                      contents, &addend))
10452                     {
10453                       if (h)
10454                         name = h->root.root.string;
10455                       else
10456                         name = bfd_elf_sym_name (input_bfd, symtab_hdr,
10457                                                  local_syms + r_symndx,
10458                                                  sec);
10459                       _bfd_error_handler
10460                         /* xgettext:c-format */
10461                         (_("%pB: can't find matching LO16 reloc against `%s'"
10462                            " for %s at %#" PRIx64 " in section `%pA'"),
10463                          input_bfd, name,
10464                          howto->name, (uint64_t) rel->r_offset, input_section);
10465                     }
10466                 }
10467               else
10468                 addend <<= howto->rightshift;
10469             }
10470           else
10471             addend = rel->r_addend;
10472           mips_elf_adjust_addend (output_bfd, info, input_bfd,
10473                                   local_syms, local_sections, rel);
10474         }
10475
10476       if (bfd_link_relocatable (info))
10477         {
10478           if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd)
10479               && bfd_big_endian (input_bfd))
10480             rel->r_offset -= 4;
10481
10482           if (!rela_relocation_p && rel->r_addend)
10483             {
10484               addend += rel->r_addend;
10485               if (hi16_reloc_p (r_type) || got16_reloc_p (r_type))
10486                 addend = mips_elf_high (addend);
10487               else if (r_type == R_MIPS_HIGHER)
10488                 addend = mips_elf_higher (addend);
10489               else if (r_type == R_MIPS_HIGHEST)
10490                 addend = mips_elf_highest (addend);
10491               else
10492                 addend >>= howto->rightshift;
10493
10494               /* We use the source mask, rather than the destination
10495                  mask because the place to which we are writing will be
10496                  source of the addend in the final link.  */
10497               addend &= howto->src_mask;
10498
10499               if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd))
10500                 /* See the comment above about using R_MIPS_64 in the 32-bit
10501                    ABI.  Here, we need to update the addend.  It would be
10502                    possible to get away with just using the R_MIPS_32 reloc
10503                    but for endianness.  */
10504                 {
10505                   bfd_vma sign_bits;
10506                   bfd_vma low_bits;
10507                   bfd_vma high_bits;
10508
10509                   if (addend & ((bfd_vma) 1 << 31))
10510 #ifdef BFD64
10511                     sign_bits = ((bfd_vma) 1 << 32) - 1;
10512 #else
10513                     sign_bits = -1;
10514 #endif
10515                   else
10516                     sign_bits = 0;
10517
10518                   /* If we don't know that we have a 64-bit type,
10519                      do two separate stores.  */
10520                   if (bfd_big_endian (input_bfd))
10521                     {
10522                       /* Store the sign-bits (which are most significant)
10523                          first.  */
10524                       low_bits = sign_bits;
10525                       high_bits = addend;
10526                     }
10527                   else
10528                     {
10529                       low_bits = addend;
10530                       high_bits = sign_bits;
10531                     }
10532                   bfd_put_32 (input_bfd, low_bits,
10533                               contents + rel->r_offset);
10534                   bfd_put_32 (input_bfd, high_bits,
10535                               contents + rel->r_offset + 4);
10536                   continue;
10537                 }
10538
10539               if (! mips_elf_perform_relocation (info, howto, rel, addend,
10540                                                  input_bfd, input_section,
10541                                                  contents, FALSE))
10542                 return FALSE;
10543             }
10544
10545           /* Go on to the next relocation.  */
10546           continue;
10547         }
10548
10549       /* In the N32 and 64-bit ABIs there may be multiple consecutive
10550          relocations for the same offset.  In that case we are
10551          supposed to treat the output of each relocation as the addend
10552          for the next.  */
10553       if (rel + 1 < relend
10554           && rel->r_offset == rel[1].r_offset
10555           && ELF_R_TYPE (input_bfd, rel[1].r_info) != R_MIPS_NONE)
10556         use_saved_addend_p = TRUE;
10557       else
10558         use_saved_addend_p = FALSE;
10559
10560       /* Figure out what value we are supposed to relocate.  */
10561       switch (mips_elf_calculate_relocation (output_bfd, input_bfd,
10562                                              input_section, contents,
10563                                              info, rel, addend, howto,
10564                                              local_syms, local_sections,
10565                                              &value, &name, &cross_mode_jump_p,
10566                                              use_saved_addend_p))
10567         {
10568         case bfd_reloc_continue:
10569           /* There's nothing to do.  */
10570           continue;
10571
10572         case bfd_reloc_undefined:
10573           /* mips_elf_calculate_relocation already called the
10574              undefined_symbol callback.  There's no real point in
10575              trying to perform the relocation at this point, so we
10576              just skip ahead to the next relocation.  */
10577           continue;
10578
10579         case bfd_reloc_notsupported:
10580           msg = _("internal error: unsupported relocation error");
10581           info->callbacks->warning
10582             (info, msg, name, input_bfd, input_section, rel->r_offset);
10583           return FALSE;
10584
10585         case bfd_reloc_overflow:
10586           if (use_saved_addend_p)
10587             /* Ignore overflow until we reach the last relocation for
10588                a given location.  */
10589             ;
10590           else
10591             {
10592               struct mips_elf_link_hash_table *htab;
10593
10594               htab = mips_elf_hash_table (info);
10595               BFD_ASSERT (htab != NULL);
10596               BFD_ASSERT (name != NULL);
10597               if (!htab->small_data_overflow_reported
10598                   && (gprel16_reloc_p (howto->type)
10599                       || literal_reloc_p (howto->type)))
10600                 {
10601                   msg = _("small-data section exceeds 64KB;"
10602                           " lower small-data size limit (see option -G)");
10603
10604                   htab->small_data_overflow_reported = TRUE;
10605                   (*info->callbacks->einfo) ("%P: %s\n", msg);
10606                 }
10607               (*info->callbacks->reloc_overflow)
10608                 (info, NULL, name, howto->name, (bfd_vma) 0,
10609                  input_bfd, input_section, rel->r_offset);
10610             }
10611           break;
10612
10613         case bfd_reloc_ok:
10614           break;
10615
10616         case bfd_reloc_outofrange:
10617           msg = NULL;
10618           if (jal_reloc_p (howto->type))
10619             msg = (cross_mode_jump_p
10620                    ? _("cannot convert a jump to JALX "
10621                        "for a non-word-aligned address")
10622                    : (howto->type == R_MIPS16_26
10623                       ? _("jump to a non-word-aligned address")
10624                       : _("jump to a non-instruction-aligned address")));
10625           else if (b_reloc_p (howto->type))
10626             msg = (cross_mode_jump_p
10627                    ? _("cannot convert a branch to JALX "
10628                        "for a non-word-aligned address")
10629                    : _("branch to a non-instruction-aligned address"));
10630           else if (aligned_pcrel_reloc_p (howto->type))
10631             msg = _("PC-relative load from unaligned address");
10632           if (msg)
10633             {
10634               info->callbacks->einfo
10635                 ("%X%H: %s\n", input_bfd, input_section, rel->r_offset, msg);
10636               break;
10637             }
10638           /* Fall through.  */
10639
10640         default:
10641           abort ();
10642           break;
10643         }
10644
10645       /* If we've got another relocation for the address, keep going
10646          until we reach the last one.  */
10647       if (use_saved_addend_p)
10648         {
10649           addend = value;
10650           continue;
10651         }
10652
10653       if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd))
10654         /* See the comment above about using R_MIPS_64 in the 32-bit
10655            ABI.  Until now, we've been using the HOWTO for R_MIPS_32;
10656            that calculated the right value.  Now, however, we
10657            sign-extend the 32-bit result to 64-bits, and store it as a
10658            64-bit value.  We are especially generous here in that we
10659            go to extreme lengths to support this usage on systems with
10660            only a 32-bit VMA.  */
10661         {
10662           bfd_vma sign_bits;
10663           bfd_vma low_bits;
10664           bfd_vma high_bits;
10665
10666           if (value & ((bfd_vma) 1 << 31))
10667 #ifdef BFD64
10668             sign_bits = ((bfd_vma) 1 << 32) - 1;
10669 #else
10670             sign_bits = -1;
10671 #endif
10672           else
10673             sign_bits = 0;
10674
10675           /* If we don't know that we have a 64-bit type,
10676              do two separate stores.  */
10677           if (bfd_big_endian (input_bfd))
10678             {
10679               /* Undo what we did above.  */
10680               rel->r_offset -= 4;
10681               /* Store the sign-bits (which are most significant)
10682                  first.  */
10683               low_bits = sign_bits;
10684               high_bits = value;
10685             }
10686           else
10687             {
10688               low_bits = value;
10689               high_bits = sign_bits;
10690             }
10691           bfd_put_32 (input_bfd, low_bits,
10692                       contents + rel->r_offset);
10693           bfd_put_32 (input_bfd, high_bits,
10694                       contents + rel->r_offset + 4);
10695           continue;
10696         }
10697
10698       /* Actually perform the relocation.  */
10699       if (! mips_elf_perform_relocation (info, howto, rel, value,
10700                                          input_bfd, input_section,
10701                                          contents, cross_mode_jump_p))
10702         return FALSE;
10703     }
10704
10705   return TRUE;
10706 }
10707 \f
10708 /* A function that iterates over each entry in la25_stubs and fills
10709    in the code for each one.  DATA points to a mips_htab_traverse_info.  */
10710
10711 static int
10712 mips_elf_create_la25_stub (void **slot, void *data)
10713 {
10714   struct mips_htab_traverse_info *hti;
10715   struct mips_elf_link_hash_table *htab;
10716   struct mips_elf_la25_stub *stub;
10717   asection *s;
10718   bfd_byte *loc;
10719   bfd_vma offset, target, target_high, target_low;
10720   bfd_vma branch_pc;
10721   bfd_signed_vma pcrel_offset = 0;
10722
10723   stub = (struct mips_elf_la25_stub *) *slot;
10724   hti = (struct mips_htab_traverse_info *) data;
10725   htab = mips_elf_hash_table (hti->info);
10726   BFD_ASSERT (htab != NULL);
10727
10728   /* Create the section contents, if we haven't already.  */
10729   s = stub->stub_section;
10730   loc = s->contents;
10731   if (loc == NULL)
10732     {
10733       loc = bfd_malloc (s->size);
10734       if (loc == NULL)
10735         {
10736           hti->error = TRUE;
10737           return FALSE;
10738         }
10739       s->contents = loc;
10740     }
10741
10742   /* Work out where in the section this stub should go.  */
10743   offset = stub->offset;
10744
10745   /* We add 8 here to account for the LUI/ADDIU instructions
10746      before the branch instruction.  This cannot be moved down to
10747      where pcrel_offset is calculated as 's' is updated in
10748      mips_elf_get_la25_target.  */
10749   branch_pc = s->output_section->vma + s->output_offset + offset + 8;
10750
10751   /* Work out the target address.  */
10752   target = mips_elf_get_la25_target (stub, &s);
10753   target += s->output_section->vma + s->output_offset;
10754
10755   target_high = ((target + 0x8000) >> 16) & 0xffff;
10756   target_low = (target & 0xffff);
10757
10758   /* Calculate the PC of the compact branch instruction (for the case where
10759      compact branches are used for either microMIPSR6 or MIPSR6 with
10760      compact branches.  Add 4-bytes to account for BC using the PC of the
10761      next instruction as the base.  */
10762   pcrel_offset = target - (branch_pc + 4);
10763
10764   if (stub->stub_section != htab->strampoline)
10765     {
10766       /* This is a simple LUI/ADDIU stub.  Zero out the beginning
10767          of the section and write the two instructions at the end.  */
10768       memset (loc, 0, offset);
10769       loc += offset;
10770       if (ELF_ST_IS_MICROMIPS (stub->h->root.other))
10771         {
10772           bfd_put_micromips_32 (hti->output_bfd,
10773                                 LA25_LUI_MICROMIPS (target_high),
10774                                 loc);
10775           bfd_put_micromips_32 (hti->output_bfd,
10776                                 LA25_ADDIU_MICROMIPS (target_low),
10777                                 loc + 4);
10778         }
10779       else
10780         {
10781           bfd_put_32 (hti->output_bfd, LA25_LUI (target_high), loc);
10782           bfd_put_32 (hti->output_bfd, LA25_ADDIU (target_low), loc + 4);
10783         }
10784     }
10785   else
10786     {
10787       /* This is trampoline.  */
10788       loc += offset;
10789       if (ELF_ST_IS_MICROMIPS (stub->h->root.other))
10790         {
10791           bfd_put_micromips_32 (hti->output_bfd,
10792                                 LA25_LUI_MICROMIPS (target_high), loc);
10793           bfd_put_micromips_32 (hti->output_bfd,
10794                                 LA25_J_MICROMIPS (target), loc + 4);
10795           bfd_put_micromips_32 (hti->output_bfd,
10796                                 LA25_ADDIU_MICROMIPS (target_low), loc + 8);
10797           bfd_put_32 (hti->output_bfd, 0, loc + 12);
10798         }
10799       else
10800         {
10801           bfd_put_32 (hti->output_bfd, LA25_LUI (target_high), loc);
10802           if (MIPSR6_P (hti->output_bfd) && htab->compact_branches)
10803             {
10804               bfd_put_32 (hti->output_bfd, LA25_ADDIU (target_low), loc + 4);
10805               bfd_put_32 (hti->output_bfd, LA25_BC (pcrel_offset), loc + 8);
10806             }
10807           else
10808             {
10809               bfd_put_32 (hti->output_bfd, LA25_J (target), loc + 4);
10810               bfd_put_32 (hti->output_bfd, LA25_ADDIU (target_low), loc + 8);
10811             }
10812           bfd_put_32 (hti->output_bfd, 0, loc + 12);
10813         }
10814     }
10815   return TRUE;
10816 }
10817
10818 /* If NAME is one of the special IRIX6 symbols defined by the linker,
10819    adjust it appropriately now.  */
10820
10821 static void
10822 mips_elf_irix6_finish_dynamic_symbol (bfd *abfd ATTRIBUTE_UNUSED,
10823                                       const char *name, Elf_Internal_Sym *sym)
10824 {
10825   /* The linker script takes care of providing names and values for
10826      these, but we must place them into the right sections.  */
10827   static const char* const text_section_symbols[] = {
10828     "_ftext",
10829     "_etext",
10830     "__dso_displacement",
10831     "__elf_header",
10832     "__program_header_table",
10833     NULL
10834   };
10835
10836   static const char* const data_section_symbols[] = {
10837     "_fdata",
10838     "_edata",
10839     "_end",
10840     "_fbss",
10841     NULL
10842   };
10843
10844   const char* const *p;
10845   int i;
10846
10847   for (i = 0; i < 2; ++i)
10848     for (p = (i == 0) ? text_section_symbols : data_section_symbols;
10849          *p;
10850          ++p)
10851       if (strcmp (*p, name) == 0)
10852         {
10853           /* All of these symbols are given type STT_SECTION by the
10854              IRIX6 linker.  */
10855           sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10856           sym->st_other = STO_PROTECTED;
10857
10858           /* The IRIX linker puts these symbols in special sections.  */
10859           if (i == 0)
10860             sym->st_shndx = SHN_MIPS_TEXT;
10861           else
10862             sym->st_shndx = SHN_MIPS_DATA;
10863
10864           break;
10865         }
10866 }
10867
10868 /* Finish up dynamic symbol handling.  We set the contents of various
10869    dynamic sections here.  */
10870
10871 bfd_boolean
10872 _bfd_mips_elf_finish_dynamic_symbol (bfd *output_bfd,
10873                                      struct bfd_link_info *info,
10874                                      struct elf_link_hash_entry *h,
10875                                      Elf_Internal_Sym *sym)
10876 {
10877   bfd *dynobj;
10878   asection *sgot;
10879   struct mips_got_info *g, *gg;
10880   const char *name;
10881   int idx;
10882   struct mips_elf_link_hash_table *htab;
10883   struct mips_elf_link_hash_entry *hmips;
10884
10885   htab = mips_elf_hash_table (info);
10886   BFD_ASSERT (htab != NULL);
10887   dynobj = elf_hash_table (info)->dynobj;
10888   hmips = (struct mips_elf_link_hash_entry *) h;
10889
10890   BFD_ASSERT (!htab->is_vxworks);
10891
10892   if (h->plt.plist != NULL
10893       && (h->plt.plist->mips_offset != MINUS_ONE
10894           || h->plt.plist->comp_offset != MINUS_ONE))
10895     {
10896       /* We've decided to create a PLT entry for this symbol.  */
10897       bfd_byte *loc;
10898       bfd_vma header_address, got_address;
10899       bfd_vma got_address_high, got_address_low, load;
10900       bfd_vma got_index;
10901       bfd_vma isa_bit;
10902
10903       got_index = h->plt.plist->gotplt_index;
10904
10905       BFD_ASSERT (htab->use_plts_and_copy_relocs);
10906       BFD_ASSERT (h->dynindx != -1);
10907       BFD_ASSERT (htab->root.splt != NULL);
10908       BFD_ASSERT (got_index != MINUS_ONE);
10909       BFD_ASSERT (!h->def_regular);
10910
10911       /* Calculate the address of the PLT header.  */
10912       isa_bit = htab->plt_header_is_comp;
10913       header_address = (htab->root.splt->output_section->vma
10914                         + htab->root.splt->output_offset + isa_bit);
10915
10916       /* Calculate the address of the .got.plt entry.  */
10917       got_address = (htab->root.sgotplt->output_section->vma
10918                      + htab->root.sgotplt->output_offset
10919                      + got_index * MIPS_ELF_GOT_SIZE (dynobj));
10920
10921       got_address_high = ((got_address + 0x8000) >> 16) & 0xffff;
10922       got_address_low = got_address & 0xffff;
10923
10924       /* The PLT sequence is not safe for N64 if .got.plt entry's address
10925          cannot be loaded in two instructions.  */
10926       if (ABI_64_P (output_bfd)
10927           && ((got_address + 0x80008000) & ~(bfd_vma) 0xffffffff) != 0)
10928         {
10929           _bfd_error_handler
10930             /* xgettext:c-format */
10931             (_("%pB: `%pA' entry VMA of %#" PRIx64 " outside the 32-bit range "
10932                "supported; consider using `-Ttext-segment=...'"),
10933              output_bfd,
10934              htab->root.sgotplt->output_section,
10935              (int64_t) got_address);
10936           bfd_set_error (bfd_error_no_error);
10937           return FALSE;
10938         }
10939
10940       /* Initially point the .got.plt entry at the PLT header.  */
10941       loc = (htab->root.sgotplt->contents
10942              + got_index * MIPS_ELF_GOT_SIZE (dynobj));
10943       if (ABI_64_P (output_bfd))
10944         bfd_put_64 (output_bfd, header_address, loc);
10945       else
10946         bfd_put_32 (output_bfd, header_address, loc);
10947
10948       /* Now handle the PLT itself.  First the standard entry (the order
10949          does not matter, we just have to pick one).  */
10950       if (h->plt.plist->mips_offset != MINUS_ONE)
10951         {
10952           const bfd_vma *plt_entry;
10953           bfd_vma plt_offset;
10954
10955           plt_offset = htab->plt_header_size + h->plt.plist->mips_offset;
10956
10957           BFD_ASSERT (plt_offset <= htab->root.splt->size);
10958
10959           /* Find out where the .plt entry should go.  */
10960           loc = htab->root.splt->contents + plt_offset;
10961
10962           /* Pick the load opcode.  */
10963           load = MIPS_ELF_LOAD_WORD (output_bfd);
10964
10965           /* Fill in the PLT entry itself.  */
10966
10967           if (MIPSR6_P (output_bfd))
10968             plt_entry = htab->compact_branches ? mipsr6_exec_plt_entry_compact
10969                                                : mipsr6_exec_plt_entry;
10970           else
10971             plt_entry = mips_exec_plt_entry;
10972           bfd_put_32 (output_bfd, plt_entry[0] | got_address_high, loc);
10973           bfd_put_32 (output_bfd, plt_entry[1] | got_address_low | load,
10974                       loc + 4);
10975
10976           if (! LOAD_INTERLOCKS_P (output_bfd)
10977               || (MIPSR6_P (output_bfd) && htab->compact_branches))
10978             {
10979               bfd_put_32 (output_bfd, plt_entry[2] | got_address_low, loc + 8);
10980               bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
10981             }
10982           else
10983             {
10984               bfd_put_32 (output_bfd, plt_entry[3], loc + 8);
10985               bfd_put_32 (output_bfd, plt_entry[2] | got_address_low,
10986                           loc + 12);
10987             }
10988         }
10989
10990       /* Now the compressed entry.  They come after any standard ones.  */
10991       if (h->plt.plist->comp_offset != MINUS_ONE)
10992         {
10993           bfd_vma plt_offset;
10994
10995           plt_offset = (htab->plt_header_size + htab->plt_mips_offset
10996                         + h->plt.plist->comp_offset);
10997
10998           BFD_ASSERT (plt_offset <= htab->root.splt->size);
10999
11000           /* Find out where the .plt entry should go.  */
11001           loc = htab->root.splt->contents + plt_offset;
11002
11003           /* Fill in the PLT entry itself.  */
11004           if (!MICROMIPS_P (output_bfd))
11005             {
11006               const bfd_vma *plt_entry = mips16_o32_exec_plt_entry;
11007
11008               bfd_put_16 (output_bfd, plt_entry[0], loc);
11009               bfd_put_16 (output_bfd, plt_entry[1], loc + 2);
11010               bfd_put_16 (output_bfd, plt_entry[2], loc + 4);
11011               bfd_put_16 (output_bfd, plt_entry[3], loc + 6);
11012               bfd_put_16 (output_bfd, plt_entry[4], loc + 8);
11013               bfd_put_16 (output_bfd, plt_entry[5], loc + 10);
11014               bfd_put_32 (output_bfd, got_address, loc + 12);
11015             }
11016           else if (htab->insn32)
11017             {
11018               const bfd_vma *plt_entry = micromips_insn32_o32_exec_plt_entry;
11019
11020               bfd_put_16 (output_bfd, plt_entry[0], loc);
11021               bfd_put_16 (output_bfd, got_address_high, loc + 2);
11022               bfd_put_16 (output_bfd, plt_entry[2], loc + 4);
11023               bfd_put_16 (output_bfd, got_address_low, loc + 6);
11024               bfd_put_16 (output_bfd, plt_entry[4], loc + 8);
11025               bfd_put_16 (output_bfd, plt_entry[5], loc + 10);
11026               bfd_put_16 (output_bfd, plt_entry[6], loc + 12);
11027               bfd_put_16 (output_bfd, got_address_low, loc + 14);
11028             }
11029           else
11030             {
11031               const bfd_vma *plt_entry = micromips_o32_exec_plt_entry;
11032               bfd_signed_vma gotpc_offset;
11033               bfd_vma loc_address;
11034
11035               BFD_ASSERT (got_address % 4 == 0);
11036
11037               loc_address = (htab->root.splt->output_section->vma
11038                              + htab->root.splt->output_offset + plt_offset);
11039               gotpc_offset = got_address - ((loc_address | 3) ^ 3);
11040
11041               /* ADDIUPC has a span of +/-16MB, check we're in range.  */
11042               if (gotpc_offset + 0x1000000 >= 0x2000000)
11043                 {
11044                   _bfd_error_handler
11045                     /* xgettext:c-format */
11046                     (_("%pB: `%pA' offset of %" PRId64 " from `%pA' "
11047                        "beyond the range of ADDIUPC"),
11048                      output_bfd,
11049                      htab->root.sgotplt->output_section,
11050                      (int64_t) gotpc_offset,
11051                      htab->root.splt->output_section);
11052                   bfd_set_error (bfd_error_no_error);
11053                   return FALSE;
11054                 }
11055               bfd_put_16 (output_bfd,
11056                           plt_entry[0] | ((gotpc_offset >> 18) & 0x7f), loc);
11057               bfd_put_16 (output_bfd, (gotpc_offset >> 2) & 0xffff, loc + 2);
11058               bfd_put_16 (output_bfd, plt_entry[2], loc + 4);
11059               bfd_put_16 (output_bfd, plt_entry[3], loc + 6);
11060               bfd_put_16 (output_bfd, plt_entry[4], loc + 8);
11061               bfd_put_16 (output_bfd, plt_entry[5], loc + 10);
11062             }
11063         }
11064
11065       /* Emit an R_MIPS_JUMP_SLOT relocation against the .got.plt entry.  */
11066       mips_elf_output_dynamic_relocation (output_bfd, htab->root.srelplt,
11067                                           got_index - 2, h->dynindx,
11068                                           R_MIPS_JUMP_SLOT, got_address);
11069
11070       /* We distinguish between PLT entries and lazy-binding stubs by
11071          giving the former an st_other value of STO_MIPS_PLT.  Set the
11072          flag and leave the value if there are any relocations in the
11073          binary where pointer equality matters.  */
11074       sym->st_shndx = SHN_UNDEF;
11075       if (h->pointer_equality_needed)
11076         sym->st_other = ELF_ST_SET_MIPS_PLT (sym->st_other);
11077       else
11078         {
11079           sym->st_value = 0;
11080           sym->st_other = 0;
11081         }
11082     }
11083
11084   if (h->plt.plist != NULL && h->plt.plist->stub_offset != MINUS_ONE)
11085     {
11086       /* We've decided to create a lazy-binding stub.  */
11087       bfd_boolean micromips_p = MICROMIPS_P (output_bfd);
11088       unsigned int other = micromips_p ? STO_MICROMIPS : 0;
11089       bfd_vma stub_size = htab->function_stub_size;
11090       bfd_byte stub[MIPS_FUNCTION_STUB_BIG_SIZE];
11091       bfd_vma isa_bit = micromips_p;
11092       bfd_vma stub_big_size;
11093
11094       if (!micromips_p)
11095         stub_big_size = MIPS_FUNCTION_STUB_BIG_SIZE;
11096       else if (htab->insn32)
11097         stub_big_size = MICROMIPS_INSN32_FUNCTION_STUB_BIG_SIZE;
11098       else
11099         stub_big_size = MICROMIPS_FUNCTION_STUB_BIG_SIZE;
11100
11101       /* This symbol has a stub.  Set it up.  */
11102
11103       BFD_ASSERT (h->dynindx != -1);
11104
11105       BFD_ASSERT (stub_size == stub_big_size || h->dynindx <= 0xffff);
11106
11107       /* Values up to 2^31 - 1 are allowed.  Larger values would cause
11108          sign extension at runtime in the stub, resulting in a negative
11109          index value.  */
11110       if (h->dynindx & ~0x7fffffff)
11111         return FALSE;
11112
11113       /* Fill the stub.  */
11114       if (micromips_p)
11115         {
11116           idx = 0;
11117           bfd_put_micromips_32 (output_bfd, STUB_LW_MICROMIPS (output_bfd),
11118                                 stub + idx);
11119           idx += 4;
11120           if (htab->insn32)
11121             {
11122               bfd_put_micromips_32 (output_bfd,
11123                                     STUB_MOVE32_MICROMIPS, stub + idx);
11124               idx += 4;
11125             }
11126           else
11127             {
11128               bfd_put_16 (output_bfd, STUB_MOVE_MICROMIPS, stub + idx);
11129               idx += 2;
11130             }
11131           if (stub_size == stub_big_size)
11132             {
11133               long dynindx_hi = (h->dynindx >> 16) & 0x7fff;
11134
11135               bfd_put_micromips_32 (output_bfd,
11136                                     STUB_LUI_MICROMIPS (dynindx_hi),
11137                                     stub + idx);
11138               idx += 4;
11139             }
11140           if (htab->insn32)
11141             {
11142               bfd_put_micromips_32 (output_bfd, STUB_JALR32_MICROMIPS,
11143                                     stub + idx);
11144               idx += 4;
11145             }
11146           else
11147             {
11148               bfd_put_16 (output_bfd, STUB_JALR_MICROMIPS, stub + idx);
11149               idx += 2;
11150             }
11151
11152           /* If a large stub is not required and sign extension is not a
11153              problem, then use legacy code in the stub.  */
11154           if (stub_size == stub_big_size)
11155             bfd_put_micromips_32 (output_bfd,
11156                                   STUB_ORI_MICROMIPS (h->dynindx & 0xffff),
11157                                   stub + idx);
11158           else if (h->dynindx & ~0x7fff)
11159             bfd_put_micromips_32 (output_bfd,
11160                                   STUB_LI16U_MICROMIPS (h->dynindx & 0xffff),
11161                                   stub + idx);
11162           else
11163             bfd_put_micromips_32 (output_bfd,
11164                                   STUB_LI16S_MICROMIPS (output_bfd,
11165                                                         h->dynindx),
11166                                   stub + idx);
11167         }
11168       else
11169         {
11170           idx = 0;
11171           bfd_put_32 (output_bfd, STUB_LW (output_bfd), stub + idx);
11172           idx += 4;
11173           bfd_put_32 (output_bfd, STUB_MOVE, stub + idx);
11174           idx += 4;
11175           if (stub_size == stub_big_size)
11176             {
11177               bfd_put_32 (output_bfd, STUB_LUI ((h->dynindx >> 16) & 0x7fff),
11178                           stub + idx);
11179               idx += 4;
11180             }
11181
11182           if (!(MIPSR6_P (output_bfd) && htab->compact_branches))
11183             {
11184               bfd_put_32 (output_bfd, STUB_JALR, stub + idx);
11185               idx += 4;
11186             }
11187
11188           /* If a large stub is not required and sign extension is not a
11189              problem, then use legacy code in the stub.  */
11190           if (stub_size == stub_big_size)
11191             bfd_put_32 (output_bfd, STUB_ORI (h->dynindx & 0xffff),
11192                         stub + idx);
11193           else if (h->dynindx & ~0x7fff)
11194             bfd_put_32 (output_bfd, STUB_LI16U (h->dynindx & 0xffff),
11195                         stub + idx);
11196           else
11197             bfd_put_32 (output_bfd, STUB_LI16S (output_bfd, h->dynindx),
11198                         stub + idx);
11199           idx += 4;
11200
11201           if (MIPSR6_P (output_bfd) && htab->compact_branches)
11202             bfd_put_32 (output_bfd, STUB_JALRC, stub + idx);
11203         }
11204
11205       BFD_ASSERT (h->plt.plist->stub_offset <= htab->sstubs->size);
11206       memcpy (htab->sstubs->contents + h->plt.plist->stub_offset,
11207               stub, stub_size);
11208
11209       /* Mark the symbol as undefined.  stub_offset != -1 occurs
11210          only for the referenced symbol.  */
11211       sym->st_shndx = SHN_UNDEF;
11212
11213       /* The run-time linker uses the st_value field of the symbol
11214          to reset the global offset table entry for this external
11215          to its stub address when unlinking a shared object.  */
11216       sym->st_value = (htab->sstubs->output_section->vma
11217                        + htab->sstubs->output_offset
11218                        + h->plt.plist->stub_offset
11219                        + isa_bit);
11220       sym->st_other = other;
11221     }
11222
11223   /* If we have a MIPS16 function with a stub, the dynamic symbol must
11224      refer to the stub, since only the stub uses the standard calling
11225      conventions.  */
11226   if (h->dynindx != -1 && hmips->fn_stub != NULL)
11227     {
11228       BFD_ASSERT (hmips->need_fn_stub);
11229       sym->st_value = (hmips->fn_stub->output_section->vma
11230                        + hmips->fn_stub->output_offset);
11231       sym->st_size = hmips->fn_stub->size;
11232       sym->st_other = ELF_ST_VISIBILITY (sym->st_other);
11233     }
11234
11235   BFD_ASSERT (h->dynindx != -1
11236               || h->forced_local);
11237
11238   sgot = htab->root.sgot;
11239   g = htab->got_info;
11240   BFD_ASSERT (g != NULL);
11241
11242   /* Run through the global symbol table, creating GOT entries for all
11243      the symbols that need them.  */
11244   if (hmips->global_got_area != GGA_NONE)
11245     {
11246       bfd_vma offset;
11247       bfd_vma value;
11248
11249       value = sym->st_value;
11250       offset = mips_elf_primary_global_got_index (output_bfd, info, h);
11251       MIPS_ELF_PUT_WORD (output_bfd, value, sgot->contents + offset);
11252     }
11253
11254   if (hmips->global_got_area != GGA_NONE && g->next)
11255     {
11256       struct mips_got_entry e, *p;
11257       bfd_vma entry;
11258       bfd_vma offset;
11259
11260       gg = g;
11261
11262       e.abfd = output_bfd;
11263       e.symndx = -1;
11264       e.d.h = hmips;
11265       e.tls_type = GOT_TLS_NONE;
11266
11267       for (g = g->next; g->next != gg; g = g->next)
11268         {
11269           if (g->got_entries
11270               && (p = (struct mips_got_entry *) htab_find (g->got_entries,
11271                                                            &e)))
11272             {
11273               offset = p->gotidx;
11274               BFD_ASSERT (offset > 0 && offset < htab->root.sgot->size);
11275               if (bfd_link_pic (info)
11276                   || (elf_hash_table (info)->dynamic_sections_created
11277                       && p->d.h != NULL
11278                       && p->d.h->root.def_dynamic
11279                       && !p->d.h->root.def_regular))
11280                 {
11281                   /* Create an R_MIPS_REL32 relocation for this entry.  Due to
11282                      the various compatibility problems, it's easier to mock
11283                      up an R_MIPS_32 or R_MIPS_64 relocation and leave
11284                      mips_elf_create_dynamic_relocation to calculate the
11285                      appropriate addend.  */
11286                   Elf_Internal_Rela rel[3];
11287
11288                   memset (rel, 0, sizeof (rel));
11289                   if (ABI_64_P (output_bfd))
11290                     rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_64);
11291                   else
11292                     rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_32);
11293                   rel[0].r_offset = rel[1].r_offset = rel[2].r_offset = offset;
11294
11295                   entry = 0;
11296                   if (! (mips_elf_create_dynamic_relocation
11297                          (output_bfd, info, rel,
11298                           e.d.h, NULL, sym->st_value, &entry, sgot)))
11299                     return FALSE;
11300                 }
11301               else
11302                 entry = sym->st_value;
11303               MIPS_ELF_PUT_WORD (output_bfd, entry, sgot->contents + offset);
11304             }
11305         }
11306     }
11307
11308   /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute.  */
11309   name = h->root.root.string;
11310   if (h == elf_hash_table (info)->hdynamic
11311       || h == elf_hash_table (info)->hgot)
11312     sym->st_shndx = SHN_ABS;
11313   else if (strcmp (name, "_DYNAMIC_LINK") == 0
11314            || strcmp (name, "_DYNAMIC_LINKING") == 0)
11315     {
11316       sym->st_shndx = SHN_ABS;
11317       sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
11318       sym->st_value = 1;
11319     }
11320   else if (SGI_COMPAT (output_bfd))
11321     {
11322       if (strcmp (name, mips_elf_dynsym_rtproc_names[0]) == 0
11323           || strcmp (name, mips_elf_dynsym_rtproc_names[1]) == 0)
11324         {
11325           sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
11326           sym->st_other = STO_PROTECTED;
11327           sym->st_value = 0;
11328           sym->st_shndx = SHN_MIPS_DATA;
11329         }
11330       else if (strcmp (name, mips_elf_dynsym_rtproc_names[2]) == 0)
11331         {
11332           sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
11333           sym->st_other = STO_PROTECTED;
11334           sym->st_value = mips_elf_hash_table (info)->procedure_count;
11335           sym->st_shndx = SHN_ABS;
11336         }
11337       else if (sym->st_shndx != SHN_UNDEF && sym->st_shndx != SHN_ABS)
11338         {
11339           if (h->type == STT_FUNC)
11340             sym->st_shndx = SHN_MIPS_TEXT;
11341           else if (h->type == STT_OBJECT)
11342             sym->st_shndx = SHN_MIPS_DATA;
11343         }
11344     }
11345
11346   /* Emit a copy reloc, if needed.  */
11347   if (h->needs_copy)
11348     {
11349       asection *s;
11350       bfd_vma symval;
11351
11352       BFD_ASSERT (h->dynindx != -1);
11353       BFD_ASSERT (htab->use_plts_and_copy_relocs);
11354
11355       s = mips_elf_rel_dyn_section (info, FALSE);
11356       symval = (h->root.u.def.section->output_section->vma
11357                 + h->root.u.def.section->output_offset
11358                 + h->root.u.def.value);
11359       mips_elf_output_dynamic_relocation (output_bfd, s, s->reloc_count++,
11360                                           h->dynindx, R_MIPS_COPY, symval);
11361     }
11362
11363   /* Handle the IRIX6-specific symbols.  */
11364   if (IRIX_COMPAT (output_bfd) == ict_irix6)
11365     mips_elf_irix6_finish_dynamic_symbol (output_bfd, name, sym);
11366
11367   /* Keep dynamic compressed symbols odd.  This allows the dynamic linker
11368      to treat compressed symbols like any other.  */
11369   if (ELF_ST_IS_MIPS16 (sym->st_other))
11370     {
11371       BFD_ASSERT (sym->st_value & 1);
11372       sym->st_other -= STO_MIPS16;
11373     }
11374   else if (ELF_ST_IS_MICROMIPS (sym->st_other))
11375     {
11376       BFD_ASSERT (sym->st_value & 1);
11377       sym->st_other -= STO_MICROMIPS;
11378     }
11379
11380   return TRUE;
11381 }
11382
11383 /* Likewise, for VxWorks.  */
11384
11385 bfd_boolean
11386 _bfd_mips_vxworks_finish_dynamic_symbol (bfd *output_bfd,
11387                                          struct bfd_link_info *info,
11388                                          struct elf_link_hash_entry *h,
11389                                          Elf_Internal_Sym *sym)
11390 {
11391   bfd *dynobj;
11392   asection *sgot;
11393   struct mips_got_info *g;
11394   struct mips_elf_link_hash_table *htab;
11395   struct mips_elf_link_hash_entry *hmips;
11396
11397   htab = mips_elf_hash_table (info);
11398   BFD_ASSERT (htab != NULL);
11399   dynobj = elf_hash_table (info)->dynobj;
11400   hmips = (struct mips_elf_link_hash_entry *) h;
11401
11402   if (h->plt.plist != NULL && h->plt.plist->mips_offset != MINUS_ONE)
11403     {
11404       bfd_byte *loc;
11405       bfd_vma plt_address, got_address, got_offset, branch_offset;
11406       Elf_Internal_Rela rel;
11407       static const bfd_vma *plt_entry;
11408       bfd_vma gotplt_index;
11409       bfd_vma plt_offset;
11410
11411       plt_offset = htab->plt_header_size + h->plt.plist->mips_offset;
11412       gotplt_index = h->plt.plist->gotplt_index;
11413
11414       BFD_ASSERT (h->dynindx != -1);
11415       BFD_ASSERT (htab->root.splt != NULL);
11416       BFD_ASSERT (gotplt_index != MINUS_ONE);
11417       BFD_ASSERT (plt_offset <= htab->root.splt->size);
11418
11419       /* Calculate the address of the .plt entry.  */
11420       plt_address = (htab->root.splt->output_section->vma
11421                      + htab->root.splt->output_offset
11422                      + plt_offset);
11423
11424       /* Calculate the address of the .got.plt entry.  */
11425       got_address = (htab->root.sgotplt->output_section->vma
11426                      + htab->root.sgotplt->output_offset
11427                      + gotplt_index * MIPS_ELF_GOT_SIZE (output_bfd));
11428
11429       /* Calculate the offset of the .got.plt entry from
11430          _GLOBAL_OFFSET_TABLE_.  */
11431       got_offset = mips_elf_gotplt_index (info, h);
11432
11433       /* Calculate the offset for the branch at the start of the PLT
11434          entry.  The branch jumps to the beginning of .plt.  */
11435       branch_offset = -(plt_offset / 4 + 1) & 0xffff;
11436
11437       /* Fill in the initial value of the .got.plt entry.  */
11438       bfd_put_32 (output_bfd, plt_address,
11439                   (htab->root.sgotplt->contents
11440                    + gotplt_index * MIPS_ELF_GOT_SIZE (output_bfd)));
11441
11442       /* Find out where the .plt entry should go.  */
11443       loc = htab->root.splt->contents + plt_offset;
11444
11445       if (bfd_link_pic (info))
11446         {
11447           plt_entry = mips_vxworks_shared_plt_entry;
11448           bfd_put_32 (output_bfd, plt_entry[0] | branch_offset, loc);
11449           bfd_put_32 (output_bfd, plt_entry[1] | gotplt_index, loc + 4);
11450         }
11451       else
11452         {
11453           bfd_vma got_address_high, got_address_low;
11454
11455           plt_entry = mips_vxworks_exec_plt_entry;
11456           got_address_high = ((got_address + 0x8000) >> 16) & 0xffff;
11457           got_address_low = got_address & 0xffff;
11458
11459           bfd_put_32 (output_bfd, plt_entry[0] | branch_offset, loc);
11460           bfd_put_32 (output_bfd, plt_entry[1] | gotplt_index, loc + 4);
11461           bfd_put_32 (output_bfd, plt_entry[2] | got_address_high, loc + 8);
11462           bfd_put_32 (output_bfd, plt_entry[3] | got_address_low, loc + 12);
11463           bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
11464           bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
11465           bfd_put_32 (output_bfd, plt_entry[6], loc + 24);
11466           bfd_put_32 (output_bfd, plt_entry[7], loc + 28);
11467
11468           loc = (htab->srelplt2->contents
11469                  + (gotplt_index * 3 + 2) * sizeof (Elf32_External_Rela));
11470
11471           /* Emit a relocation for the .got.plt entry.  */
11472           rel.r_offset = got_address;
11473           rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_MIPS_32);
11474           rel.r_addend = plt_offset;
11475           bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11476
11477           /* Emit a relocation for the lui of %hi(<.got.plt slot>).  */
11478           loc += sizeof (Elf32_External_Rela);
11479           rel.r_offset = plt_address + 8;
11480           rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
11481           rel.r_addend = got_offset;
11482           bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11483
11484           /* Emit a relocation for the addiu of %lo(<.got.plt slot>).  */
11485           loc += sizeof (Elf32_External_Rela);
11486           rel.r_offset += 4;
11487           rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
11488           bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11489         }
11490
11491       /* Emit an R_MIPS_JUMP_SLOT relocation against the .got.plt entry.  */
11492       loc = (htab->root.srelplt->contents
11493              + gotplt_index * sizeof (Elf32_External_Rela));
11494       rel.r_offset = got_address;
11495       rel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_JUMP_SLOT);
11496       rel.r_addend = 0;
11497       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11498
11499       if (!h->def_regular)
11500         sym->st_shndx = SHN_UNDEF;
11501     }
11502
11503   BFD_ASSERT (h->dynindx != -1 || h->forced_local);
11504
11505   sgot = htab->root.sgot;
11506   g = htab->got_info;
11507   BFD_ASSERT (g != NULL);
11508
11509   /* See if this symbol has an entry in the GOT.  */
11510   if (hmips->global_got_area != GGA_NONE)
11511     {
11512       bfd_vma offset;
11513       Elf_Internal_Rela outrel;
11514       bfd_byte *loc;
11515       asection *s;
11516
11517       /* Install the symbol value in the GOT.   */
11518       offset = mips_elf_primary_global_got_index (output_bfd, info, h);
11519       MIPS_ELF_PUT_WORD (output_bfd, sym->st_value, sgot->contents + offset);
11520
11521       /* Add a dynamic relocation for it.  */
11522       s = mips_elf_rel_dyn_section (info, FALSE);
11523       loc = s->contents + (s->reloc_count++ * sizeof (Elf32_External_Rela));
11524       outrel.r_offset = (sgot->output_section->vma
11525                          + sgot->output_offset
11526                          + offset);
11527       outrel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_32);
11528       outrel.r_addend = 0;
11529       bfd_elf32_swap_reloca_out (dynobj, &outrel, loc);
11530     }
11531
11532   /* Emit a copy reloc, if needed.  */
11533   if (h->needs_copy)
11534     {
11535       Elf_Internal_Rela rel;
11536       asection *srel;
11537       bfd_byte *loc;
11538
11539       BFD_ASSERT (h->dynindx != -1);
11540
11541       rel.r_offset = (h->root.u.def.section->output_section->vma
11542                       + h->root.u.def.section->output_offset
11543                       + h->root.u.def.value);
11544       rel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_COPY);
11545       rel.r_addend = 0;
11546       if (h->root.u.def.section == htab->root.sdynrelro)
11547         srel = htab->root.sreldynrelro;
11548       else
11549         srel = htab->root.srelbss;
11550       loc = srel->contents + srel->reloc_count * sizeof (Elf32_External_Rela);
11551       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11552       ++srel->reloc_count;
11553     }
11554
11555   /* If this is a mips16/microMIPS symbol, force the value to be even.  */
11556   if (ELF_ST_IS_COMPRESSED (sym->st_other))
11557     sym->st_value &= ~1;
11558
11559   return TRUE;
11560 }
11561
11562 /* Write out a plt0 entry to the beginning of .plt.  */
11563
11564 static bfd_boolean
11565 mips_finish_exec_plt (bfd *output_bfd, struct bfd_link_info *info)
11566 {
11567   bfd_byte *loc;
11568   bfd_vma gotplt_value, gotplt_value_high, gotplt_value_low;
11569   static const bfd_vma *plt_entry;
11570   struct mips_elf_link_hash_table *htab;
11571
11572   htab = mips_elf_hash_table (info);
11573   BFD_ASSERT (htab != NULL);
11574
11575   if (ABI_64_P (output_bfd))
11576     plt_entry = (htab->compact_branches
11577                  ? mipsr6_n64_exec_plt0_entry_compact
11578                  : mips_n64_exec_plt0_entry);
11579   else if (ABI_N32_P (output_bfd))
11580     plt_entry = (htab->compact_branches
11581                  ? mipsr6_n32_exec_plt0_entry_compact
11582                  : mips_n32_exec_plt0_entry);
11583   else if (!htab->plt_header_is_comp)
11584     plt_entry = (htab->compact_branches
11585                  ? mipsr6_o32_exec_plt0_entry_compact
11586                  : mips_o32_exec_plt0_entry);
11587   else if (htab->insn32)
11588     plt_entry = micromips_insn32_o32_exec_plt0_entry;
11589   else
11590     plt_entry = micromips_o32_exec_plt0_entry;
11591
11592   /* Calculate the value of .got.plt.  */
11593   gotplt_value = (htab->root.sgotplt->output_section->vma
11594                   + htab->root.sgotplt->output_offset);
11595   gotplt_value_high = ((gotplt_value + 0x8000) >> 16) & 0xffff;
11596   gotplt_value_low = gotplt_value & 0xffff;
11597
11598   /* The PLT sequence is not safe for N64 if .got.plt's address can
11599      not be loaded in two instructions.  */
11600   if (ABI_64_P (output_bfd)
11601       && ((gotplt_value + 0x80008000) & ~(bfd_vma) 0xffffffff) != 0)
11602     {
11603       _bfd_error_handler
11604         /* xgettext:c-format */
11605         (_("%pB: `%pA' start VMA of %#" PRIx64 " outside the 32-bit range "
11606            "supported; consider using `-Ttext-segment=...'"),
11607          output_bfd,
11608          htab->root.sgotplt->output_section,
11609          (int64_t) gotplt_value);
11610       bfd_set_error (bfd_error_no_error);
11611       return FALSE;
11612     }
11613
11614   /* Install the PLT header.  */
11615   loc = htab->root.splt->contents;
11616   if (plt_entry == micromips_o32_exec_plt0_entry)
11617     {
11618       bfd_vma gotpc_offset;
11619       bfd_vma loc_address;
11620       size_t i;
11621
11622       BFD_ASSERT (gotplt_value % 4 == 0);
11623
11624       loc_address = (htab->root.splt->output_section->vma
11625                      + htab->root.splt->output_offset);
11626       gotpc_offset = gotplt_value - ((loc_address | 3) ^ 3);
11627
11628       /* ADDIUPC has a span of +/-16MB, check we're in range.  */
11629       if (gotpc_offset + 0x1000000 >= 0x2000000)
11630         {
11631           _bfd_error_handler
11632             /* xgettext:c-format */
11633             (_("%pB: `%pA' offset of %" PRId64 " from `%pA' "
11634                "beyond the range of ADDIUPC"),
11635              output_bfd,
11636              htab->root.sgotplt->output_section,
11637              (int64_t) gotpc_offset,
11638              htab->root.splt->output_section);
11639           bfd_set_error (bfd_error_no_error);
11640           return FALSE;
11641         }
11642       bfd_put_16 (output_bfd,
11643                   plt_entry[0] | ((gotpc_offset >> 18) & 0x7f), loc);
11644       bfd_put_16 (output_bfd, (gotpc_offset >> 2) & 0xffff, loc + 2);
11645       for (i = 2; i < ARRAY_SIZE (micromips_o32_exec_plt0_entry); i++)
11646         bfd_put_16 (output_bfd, plt_entry[i], loc + (i * 2));
11647     }
11648   else if (plt_entry == micromips_insn32_o32_exec_plt0_entry)
11649     {
11650       size_t i;
11651
11652       bfd_put_16 (output_bfd, plt_entry[0], loc);
11653       bfd_put_16 (output_bfd, gotplt_value_high, loc + 2);
11654       bfd_put_16 (output_bfd, plt_entry[2], loc + 4);
11655       bfd_put_16 (output_bfd, gotplt_value_low, loc + 6);
11656       bfd_put_16 (output_bfd, plt_entry[4], loc + 8);
11657       bfd_put_16 (output_bfd, gotplt_value_low, loc + 10);
11658       for (i = 6; i < ARRAY_SIZE (micromips_insn32_o32_exec_plt0_entry); i++)
11659         bfd_put_16 (output_bfd, plt_entry[i], loc + (i * 2));
11660     }
11661   else
11662     {
11663       bfd_put_32 (output_bfd, plt_entry[0] | gotplt_value_high, loc);
11664       bfd_put_32 (output_bfd, plt_entry[1] | gotplt_value_low, loc + 4);
11665       bfd_put_32 (output_bfd, plt_entry[2] | gotplt_value_low, loc + 8);
11666       bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
11667       bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
11668       bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
11669       bfd_put_32 (output_bfd, plt_entry[6], loc + 24);
11670       bfd_put_32 (output_bfd, plt_entry[7], loc + 28);
11671     }
11672
11673   return TRUE;
11674 }
11675
11676 /* Install the PLT header for a VxWorks executable and finalize the
11677    contents of .rela.plt.unloaded.  */
11678
11679 static void
11680 mips_vxworks_finish_exec_plt (bfd *output_bfd, struct bfd_link_info *info)
11681 {
11682   Elf_Internal_Rela rela;
11683   bfd_byte *loc;
11684   bfd_vma got_value, got_value_high, got_value_low, plt_address;
11685   static const bfd_vma *plt_entry;
11686   struct mips_elf_link_hash_table *htab;
11687
11688   htab = mips_elf_hash_table (info);
11689   BFD_ASSERT (htab != NULL);
11690
11691   plt_entry = mips_vxworks_exec_plt0_entry;
11692
11693   /* Calculate the value of _GLOBAL_OFFSET_TABLE_.  */
11694   got_value = (htab->root.hgot->root.u.def.section->output_section->vma
11695                + htab->root.hgot->root.u.def.section->output_offset
11696                + htab->root.hgot->root.u.def.value);
11697
11698   got_value_high = ((got_value + 0x8000) >> 16) & 0xffff;
11699   got_value_low = got_value & 0xffff;
11700
11701   /* Calculate the address of the PLT header.  */
11702   plt_address = (htab->root.splt->output_section->vma
11703                  + htab->root.splt->output_offset);
11704
11705   /* Install the PLT header.  */
11706   loc = htab->root.splt->contents;
11707   bfd_put_32 (output_bfd, plt_entry[0] | got_value_high, loc);
11708   bfd_put_32 (output_bfd, plt_entry[1] | got_value_low, loc + 4);
11709   bfd_put_32 (output_bfd, plt_entry[2], loc + 8);
11710   bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
11711   bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
11712   bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
11713
11714   /* Output the relocation for the lui of %hi(_GLOBAL_OFFSET_TABLE_).  */
11715   loc = htab->srelplt2->contents;
11716   rela.r_offset = plt_address;
11717   rela.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
11718   rela.r_addend = 0;
11719   bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
11720   loc += sizeof (Elf32_External_Rela);
11721
11722   /* Output the relocation for the following addiu of
11723      %lo(_GLOBAL_OFFSET_TABLE_).  */
11724   rela.r_offset += 4;
11725   rela.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
11726   bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
11727   loc += sizeof (Elf32_External_Rela);
11728
11729   /* Fix up the remaining relocations.  They may have the wrong
11730      symbol index for _G_O_T_ or _P_L_T_ depending on the order
11731      in which symbols were output.  */
11732   while (loc < htab->srelplt2->contents + htab->srelplt2->size)
11733     {
11734       Elf_Internal_Rela rel;
11735
11736       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
11737       rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_MIPS_32);
11738       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11739       loc += sizeof (Elf32_External_Rela);
11740
11741       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
11742       rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
11743       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11744       loc += sizeof (Elf32_External_Rela);
11745
11746       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
11747       rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
11748       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11749       loc += sizeof (Elf32_External_Rela);
11750     }
11751 }
11752
11753 /* Install the PLT header for a VxWorks shared library.  */
11754
11755 static void
11756 mips_vxworks_finish_shared_plt (bfd *output_bfd, struct bfd_link_info *info)
11757 {
11758   unsigned int i;
11759   struct mips_elf_link_hash_table *htab;
11760
11761   htab = mips_elf_hash_table (info);
11762   BFD_ASSERT (htab != NULL);
11763
11764   /* We just need to copy the entry byte-by-byte.  */
11765   for (i = 0; i < ARRAY_SIZE (mips_vxworks_shared_plt0_entry); i++)
11766     bfd_put_32 (output_bfd, mips_vxworks_shared_plt0_entry[i],
11767                 htab->root.splt->contents + i * 4);
11768 }
11769
11770 /* Finish up the dynamic sections.  */
11771
11772 bfd_boolean
11773 _bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd,
11774                                        struct bfd_link_info *info)
11775 {
11776   bfd *dynobj;
11777   asection *sdyn;
11778   asection *sgot;
11779   struct mips_got_info *gg, *g;
11780   struct mips_elf_link_hash_table *htab;
11781
11782   htab = mips_elf_hash_table (info);
11783   BFD_ASSERT (htab != NULL);
11784
11785   dynobj = elf_hash_table (info)->dynobj;
11786
11787   sdyn = bfd_get_linker_section (dynobj, ".dynamic");
11788
11789   sgot = htab->root.sgot;
11790   gg = htab->got_info;
11791
11792   if (elf_hash_table (info)->dynamic_sections_created)
11793     {
11794       bfd_byte *b;
11795       int dyn_to_skip = 0, dyn_skipped = 0;
11796
11797       BFD_ASSERT (sdyn != NULL);
11798       BFD_ASSERT (gg != NULL);
11799
11800       g = mips_elf_bfd_got (output_bfd, FALSE);
11801       BFD_ASSERT (g != NULL);
11802
11803       for (b = sdyn->contents;
11804            b < sdyn->contents + sdyn->size;
11805            b += MIPS_ELF_DYN_SIZE (dynobj))
11806         {
11807           Elf_Internal_Dyn dyn;
11808           const char *name;
11809           size_t elemsize;
11810           asection *s;
11811           bfd_boolean swap_out_p;
11812
11813           /* Read in the current dynamic entry.  */
11814           (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
11815
11816           /* Assume that we're going to modify it and write it out.  */
11817           swap_out_p = TRUE;
11818
11819           switch (dyn.d_tag)
11820             {
11821             case DT_RELENT:
11822               dyn.d_un.d_val = MIPS_ELF_REL_SIZE (dynobj);
11823               break;
11824
11825             case DT_RELAENT:
11826               BFD_ASSERT (htab->is_vxworks);
11827               dyn.d_un.d_val = MIPS_ELF_RELA_SIZE (dynobj);
11828               break;
11829
11830             case DT_STRSZ:
11831               /* Rewrite DT_STRSZ.  */
11832               dyn.d_un.d_val =
11833                 _bfd_elf_strtab_size (elf_hash_table (info)->dynstr);
11834               break;
11835
11836             case DT_PLTGOT:
11837               s = htab->root.sgot;
11838               dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
11839               break;
11840
11841             case DT_MIPS_PLTGOT:
11842               s = htab->root.sgotplt;
11843               dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
11844               break;
11845
11846             case DT_MIPS_RLD_VERSION:
11847               dyn.d_un.d_val = 1; /* XXX */
11848               break;
11849
11850             case DT_MIPS_FLAGS:
11851               dyn.d_un.d_val = RHF_NOTPOT; /* XXX */
11852               break;
11853
11854             case DT_MIPS_TIME_STAMP:
11855               {
11856                 time_t t;
11857                 time (&t);
11858                 dyn.d_un.d_val = t;
11859               }
11860               break;
11861
11862             case DT_MIPS_ICHECKSUM:
11863               /* XXX FIXME: */
11864               swap_out_p = FALSE;
11865               break;
11866
11867             case DT_MIPS_IVERSION:
11868               /* XXX FIXME: */
11869               swap_out_p = FALSE;
11870               break;
11871
11872             case DT_MIPS_BASE_ADDRESS:
11873               s = output_bfd->sections;
11874               BFD_ASSERT (s != NULL);
11875               dyn.d_un.d_ptr = s->vma & ~(bfd_vma) 0xffff;
11876               break;
11877
11878             case DT_MIPS_LOCAL_GOTNO:
11879               dyn.d_un.d_val = g->local_gotno;
11880               break;
11881
11882             case DT_MIPS_UNREFEXTNO:
11883               /* The index into the dynamic symbol table which is the
11884                  entry of the first external symbol that is not
11885                  referenced within the same object.  */
11886               dyn.d_un.d_val = bfd_count_sections (output_bfd) + 1;
11887               break;
11888
11889             case DT_MIPS_GOTSYM:
11890               if (htab->global_gotsym)
11891                 {
11892                   dyn.d_un.d_val = htab->global_gotsym->dynindx;
11893                   break;
11894                 }
11895               /* In case if we don't have global got symbols we default
11896                  to setting DT_MIPS_GOTSYM to the same value as
11897                  DT_MIPS_SYMTABNO.  */
11898               /* Fall through.  */
11899
11900             case DT_MIPS_SYMTABNO:
11901               name = ".dynsym";
11902               elemsize = MIPS_ELF_SYM_SIZE (output_bfd);
11903               s = bfd_get_linker_section (dynobj, name);
11904
11905               if (s != NULL)
11906                 dyn.d_un.d_val = s->size / elemsize;
11907               else
11908                 dyn.d_un.d_val = 0;
11909               break;
11910
11911             case DT_MIPS_HIPAGENO:
11912               dyn.d_un.d_val = g->local_gotno - htab->reserved_gotno;
11913               break;
11914
11915             case DT_MIPS_RLD_MAP:
11916               {
11917                 struct elf_link_hash_entry *h;
11918                 h = mips_elf_hash_table (info)->rld_symbol;
11919                 if (!h)
11920                   {
11921                     dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
11922                     swap_out_p = FALSE;
11923                     break;
11924                   }
11925                 s = h->root.u.def.section;
11926
11927                 /* The MIPS_RLD_MAP tag stores the absolute address of the
11928                    debug pointer.  */
11929                 dyn.d_un.d_ptr = (s->output_section->vma + s->output_offset
11930                                   + h->root.u.def.value);
11931               }
11932               break;
11933
11934             case DT_MIPS_RLD_MAP_REL:
11935               {
11936                 struct elf_link_hash_entry *h;
11937                 bfd_vma dt_addr, rld_addr;
11938                 h = mips_elf_hash_table (info)->rld_symbol;
11939                 if (!h)
11940                   {
11941                     dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
11942                     swap_out_p = FALSE;
11943                     break;
11944                   }
11945                 s = h->root.u.def.section;
11946
11947                 /* The MIPS_RLD_MAP_REL tag stores the offset to the debug
11948                    pointer, relative to the address of the tag.  */
11949                 dt_addr = (sdyn->output_section->vma + sdyn->output_offset
11950                            + (b - sdyn->contents));
11951                 rld_addr = (s->output_section->vma + s->output_offset
11952                             + h->root.u.def.value);
11953                 dyn.d_un.d_ptr = rld_addr - dt_addr;
11954               }
11955               break;
11956
11957             case DT_MIPS_OPTIONS:
11958               s = (bfd_get_section_by_name
11959                    (output_bfd, MIPS_ELF_OPTIONS_SECTION_NAME (output_bfd)));
11960               dyn.d_un.d_ptr = s->vma;
11961               break;
11962
11963             case DT_PLTREL:
11964               BFD_ASSERT (htab->use_plts_and_copy_relocs);
11965               if (htab->is_vxworks)
11966                 dyn.d_un.d_val = DT_RELA;
11967               else
11968                 dyn.d_un.d_val = DT_REL;
11969               break;
11970
11971             case DT_PLTRELSZ:
11972               BFD_ASSERT (htab->use_plts_and_copy_relocs);
11973               dyn.d_un.d_val = htab->root.srelplt->size;
11974               break;
11975
11976             case DT_JMPREL:
11977               BFD_ASSERT (htab->use_plts_and_copy_relocs);
11978               dyn.d_un.d_ptr = (htab->root.srelplt->output_section->vma
11979                                 + htab->root.srelplt->output_offset);
11980               break;
11981
11982             case DT_TEXTREL:
11983               /* If we didn't need any text relocations after all, delete
11984                  the dynamic tag.  */
11985               if (!(info->flags & DF_TEXTREL))
11986                 {
11987                   dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
11988                   swap_out_p = FALSE;
11989                 }
11990               break;
11991
11992             case DT_FLAGS:
11993               /* If we didn't need any text relocations after all, clear
11994                  DF_TEXTREL from DT_FLAGS.  */
11995               if (!(info->flags & DF_TEXTREL))
11996                 dyn.d_un.d_val &= ~DF_TEXTREL;
11997               else
11998                 swap_out_p = FALSE;
11999               break;
12000
12001             case DT_MIPS_XHASH:
12002               name = ".MIPS.xhash";
12003               s = bfd_get_linker_section (dynobj, name);
12004               dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
12005               break;
12006
12007             default:
12008               swap_out_p = FALSE;
12009               if (htab->is_vxworks
12010                   && elf_vxworks_finish_dynamic_entry (output_bfd, &dyn))
12011                 swap_out_p = TRUE;
12012               break;
12013             }
12014
12015           if (swap_out_p || dyn_skipped)
12016             (*get_elf_backend_data (dynobj)->s->swap_dyn_out)
12017               (dynobj, &dyn, b - dyn_skipped);
12018
12019           if (dyn_to_skip)
12020             {
12021               dyn_skipped += dyn_to_skip;
12022               dyn_to_skip = 0;
12023             }
12024         }
12025
12026       /* Wipe out any trailing entries if we shifted down a dynamic tag.  */
12027       if (dyn_skipped > 0)
12028         memset (b - dyn_skipped, 0, dyn_skipped);
12029     }
12030
12031   if (sgot != NULL && sgot->size > 0
12032       && !bfd_is_abs_section (sgot->output_section))
12033     {
12034       if (htab->is_vxworks)
12035         {
12036           /* The first entry of the global offset table points to the
12037              ".dynamic" section.  The second is initialized by the
12038              loader and contains the shared library identifier.
12039              The third is also initialized by the loader and points
12040              to the lazy resolution stub.  */
12041           MIPS_ELF_PUT_WORD (output_bfd,
12042                              sdyn->output_offset + sdyn->output_section->vma,
12043                              sgot->contents);
12044           MIPS_ELF_PUT_WORD (output_bfd, 0,
12045                              sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd));
12046           MIPS_ELF_PUT_WORD (output_bfd, 0,
12047                              sgot->contents
12048                              + 2 * MIPS_ELF_GOT_SIZE (output_bfd));
12049         }
12050       else
12051         {
12052           /* The first entry of the global offset table will be filled at
12053              runtime. The second entry will be used by some runtime loaders.
12054              This isn't the case of IRIX rld.  */
12055           MIPS_ELF_PUT_WORD (output_bfd, (bfd_vma) 0, sgot->contents);
12056           MIPS_ELF_PUT_WORD (output_bfd, MIPS_ELF_GNU_GOT1_MASK (output_bfd),
12057                              sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd));
12058         }
12059
12060       elf_section_data (sgot->output_section)->this_hdr.sh_entsize
12061          = MIPS_ELF_GOT_SIZE (output_bfd);
12062     }
12063
12064   /* Generate dynamic relocations for the non-primary gots.  */
12065   if (gg != NULL && gg->next)
12066     {
12067       Elf_Internal_Rela rel[3];
12068       bfd_vma addend = 0;
12069
12070       memset (rel, 0, sizeof (rel));
12071       rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_REL32);
12072
12073       for (g = gg->next; g->next != gg; g = g->next)
12074         {
12075           bfd_vma got_index = g->next->local_gotno + g->next->global_gotno
12076             + g->next->tls_gotno;
12077
12078           MIPS_ELF_PUT_WORD (output_bfd, 0, sgot->contents
12079                              + got_index++ * MIPS_ELF_GOT_SIZE (output_bfd));
12080           MIPS_ELF_PUT_WORD (output_bfd, MIPS_ELF_GNU_GOT1_MASK (output_bfd),
12081                              sgot->contents
12082                              + got_index++ * MIPS_ELF_GOT_SIZE (output_bfd));
12083
12084           if (! bfd_link_pic (info))
12085             continue;
12086
12087           for (; got_index < g->local_gotno; got_index++)
12088             {
12089               if (got_index >= g->assigned_low_gotno
12090                   && got_index <= g->assigned_high_gotno)
12091                 continue;
12092
12093               rel[0].r_offset = rel[1].r_offset = rel[2].r_offset
12094                 = got_index * MIPS_ELF_GOT_SIZE (output_bfd);
12095               if (!(mips_elf_create_dynamic_relocation
12096                     (output_bfd, info, rel, NULL,
12097                      bfd_abs_section_ptr,
12098                      0, &addend, sgot)))
12099                 return FALSE;
12100               BFD_ASSERT (addend == 0);
12101             }
12102         }
12103     }
12104
12105   /* The generation of dynamic relocations for the non-primary gots
12106      adds more dynamic relocations.  We cannot count them until
12107      here.  */
12108
12109   if (elf_hash_table (info)->dynamic_sections_created)
12110     {
12111       bfd_byte *b;
12112       bfd_boolean swap_out_p;
12113
12114       BFD_ASSERT (sdyn != NULL);
12115
12116       for (b = sdyn->contents;
12117            b < sdyn->contents + sdyn->size;
12118            b += MIPS_ELF_DYN_SIZE (dynobj))
12119         {
12120           Elf_Internal_Dyn dyn;
12121           asection *s;
12122
12123           /* Read in the current dynamic entry.  */
12124           (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
12125
12126           /* Assume that we're going to modify it and write it out.  */
12127           swap_out_p = TRUE;
12128
12129           switch (dyn.d_tag)
12130             {
12131             case DT_RELSZ:
12132               /* Reduce DT_RELSZ to account for any relocations we
12133                  decided not to make.  This is for the n64 irix rld,
12134                  which doesn't seem to apply any relocations if there
12135                  are trailing null entries.  */
12136               s = mips_elf_rel_dyn_section (info, FALSE);
12137               dyn.d_un.d_val = (s->reloc_count
12138                                 * (ABI_64_P (output_bfd)
12139                                    ? sizeof (Elf64_Mips_External_Rel)
12140                                    : sizeof (Elf32_External_Rel)));
12141               /* Adjust the section size too.  Tools like the prelinker
12142                  can reasonably expect the values to the same.  */
12143               BFD_ASSERT (!bfd_is_abs_section (s->output_section));
12144               elf_section_data (s->output_section)->this_hdr.sh_size
12145                 = dyn.d_un.d_val;
12146               break;
12147
12148             default:
12149               swap_out_p = FALSE;
12150               break;
12151             }
12152
12153           if (swap_out_p)
12154             (*get_elf_backend_data (dynobj)->s->swap_dyn_out)
12155               (dynobj, &dyn, b);
12156         }
12157     }
12158
12159   {
12160     asection *s;
12161     Elf32_compact_rel cpt;
12162
12163     if (SGI_COMPAT (output_bfd))
12164       {
12165         /* Write .compact_rel section out.  */
12166         s = bfd_get_linker_section (dynobj, ".compact_rel");
12167         if (s != NULL)
12168           {
12169             cpt.id1 = 1;
12170             cpt.num = s->reloc_count;
12171             cpt.id2 = 2;
12172             cpt.offset = (s->output_section->filepos
12173                           + sizeof (Elf32_External_compact_rel));
12174             cpt.reserved0 = 0;
12175             cpt.reserved1 = 0;
12176             bfd_elf32_swap_compact_rel_out (output_bfd, &cpt,
12177                                             ((Elf32_External_compact_rel *)
12178                                              s->contents));
12179
12180             /* Clean up a dummy stub function entry in .text.  */
12181             if (htab->sstubs != NULL)
12182               {
12183                 file_ptr dummy_offset;
12184
12185                 BFD_ASSERT (htab->sstubs->size >= htab->function_stub_size);
12186                 dummy_offset = htab->sstubs->size - htab->function_stub_size;
12187                 memset (htab->sstubs->contents + dummy_offset, 0,
12188                         htab->function_stub_size);
12189               }
12190           }
12191       }
12192
12193     /* The psABI says that the dynamic relocations must be sorted in
12194        increasing order of r_symndx.  The VxWorks EABI doesn't require
12195        this, and because the code below handles REL rather than RELA
12196        relocations, using it for VxWorks would be outright harmful.  */
12197     if (!htab->is_vxworks)
12198       {
12199         s = mips_elf_rel_dyn_section (info, FALSE);
12200         if (s != NULL
12201             && s->size > (bfd_vma)2 * MIPS_ELF_REL_SIZE (output_bfd))
12202           {
12203             reldyn_sorting_bfd = output_bfd;
12204
12205             if (ABI_64_P (output_bfd))
12206               qsort ((Elf64_External_Rel *) s->contents + 1,
12207                      s->reloc_count - 1, sizeof (Elf64_Mips_External_Rel),
12208                      sort_dynamic_relocs_64);
12209             else
12210               qsort ((Elf32_External_Rel *) s->contents + 1,
12211                      s->reloc_count - 1, sizeof (Elf32_External_Rel),
12212                      sort_dynamic_relocs);
12213           }
12214       }
12215   }
12216
12217   if (htab->root.splt && htab->root.splt->size > 0)
12218     {
12219       if (htab->is_vxworks)
12220         {
12221           if (bfd_link_pic (info))
12222             mips_vxworks_finish_shared_plt (output_bfd, info);
12223           else
12224             mips_vxworks_finish_exec_plt (output_bfd, info);
12225         }
12226       else
12227         {
12228           BFD_ASSERT (!bfd_link_pic (info));
12229           if (!mips_finish_exec_plt (output_bfd, info))
12230             return FALSE;
12231         }
12232     }
12233   return TRUE;
12234 }
12235
12236
12237 /* Set ABFD's EF_MIPS_ARCH and EF_MIPS_MACH flags.  */
12238
12239 static void
12240 mips_set_isa_flags (bfd *abfd)
12241 {
12242   flagword val;
12243
12244   switch (bfd_get_mach (abfd))
12245     {
12246     default:
12247       if (ABI_N32_P (abfd) || ABI_64_P (abfd))
12248         val = E_MIPS_ARCH_3;
12249       else
12250         val = E_MIPS_ARCH_1;
12251       break;
12252
12253     case bfd_mach_mips3000:
12254       val = E_MIPS_ARCH_1;
12255       break;
12256
12257     case bfd_mach_mips3900:
12258       val = E_MIPS_ARCH_1 | E_MIPS_MACH_3900;
12259       break;
12260
12261     case bfd_mach_mips6000:
12262       val = E_MIPS_ARCH_2;
12263       break;
12264
12265     case bfd_mach_mips4010:
12266       val = E_MIPS_ARCH_2 | E_MIPS_MACH_4010;
12267       break;
12268
12269     case bfd_mach_mips4000:
12270     case bfd_mach_mips4300:
12271     case bfd_mach_mips4400:
12272     case bfd_mach_mips4600:
12273       val = E_MIPS_ARCH_3;
12274       break;
12275
12276     case bfd_mach_mips4100:
12277       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4100;
12278       break;
12279
12280     case bfd_mach_mips4111:
12281       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4111;
12282       break;
12283
12284     case bfd_mach_mips4120:
12285       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4120;
12286       break;
12287
12288     case bfd_mach_mips4650:
12289       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4650;
12290       break;
12291
12292     case bfd_mach_mips5400:
12293       val = E_MIPS_ARCH_4 | E_MIPS_MACH_5400;
12294       break;
12295
12296     case bfd_mach_mips5500:
12297       val = E_MIPS_ARCH_4 | E_MIPS_MACH_5500;
12298       break;
12299
12300     case bfd_mach_mips5900:
12301       val = E_MIPS_ARCH_3 | E_MIPS_MACH_5900;
12302       break;
12303
12304     case bfd_mach_mips9000:
12305       val = E_MIPS_ARCH_4 | E_MIPS_MACH_9000;
12306       break;
12307
12308     case bfd_mach_mips5000:
12309     case bfd_mach_mips7000:
12310     case bfd_mach_mips8000:
12311     case bfd_mach_mips10000:
12312     case bfd_mach_mips12000:
12313     case bfd_mach_mips14000:
12314     case bfd_mach_mips16000:
12315       val = E_MIPS_ARCH_4;
12316       break;
12317
12318     case bfd_mach_mips5:
12319       val = E_MIPS_ARCH_5;
12320       break;
12321
12322     case bfd_mach_mips_loongson_2e:
12323       val = E_MIPS_ARCH_3 | E_MIPS_MACH_LS2E;
12324       break;
12325
12326     case bfd_mach_mips_loongson_2f:
12327       val = E_MIPS_ARCH_3 | E_MIPS_MACH_LS2F;
12328       break;
12329
12330     case bfd_mach_mips_sb1:
12331       val = E_MIPS_ARCH_64 | E_MIPS_MACH_SB1;
12332       break;
12333
12334     case bfd_mach_mips_gs464:
12335       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_GS464;
12336       break;
12337
12338     case bfd_mach_mips_gs464e:
12339       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_GS464E;
12340       break;
12341
12342     case bfd_mach_mips_gs264e:
12343       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_GS264E;
12344       break;
12345
12346     case bfd_mach_mips_octeon:
12347     case bfd_mach_mips_octeonp:
12348       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON;
12349       break;
12350
12351     case bfd_mach_mips_octeon3:
12352       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON3;
12353       break;
12354
12355     case bfd_mach_mips_xlr:
12356       val = E_MIPS_ARCH_64 | E_MIPS_MACH_XLR;
12357       break;
12358
12359     case bfd_mach_mips_octeon2:
12360       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON2;
12361       break;
12362
12363     case bfd_mach_mipsisa32:
12364       val = E_MIPS_ARCH_32;
12365       break;
12366
12367     case bfd_mach_mipsisa64:
12368       val = E_MIPS_ARCH_64;
12369       break;
12370
12371     case bfd_mach_mipsisa32r2:
12372     case bfd_mach_mipsisa32r3:
12373     case bfd_mach_mipsisa32r5:
12374       val = E_MIPS_ARCH_32R2;
12375       break;
12376
12377     case bfd_mach_mips_interaptiv_mr2:
12378       val = E_MIPS_ARCH_32R2 | E_MIPS_MACH_IAMR2;
12379       break;
12380
12381     case bfd_mach_mipsisa64r2:
12382     case bfd_mach_mipsisa64r3:
12383     case bfd_mach_mipsisa64r5:
12384       val = E_MIPS_ARCH_64R2;
12385       break;
12386
12387     case bfd_mach_mipsisa32r6:
12388       val = E_MIPS_ARCH_32R6;
12389       break;
12390
12391     case bfd_mach_mipsisa64r6:
12392       val = E_MIPS_ARCH_64R6;
12393       break;
12394     }
12395   elf_elfheader (abfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH);
12396   elf_elfheader (abfd)->e_flags |= val;
12397
12398 }
12399
12400
12401 /* Whether to sort relocs output by ld -r or ld --emit-relocs, by r_offset.
12402    Don't do so for code sections.  We want to keep ordering of HI16/LO16
12403    as is.  On the other hand, elf-eh-frame.c processing requires .eh_frame
12404    relocs to be sorted.  */
12405
12406 bfd_boolean
12407 _bfd_mips_elf_sort_relocs_p (asection *sec)
12408 {
12409   return (sec->flags & SEC_CODE) == 0;
12410 }
12411
12412
12413 /* The final processing done just before writing out a MIPS ELF object
12414    file.  This gets the MIPS architecture right based on the machine
12415    number.  This is used by both the 32-bit and the 64-bit ABI.  */
12416
12417 void
12418 _bfd_mips_final_write_processing (bfd *abfd)
12419 {
12420   unsigned int i;
12421   Elf_Internal_Shdr **hdrpp;
12422   const char *name;
12423   asection *sec;
12424
12425   /* Keep the existing EF_MIPS_MACH and EF_MIPS_ARCH flags if the former
12426      is nonzero.  This is for compatibility with old objects, which used
12427      a combination of a 32-bit EF_MIPS_ARCH and a 64-bit EF_MIPS_MACH.  */
12428   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == 0)
12429     mips_set_isa_flags (abfd);
12430
12431   /* Set the sh_info field for .gptab sections and other appropriate
12432      info for each special section.  */
12433   for (i = 1, hdrpp = elf_elfsections (abfd) + 1;
12434        i < elf_numsections (abfd);
12435        i++, hdrpp++)
12436     {
12437       switch ((*hdrpp)->sh_type)
12438         {
12439         case SHT_MIPS_MSYM:
12440         case SHT_MIPS_LIBLIST:
12441           sec = bfd_get_section_by_name (abfd, ".dynstr");
12442           if (sec != NULL)
12443             (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
12444           break;
12445
12446         case SHT_MIPS_GPTAB:
12447           BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
12448           name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
12449           BFD_ASSERT (name != NULL
12450                       && CONST_STRNEQ (name, ".gptab."));
12451           sec = bfd_get_section_by_name (abfd, name + sizeof ".gptab" - 1);
12452           BFD_ASSERT (sec != NULL);
12453           (*hdrpp)->sh_info = elf_section_data (sec)->this_idx;
12454           break;
12455
12456         case SHT_MIPS_CONTENT:
12457           BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
12458           name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
12459           BFD_ASSERT (name != NULL
12460                       && CONST_STRNEQ (name, ".MIPS.content"));
12461           sec = bfd_get_section_by_name (abfd,
12462                                          name + sizeof ".MIPS.content" - 1);
12463           BFD_ASSERT (sec != NULL);
12464           (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
12465           break;
12466
12467         case SHT_MIPS_SYMBOL_LIB:
12468           sec = bfd_get_section_by_name (abfd, ".dynsym");
12469           if (sec != NULL)
12470             (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
12471           sec = bfd_get_section_by_name (abfd, ".liblist");
12472           if (sec != NULL)
12473             (*hdrpp)->sh_info = elf_section_data (sec)->this_idx;
12474           break;
12475
12476         case SHT_MIPS_EVENTS:
12477           BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
12478           name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
12479           BFD_ASSERT (name != NULL);
12480           if (CONST_STRNEQ (name, ".MIPS.events"))
12481             sec = bfd_get_section_by_name (abfd,
12482                                            name + sizeof ".MIPS.events" - 1);
12483           else
12484             {
12485               BFD_ASSERT (CONST_STRNEQ (name, ".MIPS.post_rel"));
12486               sec = bfd_get_section_by_name (abfd,
12487                                              (name
12488                                               + sizeof ".MIPS.post_rel" - 1));
12489             }
12490           BFD_ASSERT (sec != NULL);
12491           (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
12492           break;
12493
12494         case SHT_MIPS_XHASH:
12495           sec = bfd_get_section_by_name (abfd, ".dynsym");
12496           if (sec != NULL)
12497             (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
12498         }
12499     }
12500 }
12501
12502 bfd_boolean
12503 _bfd_mips_elf_final_write_processing (bfd *abfd)
12504 {
12505   _bfd_mips_final_write_processing (abfd);
12506   return _bfd_elf_final_write_processing (abfd);
12507 }
12508 \f
12509 /* When creating an IRIX5 executable, we need REGINFO and RTPROC
12510    segments.  */
12511
12512 int
12513 _bfd_mips_elf_additional_program_headers (bfd *abfd,
12514                                           struct bfd_link_info *info ATTRIBUTE_UNUSED)
12515 {
12516   asection *s;
12517   int ret = 0;
12518
12519   /* See if we need a PT_MIPS_REGINFO segment.  */
12520   s = bfd_get_section_by_name (abfd, ".reginfo");
12521   if (s && (s->flags & SEC_LOAD))
12522     ++ret;
12523
12524   /* See if we need a PT_MIPS_ABIFLAGS segment.  */
12525   if (bfd_get_section_by_name (abfd, ".MIPS.abiflags"))
12526     ++ret;
12527
12528   /* See if we need a PT_MIPS_OPTIONS segment.  */
12529   if (IRIX_COMPAT (abfd) == ict_irix6
12530       && bfd_get_section_by_name (abfd,
12531                                   MIPS_ELF_OPTIONS_SECTION_NAME (abfd)))
12532     ++ret;
12533
12534   /* See if we need a PT_MIPS_RTPROC segment.  */
12535   if (IRIX_COMPAT (abfd) == ict_irix5
12536       && bfd_get_section_by_name (abfd, ".dynamic")
12537       && bfd_get_section_by_name (abfd, ".mdebug"))
12538     ++ret;
12539
12540   /* Allocate a PT_NULL header in dynamic objects.  See
12541      _bfd_mips_elf_modify_segment_map for details.  */
12542   if (!SGI_COMPAT (abfd)
12543       && bfd_get_section_by_name (abfd, ".dynamic"))
12544     ++ret;
12545
12546   return ret;
12547 }
12548
12549 /* Modify the segment map for an IRIX5 executable.  */
12550
12551 bfd_boolean
12552 _bfd_mips_elf_modify_segment_map (bfd *abfd,
12553                                   struct bfd_link_info *info)
12554 {
12555   asection *s;
12556   struct elf_segment_map *m, **pm;
12557   bfd_size_type amt;
12558
12559   /* If there is a .reginfo section, we need a PT_MIPS_REGINFO
12560      segment.  */
12561   s = bfd_get_section_by_name (abfd, ".reginfo");
12562   if (s != NULL && (s->flags & SEC_LOAD) != 0)
12563     {
12564       for (m = elf_seg_map (abfd); m != NULL; m = m->next)
12565         if (m->p_type == PT_MIPS_REGINFO)
12566           break;
12567       if (m == NULL)
12568         {
12569           amt = sizeof *m;
12570           m = bfd_zalloc (abfd, amt);
12571           if (m == NULL)
12572             return FALSE;
12573
12574           m->p_type = PT_MIPS_REGINFO;
12575           m->count = 1;
12576           m->sections[0] = s;
12577
12578           /* We want to put it after the PHDR and INTERP segments.  */
12579           pm = &elf_seg_map (abfd);
12580           while (*pm != NULL
12581                  && ((*pm)->p_type == PT_PHDR
12582                      || (*pm)->p_type == PT_INTERP))
12583             pm = &(*pm)->next;
12584
12585           m->next = *pm;
12586           *pm = m;
12587         }
12588     }
12589
12590   /* If there is a .MIPS.abiflags section, we need a PT_MIPS_ABIFLAGS
12591      segment.  */
12592   s = bfd_get_section_by_name (abfd, ".MIPS.abiflags");
12593   if (s != NULL && (s->flags & SEC_LOAD) != 0)
12594     {
12595       for (m = elf_seg_map (abfd); m != NULL; m = m->next)
12596         if (m->p_type == PT_MIPS_ABIFLAGS)
12597           break;
12598       if (m == NULL)
12599         {
12600           amt = sizeof *m;
12601           m = bfd_zalloc (abfd, amt);
12602           if (m == NULL)
12603             return FALSE;
12604
12605           m->p_type = PT_MIPS_ABIFLAGS;
12606           m->count = 1;
12607           m->sections[0] = s;
12608
12609           /* We want to put it after the PHDR and INTERP segments.  */
12610           pm = &elf_seg_map (abfd);
12611           while (*pm != NULL
12612                  && ((*pm)->p_type == PT_PHDR
12613                      || (*pm)->p_type == PT_INTERP))
12614             pm = &(*pm)->next;
12615
12616           m->next = *pm;
12617           *pm = m;
12618         }
12619     }
12620
12621   /* For IRIX 6, we don't have .mdebug sections, nor does anything but
12622      .dynamic end up in PT_DYNAMIC.  However, we do have to insert a
12623      PT_MIPS_OPTIONS segment immediately following the program header
12624      table.  */
12625   if (NEWABI_P (abfd)
12626       /* On non-IRIX6 new abi, we'll have already created a segment
12627          for this section, so don't create another.  I'm not sure this
12628          is not also the case for IRIX 6, but I can't test it right
12629          now.  */
12630       && IRIX_COMPAT (abfd) == ict_irix6)
12631     {
12632       for (s = abfd->sections; s; s = s->next)
12633         if (elf_section_data (s)->this_hdr.sh_type == SHT_MIPS_OPTIONS)
12634           break;
12635
12636       if (s)
12637         {
12638           struct elf_segment_map *options_segment;
12639
12640           pm = &elf_seg_map (abfd);
12641           while (*pm != NULL
12642                  && ((*pm)->p_type == PT_PHDR
12643                      || (*pm)->p_type == PT_INTERP))
12644             pm = &(*pm)->next;
12645
12646           if (*pm == NULL || (*pm)->p_type != PT_MIPS_OPTIONS)
12647             {
12648               amt = sizeof (struct elf_segment_map);
12649               options_segment = bfd_zalloc (abfd, amt);
12650               options_segment->next = *pm;
12651               options_segment->p_type = PT_MIPS_OPTIONS;
12652               options_segment->p_flags = PF_R;
12653               options_segment->p_flags_valid = TRUE;
12654               options_segment->count = 1;
12655               options_segment->sections[0] = s;
12656               *pm = options_segment;
12657             }
12658         }
12659     }
12660   else
12661     {
12662       if (IRIX_COMPAT (abfd) == ict_irix5)
12663         {
12664           /* If there are .dynamic and .mdebug sections, we make a room
12665              for the RTPROC header.  FIXME: Rewrite without section names.  */
12666           if (bfd_get_section_by_name (abfd, ".interp") == NULL
12667               && bfd_get_section_by_name (abfd, ".dynamic") != NULL
12668               && bfd_get_section_by_name (abfd, ".mdebug") != NULL)
12669             {
12670               for (m = elf_seg_map (abfd); m != NULL; m = m->next)
12671                 if (m->p_type == PT_MIPS_RTPROC)
12672                   break;
12673               if (m == NULL)
12674                 {
12675                   amt = sizeof *m;
12676                   m = bfd_zalloc (abfd, amt);
12677                   if (m == NULL)
12678                     return FALSE;
12679
12680                   m->p_type = PT_MIPS_RTPROC;
12681
12682                   s = bfd_get_section_by_name (abfd, ".rtproc");
12683                   if (s == NULL)
12684                     {
12685                       m->count = 0;
12686                       m->p_flags = 0;
12687                       m->p_flags_valid = 1;
12688                     }
12689                   else
12690                     {
12691                       m->count = 1;
12692                       m->sections[0] = s;
12693                     }
12694
12695                   /* We want to put it after the DYNAMIC segment.  */
12696                   pm = &elf_seg_map (abfd);
12697                   while (*pm != NULL && (*pm)->p_type != PT_DYNAMIC)
12698                     pm = &(*pm)->next;
12699                   if (*pm != NULL)
12700                     pm = &(*pm)->next;
12701
12702                   m->next = *pm;
12703                   *pm = m;
12704                 }
12705             }
12706         }
12707       /* On IRIX5, the PT_DYNAMIC segment includes the .dynamic,
12708          .dynstr, .dynsym, and .hash sections, and everything in
12709          between.  */
12710       for (pm = &elf_seg_map (abfd); *pm != NULL;
12711            pm = &(*pm)->next)
12712         if ((*pm)->p_type == PT_DYNAMIC)
12713           break;
12714       m = *pm;
12715       /* GNU/Linux binaries do not need the extended PT_DYNAMIC section.
12716          glibc's dynamic linker has traditionally derived the number of
12717          tags from the p_filesz field, and sometimes allocates stack
12718          arrays of that size.  An overly-big PT_DYNAMIC segment can
12719          be actively harmful in such cases.  Making PT_DYNAMIC contain
12720          other sections can also make life hard for the prelinker,
12721          which might move one of the other sections to a different
12722          PT_LOAD segment.  */
12723       if (SGI_COMPAT (abfd)
12724           && m != NULL
12725           && m->count == 1
12726           && strcmp (m->sections[0]->name, ".dynamic") == 0)
12727         {
12728           static const char *sec_names[] =
12729           {
12730             ".dynamic", ".dynstr", ".dynsym", ".hash"
12731           };
12732           bfd_vma low, high;
12733           unsigned int i, c;
12734           struct elf_segment_map *n;
12735
12736           low = ~(bfd_vma) 0;
12737           high = 0;
12738           for (i = 0; i < sizeof sec_names / sizeof sec_names[0]; i++)
12739             {
12740               s = bfd_get_section_by_name (abfd, sec_names[i]);
12741               if (s != NULL && (s->flags & SEC_LOAD) != 0)
12742                 {
12743                   bfd_size_type sz;
12744
12745                   if (low > s->vma)
12746                     low = s->vma;
12747                   sz = s->size;
12748                   if (high < s->vma + sz)
12749                     high = s->vma + sz;
12750                 }
12751             }
12752
12753           c = 0;
12754           for (s = abfd->sections; s != NULL; s = s->next)
12755             if ((s->flags & SEC_LOAD) != 0
12756                 && s->vma >= low
12757                 && s->vma + s->size <= high)
12758               ++c;
12759
12760           amt = sizeof *n + (bfd_size_type) (c - 1) * sizeof (asection *);
12761           n = bfd_zalloc (abfd, amt);
12762           if (n == NULL)
12763             return FALSE;
12764           *n = *m;
12765           n->count = c;
12766
12767           i = 0;
12768           for (s = abfd->sections; s != NULL; s = s->next)
12769             {
12770               if ((s->flags & SEC_LOAD) != 0
12771                   && s->vma >= low
12772                   && s->vma + s->size <= high)
12773                 {
12774                   n->sections[i] = s;
12775                   ++i;
12776                 }
12777             }
12778
12779           *pm = n;
12780         }
12781     }
12782
12783   /* Allocate a spare program header in dynamic objects so that tools
12784      like the prelinker can add an extra PT_LOAD entry.
12785
12786      If the prelinker needs to make room for a new PT_LOAD entry, its
12787      standard procedure is to move the first (read-only) sections into
12788      the new (writable) segment.  However, the MIPS ABI requires
12789      .dynamic to be in a read-only segment, and the section will often
12790      start within sizeof (ElfNN_Phdr) bytes of the last program header.
12791
12792      Although the prelinker could in principle move .dynamic to a
12793      writable segment, it seems better to allocate a spare program
12794      header instead, and avoid the need to move any sections.
12795      There is a long tradition of allocating spare dynamic tags,
12796      so allocating a spare program header seems like a natural
12797      extension.
12798
12799      If INFO is NULL, we may be copying an already prelinked binary
12800      with objcopy or strip, so do not add this header.  */
12801   if (info != NULL
12802       && !SGI_COMPAT (abfd)
12803       && bfd_get_section_by_name (abfd, ".dynamic"))
12804     {
12805       for (pm = &elf_seg_map (abfd); *pm != NULL; pm = &(*pm)->next)
12806         if ((*pm)->p_type == PT_NULL)
12807           break;
12808       if (*pm == NULL)
12809         {
12810           m = bfd_zalloc (abfd, sizeof (*m));
12811           if (m == NULL)
12812             return FALSE;
12813
12814           m->p_type = PT_NULL;
12815           *pm = m;
12816         }
12817     }
12818
12819   return TRUE;
12820 }
12821 \f
12822 /* Return the section that should be marked against GC for a given
12823    relocation.  */
12824
12825 asection *
12826 _bfd_mips_elf_gc_mark_hook (asection *sec,
12827                             struct bfd_link_info *info,
12828                             Elf_Internal_Rela *rel,
12829                             struct elf_link_hash_entry *h,
12830                             Elf_Internal_Sym *sym)
12831 {
12832   /* ??? Do mips16 stub sections need to be handled special?  */
12833
12834   if (h != NULL)
12835     switch (ELF_R_TYPE (sec->owner, rel->r_info))
12836       {
12837       case R_MIPS_GNU_VTINHERIT:
12838       case R_MIPS_GNU_VTENTRY:
12839         return NULL;
12840       }
12841
12842   return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
12843 }
12844
12845 /* Prevent .MIPS.abiflags from being discarded with --gc-sections.  */
12846
12847 bfd_boolean
12848 _bfd_mips_elf_gc_mark_extra_sections (struct bfd_link_info *info,
12849                                       elf_gc_mark_hook_fn gc_mark_hook)
12850 {
12851   bfd *sub;
12852
12853   _bfd_elf_gc_mark_extra_sections (info, gc_mark_hook);
12854
12855   for (sub = info->input_bfds; sub != NULL; sub = sub->link.next)
12856     {
12857       asection *o;
12858
12859       if (! is_mips_elf (sub))
12860         continue;
12861
12862       for (o = sub->sections; o != NULL; o = o->next)
12863         if (!o->gc_mark
12864             && MIPS_ELF_ABIFLAGS_SECTION_NAME_P
12865                  (bfd_get_section_name (sub, o)))
12866           {
12867             if (!_bfd_elf_gc_mark (info, o, gc_mark_hook))
12868               return FALSE;
12869           }
12870     }
12871
12872   return TRUE;
12873 }
12874 \f
12875 /* Copy data from a MIPS ELF indirect symbol to its direct symbol,
12876    hiding the old indirect symbol.  Process additional relocation
12877    information.  Also called for weakdefs, in which case we just let
12878    _bfd_elf_link_hash_copy_indirect copy the flags for us.  */
12879
12880 void
12881 _bfd_mips_elf_copy_indirect_symbol (struct bfd_link_info *info,
12882                                     struct elf_link_hash_entry *dir,
12883                                     struct elf_link_hash_entry *ind)
12884 {
12885   struct mips_elf_link_hash_entry *dirmips, *indmips;
12886
12887   _bfd_elf_link_hash_copy_indirect (info, dir, ind);
12888
12889   dirmips = (struct mips_elf_link_hash_entry *) dir;
12890   indmips = (struct mips_elf_link_hash_entry *) ind;
12891   /* Any absolute non-dynamic relocations against an indirect or weak
12892      definition will be against the target symbol.  */
12893   if (indmips->has_static_relocs)
12894     dirmips->has_static_relocs = TRUE;
12895
12896   if (ind->root.type != bfd_link_hash_indirect)
12897     return;
12898
12899   dirmips->possibly_dynamic_relocs += indmips->possibly_dynamic_relocs;
12900   if (indmips->readonly_reloc)
12901     dirmips->readonly_reloc = TRUE;
12902   if (indmips->no_fn_stub)
12903     dirmips->no_fn_stub = TRUE;
12904   if (indmips->fn_stub)
12905     {
12906       dirmips->fn_stub = indmips->fn_stub;
12907       indmips->fn_stub = NULL;
12908     }
12909   if (indmips->need_fn_stub)
12910     {
12911       dirmips->need_fn_stub = TRUE;
12912       indmips->need_fn_stub = FALSE;
12913     }
12914   if (indmips->call_stub)
12915     {
12916       dirmips->call_stub = indmips->call_stub;
12917       indmips->call_stub = NULL;
12918     }
12919   if (indmips->call_fp_stub)
12920     {
12921       dirmips->call_fp_stub = indmips->call_fp_stub;
12922       indmips->call_fp_stub = NULL;
12923     }
12924   if (indmips->global_got_area < dirmips->global_got_area)
12925     dirmips->global_got_area = indmips->global_got_area;
12926   if (indmips->global_got_area < GGA_NONE)
12927     indmips->global_got_area = GGA_NONE;
12928   if (indmips->has_nonpic_branches)
12929     dirmips->has_nonpic_branches = TRUE;
12930 }
12931
12932 /* Take care of the special `__gnu_absolute_zero' symbol and ignore attempts
12933    to hide it.  It has to remain global (it will also be protected) so as to
12934    be assigned a global GOT entry, which will then remain unchanged at load
12935    time.  */
12936
12937 void
12938 _bfd_mips_elf_hide_symbol (struct bfd_link_info *info,
12939                            struct elf_link_hash_entry *entry,
12940                            bfd_boolean force_local)
12941 {
12942   struct mips_elf_link_hash_table *htab;
12943
12944   htab = mips_elf_hash_table (info);
12945   BFD_ASSERT (htab != NULL);
12946   if (htab->use_absolute_zero
12947       && strcmp (entry->root.root.string, "__gnu_absolute_zero") == 0)
12948     return;
12949
12950   _bfd_elf_link_hash_hide_symbol (info, entry, force_local);
12951 }
12952 \f
12953 #define PDR_SIZE 32
12954
12955 bfd_boolean
12956 _bfd_mips_elf_discard_info (bfd *abfd, struct elf_reloc_cookie *cookie,
12957                             struct bfd_link_info *info)
12958 {
12959   asection *o;
12960   bfd_boolean ret = FALSE;
12961   unsigned char *tdata;
12962   size_t i, skip;
12963
12964   o = bfd_get_section_by_name (abfd, ".pdr");
12965   if (! o)
12966     return FALSE;
12967   if (o->size == 0)
12968     return FALSE;
12969   if (o->size % PDR_SIZE != 0)
12970     return FALSE;
12971   if (o->output_section != NULL
12972       && bfd_is_abs_section (o->output_section))
12973     return FALSE;
12974
12975   tdata = bfd_zmalloc (o->size / PDR_SIZE);
12976   if (! tdata)
12977     return FALSE;
12978
12979   cookie->rels = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
12980                                             info->keep_memory);
12981   if (!cookie->rels)
12982     {
12983       free (tdata);
12984       return FALSE;
12985     }
12986
12987   cookie->rel = cookie->rels;
12988   cookie->relend = cookie->rels + o->reloc_count;
12989
12990   for (i = 0, skip = 0; i < o->size / PDR_SIZE; i ++)
12991     {
12992       if (bfd_elf_reloc_symbol_deleted_p (i * PDR_SIZE, cookie))
12993         {
12994           tdata[i] = 1;
12995           skip ++;
12996         }
12997     }
12998
12999   if (skip != 0)
13000     {
13001       mips_elf_section_data (o)->u.tdata = tdata;
13002       if (o->rawsize == 0)
13003         o->rawsize = o->size;
13004       o->size -= skip * PDR_SIZE;
13005       ret = TRUE;
13006     }
13007   else
13008     free (tdata);
13009
13010   if (! info->keep_memory)
13011     free (cookie->rels);
13012
13013   return ret;
13014 }
13015
13016 bfd_boolean
13017 _bfd_mips_elf_ignore_discarded_relocs (asection *sec)
13018 {
13019   if (strcmp (sec->name, ".pdr") == 0)
13020     return TRUE;
13021   return FALSE;
13022 }
13023
13024 bfd_boolean
13025 _bfd_mips_elf_write_section (bfd *output_bfd,
13026                              struct bfd_link_info *link_info ATTRIBUTE_UNUSED,
13027                              asection *sec, bfd_byte *contents)
13028 {
13029   bfd_byte *to, *from, *end;
13030   int i;
13031
13032   if (strcmp (sec->name, ".pdr") != 0)
13033     return FALSE;
13034
13035   if (mips_elf_section_data (sec)->u.tdata == NULL)
13036     return FALSE;
13037
13038   to = contents;
13039   end = contents + sec->size;
13040   for (from = contents, i = 0;
13041        from < end;
13042        from += PDR_SIZE, i++)
13043     {
13044       if ((mips_elf_section_data (sec)->u.tdata)[i] == 1)
13045         continue;
13046       if (to != from)
13047         memcpy (to, from, PDR_SIZE);
13048       to += PDR_SIZE;
13049     }
13050   bfd_set_section_contents (output_bfd, sec->output_section, contents,
13051                             sec->output_offset, sec->size);
13052   return TRUE;
13053 }
13054 \f
13055 /* microMIPS code retains local labels for linker relaxation.  Omit them
13056    from output by default for clarity.  */
13057
13058 bfd_boolean
13059 _bfd_mips_elf_is_target_special_symbol (bfd *abfd, asymbol *sym)
13060 {
13061   return _bfd_elf_is_local_label_name (abfd, sym->name);
13062 }
13063
13064 /* MIPS ELF uses a special find_nearest_line routine in order the
13065    handle the ECOFF debugging information.  */
13066
13067 struct mips_elf_find_line
13068 {
13069   struct ecoff_debug_info d;
13070   struct ecoff_find_line i;
13071 };
13072
13073 bfd_boolean
13074 _bfd_mips_elf_find_nearest_line (bfd *abfd, asymbol **symbols,
13075                                  asection *section, bfd_vma offset,
13076                                  const char **filename_ptr,
13077                                  const char **functionname_ptr,
13078                                  unsigned int *line_ptr,
13079                                  unsigned int *discriminator_ptr)
13080 {
13081   asection *msec;
13082
13083   if (_bfd_dwarf2_find_nearest_line (abfd, symbols, NULL, section, offset,
13084                                      filename_ptr, functionname_ptr,
13085                                      line_ptr, discriminator_ptr,
13086                                      dwarf_debug_sections,
13087                                      &elf_tdata (abfd)->dwarf2_find_line_info)
13088       || _bfd_dwarf1_find_nearest_line (abfd, symbols, section, offset,
13089                                         filename_ptr, functionname_ptr,
13090                                         line_ptr))
13091     {
13092       /* PR 22789: If the function name or filename was not found through
13093          the debug information, then try an ordinary lookup instead.  */
13094       if ((functionname_ptr != NULL && *functionname_ptr == NULL)
13095           || (filename_ptr != NULL && *filename_ptr == NULL))
13096         {
13097           /* Do not override already discovered names.  */
13098           if (functionname_ptr != NULL && *functionname_ptr != NULL)
13099             functionname_ptr = NULL;
13100
13101           if (filename_ptr != NULL && *filename_ptr != NULL)
13102             filename_ptr = NULL;
13103
13104           _bfd_elf_find_function (abfd, symbols, section, offset,
13105                                   filename_ptr, functionname_ptr);
13106         }
13107
13108       return TRUE;
13109     }
13110
13111   msec = bfd_get_section_by_name (abfd, ".mdebug");
13112   if (msec != NULL)
13113     {
13114       flagword origflags;
13115       struct mips_elf_find_line *fi;
13116       const struct ecoff_debug_swap * const swap =
13117         get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
13118
13119       /* If we are called during a link, mips_elf_final_link may have
13120          cleared the SEC_HAS_CONTENTS field.  We force it back on here
13121          if appropriate (which it normally will be).  */
13122       origflags = msec->flags;
13123       if (elf_section_data (msec)->this_hdr.sh_type != SHT_NOBITS)
13124         msec->flags |= SEC_HAS_CONTENTS;
13125
13126       fi = mips_elf_tdata (abfd)->find_line_info;
13127       if (fi == NULL)
13128         {
13129           bfd_size_type external_fdr_size;
13130           char *fraw_src;
13131           char *fraw_end;
13132           struct fdr *fdr_ptr;
13133           bfd_size_type amt = sizeof (struct mips_elf_find_line);
13134
13135           fi = bfd_zalloc (abfd, amt);
13136           if (fi == NULL)
13137             {
13138               msec->flags = origflags;
13139               return FALSE;
13140             }
13141
13142           if (! _bfd_mips_elf_read_ecoff_info (abfd, msec, &fi->d))
13143             {
13144               msec->flags = origflags;
13145               return FALSE;
13146             }
13147
13148           /* Swap in the FDR information.  */
13149           amt = fi->d.symbolic_header.ifdMax * sizeof (struct fdr);
13150           fi->d.fdr = bfd_alloc (abfd, amt);
13151           if (fi->d.fdr == NULL)
13152             {
13153               msec->flags = origflags;
13154               return FALSE;
13155             }
13156           external_fdr_size = swap->external_fdr_size;
13157           fdr_ptr = fi->d.fdr;
13158           fraw_src = (char *) fi->d.external_fdr;
13159           fraw_end = (fraw_src
13160                       + fi->d.symbolic_header.ifdMax * external_fdr_size);
13161           for (; fraw_src < fraw_end; fraw_src += external_fdr_size, fdr_ptr++)
13162             (*swap->swap_fdr_in) (abfd, fraw_src, fdr_ptr);
13163
13164           mips_elf_tdata (abfd)->find_line_info = fi;
13165
13166           /* Note that we don't bother to ever free this information.
13167              find_nearest_line is either called all the time, as in
13168              objdump -l, so the information should be saved, or it is
13169              rarely called, as in ld error messages, so the memory
13170              wasted is unimportant.  Still, it would probably be a
13171              good idea for free_cached_info to throw it away.  */
13172         }
13173
13174       if (_bfd_ecoff_locate_line (abfd, section, offset, &fi->d, swap,
13175                                   &fi->i, filename_ptr, functionname_ptr,
13176                                   line_ptr))
13177         {
13178           msec->flags = origflags;
13179           return TRUE;
13180         }
13181
13182       msec->flags = origflags;
13183     }
13184
13185   /* Fall back on the generic ELF find_nearest_line routine.  */
13186
13187   return _bfd_elf_find_nearest_line (abfd, symbols, section, offset,
13188                                      filename_ptr, functionname_ptr,
13189                                      line_ptr, discriminator_ptr);
13190 }
13191
13192 bfd_boolean
13193 _bfd_mips_elf_find_inliner_info (bfd *abfd,
13194                                  const char **filename_ptr,
13195                                  const char **functionname_ptr,
13196                                  unsigned int *line_ptr)
13197 {
13198   bfd_boolean found;
13199   found = _bfd_dwarf2_find_inliner_info (abfd, filename_ptr,
13200                                          functionname_ptr, line_ptr,
13201                                          & elf_tdata (abfd)->dwarf2_find_line_info);
13202   return found;
13203 }
13204
13205 \f
13206 /* When are writing out the .options or .MIPS.options section,
13207    remember the bytes we are writing out, so that we can install the
13208    GP value in the section_processing routine.  */
13209
13210 bfd_boolean
13211 _bfd_mips_elf_set_section_contents (bfd *abfd, sec_ptr section,
13212                                     const void *location,
13213                                     file_ptr offset, bfd_size_type count)
13214 {
13215   if (MIPS_ELF_OPTIONS_SECTION_NAME_P (section->name))
13216     {
13217       bfd_byte *c;
13218
13219       if (elf_section_data (section) == NULL)
13220         {
13221           bfd_size_type amt = sizeof (struct bfd_elf_section_data);
13222           section->used_by_bfd = bfd_zalloc (abfd, amt);
13223           if (elf_section_data (section) == NULL)
13224             return FALSE;
13225         }
13226       c = mips_elf_section_data (section)->u.tdata;
13227       if (c == NULL)
13228         {
13229           c = bfd_zalloc (abfd, section->size);
13230           if (c == NULL)
13231             return FALSE;
13232           mips_elf_section_data (section)->u.tdata = c;
13233         }
13234
13235       memcpy (c + offset, location, count);
13236     }
13237
13238   return _bfd_elf_set_section_contents (abfd, section, location, offset,
13239                                         count);
13240 }
13241
13242 /* This is almost identical to bfd_generic_get_... except that some
13243    MIPS relocations need to be handled specially.  Sigh.  */
13244
13245 bfd_byte *
13246 _bfd_elf_mips_get_relocated_section_contents
13247   (bfd *abfd,
13248    struct bfd_link_info *link_info,
13249    struct bfd_link_order *link_order,
13250    bfd_byte *data,
13251    bfd_boolean relocatable,
13252    asymbol **symbols)
13253 {
13254   /* Get enough memory to hold the stuff */
13255   bfd *input_bfd = link_order->u.indirect.section->owner;
13256   asection *input_section = link_order->u.indirect.section;
13257   bfd_size_type sz;
13258
13259   long reloc_size = bfd_get_reloc_upper_bound (input_bfd, input_section);
13260   arelent **reloc_vector = NULL;
13261   long reloc_count;
13262
13263   if (reloc_size < 0)
13264     goto error_return;
13265
13266   reloc_vector = bfd_malloc (reloc_size);
13267   if (reloc_vector == NULL && reloc_size != 0)
13268     goto error_return;
13269
13270   /* read in the section */
13271   sz = input_section->rawsize ? input_section->rawsize : input_section->size;
13272   if (!bfd_get_section_contents (input_bfd, input_section, data, 0, sz))
13273     goto error_return;
13274
13275   reloc_count = bfd_canonicalize_reloc (input_bfd,
13276                                         input_section,
13277                                         reloc_vector,
13278                                         symbols);
13279   if (reloc_count < 0)
13280     goto error_return;
13281
13282   if (reloc_count > 0)
13283     {
13284       arelent **parent;
13285       /* for mips */
13286       int gp_found;
13287       bfd_vma gp = 0x12345678;  /* initialize just to shut gcc up */
13288
13289       {
13290         struct bfd_hash_entry *h;
13291         struct bfd_link_hash_entry *lh;
13292         /* Skip all this stuff if we aren't mixing formats.  */
13293         if (abfd && input_bfd
13294             && abfd->xvec == input_bfd->xvec)
13295           lh = 0;
13296         else
13297           {
13298             h = bfd_hash_lookup (&link_info->hash->table, "_gp", FALSE, FALSE);
13299             lh = (struct bfd_link_hash_entry *) h;
13300           }
13301       lookup:
13302         if (lh)
13303           {
13304             switch (lh->type)
13305               {
13306               case bfd_link_hash_undefined:
13307               case bfd_link_hash_undefweak:
13308               case bfd_link_hash_common:
13309                 gp_found = 0;
13310                 break;
13311               case bfd_link_hash_defined:
13312               case bfd_link_hash_defweak:
13313                 gp_found = 1;
13314                 gp = lh->u.def.value;
13315                 break;
13316               case bfd_link_hash_indirect:
13317               case bfd_link_hash_warning:
13318                 lh = lh->u.i.link;
13319                 /* @@FIXME  ignoring warning for now */
13320                 goto lookup;
13321               case bfd_link_hash_new:
13322               default:
13323                 abort ();
13324               }
13325           }
13326         else
13327           gp_found = 0;
13328       }
13329       /* end mips */
13330       for (parent = reloc_vector; *parent != NULL; parent++)
13331         {
13332           char *error_message = NULL;
13333           bfd_reloc_status_type r;
13334
13335           /* Specific to MIPS: Deal with relocation types that require
13336              knowing the gp of the output bfd.  */
13337           asymbol *sym = *(*parent)->sym_ptr_ptr;
13338
13339           /* If we've managed to find the gp and have a special
13340              function for the relocation then go ahead, else default
13341              to the generic handling.  */
13342           if (gp_found
13343               && (*parent)->howto->special_function
13344               == _bfd_mips_elf32_gprel16_reloc)
13345             r = _bfd_mips_elf_gprel16_with_gp (input_bfd, sym, *parent,
13346                                                input_section, relocatable,
13347                                                data, gp);
13348           else
13349             r = bfd_perform_relocation (input_bfd, *parent, data,
13350                                         input_section,
13351                                         relocatable ? abfd : NULL,
13352                                         &error_message);
13353
13354           if (relocatable)
13355             {
13356               asection *os = input_section->output_section;
13357
13358               /* A partial link, so keep the relocs */
13359               os->orelocation[os->reloc_count] = *parent;
13360               os->reloc_count++;
13361             }
13362
13363           if (r != bfd_reloc_ok)
13364             {
13365               switch (r)
13366                 {
13367                 case bfd_reloc_undefined:
13368                   (*link_info->callbacks->undefined_symbol)
13369                     (link_info, bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
13370                      input_bfd, input_section, (*parent)->address, TRUE);
13371                   break;
13372                 case bfd_reloc_dangerous:
13373                   BFD_ASSERT (error_message != NULL);
13374                   (*link_info->callbacks->reloc_dangerous)
13375                     (link_info, error_message,
13376                      input_bfd, input_section, (*parent)->address);
13377                   break;
13378                 case bfd_reloc_overflow:
13379                   (*link_info->callbacks->reloc_overflow)
13380                     (link_info, NULL,
13381                      bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
13382                      (*parent)->howto->name, (*parent)->addend,
13383                      input_bfd, input_section, (*parent)->address);
13384                   break;
13385                 case bfd_reloc_outofrange:
13386                 default:
13387                   abort ();
13388                   break;
13389                 }
13390
13391             }
13392         }
13393     }
13394   if (reloc_vector != NULL)
13395     free (reloc_vector);
13396   return data;
13397
13398 error_return:
13399   if (reloc_vector != NULL)
13400     free (reloc_vector);
13401   return NULL;
13402 }
13403 \f
13404 static bfd_boolean
13405 mips_elf_relax_delete_bytes (bfd *abfd,
13406                              asection *sec, bfd_vma addr, int count)
13407 {
13408   Elf_Internal_Shdr *symtab_hdr;
13409   unsigned int sec_shndx;
13410   bfd_byte *contents;
13411   Elf_Internal_Rela *irel, *irelend;
13412   Elf_Internal_Sym *isym;
13413   Elf_Internal_Sym *isymend;
13414   struct elf_link_hash_entry **sym_hashes;
13415   struct elf_link_hash_entry **end_hashes;
13416   struct elf_link_hash_entry **start_hashes;
13417   unsigned int symcount;
13418
13419   sec_shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
13420   contents = elf_section_data (sec)->this_hdr.contents;
13421
13422   irel = elf_section_data (sec)->relocs;
13423   irelend = irel + sec->reloc_count;
13424
13425   /* Actually delete the bytes.  */
13426   memmove (contents + addr, contents + addr + count,
13427            (size_t) (sec->size - addr - count));
13428   sec->size -= count;
13429
13430   /* Adjust all the relocs.  */
13431   for (irel = elf_section_data (sec)->relocs; irel < irelend; irel++)
13432     {
13433       /* Get the new reloc address.  */
13434       if (irel->r_offset > addr)
13435         irel->r_offset -= count;
13436     }
13437
13438   BFD_ASSERT (addr % 2 == 0);
13439   BFD_ASSERT (count % 2 == 0);
13440
13441   /* Adjust the local symbols defined in this section.  */
13442   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
13443   isym = (Elf_Internal_Sym *) symtab_hdr->contents;
13444   for (isymend = isym + symtab_hdr->sh_info; isym < isymend; isym++)
13445     if (isym->st_shndx == sec_shndx && isym->st_value > addr)
13446       isym->st_value -= count;
13447
13448   /* Now adjust the global symbols defined in this section.  */
13449   symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym)
13450               - symtab_hdr->sh_info);
13451   sym_hashes = start_hashes = elf_sym_hashes (abfd);
13452   end_hashes = sym_hashes + symcount;
13453
13454   for (; sym_hashes < end_hashes; sym_hashes++)
13455     {
13456       struct elf_link_hash_entry *sym_hash = *sym_hashes;
13457
13458       if ((sym_hash->root.type == bfd_link_hash_defined
13459            || sym_hash->root.type == bfd_link_hash_defweak)
13460           && sym_hash->root.u.def.section == sec)
13461         {
13462           bfd_vma value = sym_hash->root.u.def.value;
13463
13464           if (ELF_ST_IS_MICROMIPS (sym_hash->other))
13465             value &= MINUS_TWO;
13466           if (value > addr)
13467             sym_hash->root.u.def.value -= count;
13468         }
13469     }
13470
13471   return TRUE;
13472 }
13473
13474
13475 /* Opcodes needed for microMIPS relaxation as found in
13476    opcodes/micromips-opc.c.  */
13477
13478 struct opcode_descriptor {
13479   unsigned long match;
13480   unsigned long mask;
13481 };
13482
13483 /* The $ra register aka $31.  */
13484
13485 #define RA 31
13486
13487 /* 32-bit instruction format register fields.  */
13488
13489 #define OP32_SREG(opcode) (((opcode) >> 16) & 0x1f)
13490 #define OP32_TREG(opcode) (((opcode) >> 21) & 0x1f)
13491
13492 /* Check if a 5-bit register index can be abbreviated to 3 bits.  */
13493
13494 #define OP16_VALID_REG(r) \
13495   ((2 <= (r) && (r) <= 7) || (16 <= (r) && (r) <= 17))
13496
13497
13498 /* 32-bit and 16-bit branches.  */
13499
13500 static const struct opcode_descriptor b_insns_32[] = {
13501   { /* "b",     "p",            */ 0x40400000, 0xffff0000 }, /* bgez 0 */
13502   { /* "b",     "p",            */ 0x94000000, 0xffff0000 }, /* beq 0, 0 */
13503   { 0, 0 }  /* End marker for find_match().  */
13504 };
13505
13506 static const struct opcode_descriptor bc_insn_32 =
13507   { /* "bc(1|2)(ft)", "N,p",    */ 0x42800000, 0xfec30000 };
13508
13509 static const struct opcode_descriptor bz_insn_32 =
13510   { /* "b(g|l)(e|t)z", "s,p",   */ 0x40000000, 0xff200000 };
13511
13512 static const struct opcode_descriptor bzal_insn_32 =
13513   { /* "b(ge|lt)zal", "s,p",    */ 0x40200000, 0xffa00000 };
13514
13515 static const struct opcode_descriptor beq_insn_32 =
13516   { /* "b(eq|ne)", "s,t,p",     */ 0x94000000, 0xdc000000 };
13517
13518 static const struct opcode_descriptor b_insn_16 =
13519   { /* "b",     "mD",           */ 0xcc00,     0xfc00 };
13520
13521 static const struct opcode_descriptor bz_insn_16 =
13522   { /* "b(eq|ne)z", "md,mE",    */ 0x8c00,     0xdc00 };
13523
13524
13525 /* 32-bit and 16-bit branch EQ and NE zero.  */
13526
13527 /* NOTE: All opcode tables have BEQ/BNE in the same order: first the
13528    eq and second the ne.  This convention is used when replacing a
13529    32-bit BEQ/BNE with the 16-bit version.  */
13530
13531 #define BZC32_REG_FIELD(r) (((r) & 0x1f) << 16)
13532
13533 static const struct opcode_descriptor bz_rs_insns_32[] = {
13534   { /* "beqz",  "s,p",          */ 0x94000000, 0xffe00000 },
13535   { /* "bnez",  "s,p",          */ 0xb4000000, 0xffe00000 },
13536   { 0, 0 }  /* End marker for find_match().  */
13537 };
13538
13539 static const struct opcode_descriptor bz_rt_insns_32[] = {
13540   { /* "beqz",  "t,p",          */ 0x94000000, 0xfc01f000 },
13541   { /* "bnez",  "t,p",          */ 0xb4000000, 0xfc01f000 },
13542   { 0, 0 }  /* End marker for find_match().  */
13543 };
13544
13545 static const struct opcode_descriptor bzc_insns_32[] = {
13546   { /* "beqzc", "s,p",          */ 0x40e00000, 0xffe00000 },
13547   { /* "bnezc", "s,p",          */ 0x40a00000, 0xffe00000 },
13548   { 0, 0 }  /* End marker for find_match().  */
13549 };
13550
13551 static const struct opcode_descriptor bz_insns_16[] = {
13552   { /* "beqz",  "md,mE",        */ 0x8c00,     0xfc00 },
13553   { /* "bnez",  "md,mE",        */ 0xac00,     0xfc00 },
13554   { 0, 0 }  /* End marker for find_match().  */
13555 };
13556
13557 /* Switch between a 5-bit register index and its 3-bit shorthand.  */
13558
13559 #define BZ16_REG(opcode) ((((((opcode) >> 7) & 7) + 0x1e) & 0xf) + 2)
13560 #define BZ16_REG_FIELD(r) (((r) & 7) << 7)
13561
13562
13563 /* 32-bit instructions with a delay slot.  */
13564
13565 static const struct opcode_descriptor jal_insn_32_bd16 =
13566   { /* "jals",  "a",            */ 0x74000000, 0xfc000000 };
13567
13568 static const struct opcode_descriptor jal_insn_32_bd32 =
13569   { /* "jal",   "a",            */ 0xf4000000, 0xfc000000 };
13570
13571 static const struct opcode_descriptor jal_x_insn_32_bd32 =
13572   { /* "jal[x]", "a",           */ 0xf0000000, 0xf8000000 };
13573
13574 static const struct opcode_descriptor j_insn_32 =
13575   { /* "j",     "a",            */ 0xd4000000, 0xfc000000 };
13576
13577 static const struct opcode_descriptor jalr_insn_32 =
13578   { /* "jalr[.hb]", "t,s",      */ 0x00000f3c, 0xfc00efff };
13579
13580 /* This table can be compacted, because no opcode replacement is made.  */
13581
13582 static const struct opcode_descriptor ds_insns_32_bd16[] = {
13583   { /* "jals",  "a",            */ 0x74000000, 0xfc000000 },
13584
13585   { /* "jalrs[.hb]", "t,s",     */ 0x00004f3c, 0xfc00efff },
13586   { /* "b(ge|lt)zals", "s,p",   */ 0x42200000, 0xffa00000 },
13587
13588   { /* "b(g|l)(e|t)z", "s,p",   */ 0x40000000, 0xff200000 },
13589   { /* "b(eq|ne)", "s,t,p",     */ 0x94000000, 0xdc000000 },
13590   { /* "j",     "a",            */ 0xd4000000, 0xfc000000 },
13591   { 0, 0 }  /* End marker for find_match().  */
13592 };
13593
13594 /* This table can be compacted, because no opcode replacement is made.  */
13595
13596 static const struct opcode_descriptor ds_insns_32_bd32[] = {
13597   { /* "jal[x]", "a",           */ 0xf0000000, 0xf8000000 },
13598
13599   { /* "jalr[.hb]", "t,s",      */ 0x00000f3c, 0xfc00efff },
13600   { /* "b(ge|lt)zal", "s,p",    */ 0x40200000, 0xffa00000 },
13601   { 0, 0 }  /* End marker for find_match().  */
13602 };
13603
13604
13605 /* 16-bit instructions with a delay slot.  */
13606
13607 static const struct opcode_descriptor jalr_insn_16_bd16 =
13608   { /* "jalrs", "my,mj",        */ 0x45e0,     0xffe0 };
13609
13610 static const struct opcode_descriptor jalr_insn_16_bd32 =
13611   { /* "jalr",  "my,mj",        */ 0x45c0,     0xffe0 };
13612
13613 static const struct opcode_descriptor jr_insn_16 =
13614   { /* "jr",    "mj",           */ 0x4580,     0xffe0 };
13615
13616 #define JR16_REG(opcode) ((opcode) & 0x1f)
13617
13618 /* This table can be compacted, because no opcode replacement is made.  */
13619
13620 static const struct opcode_descriptor ds_insns_16_bd16[] = {
13621   { /* "jalrs", "my,mj",        */ 0x45e0,     0xffe0 },
13622
13623   { /* "b",     "mD",           */ 0xcc00,     0xfc00 },
13624   { /* "b(eq|ne)z", "md,mE",    */ 0x8c00,     0xdc00 },
13625   { /* "jr",    "mj",           */ 0x4580,     0xffe0 },
13626   { 0, 0 }  /* End marker for find_match().  */
13627 };
13628
13629
13630 /* LUI instruction.  */
13631
13632 static const struct opcode_descriptor lui_insn =
13633  { /* "lui",    "s,u",          */ 0x41a00000, 0xffe00000 };
13634
13635
13636 /* ADDIU instruction.  */
13637
13638 static const struct opcode_descriptor addiu_insn =
13639   { /* "addiu", "t,r,j",        */ 0x30000000, 0xfc000000 };
13640
13641 static const struct opcode_descriptor addiupc_insn =
13642   { /* "addiu", "mb,$pc,mQ",    */ 0x78000000, 0xfc000000 };
13643
13644 #define ADDIUPC_REG_FIELD(r) \
13645   (((2 <= (r) && (r) <= 7) ? (r) : ((r) - 16)) << 23)
13646
13647
13648 /* Relaxable instructions in a JAL delay slot: MOVE.  */
13649
13650 /* The 16-bit move has rd in 9:5 and rs in 4:0.  The 32-bit moves
13651    (ADDU, OR) have rd in 15:11 and rs in 10:16.  */
13652 #define MOVE32_RD(opcode) (((opcode) >> 11) & 0x1f)
13653 #define MOVE32_RS(opcode) (((opcode) >> 16) & 0x1f)
13654
13655 #define MOVE16_RD_FIELD(r) (((r) & 0x1f) << 5)
13656 #define MOVE16_RS_FIELD(r) (((r) & 0x1f)     )
13657
13658 static const struct opcode_descriptor move_insns_32[] = {
13659   { /* "move",  "d,s",          */ 0x00000290, 0xffe007ff }, /* or   d,s,$0 */
13660   { /* "move",  "d,s",          */ 0x00000150, 0xffe007ff }, /* addu d,s,$0 */
13661   { 0, 0 }  /* End marker for find_match().  */
13662 };
13663
13664 static const struct opcode_descriptor move_insn_16 =
13665   { /* "move",  "mp,mj",        */ 0x0c00,     0xfc00 };
13666
13667
13668 /* NOP instructions.  */
13669
13670 static const struct opcode_descriptor nop_insn_32 =
13671   { /* "nop",   "",             */ 0x00000000, 0xffffffff };
13672
13673 static const struct opcode_descriptor nop_insn_16 =
13674   { /* "nop",   "",             */ 0x0c00,     0xffff };
13675
13676
13677 /* Instruction match support.  */
13678
13679 #define MATCH(opcode, insn) ((opcode & insn.mask) == insn.match)
13680
13681 static int
13682 find_match (unsigned long opcode, const struct opcode_descriptor insn[])
13683 {
13684   unsigned long indx;
13685
13686   for (indx = 0; insn[indx].mask != 0; indx++)
13687     if (MATCH (opcode, insn[indx]))
13688       return indx;
13689
13690   return -1;
13691 }
13692
13693
13694 /* Branch and delay slot decoding support.  */
13695
13696 /* If PTR points to what *might* be a 16-bit branch or jump, then
13697    return the minimum length of its delay slot, otherwise return 0.
13698    Non-zero results are not definitive as we might be checking against
13699    the second half of another instruction.  */
13700
13701 static int
13702 check_br16_dslot (bfd *abfd, bfd_byte *ptr)
13703 {
13704   unsigned long opcode;
13705   int bdsize;
13706
13707   opcode = bfd_get_16 (abfd, ptr);
13708   if (MATCH (opcode, jalr_insn_16_bd32) != 0)
13709     /* 16-bit branch/jump with a 32-bit delay slot.  */
13710     bdsize = 4;
13711   else if (MATCH (opcode, jalr_insn_16_bd16) != 0
13712            || find_match (opcode, ds_insns_16_bd16) >= 0)
13713     /* 16-bit branch/jump with a 16-bit delay slot.  */
13714     bdsize = 2;
13715   else
13716     /* No delay slot.  */
13717     bdsize = 0;
13718
13719   return bdsize;
13720 }
13721
13722 /* If PTR points to what *might* be a 32-bit branch or jump, then
13723    return the minimum length of its delay slot, otherwise return 0.
13724    Non-zero results are not definitive as we might be checking against
13725    the second half of another instruction.  */
13726
13727 static int
13728 check_br32_dslot (bfd *abfd, bfd_byte *ptr)
13729 {
13730   unsigned long opcode;
13731   int bdsize;
13732
13733   opcode = bfd_get_micromips_32 (abfd, ptr);
13734   if (find_match (opcode, ds_insns_32_bd32) >= 0)
13735     /* 32-bit branch/jump with a 32-bit delay slot.  */
13736     bdsize = 4;
13737   else if (find_match (opcode, ds_insns_32_bd16) >= 0)
13738     /* 32-bit branch/jump with a 16-bit delay slot.  */
13739     bdsize = 2;
13740   else
13741     /* No delay slot.  */
13742     bdsize = 0;
13743
13744   return bdsize;
13745 }
13746
13747 /* If PTR points to a 16-bit branch or jump with a 32-bit delay slot
13748    that doesn't fiddle with REG, then return TRUE, otherwise FALSE.  */
13749
13750 static bfd_boolean
13751 check_br16 (bfd *abfd, bfd_byte *ptr, unsigned long reg)
13752 {
13753   unsigned long opcode;
13754
13755   opcode = bfd_get_16 (abfd, ptr);
13756   if (MATCH (opcode, b_insn_16)
13757                                                 /* B16  */
13758       || (MATCH (opcode, jr_insn_16) && reg != JR16_REG (opcode))
13759                                                 /* JR16  */
13760       || (MATCH (opcode, bz_insn_16) && reg != BZ16_REG (opcode))
13761                                                 /* BEQZ16, BNEZ16  */
13762       || (MATCH (opcode, jalr_insn_16_bd32)
13763                                                 /* JALR16  */
13764           && reg != JR16_REG (opcode) && reg != RA))
13765     return TRUE;
13766
13767   return FALSE;
13768 }
13769
13770 /* If PTR points to a 32-bit branch or jump that doesn't fiddle with REG,
13771    then return TRUE, otherwise FALSE.  */
13772
13773 static bfd_boolean
13774 check_br32 (bfd *abfd, bfd_byte *ptr, unsigned long reg)
13775 {
13776   unsigned long opcode;
13777
13778   opcode = bfd_get_micromips_32 (abfd, ptr);
13779   if (MATCH (opcode, j_insn_32)
13780                                                 /* J  */
13781       || MATCH (opcode, bc_insn_32)
13782                                                 /* BC1F, BC1T, BC2F, BC2T  */
13783       || (MATCH (opcode, jal_x_insn_32_bd32) && reg != RA)
13784                                                 /* JAL, JALX  */
13785       || (MATCH (opcode, bz_insn_32) && reg != OP32_SREG (opcode))
13786                                                 /* BGEZ, BGTZ, BLEZ, BLTZ  */
13787       || (MATCH (opcode, bzal_insn_32)
13788                                                 /* BGEZAL, BLTZAL  */
13789           && reg != OP32_SREG (opcode) && reg != RA)
13790       || ((MATCH (opcode, jalr_insn_32) || MATCH (opcode, beq_insn_32))
13791                                                 /* JALR, JALR.HB, BEQ, BNE  */
13792           && reg != OP32_SREG (opcode) && reg != OP32_TREG (opcode)))
13793     return TRUE;
13794
13795   return FALSE;
13796 }
13797
13798 /* If the instruction encoding at PTR and relocations [INTERNAL_RELOCS,
13799    IRELEND) at OFFSET indicate that there must be a compact branch there,
13800    then return TRUE, otherwise FALSE.  */
13801
13802 static bfd_boolean
13803 check_relocated_bzc (bfd *abfd, const bfd_byte *ptr, bfd_vma offset,
13804                      const Elf_Internal_Rela *internal_relocs,
13805                      const Elf_Internal_Rela *irelend)
13806 {
13807   const Elf_Internal_Rela *irel;
13808   unsigned long opcode;
13809
13810   opcode = bfd_get_micromips_32 (abfd, ptr);
13811   if (find_match (opcode, bzc_insns_32) < 0)
13812     return FALSE;
13813
13814   for (irel = internal_relocs; irel < irelend; irel++)
13815     if (irel->r_offset == offset
13816         && ELF32_R_TYPE (irel->r_info) == R_MICROMIPS_PC16_S1)
13817       return TRUE;
13818
13819   return FALSE;
13820 }
13821
13822 /* Bitsize checking.  */
13823 #define IS_BITSIZE(val, N)                                              \
13824   (((((val) & ((1ULL << (N)) - 1)) ^ (1ULL << ((N) - 1)))               \
13825     - (1ULL << ((N) - 1))) == (val))
13826
13827 \f
13828 bfd_boolean
13829 _bfd_mips_elf_relax_section (bfd *abfd, asection *sec,
13830                              struct bfd_link_info *link_info,
13831                              bfd_boolean *again)
13832 {
13833   bfd_boolean insn32 = mips_elf_hash_table (link_info)->insn32;
13834   Elf_Internal_Shdr *symtab_hdr;
13835   Elf_Internal_Rela *internal_relocs;
13836   Elf_Internal_Rela *irel, *irelend;
13837   bfd_byte *contents = NULL;
13838   Elf_Internal_Sym *isymbuf = NULL;
13839
13840   /* Assume nothing changes.  */
13841   *again = FALSE;
13842
13843   /* We don't have to do anything for a relocatable link, if
13844      this section does not have relocs, or if this is not a
13845      code section.  */
13846
13847   if (bfd_link_relocatable (link_info)
13848       || (sec->flags & SEC_RELOC) == 0
13849       || sec->reloc_count == 0
13850       || (sec->flags & SEC_CODE) == 0)
13851     return TRUE;
13852
13853   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
13854
13855   /* Get a copy of the native relocations.  */
13856   internal_relocs = (_bfd_elf_link_read_relocs
13857                      (abfd, sec, NULL, (Elf_Internal_Rela *) NULL,
13858                       link_info->keep_memory));
13859   if (internal_relocs == NULL)
13860     goto error_return;
13861
13862   /* Walk through them looking for relaxing opportunities.  */
13863   irelend = internal_relocs + sec->reloc_count;
13864   for (irel = internal_relocs; irel < irelend; irel++)
13865     {
13866       unsigned long r_symndx = ELF32_R_SYM (irel->r_info);
13867       unsigned int r_type = ELF32_R_TYPE (irel->r_info);
13868       bfd_boolean target_is_micromips_code_p;
13869       unsigned long opcode;
13870       bfd_vma symval;
13871       bfd_vma pcrval;
13872       bfd_byte *ptr;
13873       int fndopc;
13874
13875       /* The number of bytes to delete for relaxation and from where
13876          to delete these bytes starting at irel->r_offset.  */
13877       int delcnt = 0;
13878       int deloff = 0;
13879
13880       /* If this isn't something that can be relaxed, then ignore
13881          this reloc.  */
13882       if (r_type != R_MICROMIPS_HI16
13883           && r_type != R_MICROMIPS_PC16_S1
13884           && r_type != R_MICROMIPS_26_S1)
13885         continue;
13886
13887       /* Get the section contents if we haven't done so already.  */
13888       if (contents == NULL)
13889         {
13890           /* Get cached copy if it exists.  */
13891           if (elf_section_data (sec)->this_hdr.contents != NULL)
13892             contents = elf_section_data (sec)->this_hdr.contents;
13893           /* Go get them off disk.  */
13894           else if (!bfd_malloc_and_get_section (abfd, sec, &contents))
13895             goto error_return;
13896         }
13897       ptr = contents + irel->r_offset;
13898
13899       /* Read this BFD's local symbols if we haven't done so already.  */
13900       if (isymbuf == NULL && symtab_hdr->sh_info != 0)
13901         {
13902           isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
13903           if (isymbuf == NULL)
13904             isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
13905                                             symtab_hdr->sh_info, 0,
13906                                             NULL, NULL, NULL);
13907           if (isymbuf == NULL)
13908             goto error_return;
13909         }
13910
13911       /* Get the value of the symbol referred to by the reloc.  */
13912       if (r_symndx < symtab_hdr->sh_info)
13913         {
13914           /* A local symbol.  */
13915           Elf_Internal_Sym *isym;
13916           asection *sym_sec;
13917
13918           isym = isymbuf + r_symndx;
13919           if (isym->st_shndx == SHN_UNDEF)
13920             sym_sec = bfd_und_section_ptr;
13921           else if (isym->st_shndx == SHN_ABS)
13922             sym_sec = bfd_abs_section_ptr;
13923           else if (isym->st_shndx == SHN_COMMON)
13924             sym_sec = bfd_com_section_ptr;
13925           else
13926             sym_sec = bfd_section_from_elf_index (abfd, isym->st_shndx);
13927           symval = (isym->st_value
13928                     + sym_sec->output_section->vma
13929                     + sym_sec->output_offset);
13930           target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (isym->st_other);
13931         }
13932       else
13933         {
13934           unsigned long indx;
13935           struct elf_link_hash_entry *h;
13936
13937           /* An external symbol.  */
13938           indx = r_symndx - symtab_hdr->sh_info;
13939           h = elf_sym_hashes (abfd)[indx];
13940           BFD_ASSERT (h != NULL);
13941
13942           if (h->root.type != bfd_link_hash_defined
13943               && h->root.type != bfd_link_hash_defweak)
13944             /* This appears to be a reference to an undefined
13945                symbol.  Just ignore it -- it will be caught by the
13946                regular reloc processing.  */
13947             continue;
13948
13949           symval = (h->root.u.def.value
13950                     + h->root.u.def.section->output_section->vma
13951                     + h->root.u.def.section->output_offset);
13952           target_is_micromips_code_p = (!h->needs_plt
13953                                         && ELF_ST_IS_MICROMIPS (h->other));
13954         }
13955
13956
13957       /* For simplicity of coding, we are going to modify the
13958          section contents, the section relocs, and the BFD symbol
13959          table.  We must tell the rest of the code not to free up this
13960          information.  It would be possible to instead create a table
13961          of changes which have to be made, as is done in coff-mips.c;
13962          that would be more work, but would require less memory when
13963          the linker is run.  */
13964
13965       /* Only 32-bit instructions relaxed.  */
13966       if (irel->r_offset + 4 > sec->size)
13967         continue;
13968
13969       opcode = bfd_get_micromips_32 (abfd, ptr);
13970
13971       /* This is the pc-relative distance from the instruction the
13972          relocation is applied to, to the symbol referred.  */
13973       pcrval = (symval
13974                 - (sec->output_section->vma + sec->output_offset)
13975                 - irel->r_offset);
13976
13977       /* R_MICROMIPS_HI16 / LUI relaxation to nil, performing relaxation
13978          of corresponding R_MICROMIPS_LO16 to R_MICROMIPS_HI0_LO16 or
13979          R_MICROMIPS_PC23_S2.  The R_MICROMIPS_PC23_S2 condition is
13980
13981            (symval % 4 == 0 && IS_BITSIZE (pcrval, 25))
13982
13983          where pcrval has first to be adjusted to apply against the LO16
13984          location (we make the adjustment later on, when we have figured
13985          out the offset).  */
13986       if (r_type == R_MICROMIPS_HI16 && MATCH (opcode, lui_insn))
13987         {
13988           bfd_boolean bzc = FALSE;
13989           unsigned long nextopc;
13990           unsigned long reg;
13991           bfd_vma offset;
13992
13993           /* Give up if the previous reloc was a HI16 against this symbol
13994              too.  */
13995           if (irel > internal_relocs
13996               && ELF32_R_TYPE (irel[-1].r_info) == R_MICROMIPS_HI16
13997               && ELF32_R_SYM (irel[-1].r_info) == r_symndx)
13998             continue;
13999
14000           /* Or if the next reloc is not a LO16 against this symbol.  */
14001           if (irel + 1 >= irelend
14002               || ELF32_R_TYPE (irel[1].r_info) != R_MICROMIPS_LO16
14003               || ELF32_R_SYM (irel[1].r_info) != r_symndx)
14004             continue;
14005
14006           /* Or if the second next reloc is a LO16 against this symbol too.  */
14007           if (irel + 2 >= irelend
14008               && ELF32_R_TYPE (irel[2].r_info) == R_MICROMIPS_LO16
14009               && ELF32_R_SYM (irel[2].r_info) == r_symndx)
14010             continue;
14011
14012           /* See if the LUI instruction *might* be in a branch delay slot.
14013              We check whether what looks like a 16-bit branch or jump is
14014              actually an immediate argument to a compact branch, and let
14015              it through if so.  */
14016           if (irel->r_offset >= 2
14017               && check_br16_dslot (abfd, ptr - 2)
14018               && !(irel->r_offset >= 4
14019                    && (bzc = check_relocated_bzc (abfd,
14020                                                   ptr - 4, irel->r_offset - 4,
14021                                                   internal_relocs, irelend))))
14022             continue;
14023           if (irel->r_offset >= 4
14024               && !bzc
14025               && check_br32_dslot (abfd, ptr - 4))
14026             continue;
14027
14028           reg = OP32_SREG (opcode);
14029
14030           /* We only relax adjacent instructions or ones separated with
14031              a branch or jump that has a delay slot.  The branch or jump
14032              must not fiddle with the register used to hold the address.
14033              Subtract 4 for the LUI itself.  */
14034           offset = irel[1].r_offset - irel[0].r_offset;
14035           switch (offset - 4)
14036             {
14037             case 0:
14038               break;
14039             case 2:
14040               if (check_br16 (abfd, ptr + 4, reg))
14041                 break;
14042               continue;
14043             case 4:
14044               if (check_br32 (abfd, ptr + 4, reg))
14045                 break;
14046               continue;
14047             default:
14048               continue;
14049             }
14050
14051           nextopc = bfd_get_micromips_32 (abfd, contents + irel[1].r_offset);
14052
14053           /* Give up unless the same register is used with both
14054              relocations.  */
14055           if (OP32_SREG (nextopc) != reg)
14056             continue;
14057
14058           /* Now adjust pcrval, subtracting the offset to the LO16 reloc
14059              and rounding up to take masking of the two LSBs into account.  */
14060           pcrval = ((pcrval - offset + 3) | 3) ^ 3;
14061
14062           /* R_MICROMIPS_LO16 relaxation to R_MICROMIPS_HI0_LO16.  */
14063           if (IS_BITSIZE (symval, 16))
14064             {
14065               /* Fix the relocation's type.  */
14066               irel[1].r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_HI0_LO16);
14067
14068               /* Instructions using R_MICROMIPS_LO16 have the base or
14069                  source register in bits 20:16.  This register becomes $0
14070                  (zero) as the result of the R_MICROMIPS_HI16 being 0.  */
14071               nextopc &= ~0x001f0000;
14072               bfd_put_16 (abfd, (nextopc >> 16) & 0xffff,
14073                           contents + irel[1].r_offset);
14074             }
14075
14076           /* R_MICROMIPS_LO16 / ADDIU relaxation to R_MICROMIPS_PC23_S2.
14077              We add 4 to take LUI deletion into account while checking
14078              the PC-relative distance.  */
14079           else if (symval % 4 == 0
14080                    && IS_BITSIZE (pcrval + 4, 25)
14081                    && MATCH (nextopc, addiu_insn)
14082                    && OP32_TREG (nextopc) == OP32_SREG (nextopc)
14083                    && OP16_VALID_REG (OP32_TREG (nextopc)))
14084             {
14085               /* Fix the relocation's type.  */
14086               irel[1].r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC23_S2);
14087
14088               /* Replace ADDIU with the ADDIUPC version.  */
14089               nextopc = (addiupc_insn.match
14090                          | ADDIUPC_REG_FIELD (OP32_TREG (nextopc)));
14091
14092               bfd_put_micromips_32 (abfd, nextopc,
14093                                     contents + irel[1].r_offset);
14094             }
14095
14096           /* Can't do anything, give up, sigh...  */
14097           else
14098             continue;
14099
14100           /* Fix the relocation's type.  */
14101           irel->r_info = ELF32_R_INFO (r_symndx, R_MIPS_NONE);
14102
14103           /* Delete the LUI instruction: 4 bytes at irel->r_offset.  */
14104           delcnt = 4;
14105           deloff = 0;
14106         }
14107
14108       /* Compact branch relaxation -- due to the multitude of macros
14109          employed by the compiler/assembler, compact branches are not
14110          always generated.  Obviously, this can/will be fixed elsewhere,
14111          but there is no drawback in double checking it here.  */
14112       else if (r_type == R_MICROMIPS_PC16_S1
14113                && irel->r_offset + 5 < sec->size
14114                && ((fndopc = find_match (opcode, bz_rs_insns_32)) >= 0
14115                    || (fndopc = find_match (opcode, bz_rt_insns_32)) >= 0)
14116                && ((!insn32
14117                     && (delcnt = MATCH (bfd_get_16 (abfd, ptr + 4),
14118                                         nop_insn_16) ? 2 : 0))
14119                    || (irel->r_offset + 7 < sec->size
14120                        && (delcnt = MATCH (bfd_get_micromips_32 (abfd,
14121                                                                  ptr + 4),
14122                                            nop_insn_32) ? 4 : 0))))
14123         {
14124           unsigned long reg;
14125
14126           reg = OP32_SREG (opcode) ? OP32_SREG (opcode) : OP32_TREG (opcode);
14127
14128           /* Replace BEQZ/BNEZ with the compact version.  */
14129           opcode = (bzc_insns_32[fndopc].match
14130                     | BZC32_REG_FIELD (reg)
14131                     | (opcode & 0xffff));               /* Addend value.  */
14132
14133           bfd_put_micromips_32 (abfd, opcode, ptr);
14134
14135           /* Delete the delay slot NOP: two or four bytes from
14136              irel->offset + 4; delcnt has already been set above.  */
14137           deloff = 4;
14138         }
14139
14140       /* R_MICROMIPS_PC16_S1 relaxation to R_MICROMIPS_PC10_S1.  We need
14141          to check the distance from the next instruction, so subtract 2.  */
14142       else if (!insn32
14143                && r_type == R_MICROMIPS_PC16_S1
14144                && IS_BITSIZE (pcrval - 2, 11)
14145                && find_match (opcode, b_insns_32) >= 0)
14146         {
14147           /* Fix the relocation's type.  */
14148           irel->r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC10_S1);
14149
14150           /* Replace the 32-bit opcode with a 16-bit opcode.  */
14151           bfd_put_16 (abfd,
14152                       (b_insn_16.match
14153                        | (opcode & 0x3ff)),             /* Addend value.  */
14154                       ptr);
14155
14156           /* Delete 2 bytes from irel->r_offset + 2.  */
14157           delcnt = 2;
14158           deloff = 2;
14159         }
14160
14161       /* R_MICROMIPS_PC16_S1 relaxation to R_MICROMIPS_PC7_S1.  We need
14162          to check the distance from the next instruction, so subtract 2.  */
14163       else if (!insn32
14164                && r_type == R_MICROMIPS_PC16_S1
14165                && IS_BITSIZE (pcrval - 2, 8)
14166                && (((fndopc = find_match (opcode, bz_rs_insns_32)) >= 0
14167                     && OP16_VALID_REG (OP32_SREG (opcode)))
14168                    || ((fndopc = find_match (opcode, bz_rt_insns_32)) >= 0
14169                        && OP16_VALID_REG (OP32_TREG (opcode)))))
14170         {
14171           unsigned long reg;
14172
14173           reg = OP32_SREG (opcode) ? OP32_SREG (opcode) : OP32_TREG (opcode);
14174
14175           /* Fix the relocation's type.  */
14176           irel->r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC7_S1);
14177
14178           /* Replace the 32-bit opcode with a 16-bit opcode.  */
14179           bfd_put_16 (abfd,
14180                       (bz_insns_16[fndopc].match
14181                        | BZ16_REG_FIELD (reg)
14182                        | (opcode & 0x7f)),              /* Addend value.  */
14183                       ptr);
14184
14185           /* Delete 2 bytes from irel->r_offset + 2.  */
14186           delcnt = 2;
14187           deloff = 2;
14188         }
14189
14190       /* R_MICROMIPS_26_S1 -- JAL to JALS relaxation for microMIPS targets.  */
14191       else if (!insn32
14192                && r_type == R_MICROMIPS_26_S1
14193                && target_is_micromips_code_p
14194                && irel->r_offset + 7 < sec->size
14195                && MATCH (opcode, jal_insn_32_bd32))
14196         {
14197           unsigned long n32opc;
14198           bfd_boolean relaxed = FALSE;
14199
14200           n32opc = bfd_get_micromips_32 (abfd, ptr + 4);
14201
14202           if (MATCH (n32opc, nop_insn_32))
14203             {
14204               /* Replace delay slot 32-bit NOP with a 16-bit NOP.  */
14205               bfd_put_16 (abfd, nop_insn_16.match, ptr + 4);
14206
14207               relaxed = TRUE;
14208             }
14209           else if (find_match (n32opc, move_insns_32) >= 0)
14210             {
14211               /* Replace delay slot 32-bit MOVE with 16-bit MOVE.  */
14212               bfd_put_16 (abfd,
14213                           (move_insn_16.match
14214                            | MOVE16_RD_FIELD (MOVE32_RD (n32opc))
14215                            | MOVE16_RS_FIELD (MOVE32_RS (n32opc))),
14216                           ptr + 4);
14217
14218               relaxed = TRUE;
14219             }
14220           /* Other 32-bit instructions relaxable to 16-bit
14221              instructions will be handled here later.  */
14222
14223           if (relaxed)
14224             {
14225               /* JAL with 32-bit delay slot that is changed to a JALS
14226                  with 16-bit delay slot.  */
14227               bfd_put_micromips_32 (abfd, jal_insn_32_bd16.match, ptr);
14228
14229               /* Delete 2 bytes from irel->r_offset + 6.  */
14230               delcnt = 2;
14231               deloff = 6;
14232             }
14233         }
14234
14235       if (delcnt != 0)
14236         {
14237           /* Note that we've changed the relocs, section contents, etc.  */
14238           elf_section_data (sec)->relocs = internal_relocs;
14239           elf_section_data (sec)->this_hdr.contents = contents;
14240           symtab_hdr->contents = (unsigned char *) isymbuf;
14241
14242           /* Delete bytes depending on the delcnt and deloff.  */
14243           if (!mips_elf_relax_delete_bytes (abfd, sec,
14244                                             irel->r_offset + deloff, delcnt))
14245             goto error_return;
14246
14247           /* That will change things, so we should relax again.
14248              Note that this is not required, and it may be slow.  */
14249           *again = TRUE;
14250         }
14251     }
14252
14253   if (isymbuf != NULL
14254       && symtab_hdr->contents != (unsigned char *) isymbuf)
14255     {
14256       if (! link_info->keep_memory)
14257         free (isymbuf);
14258       else
14259         {
14260           /* Cache the symbols for elf_link_input_bfd.  */
14261           symtab_hdr->contents = (unsigned char *) isymbuf;
14262         }
14263     }
14264
14265   if (contents != NULL
14266       && elf_section_data (sec)->this_hdr.contents != contents)
14267     {
14268       if (! link_info->keep_memory)
14269         free (contents);
14270       else
14271         {
14272           /* Cache the section contents for elf_link_input_bfd.  */
14273           elf_section_data (sec)->this_hdr.contents = contents;
14274         }
14275     }
14276
14277   if (internal_relocs != NULL
14278       && elf_section_data (sec)->relocs != internal_relocs)
14279     free (internal_relocs);
14280
14281   return TRUE;
14282
14283  error_return:
14284   if (isymbuf != NULL
14285       && symtab_hdr->contents != (unsigned char *) isymbuf)
14286     free (isymbuf);
14287   if (contents != NULL
14288       && elf_section_data (sec)->this_hdr.contents != contents)
14289     free (contents);
14290   if (internal_relocs != NULL
14291       && elf_section_data (sec)->relocs != internal_relocs)
14292     free (internal_relocs);
14293
14294   return FALSE;
14295 }
14296 \f
14297 /* Create a MIPS ELF linker hash table.  */
14298
14299 struct bfd_link_hash_table *
14300 _bfd_mips_elf_link_hash_table_create (bfd *abfd)
14301 {
14302   struct mips_elf_link_hash_table *ret;
14303   bfd_size_type amt = sizeof (struct mips_elf_link_hash_table);
14304
14305   ret = bfd_zmalloc (amt);
14306   if (ret == NULL)
14307     return NULL;
14308
14309   if (!_bfd_elf_link_hash_table_init (&ret->root, abfd,
14310                                       mips_elf_link_hash_newfunc,
14311                                       sizeof (struct mips_elf_link_hash_entry),
14312                                       MIPS_ELF_DATA))
14313     {
14314       free (ret);
14315       return NULL;
14316     }
14317   ret->root.init_plt_refcount.plist = NULL;
14318   ret->root.init_plt_offset.plist = NULL;
14319
14320   return &ret->root.root;
14321 }
14322
14323 /* Likewise, but indicate that the target is VxWorks.  */
14324
14325 struct bfd_link_hash_table *
14326 _bfd_mips_vxworks_link_hash_table_create (bfd *abfd)
14327 {
14328   struct bfd_link_hash_table *ret;
14329
14330   ret = _bfd_mips_elf_link_hash_table_create (abfd);
14331   if (ret)
14332     {
14333       struct mips_elf_link_hash_table *htab;
14334
14335       htab = (struct mips_elf_link_hash_table *) ret;
14336       htab->use_plts_and_copy_relocs = TRUE;
14337       htab->is_vxworks = TRUE;
14338     }
14339   return ret;
14340 }
14341
14342 /* A function that the linker calls if we are allowed to use PLTs
14343    and copy relocs.  */
14344
14345 void
14346 _bfd_mips_elf_use_plts_and_copy_relocs (struct bfd_link_info *info)
14347 {
14348   mips_elf_hash_table (info)->use_plts_and_copy_relocs = TRUE;
14349 }
14350
14351 /* A function that the linker calls to select between all or only
14352    32-bit microMIPS instructions, and between making or ignoring
14353    branch relocation checks for invalid transitions between ISA modes.
14354    Also record whether we have been configured for a GNU target.  */
14355
14356 void
14357 _bfd_mips_elf_linker_flags (struct bfd_link_info *info, bfd_boolean insn32,
14358                             bfd_boolean ignore_branch_isa,
14359                             bfd_boolean gnu_target)
14360 {
14361   mips_elf_hash_table (info)->insn32 = insn32;
14362   mips_elf_hash_table (info)->ignore_branch_isa = ignore_branch_isa;
14363   mips_elf_hash_table (info)->gnu_target = gnu_target;
14364 }
14365
14366 /* A function that the linker calls to enable use of compact branches in
14367    linker generated code for MIPSR6.  */
14368
14369 void
14370 _bfd_mips_elf_compact_branches (struct bfd_link_info *info, bfd_boolean on)
14371 {
14372   mips_elf_hash_table (info)->compact_branches = on;
14373 }
14374
14375 \f
14376 /* Structure for saying that BFD machine EXTENSION extends BASE.  */
14377
14378 struct mips_mach_extension
14379 {
14380   unsigned long extension, base;
14381 };
14382
14383
14384 /* An array describing how BFD machines relate to one another.  The entries
14385    are ordered topologically with MIPS I extensions listed last.  */
14386
14387 static const struct mips_mach_extension mips_mach_extensions[] =
14388 {
14389   /* MIPS64r2 extensions.  */
14390   { bfd_mach_mips_octeon3, bfd_mach_mips_octeon2 },
14391   { bfd_mach_mips_octeon2, bfd_mach_mips_octeonp },
14392   { bfd_mach_mips_octeonp, bfd_mach_mips_octeon },
14393   { bfd_mach_mips_octeon, bfd_mach_mipsisa64r2 },
14394   { bfd_mach_mips_gs264e, bfd_mach_mips_gs464e },
14395   { bfd_mach_mips_gs464e, bfd_mach_mips_gs464 },
14396   { bfd_mach_mips_gs464, bfd_mach_mipsisa64r2 },
14397
14398   /* MIPS64 extensions.  */
14399   { bfd_mach_mipsisa64r2, bfd_mach_mipsisa64 },
14400   { bfd_mach_mips_sb1, bfd_mach_mipsisa64 },
14401   { bfd_mach_mips_xlr, bfd_mach_mipsisa64 },
14402
14403   /* MIPS V extensions.  */
14404   { bfd_mach_mipsisa64, bfd_mach_mips5 },
14405
14406   /* R10000 extensions.  */
14407   { bfd_mach_mips12000, bfd_mach_mips10000 },
14408   { bfd_mach_mips14000, bfd_mach_mips10000 },
14409   { bfd_mach_mips16000, bfd_mach_mips10000 },
14410
14411   /* R5000 extensions.  Note: the vr5500 ISA is an extension of the core
14412      vr5400 ISA, but doesn't include the multimedia stuff.  It seems
14413      better to allow vr5400 and vr5500 code to be merged anyway, since
14414      many libraries will just use the core ISA.  Perhaps we could add
14415      some sort of ASE flag if this ever proves a problem.  */
14416   { bfd_mach_mips5500, bfd_mach_mips5400 },
14417   { bfd_mach_mips5400, bfd_mach_mips5000 },
14418
14419   /* MIPS IV extensions.  */
14420   { bfd_mach_mips5, bfd_mach_mips8000 },
14421   { bfd_mach_mips10000, bfd_mach_mips8000 },
14422   { bfd_mach_mips5000, bfd_mach_mips8000 },
14423   { bfd_mach_mips7000, bfd_mach_mips8000 },
14424   { bfd_mach_mips9000, bfd_mach_mips8000 },
14425
14426   /* VR4100 extensions.  */
14427   { bfd_mach_mips4120, bfd_mach_mips4100 },
14428   { bfd_mach_mips4111, bfd_mach_mips4100 },
14429
14430   /* MIPS III extensions.  */
14431   { bfd_mach_mips_loongson_2e, bfd_mach_mips4000 },
14432   { bfd_mach_mips_loongson_2f, bfd_mach_mips4000 },
14433   { bfd_mach_mips8000, bfd_mach_mips4000 },
14434   { bfd_mach_mips4650, bfd_mach_mips4000 },
14435   { bfd_mach_mips4600, bfd_mach_mips4000 },
14436   { bfd_mach_mips4400, bfd_mach_mips4000 },
14437   { bfd_mach_mips4300, bfd_mach_mips4000 },
14438   { bfd_mach_mips4100, bfd_mach_mips4000 },
14439   { bfd_mach_mips5900, bfd_mach_mips4000 },
14440
14441   /* MIPS32r3 extensions.  */
14442   { bfd_mach_mips_interaptiv_mr2, bfd_mach_mipsisa32r3 },
14443
14444   /* MIPS32r2 extensions.  */
14445   { bfd_mach_mipsisa32r3, bfd_mach_mipsisa32r2 },
14446
14447   /* MIPS32 extensions.  */
14448   { bfd_mach_mipsisa32r2, bfd_mach_mipsisa32 },
14449
14450   /* MIPS II extensions.  */
14451   { bfd_mach_mips4000, bfd_mach_mips6000 },
14452   { bfd_mach_mipsisa32, bfd_mach_mips6000 },
14453   { bfd_mach_mips4010, bfd_mach_mips6000 },
14454
14455   /* MIPS I extensions.  */
14456   { bfd_mach_mips6000, bfd_mach_mips3000 },
14457   { bfd_mach_mips3900, bfd_mach_mips3000 }
14458 };
14459
14460 /* Return true if bfd machine EXTENSION is an extension of machine BASE.  */
14461
14462 static bfd_boolean
14463 mips_mach_extends_p (unsigned long base, unsigned long extension)
14464 {
14465   size_t i;
14466
14467   if (extension == base)
14468     return TRUE;
14469
14470   if (base == bfd_mach_mipsisa32
14471       && mips_mach_extends_p (bfd_mach_mipsisa64, extension))
14472     return TRUE;
14473
14474   if (base == bfd_mach_mipsisa32r2
14475       && mips_mach_extends_p (bfd_mach_mipsisa64r2, extension))
14476     return TRUE;
14477
14478   for (i = 0; i < ARRAY_SIZE (mips_mach_extensions); i++)
14479     if (extension == mips_mach_extensions[i].extension)
14480       {
14481         extension = mips_mach_extensions[i].base;
14482         if (extension == base)
14483           return TRUE;
14484       }
14485
14486   return FALSE;
14487 }
14488
14489 /* Return the BFD mach for each .MIPS.abiflags ISA Extension.  */
14490
14491 static unsigned long
14492 bfd_mips_isa_ext_mach (unsigned int isa_ext)
14493 {
14494   switch (isa_ext)
14495     {
14496     case AFL_EXT_3900:        return bfd_mach_mips3900;
14497     case AFL_EXT_4010:        return bfd_mach_mips4010;
14498     case AFL_EXT_4100:        return bfd_mach_mips4100;
14499     case AFL_EXT_4111:        return bfd_mach_mips4111;
14500     case AFL_EXT_4120:        return bfd_mach_mips4120;
14501     case AFL_EXT_4650:        return bfd_mach_mips4650;
14502     case AFL_EXT_5400:        return bfd_mach_mips5400;
14503     case AFL_EXT_5500:        return bfd_mach_mips5500;
14504     case AFL_EXT_5900:        return bfd_mach_mips5900;
14505     case AFL_EXT_10000:       return bfd_mach_mips10000;
14506     case AFL_EXT_LOONGSON_2E: return bfd_mach_mips_loongson_2e;
14507     case AFL_EXT_LOONGSON_2F: return bfd_mach_mips_loongson_2f;
14508     case AFL_EXT_SB1:         return bfd_mach_mips_sb1;
14509     case AFL_EXT_OCTEON:      return bfd_mach_mips_octeon;
14510     case AFL_EXT_OCTEONP:     return bfd_mach_mips_octeonp;
14511     case AFL_EXT_OCTEON2:     return bfd_mach_mips_octeon2;
14512     case AFL_EXT_XLR:         return bfd_mach_mips_xlr;
14513     default:                  return bfd_mach_mips3000;
14514     }
14515 }
14516
14517 /* Return the .MIPS.abiflags value representing each ISA Extension.  */
14518
14519 unsigned int
14520 bfd_mips_isa_ext (bfd *abfd)
14521 {
14522   switch (bfd_get_mach (abfd))
14523     {
14524     case bfd_mach_mips3900:         return AFL_EXT_3900;
14525     case bfd_mach_mips4010:         return AFL_EXT_4010;
14526     case bfd_mach_mips4100:         return AFL_EXT_4100;
14527     case bfd_mach_mips4111:         return AFL_EXT_4111;
14528     case bfd_mach_mips4120:         return AFL_EXT_4120;
14529     case bfd_mach_mips4650:         return AFL_EXT_4650;
14530     case bfd_mach_mips5400:         return AFL_EXT_5400;
14531     case bfd_mach_mips5500:         return AFL_EXT_5500;
14532     case bfd_mach_mips5900:         return AFL_EXT_5900;
14533     case bfd_mach_mips10000:        return AFL_EXT_10000;
14534     case bfd_mach_mips_loongson_2e: return AFL_EXT_LOONGSON_2E;
14535     case bfd_mach_mips_loongson_2f: return AFL_EXT_LOONGSON_2F;
14536     case bfd_mach_mips_sb1:         return AFL_EXT_SB1;
14537     case bfd_mach_mips_octeon:      return AFL_EXT_OCTEON;
14538     case bfd_mach_mips_octeonp:     return AFL_EXT_OCTEONP;
14539     case bfd_mach_mips_octeon3:     return AFL_EXT_OCTEON3;
14540     case bfd_mach_mips_octeon2:     return AFL_EXT_OCTEON2;
14541     case bfd_mach_mips_xlr:         return AFL_EXT_XLR;
14542     case bfd_mach_mips_interaptiv_mr2:
14543       return AFL_EXT_INTERAPTIV_MR2;
14544     default:                        return 0;
14545     }
14546 }
14547
14548 /* Encode ISA level and revision as a single value.  */
14549 #define LEVEL_REV(LEV,REV) ((LEV) << 3 | (REV))
14550
14551 /* Decode a single value into level and revision.  */
14552 #define ISA_LEVEL(LEVREV)  ((LEVREV) >> 3)
14553 #define ISA_REV(LEVREV)    ((LEVREV) & 0x7)
14554
14555 /* Update the isa_level, isa_rev, isa_ext fields of abiflags.  */
14556
14557 static void
14558 update_mips_abiflags_isa (bfd *abfd, Elf_Internal_ABIFlags_v0 *abiflags)
14559 {
14560   int new_isa = 0;
14561   switch (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH)
14562     {
14563     case E_MIPS_ARCH_1:    new_isa = LEVEL_REV (1, 0); break;
14564     case E_MIPS_ARCH_2:    new_isa = LEVEL_REV (2, 0); break;
14565     case E_MIPS_ARCH_3:    new_isa = LEVEL_REV (3, 0); break;
14566     case E_MIPS_ARCH_4:    new_isa = LEVEL_REV (4, 0); break;
14567     case E_MIPS_ARCH_5:    new_isa = LEVEL_REV (5, 0); break;
14568     case E_MIPS_ARCH_32:   new_isa = LEVEL_REV (32, 1); break;
14569     case E_MIPS_ARCH_32R2: new_isa = LEVEL_REV (32, 2); break;
14570     case E_MIPS_ARCH_32R6: new_isa = LEVEL_REV (32, 6); break;
14571     case E_MIPS_ARCH_64:   new_isa = LEVEL_REV (64, 1); break;
14572     case E_MIPS_ARCH_64R2: new_isa = LEVEL_REV (64, 2); break;
14573     case E_MIPS_ARCH_64R6: new_isa = LEVEL_REV (64, 6); break;
14574     default:
14575       _bfd_error_handler
14576         /* xgettext:c-format */
14577         (_("%pB: unknown architecture %s"),
14578          abfd, bfd_printable_name (abfd));
14579     }
14580
14581   if (new_isa > LEVEL_REV (abiflags->isa_level, abiflags->isa_rev))
14582     {
14583       abiflags->isa_level = ISA_LEVEL (new_isa);
14584       abiflags->isa_rev = ISA_REV (new_isa);
14585     }
14586
14587   /* Update the isa_ext if ABFD describes a further extension.  */
14588   if (mips_mach_extends_p (bfd_mips_isa_ext_mach (abiflags->isa_ext),
14589                            bfd_get_mach (abfd)))
14590     abiflags->isa_ext = bfd_mips_isa_ext (abfd);
14591 }
14592
14593 /* Return true if the given ELF header flags describe a 32-bit binary.  */
14594
14595 static bfd_boolean
14596 mips_32bit_flags_p (flagword flags)
14597 {
14598   return ((flags & EF_MIPS_32BITMODE) != 0
14599           || (flags & EF_MIPS_ABI) == E_MIPS_ABI_O32
14600           || (flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32
14601           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1
14602           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2
14603           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32
14604           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2
14605           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R6);
14606 }
14607
14608 /* Infer the content of the ABI flags based on the elf header.  */
14609
14610 static void
14611 infer_mips_abiflags (bfd *abfd, Elf_Internal_ABIFlags_v0* abiflags)
14612 {
14613   obj_attribute *in_attr;
14614
14615   memset (abiflags, 0, sizeof (Elf_Internal_ABIFlags_v0));
14616   update_mips_abiflags_isa (abfd, abiflags);
14617
14618   if (mips_32bit_flags_p (elf_elfheader (abfd)->e_flags))
14619     abiflags->gpr_size = AFL_REG_32;
14620   else
14621     abiflags->gpr_size = AFL_REG_64;
14622
14623   abiflags->cpr1_size = AFL_REG_NONE;
14624
14625   in_attr = elf_known_obj_attributes (abfd)[OBJ_ATTR_GNU];
14626   abiflags->fp_abi = in_attr[Tag_GNU_MIPS_ABI_FP].i;
14627
14628   if (abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_SINGLE
14629       || abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_XX
14630       || (abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_DOUBLE
14631           && abiflags->gpr_size == AFL_REG_32))
14632     abiflags->cpr1_size = AFL_REG_32;
14633   else if (abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_DOUBLE
14634            || abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_64
14635            || abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_64A)
14636     abiflags->cpr1_size = AFL_REG_64;
14637
14638   abiflags->cpr2_size = AFL_REG_NONE;
14639
14640   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MDMX)
14641     abiflags->ases |= AFL_ASE_MDMX;
14642   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_M16)
14643     abiflags->ases |= AFL_ASE_MIPS16;
14644   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MICROMIPS)
14645     abiflags->ases |= AFL_ASE_MICROMIPS;
14646
14647   if (abiflags->fp_abi != Val_GNU_MIPS_ABI_FP_ANY
14648       && abiflags->fp_abi != Val_GNU_MIPS_ABI_FP_SOFT
14649       && abiflags->fp_abi != Val_GNU_MIPS_ABI_FP_64A
14650       && abiflags->isa_level >= 32
14651       && abiflags->ases != AFL_ASE_LOONGSON_EXT)
14652     abiflags->flags1 |= AFL_FLAGS1_ODDSPREG;
14653 }
14654
14655 /* We need to use a special link routine to handle the .reginfo and
14656    the .mdebug sections.  We need to merge all instances of these
14657    sections together, not write them all out sequentially.  */
14658
14659 bfd_boolean
14660 _bfd_mips_elf_final_link (bfd *abfd, struct bfd_link_info *info)
14661 {
14662   asection *o;
14663   struct bfd_link_order *p;
14664   asection *reginfo_sec, *mdebug_sec, *gptab_data_sec, *gptab_bss_sec;
14665   asection *rtproc_sec, *abiflags_sec;
14666   Elf32_RegInfo reginfo;
14667   struct ecoff_debug_info debug;
14668   struct mips_htab_traverse_info hti;
14669   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
14670   const struct ecoff_debug_swap *swap = bed->elf_backend_ecoff_debug_swap;
14671   HDRR *symhdr = &debug.symbolic_header;
14672   void *mdebug_handle = NULL;
14673   asection *s;
14674   EXTR esym;
14675   unsigned int i;
14676   bfd_size_type amt;
14677   struct mips_elf_link_hash_table *htab;
14678
14679   static const char * const secname[] =
14680   {
14681     ".text", ".init", ".fini", ".data",
14682     ".rodata", ".sdata", ".sbss", ".bss"
14683   };
14684   static const int sc[] =
14685   {
14686     scText, scInit, scFini, scData,
14687     scRData, scSData, scSBss, scBss
14688   };
14689
14690   htab = mips_elf_hash_table (info);
14691   BFD_ASSERT (htab != NULL);
14692
14693   /* Sort the dynamic symbols so that those with GOT entries come after
14694      those without.  */
14695   if (!mips_elf_sort_hash_table (abfd, info))
14696     return FALSE;
14697
14698   /* Create any scheduled LA25 stubs.  */
14699   hti.info = info;
14700   hti.output_bfd = abfd;
14701   hti.error = FALSE;
14702   htab_traverse (htab->la25_stubs, mips_elf_create_la25_stub, &hti);
14703   if (hti.error)
14704     return FALSE;
14705
14706   /* Get a value for the GP register.  */
14707   if (elf_gp (abfd) == 0)
14708     {
14709       struct bfd_link_hash_entry *h;
14710
14711       h = bfd_link_hash_lookup (info->hash, "_gp", FALSE, FALSE, TRUE);
14712       if (h != NULL && h->type == bfd_link_hash_defined)
14713         elf_gp (abfd) = (h->u.def.value
14714                          + h->u.def.section->output_section->vma
14715                          + h->u.def.section->output_offset);
14716       else if (htab->is_vxworks
14717                && (h = bfd_link_hash_lookup (info->hash,
14718                                              "_GLOBAL_OFFSET_TABLE_",
14719                                              FALSE, FALSE, TRUE))
14720                && h->type == bfd_link_hash_defined)
14721         elf_gp (abfd) = (h->u.def.section->output_section->vma
14722                          + h->u.def.section->output_offset
14723                          + h->u.def.value);
14724       else if (bfd_link_relocatable (info))
14725         {
14726           bfd_vma lo = MINUS_ONE;
14727
14728           /* Find the GP-relative section with the lowest offset.  */
14729           for (o = abfd->sections; o != NULL; o = o->next)
14730             if (o->vma < lo
14731                 && (elf_section_data (o)->this_hdr.sh_flags & SHF_MIPS_GPREL))
14732               lo = o->vma;
14733
14734           /* And calculate GP relative to that.  */
14735           elf_gp (abfd) = lo + ELF_MIPS_GP_OFFSET (info);
14736         }
14737       else
14738         {
14739           /* If the relocate_section function needs to do a reloc
14740              involving the GP value, it should make a reloc_dangerous
14741              callback to warn that GP is not defined.  */
14742         }
14743     }
14744
14745   /* Go through the sections and collect the .reginfo and .mdebug
14746      information.  */
14747   abiflags_sec = NULL;
14748   reginfo_sec = NULL;
14749   mdebug_sec = NULL;
14750   gptab_data_sec = NULL;
14751   gptab_bss_sec = NULL;
14752   for (o = abfd->sections; o != NULL; o = o->next)
14753     {
14754       if (strcmp (o->name, ".MIPS.abiflags") == 0)
14755         {
14756           /* We have found the .MIPS.abiflags section in the output file.
14757              Look through all the link_orders comprising it and remove them.
14758              The data is merged in _bfd_mips_elf_merge_private_bfd_data.  */
14759           for (p = o->map_head.link_order; p != NULL; p = p->next)
14760             {
14761               asection *input_section;
14762
14763               if (p->type != bfd_indirect_link_order)
14764                 {
14765                   if (p->type == bfd_data_link_order)
14766                     continue;
14767                   abort ();
14768                 }
14769
14770               input_section = p->u.indirect.section;
14771
14772               /* Hack: reset the SEC_HAS_CONTENTS flag so that
14773                  elf_link_input_bfd ignores this section.  */
14774               input_section->flags &= ~SEC_HAS_CONTENTS;
14775             }
14776
14777           /* Size has been set in _bfd_mips_elf_always_size_sections.  */
14778           BFD_ASSERT(o->size == sizeof (Elf_External_ABIFlags_v0));
14779
14780           /* Skip this section later on (I don't think this currently
14781              matters, but someday it might).  */
14782           o->map_head.link_order = NULL;
14783
14784           abiflags_sec = o;
14785         }
14786
14787       if (strcmp (o->name, ".reginfo") == 0)
14788         {
14789           memset (&reginfo, 0, sizeof reginfo);
14790
14791           /* We have found the .reginfo section in the output file.
14792              Look through all the link_orders comprising it and merge
14793              the information together.  */
14794           for (p = o->map_head.link_order; p != NULL; p = p->next)
14795             {
14796               asection *input_section;
14797               bfd *input_bfd;
14798               Elf32_External_RegInfo ext;
14799               Elf32_RegInfo sub;
14800               bfd_size_type sz;
14801
14802               if (p->type != bfd_indirect_link_order)
14803                 {
14804                   if (p->type == bfd_data_link_order)
14805                     continue;
14806                   abort ();
14807                 }
14808
14809               input_section = p->u.indirect.section;
14810               input_bfd = input_section->owner;
14811
14812               sz = (input_section->size < sizeof (ext)
14813                     ? input_section->size : sizeof (ext));
14814               memset (&ext, 0, sizeof (ext));
14815               if (! bfd_get_section_contents (input_bfd, input_section,
14816                                               &ext, 0, sz))
14817                 return FALSE;
14818
14819               bfd_mips_elf32_swap_reginfo_in (input_bfd, &ext, &sub);
14820
14821               reginfo.ri_gprmask |= sub.ri_gprmask;
14822               reginfo.ri_cprmask[0] |= sub.ri_cprmask[0];
14823               reginfo.ri_cprmask[1] |= sub.ri_cprmask[1];
14824               reginfo.ri_cprmask[2] |= sub.ri_cprmask[2];
14825               reginfo.ri_cprmask[3] |= sub.ri_cprmask[3];
14826
14827               /* ri_gp_value is set by the function
14828                  `_bfd_mips_elf_section_processing' when the section is
14829                  finally written out.  */
14830
14831               /* Hack: reset the SEC_HAS_CONTENTS flag so that
14832                  elf_link_input_bfd ignores this section.  */
14833               input_section->flags &= ~SEC_HAS_CONTENTS;
14834             }
14835
14836           /* Size has been set in _bfd_mips_elf_always_size_sections.  */
14837           BFD_ASSERT(o->size == sizeof (Elf32_External_RegInfo));
14838
14839           /* Skip this section later on (I don't think this currently
14840              matters, but someday it might).  */
14841           o->map_head.link_order = NULL;
14842
14843           reginfo_sec = o;
14844         }
14845
14846       if (strcmp (o->name, ".mdebug") == 0)
14847         {
14848           struct extsym_info einfo;
14849           bfd_vma last;
14850
14851           /* We have found the .mdebug section in the output file.
14852              Look through all the link_orders comprising it and merge
14853              the information together.  */
14854           symhdr->magic = swap->sym_magic;
14855           /* FIXME: What should the version stamp be?  */
14856           symhdr->vstamp = 0;
14857           symhdr->ilineMax = 0;
14858           symhdr->cbLine = 0;
14859           symhdr->idnMax = 0;
14860           symhdr->ipdMax = 0;
14861           symhdr->isymMax = 0;
14862           symhdr->ioptMax = 0;
14863           symhdr->iauxMax = 0;
14864           symhdr->issMax = 0;
14865           symhdr->issExtMax = 0;
14866           symhdr->ifdMax = 0;
14867           symhdr->crfd = 0;
14868           symhdr->iextMax = 0;
14869
14870           /* We accumulate the debugging information itself in the
14871              debug_info structure.  */
14872           debug.line = NULL;
14873           debug.external_dnr = NULL;
14874           debug.external_pdr = NULL;
14875           debug.external_sym = NULL;
14876           debug.external_opt = NULL;
14877           debug.external_aux = NULL;
14878           debug.ss = NULL;
14879           debug.ssext = debug.ssext_end = NULL;
14880           debug.external_fdr = NULL;
14881           debug.external_rfd = NULL;
14882           debug.external_ext = debug.external_ext_end = NULL;
14883
14884           mdebug_handle = bfd_ecoff_debug_init (abfd, &debug, swap, info);
14885           if (mdebug_handle == NULL)
14886             return FALSE;
14887
14888           esym.jmptbl = 0;
14889           esym.cobol_main = 0;
14890           esym.weakext = 0;
14891           esym.reserved = 0;
14892           esym.ifd = ifdNil;
14893           esym.asym.iss = issNil;
14894           esym.asym.st = stLocal;
14895           esym.asym.reserved = 0;
14896           esym.asym.index = indexNil;
14897           last = 0;
14898           for (i = 0; i < sizeof (secname) / sizeof (secname[0]); i++)
14899             {
14900               esym.asym.sc = sc[i];
14901               s = bfd_get_section_by_name (abfd, secname[i]);
14902               if (s != NULL)
14903                 {
14904                   esym.asym.value = s->vma;
14905                   last = s->vma + s->size;
14906                 }
14907               else
14908                 esym.asym.value = last;
14909               if (!bfd_ecoff_debug_one_external (abfd, &debug, swap,
14910                                                  secname[i], &esym))
14911                 return FALSE;
14912             }
14913
14914           for (p = o->map_head.link_order; p != NULL; p = p->next)
14915             {
14916               asection *input_section;
14917               bfd *input_bfd;
14918               const struct ecoff_debug_swap *input_swap;
14919               struct ecoff_debug_info input_debug;
14920               char *eraw_src;
14921               char *eraw_end;
14922
14923               if (p->type != bfd_indirect_link_order)
14924                 {
14925                   if (p->type == bfd_data_link_order)
14926                     continue;
14927                   abort ();
14928                 }
14929
14930               input_section = p->u.indirect.section;
14931               input_bfd = input_section->owner;
14932
14933               if (!is_mips_elf (input_bfd))
14934                 {
14935                   /* I don't know what a non MIPS ELF bfd would be
14936                      doing with a .mdebug section, but I don't really
14937                      want to deal with it.  */
14938                   continue;
14939                 }
14940
14941               input_swap = (get_elf_backend_data (input_bfd)
14942                             ->elf_backend_ecoff_debug_swap);
14943
14944               BFD_ASSERT (p->size == input_section->size);
14945
14946               /* The ECOFF linking code expects that we have already
14947                  read in the debugging information and set up an
14948                  ecoff_debug_info structure, so we do that now.  */
14949               if (! _bfd_mips_elf_read_ecoff_info (input_bfd, input_section,
14950                                                    &input_debug))
14951                 return FALSE;
14952
14953               if (! (bfd_ecoff_debug_accumulate
14954                      (mdebug_handle, abfd, &debug, swap, input_bfd,
14955                       &input_debug, input_swap, info)))
14956                 return FALSE;
14957
14958               /* Loop through the external symbols.  For each one with
14959                  interesting information, try to find the symbol in
14960                  the linker global hash table and save the information
14961                  for the output external symbols.  */
14962               eraw_src = input_debug.external_ext;
14963               eraw_end = (eraw_src
14964                           + (input_debug.symbolic_header.iextMax
14965                              * input_swap->external_ext_size));
14966               for (;
14967                    eraw_src < eraw_end;
14968                    eraw_src += input_swap->external_ext_size)
14969                 {
14970                   EXTR ext;
14971                   const char *name;
14972                   struct mips_elf_link_hash_entry *h;
14973
14974                   (*input_swap->swap_ext_in) (input_bfd, eraw_src, &ext);
14975                   if (ext.asym.sc == scNil
14976                       || ext.asym.sc == scUndefined
14977                       || ext.asym.sc == scSUndefined)
14978                     continue;
14979
14980                   name = input_debug.ssext + ext.asym.iss;
14981                   h = mips_elf_link_hash_lookup (mips_elf_hash_table (info),
14982                                                  name, FALSE, FALSE, TRUE);
14983                   if (h == NULL || h->esym.ifd != -2)
14984                     continue;
14985
14986                   if (ext.ifd != -1)
14987                     {
14988                       BFD_ASSERT (ext.ifd
14989                                   < input_debug.symbolic_header.ifdMax);
14990                       ext.ifd = input_debug.ifdmap[ext.ifd];
14991                     }
14992
14993                   h->esym = ext;
14994                 }
14995
14996               /* Free up the information we just read.  */
14997               free (input_debug.line);
14998               free (input_debug.external_dnr);
14999               free (input_debug.external_pdr);
15000               free (input_debug.external_sym);
15001               free (input_debug.external_opt);
15002               free (input_debug.external_aux);
15003               free (input_debug.ss);
15004               free (input_debug.ssext);
15005               free (input_debug.external_fdr);
15006               free (input_debug.external_rfd);
15007               free (input_debug.external_ext);
15008
15009               /* Hack: reset the SEC_HAS_CONTENTS flag so that
15010                  elf_link_input_bfd ignores this section.  */
15011               input_section->flags &= ~SEC_HAS_CONTENTS;
15012             }
15013
15014           if (SGI_COMPAT (abfd) && bfd_link_pic (info))
15015             {
15016               /* Create .rtproc section.  */
15017               rtproc_sec = bfd_get_linker_section (abfd, ".rtproc");
15018               if (rtproc_sec == NULL)
15019                 {
15020                   flagword flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY
15021                                     | SEC_LINKER_CREATED | SEC_READONLY);
15022
15023                   rtproc_sec = bfd_make_section_anyway_with_flags (abfd,
15024                                                                    ".rtproc",
15025                                                                    flags);
15026                   if (rtproc_sec == NULL
15027                       || ! bfd_set_section_alignment (abfd, rtproc_sec, 4))
15028                     return FALSE;
15029                 }
15030
15031               if (! mips_elf_create_procedure_table (mdebug_handle, abfd,
15032                                                      info, rtproc_sec,
15033                                                      &debug))
15034                 return FALSE;
15035             }
15036
15037           /* Build the external symbol information.  */
15038           einfo.abfd = abfd;
15039           einfo.info = info;
15040           einfo.debug = &debug;
15041           einfo.swap = swap;
15042           einfo.failed = FALSE;
15043           mips_elf_link_hash_traverse (mips_elf_hash_table (info),
15044                                        mips_elf_output_extsym, &einfo);
15045           if (einfo.failed)
15046             return FALSE;
15047
15048           /* Set the size of the .mdebug section.  */
15049           o->size = bfd_ecoff_debug_size (abfd, &debug, swap);
15050
15051           /* Skip this section later on (I don't think this currently
15052              matters, but someday it might).  */
15053           o->map_head.link_order = NULL;
15054
15055           mdebug_sec = o;
15056         }
15057
15058       if (CONST_STRNEQ (o->name, ".gptab."))
15059         {
15060           const char *subname;
15061           unsigned int c;
15062           Elf32_gptab *tab;
15063           Elf32_External_gptab *ext_tab;
15064           unsigned int j;
15065
15066           /* The .gptab.sdata and .gptab.sbss sections hold
15067              information describing how the small data area would
15068              change depending upon the -G switch.  These sections
15069              not used in executables files.  */
15070           if (! bfd_link_relocatable (info))
15071             {
15072               for (p = o->map_head.link_order; p != NULL; p = p->next)
15073                 {
15074                   asection *input_section;
15075
15076                   if (p->type != bfd_indirect_link_order)
15077                     {
15078                       if (p->type == bfd_data_link_order)
15079                         continue;
15080                       abort ();
15081                     }
15082
15083                   input_section = p->u.indirect.section;
15084
15085                   /* Hack: reset the SEC_HAS_CONTENTS flag so that
15086                      elf_link_input_bfd ignores this section.  */
15087                   input_section->flags &= ~SEC_HAS_CONTENTS;
15088                 }
15089
15090               /* Skip this section later on (I don't think this
15091                  currently matters, but someday it might).  */
15092               o->map_head.link_order = NULL;
15093
15094               /* Really remove the section.  */
15095               bfd_section_list_remove (abfd, o);
15096               --abfd->section_count;
15097
15098               continue;
15099             }
15100
15101           /* There is one gptab for initialized data, and one for
15102              uninitialized data.  */
15103           if (strcmp (o->name, ".gptab.sdata") == 0)
15104             gptab_data_sec = o;
15105           else if (strcmp (o->name, ".gptab.sbss") == 0)
15106             gptab_bss_sec = o;
15107           else
15108             {
15109               _bfd_error_handler
15110                 /* xgettext:c-format */
15111                 (_("%pB: illegal section name `%pA'"), abfd, o);
15112               bfd_set_error (bfd_error_nonrepresentable_section);
15113               return FALSE;
15114             }
15115
15116           /* The linker script always combines .gptab.data and
15117              .gptab.sdata into .gptab.sdata, and likewise for
15118              .gptab.bss and .gptab.sbss.  It is possible that there is
15119              no .sdata or .sbss section in the output file, in which
15120              case we must change the name of the output section.  */
15121           subname = o->name + sizeof ".gptab" - 1;
15122           if (bfd_get_section_by_name (abfd, subname) == NULL)
15123             {
15124               if (o == gptab_data_sec)
15125                 o->name = ".gptab.data";
15126               else
15127                 o->name = ".gptab.bss";
15128               subname = o->name + sizeof ".gptab" - 1;
15129               BFD_ASSERT (bfd_get_section_by_name (abfd, subname) != NULL);
15130             }
15131
15132           /* Set up the first entry.  */
15133           c = 1;
15134           amt = c * sizeof (Elf32_gptab);
15135           tab = bfd_malloc (amt);
15136           if (tab == NULL)
15137             return FALSE;
15138           tab[0].gt_header.gt_current_g_value = elf_gp_size (abfd);
15139           tab[0].gt_header.gt_unused = 0;
15140
15141           /* Combine the input sections.  */
15142           for (p = o->map_head.link_order; p != NULL; p = p->next)
15143             {
15144               asection *input_section;
15145               bfd *input_bfd;
15146               bfd_size_type size;
15147               unsigned long last;
15148               bfd_size_type gpentry;
15149
15150               if (p->type != bfd_indirect_link_order)
15151                 {
15152                   if (p->type == bfd_data_link_order)
15153                     continue;
15154                   abort ();
15155                 }
15156
15157               input_section = p->u.indirect.section;
15158               input_bfd = input_section->owner;
15159
15160               /* Combine the gptab entries for this input section one
15161                  by one.  We know that the input gptab entries are
15162                  sorted by ascending -G value.  */
15163               size = input_section->size;
15164               last = 0;
15165               for (gpentry = sizeof (Elf32_External_gptab);
15166                    gpentry < size;
15167                    gpentry += sizeof (Elf32_External_gptab))
15168                 {
15169                   Elf32_External_gptab ext_gptab;
15170                   Elf32_gptab int_gptab;
15171                   unsigned long val;
15172                   unsigned long add;
15173                   bfd_boolean exact;
15174                   unsigned int look;
15175
15176                   if (! (bfd_get_section_contents
15177                          (input_bfd, input_section, &ext_gptab, gpentry,
15178                           sizeof (Elf32_External_gptab))))
15179                     {
15180                       free (tab);
15181                       return FALSE;
15182                     }
15183
15184                   bfd_mips_elf32_swap_gptab_in (input_bfd, &ext_gptab,
15185                                                 &int_gptab);
15186                   val = int_gptab.gt_entry.gt_g_value;
15187                   add = int_gptab.gt_entry.gt_bytes - last;
15188
15189                   exact = FALSE;
15190                   for (look = 1; look < c; look++)
15191                     {
15192                       if (tab[look].gt_entry.gt_g_value >= val)
15193                         tab[look].gt_entry.gt_bytes += add;
15194
15195                       if (tab[look].gt_entry.gt_g_value == val)
15196                         exact = TRUE;
15197                     }
15198
15199                   if (! exact)
15200                     {
15201                       Elf32_gptab *new_tab;
15202                       unsigned int max;
15203
15204                       /* We need a new table entry.  */
15205                       amt = (bfd_size_type) (c + 1) * sizeof (Elf32_gptab);
15206                       new_tab = bfd_realloc (tab, amt);
15207                       if (new_tab == NULL)
15208                         {
15209                           free (tab);
15210                           return FALSE;
15211                         }
15212                       tab = new_tab;
15213                       tab[c].gt_entry.gt_g_value = val;
15214                       tab[c].gt_entry.gt_bytes = add;
15215
15216                       /* Merge in the size for the next smallest -G
15217                          value, since that will be implied by this new
15218                          value.  */
15219                       max = 0;
15220                       for (look = 1; look < c; look++)
15221                         {
15222                           if (tab[look].gt_entry.gt_g_value < val
15223                               && (max == 0
15224                                   || (tab[look].gt_entry.gt_g_value
15225                                       > tab[max].gt_entry.gt_g_value)))
15226                             max = look;
15227                         }
15228                       if (max != 0)
15229                         tab[c].gt_entry.gt_bytes +=
15230                           tab[max].gt_entry.gt_bytes;
15231
15232                       ++c;
15233                     }
15234
15235                   last = int_gptab.gt_entry.gt_bytes;
15236                 }
15237
15238               /* Hack: reset the SEC_HAS_CONTENTS flag so that
15239                  elf_link_input_bfd ignores this section.  */
15240               input_section->flags &= ~SEC_HAS_CONTENTS;
15241             }
15242
15243           /* The table must be sorted by -G value.  */
15244           if (c > 2)
15245             qsort (tab + 1, c - 1, sizeof (tab[0]), gptab_compare);
15246
15247           /* Swap out the table.  */
15248           amt = (bfd_size_type) c * sizeof (Elf32_External_gptab);
15249           ext_tab = bfd_alloc (abfd, amt);
15250           if (ext_tab == NULL)
15251             {
15252               free (tab);
15253               return FALSE;
15254             }
15255
15256           for (j = 0; j < c; j++)
15257             bfd_mips_elf32_swap_gptab_out (abfd, tab + j, ext_tab + j);
15258           free (tab);
15259
15260           o->size = c * sizeof (Elf32_External_gptab);
15261           o->contents = (bfd_byte *) ext_tab;
15262
15263           /* Skip this section later on (I don't think this currently
15264              matters, but someday it might).  */
15265           o->map_head.link_order = NULL;
15266         }
15267     }
15268
15269   /* Invoke the regular ELF backend linker to do all the work.  */
15270   if (!bfd_elf_final_link (abfd, info))
15271     return FALSE;
15272
15273   /* Now write out the computed sections.  */
15274
15275   if (abiflags_sec != NULL)
15276     {
15277       Elf_External_ABIFlags_v0 ext;
15278       Elf_Internal_ABIFlags_v0 *abiflags;
15279
15280       abiflags = &mips_elf_tdata (abfd)->abiflags;
15281
15282       /* Set up the abiflags if no valid input sections were found.  */
15283       if (!mips_elf_tdata (abfd)->abiflags_valid)
15284         {
15285           infer_mips_abiflags (abfd, abiflags);
15286           mips_elf_tdata (abfd)->abiflags_valid = TRUE;
15287         }
15288       bfd_mips_elf_swap_abiflags_v0_out (abfd, abiflags, &ext);
15289       if (! bfd_set_section_contents (abfd, abiflags_sec, &ext, 0, sizeof ext))
15290         return FALSE;
15291     }
15292
15293   if (reginfo_sec != NULL)
15294     {
15295       Elf32_External_RegInfo ext;
15296
15297       bfd_mips_elf32_swap_reginfo_out (abfd, &reginfo, &ext);
15298       if (! bfd_set_section_contents (abfd, reginfo_sec, &ext, 0, sizeof ext))
15299         return FALSE;
15300     }
15301
15302   if (mdebug_sec != NULL)
15303     {
15304       BFD_ASSERT (abfd->output_has_begun);
15305       if (! bfd_ecoff_write_accumulated_debug (mdebug_handle, abfd, &debug,
15306                                                swap, info,
15307                                                mdebug_sec->filepos))
15308         return FALSE;
15309
15310       bfd_ecoff_debug_free (mdebug_handle, abfd, &debug, swap, info);
15311     }
15312
15313   if (gptab_data_sec != NULL)
15314     {
15315       if (! bfd_set_section_contents (abfd, gptab_data_sec,
15316                                       gptab_data_sec->contents,
15317                                       0, gptab_data_sec->size))
15318         return FALSE;
15319     }
15320
15321   if (gptab_bss_sec != NULL)
15322     {
15323       if (! bfd_set_section_contents (abfd, gptab_bss_sec,
15324                                       gptab_bss_sec->contents,
15325                                       0, gptab_bss_sec->size))
15326         return FALSE;
15327     }
15328
15329   if (SGI_COMPAT (abfd))
15330     {
15331       rtproc_sec = bfd_get_section_by_name (abfd, ".rtproc");
15332       if (rtproc_sec != NULL)
15333         {
15334           if (! bfd_set_section_contents (abfd, rtproc_sec,
15335                                           rtproc_sec->contents,
15336                                           0, rtproc_sec->size))
15337             return FALSE;
15338         }
15339     }
15340
15341   return TRUE;
15342 }
15343 \f
15344 /* Merge object file header flags from IBFD into OBFD.  Raise an error
15345    if there are conflicting settings.  */
15346
15347 static bfd_boolean
15348 mips_elf_merge_obj_e_flags (bfd *ibfd, struct bfd_link_info *info)
15349 {
15350   bfd *obfd = info->output_bfd;
15351   struct mips_elf_obj_tdata *out_tdata = mips_elf_tdata (obfd);
15352   flagword old_flags;
15353   flagword new_flags;
15354   bfd_boolean ok;
15355
15356   new_flags = elf_elfheader (ibfd)->e_flags;
15357   elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_NOREORDER;
15358   old_flags = elf_elfheader (obfd)->e_flags;
15359
15360   /* Check flag compatibility.  */
15361
15362   new_flags &= ~EF_MIPS_NOREORDER;
15363   old_flags &= ~EF_MIPS_NOREORDER;
15364
15365   /* Some IRIX 6 BSD-compatibility objects have this bit set.  It
15366      doesn't seem to matter.  */
15367   new_flags &= ~EF_MIPS_XGOT;
15368   old_flags &= ~EF_MIPS_XGOT;
15369
15370   /* MIPSpro generates ucode info in n64 objects.  Again, we should
15371      just be able to ignore this.  */
15372   new_flags &= ~EF_MIPS_UCODE;
15373   old_flags &= ~EF_MIPS_UCODE;
15374
15375   /* DSOs should only be linked with CPIC code.  */
15376   if ((ibfd->flags & DYNAMIC) != 0)
15377     new_flags |= EF_MIPS_PIC | EF_MIPS_CPIC;
15378
15379   if (new_flags == old_flags)
15380     return TRUE;
15381
15382   ok = TRUE;
15383
15384   if (((new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0)
15385       != ((old_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0))
15386     {
15387       _bfd_error_handler
15388         (_("%pB: warning: linking abicalls files with non-abicalls files"),
15389          ibfd);
15390       ok = TRUE;
15391     }
15392
15393   if (new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC))
15394     elf_elfheader (obfd)->e_flags |= EF_MIPS_CPIC;
15395   if (! (new_flags & EF_MIPS_PIC))
15396     elf_elfheader (obfd)->e_flags &= ~EF_MIPS_PIC;
15397
15398   new_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC);
15399   old_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC);
15400
15401   /* Compare the ISAs.  */
15402   if (mips_32bit_flags_p (old_flags) != mips_32bit_flags_p (new_flags))
15403     {
15404       _bfd_error_handler
15405         (_("%pB: linking 32-bit code with 64-bit code"),
15406          ibfd);
15407       ok = FALSE;
15408     }
15409   else if (!mips_mach_extends_p (bfd_get_mach (ibfd), bfd_get_mach (obfd)))
15410     {
15411       /* OBFD's ISA isn't the same as, or an extension of, IBFD's.  */
15412       if (mips_mach_extends_p (bfd_get_mach (obfd), bfd_get_mach (ibfd)))
15413         {
15414           /* Copy the architecture info from IBFD to OBFD.  Also copy
15415              the 32-bit flag (if set) so that we continue to recognise
15416              OBFD as a 32-bit binary.  */
15417           bfd_set_arch_info (obfd, bfd_get_arch_info (ibfd));
15418           elf_elfheader (obfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH);
15419           elf_elfheader (obfd)->e_flags
15420             |= new_flags & (EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
15421
15422           /* Update the ABI flags isa_level, isa_rev, isa_ext fields.  */
15423           update_mips_abiflags_isa (obfd, &out_tdata->abiflags);
15424
15425           /* Copy across the ABI flags if OBFD doesn't use them
15426              and if that was what caused us to treat IBFD as 32-bit.  */
15427           if ((old_flags & EF_MIPS_ABI) == 0
15428               && mips_32bit_flags_p (new_flags)
15429               && !mips_32bit_flags_p (new_flags & ~EF_MIPS_ABI))
15430             elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ABI;
15431         }
15432       else
15433         {
15434           /* The ISAs aren't compatible.  */
15435           _bfd_error_handler
15436             /* xgettext:c-format */
15437             (_("%pB: linking %s module with previous %s modules"),
15438              ibfd,
15439              bfd_printable_name (ibfd),
15440              bfd_printable_name (obfd));
15441           ok = FALSE;
15442         }
15443     }
15444
15445   new_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
15446   old_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
15447
15448   /* Compare ABIs.  The 64-bit ABI does not use EF_MIPS_ABI.  But, it
15449      does set EI_CLASS differently from any 32-bit ABI.  */
15450   if ((new_flags & EF_MIPS_ABI) != (old_flags & EF_MIPS_ABI)
15451       || (elf_elfheader (ibfd)->e_ident[EI_CLASS]
15452           != elf_elfheader (obfd)->e_ident[EI_CLASS]))
15453     {
15454       /* Only error if both are set (to different values).  */
15455       if (((new_flags & EF_MIPS_ABI) && (old_flags & EF_MIPS_ABI))
15456           || (elf_elfheader (ibfd)->e_ident[EI_CLASS]
15457               != elf_elfheader (obfd)->e_ident[EI_CLASS]))
15458         {
15459           _bfd_error_handler
15460             /* xgettext:c-format */
15461             (_("%pB: ABI mismatch: linking %s module with previous %s modules"),
15462              ibfd,
15463              elf_mips_abi_name (ibfd),
15464              elf_mips_abi_name (obfd));
15465           ok = FALSE;
15466         }
15467       new_flags &= ~EF_MIPS_ABI;
15468       old_flags &= ~EF_MIPS_ABI;
15469     }
15470
15471   /* Compare ASEs.  Forbid linking MIPS16 and microMIPS ASE modules together
15472      and allow arbitrary mixing of the remaining ASEs (retain the union).  */
15473   if ((new_flags & EF_MIPS_ARCH_ASE) != (old_flags & EF_MIPS_ARCH_ASE))
15474     {
15475       int old_micro = old_flags & EF_MIPS_ARCH_ASE_MICROMIPS;
15476       int new_micro = new_flags & EF_MIPS_ARCH_ASE_MICROMIPS;
15477       int old_m16 = old_flags & EF_MIPS_ARCH_ASE_M16;
15478       int new_m16 = new_flags & EF_MIPS_ARCH_ASE_M16;
15479       int micro_mis = old_m16 && new_micro;
15480       int m16_mis = old_micro && new_m16;
15481
15482       if (m16_mis || micro_mis)
15483         {
15484           _bfd_error_handler
15485             /* xgettext:c-format */
15486             (_("%pB: ASE mismatch: linking %s module with previous %s modules"),
15487              ibfd,
15488              m16_mis ? "MIPS16" : "microMIPS",
15489              m16_mis ? "microMIPS" : "MIPS16");
15490           ok = FALSE;
15491         }
15492
15493       elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ARCH_ASE;
15494
15495       new_flags &= ~ EF_MIPS_ARCH_ASE;
15496       old_flags &= ~ EF_MIPS_ARCH_ASE;
15497     }
15498
15499   /* Compare NaN encodings.  */
15500   if ((new_flags & EF_MIPS_NAN2008) != (old_flags & EF_MIPS_NAN2008))
15501     {
15502       /* xgettext:c-format */
15503       _bfd_error_handler (_("%pB: linking %s module with previous %s modules"),
15504                           ibfd,
15505                           (new_flags & EF_MIPS_NAN2008
15506                            ? "-mnan=2008" : "-mnan=legacy"),
15507                           (old_flags & EF_MIPS_NAN2008
15508                            ? "-mnan=2008" : "-mnan=legacy"));
15509       ok = FALSE;
15510       new_flags &= ~EF_MIPS_NAN2008;
15511       old_flags &= ~EF_MIPS_NAN2008;
15512     }
15513
15514   /* Compare FP64 state.  */
15515   if ((new_flags & EF_MIPS_FP64) != (old_flags & EF_MIPS_FP64))
15516     {
15517       /* xgettext:c-format */
15518       _bfd_error_handler (_("%pB: linking %s module with previous %s modules"),
15519                           ibfd,
15520                           (new_flags & EF_MIPS_FP64
15521                            ? "-mfp64" : "-mfp32"),
15522                           (old_flags & EF_MIPS_FP64
15523                            ? "-mfp64" : "-mfp32"));
15524       ok = FALSE;
15525       new_flags &= ~EF_MIPS_FP64;
15526       old_flags &= ~EF_MIPS_FP64;
15527     }
15528
15529   /* Warn about any other mismatches */
15530   if (new_flags != old_flags)
15531     {
15532       /* xgettext:c-format */
15533       _bfd_error_handler
15534         (_("%pB: uses different e_flags (%#x) fields than previous modules "
15535            "(%#x)"),
15536          ibfd, new_flags, old_flags);
15537       ok = FALSE;
15538     }
15539
15540   return ok;
15541 }
15542
15543 /* Merge object attributes from IBFD into OBFD.  Raise an error if
15544    there are conflicting attributes.  */
15545 static bfd_boolean
15546 mips_elf_merge_obj_attributes (bfd *ibfd, struct bfd_link_info *info)
15547 {
15548   bfd *obfd = info->output_bfd;
15549   obj_attribute *in_attr;
15550   obj_attribute *out_attr;
15551   bfd *abi_fp_bfd;
15552   bfd *abi_msa_bfd;
15553
15554   abi_fp_bfd = mips_elf_tdata (obfd)->abi_fp_bfd;
15555   in_attr = elf_known_obj_attributes (ibfd)[OBJ_ATTR_GNU];
15556   if (!abi_fp_bfd && in_attr[Tag_GNU_MIPS_ABI_FP].i != Val_GNU_MIPS_ABI_FP_ANY)
15557     mips_elf_tdata (obfd)->abi_fp_bfd = ibfd;
15558
15559   abi_msa_bfd = mips_elf_tdata (obfd)->abi_msa_bfd;
15560   if (!abi_msa_bfd
15561       && in_attr[Tag_GNU_MIPS_ABI_MSA].i != Val_GNU_MIPS_ABI_MSA_ANY)
15562     mips_elf_tdata (obfd)->abi_msa_bfd = ibfd;
15563
15564   if (!elf_known_obj_attributes_proc (obfd)[0].i)
15565     {
15566       /* This is the first object.  Copy the attributes.  */
15567       _bfd_elf_copy_obj_attributes (ibfd, obfd);
15568
15569       /* Use the Tag_null value to indicate the attributes have been
15570          initialized.  */
15571       elf_known_obj_attributes_proc (obfd)[0].i = 1;
15572
15573       return TRUE;
15574     }
15575
15576   /* Check for conflicting Tag_GNU_MIPS_ABI_FP attributes and merge
15577      non-conflicting ones.  */
15578   out_attr = elf_known_obj_attributes (obfd)[OBJ_ATTR_GNU];
15579   if (in_attr[Tag_GNU_MIPS_ABI_FP].i != out_attr[Tag_GNU_MIPS_ABI_FP].i)
15580     {
15581       int out_fp, in_fp;
15582
15583       out_fp = out_attr[Tag_GNU_MIPS_ABI_FP].i;
15584       in_fp = in_attr[Tag_GNU_MIPS_ABI_FP].i;
15585       out_attr[Tag_GNU_MIPS_ABI_FP].type = 1;
15586       if (out_fp == Val_GNU_MIPS_ABI_FP_ANY)
15587         out_attr[Tag_GNU_MIPS_ABI_FP].i = in_fp;
15588       else if (out_fp == Val_GNU_MIPS_ABI_FP_XX
15589                && (in_fp == Val_GNU_MIPS_ABI_FP_DOUBLE
15590                    || in_fp == Val_GNU_MIPS_ABI_FP_64
15591                    || in_fp == Val_GNU_MIPS_ABI_FP_64A))
15592         {
15593           mips_elf_tdata (obfd)->abi_fp_bfd = ibfd;
15594           out_attr[Tag_GNU_MIPS_ABI_FP].i = in_attr[Tag_GNU_MIPS_ABI_FP].i;
15595         }
15596       else if (in_fp == Val_GNU_MIPS_ABI_FP_XX
15597                && (out_fp == Val_GNU_MIPS_ABI_FP_DOUBLE
15598                    || out_fp == Val_GNU_MIPS_ABI_FP_64
15599                    || out_fp == Val_GNU_MIPS_ABI_FP_64A))
15600         /* Keep the current setting.  */;
15601       else if (out_fp == Val_GNU_MIPS_ABI_FP_64A
15602                && in_fp == Val_GNU_MIPS_ABI_FP_64)
15603         {
15604           mips_elf_tdata (obfd)->abi_fp_bfd = ibfd;
15605           out_attr[Tag_GNU_MIPS_ABI_FP].i = in_attr[Tag_GNU_MIPS_ABI_FP].i;
15606         }
15607       else if (in_fp == Val_GNU_MIPS_ABI_FP_64A
15608                && out_fp == Val_GNU_MIPS_ABI_FP_64)
15609         /* Keep the current setting.  */;
15610       else if (in_fp != Val_GNU_MIPS_ABI_FP_ANY)
15611         {
15612           const char *out_string, *in_string;
15613
15614           out_string = _bfd_mips_fp_abi_string (out_fp);
15615           in_string = _bfd_mips_fp_abi_string (in_fp);
15616           /* First warn about cases involving unrecognised ABIs.  */
15617           if (!out_string && !in_string)
15618             /* xgettext:c-format */
15619             _bfd_error_handler
15620               (_("warning: %pB uses unknown floating point ABI %d "
15621                  "(set by %pB), %pB uses unknown floating point ABI %d"),
15622                obfd, out_fp, abi_fp_bfd, ibfd, in_fp);
15623           else if (!out_string)
15624             _bfd_error_handler
15625               /* xgettext:c-format */
15626               (_("warning: %pB uses unknown floating point ABI %d "
15627                  "(set by %pB), %pB uses %s"),
15628                obfd, out_fp, abi_fp_bfd, ibfd, in_string);
15629           else if (!in_string)
15630             _bfd_error_handler
15631               /* xgettext:c-format */
15632               (_("warning: %pB uses %s (set by %pB), "
15633                  "%pB uses unknown floating point ABI %d"),
15634                obfd, out_string, abi_fp_bfd, ibfd, in_fp);
15635           else
15636             {
15637               /* If one of the bfds is soft-float, the other must be
15638                  hard-float.  The exact choice of hard-float ABI isn't
15639                  really relevant to the error message.  */
15640               if (in_fp == Val_GNU_MIPS_ABI_FP_SOFT)
15641                 out_string = "-mhard-float";
15642               else if (out_fp == Val_GNU_MIPS_ABI_FP_SOFT)
15643                 in_string = "-mhard-float";
15644               _bfd_error_handler
15645                 /* xgettext:c-format */
15646                 (_("warning: %pB uses %s (set by %pB), %pB uses %s"),
15647                  obfd, out_string, abi_fp_bfd, ibfd, in_string);
15648             }
15649         }
15650     }
15651
15652   /* Check for conflicting Tag_GNU_MIPS_ABI_MSA attributes and merge
15653      non-conflicting ones.  */
15654   if (in_attr[Tag_GNU_MIPS_ABI_MSA].i != out_attr[Tag_GNU_MIPS_ABI_MSA].i)
15655     {
15656       out_attr[Tag_GNU_MIPS_ABI_MSA].type = 1;
15657       if (out_attr[Tag_GNU_MIPS_ABI_MSA].i == Val_GNU_MIPS_ABI_MSA_ANY)
15658         out_attr[Tag_GNU_MIPS_ABI_MSA].i = in_attr[Tag_GNU_MIPS_ABI_MSA].i;
15659       else if (in_attr[Tag_GNU_MIPS_ABI_MSA].i != Val_GNU_MIPS_ABI_MSA_ANY)
15660         switch (out_attr[Tag_GNU_MIPS_ABI_MSA].i)
15661           {
15662           case Val_GNU_MIPS_ABI_MSA_128:
15663             _bfd_error_handler
15664               /* xgettext:c-format */
15665               (_("warning: %pB uses %s (set by %pB), "
15666                  "%pB uses unknown MSA ABI %d"),
15667                obfd, "-mmsa", abi_msa_bfd,
15668                ibfd, in_attr[Tag_GNU_MIPS_ABI_MSA].i);
15669             break;
15670
15671           default:
15672             switch (in_attr[Tag_GNU_MIPS_ABI_MSA].i)
15673               {
15674               case Val_GNU_MIPS_ABI_MSA_128:
15675                 _bfd_error_handler
15676                   /* xgettext:c-format */
15677                   (_("warning: %pB uses unknown MSA ABI %d "
15678                      "(set by %pB), %pB uses %s"),
15679                      obfd, out_attr[Tag_GNU_MIPS_ABI_MSA].i,
15680                    abi_msa_bfd, ibfd, "-mmsa");
15681                   break;
15682
15683               default:
15684                 _bfd_error_handler
15685                   /* xgettext:c-format */
15686                   (_("warning: %pB uses unknown MSA ABI %d "
15687                      "(set by %pB), %pB uses unknown MSA ABI %d"),
15688                    obfd, out_attr[Tag_GNU_MIPS_ABI_MSA].i,
15689                    abi_msa_bfd, ibfd, in_attr[Tag_GNU_MIPS_ABI_MSA].i);
15690                 break;
15691               }
15692           }
15693     }
15694
15695   /* Merge Tag_compatibility attributes and any common GNU ones.  */
15696   return _bfd_elf_merge_object_attributes (ibfd, info);
15697 }
15698
15699 /* Merge object ABI flags from IBFD into OBFD.  Raise an error if
15700    there are conflicting settings.  */
15701
15702 static bfd_boolean
15703 mips_elf_merge_obj_abiflags (bfd *ibfd, bfd *obfd)
15704 {
15705   obj_attribute *out_attr = elf_known_obj_attributes (obfd)[OBJ_ATTR_GNU];
15706   struct mips_elf_obj_tdata *out_tdata = mips_elf_tdata (obfd);
15707   struct mips_elf_obj_tdata *in_tdata = mips_elf_tdata (ibfd);
15708
15709   /* Update the output abiflags fp_abi using the computed fp_abi.  */
15710   out_tdata->abiflags.fp_abi = out_attr[Tag_GNU_MIPS_ABI_FP].i;
15711
15712 #define max(a, b) ((a) > (b) ? (a) : (b))
15713   /* Merge abiflags.  */
15714   out_tdata->abiflags.isa_level = max (out_tdata->abiflags.isa_level,
15715                                        in_tdata->abiflags.isa_level);
15716   out_tdata->abiflags.isa_rev = max (out_tdata->abiflags.isa_rev,
15717                                      in_tdata->abiflags.isa_rev);
15718   out_tdata->abiflags.gpr_size = max (out_tdata->abiflags.gpr_size,
15719                                       in_tdata->abiflags.gpr_size);
15720   out_tdata->abiflags.cpr1_size = max (out_tdata->abiflags.cpr1_size,
15721                                        in_tdata->abiflags.cpr1_size);
15722   out_tdata->abiflags.cpr2_size = max (out_tdata->abiflags.cpr2_size,
15723                                        in_tdata->abiflags.cpr2_size);
15724 #undef max
15725   out_tdata->abiflags.ases |= in_tdata->abiflags.ases;
15726   out_tdata->abiflags.flags1 |= in_tdata->abiflags.flags1;
15727
15728   return TRUE;
15729 }
15730
15731 /* Merge backend specific data from an object file to the output
15732    object file when linking.  */
15733
15734 bfd_boolean
15735 _bfd_mips_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
15736 {
15737   bfd *obfd = info->output_bfd;
15738   struct mips_elf_obj_tdata *out_tdata;
15739   struct mips_elf_obj_tdata *in_tdata;
15740   bfd_boolean null_input_bfd = TRUE;
15741   asection *sec;
15742   bfd_boolean ok;
15743
15744   /* Check if we have the same endianness.  */
15745   if (! _bfd_generic_verify_endian_match (ibfd, info))
15746     {
15747       _bfd_error_handler
15748         (_("%pB: endianness incompatible with that of the selected emulation"),
15749          ibfd);
15750       return FALSE;
15751     }
15752
15753   if (!is_mips_elf (ibfd) || !is_mips_elf (obfd))
15754     return TRUE;
15755
15756   in_tdata = mips_elf_tdata (ibfd);
15757   out_tdata = mips_elf_tdata (obfd);
15758
15759   if (strcmp (bfd_get_target (ibfd), bfd_get_target (obfd)) != 0)
15760     {
15761       _bfd_error_handler
15762         (_("%pB: ABI is incompatible with that of the selected emulation"),
15763          ibfd);
15764       return FALSE;
15765     }
15766
15767   /* Check to see if the input BFD actually contains any sections.  If not,
15768      then it has no attributes, and its flags may not have been initialized
15769      either, but it cannot actually cause any incompatibility.  */
15770   for (sec = ibfd->sections; sec != NULL; sec = sec->next)
15771     {
15772       /* Ignore synthetic sections and empty .text, .data and .bss sections
15773          which are automatically generated by gas.  Also ignore fake
15774          (s)common sections, since merely defining a common symbol does
15775          not affect compatibility.  */
15776       if ((sec->flags & SEC_IS_COMMON) == 0
15777           && strcmp (sec->name, ".reginfo")
15778           && strcmp (sec->name, ".mdebug")
15779           && (sec->size != 0
15780               || (strcmp (sec->name, ".text")
15781                   && strcmp (sec->name, ".data")
15782                   && strcmp (sec->name, ".bss"))))
15783         {
15784           null_input_bfd = FALSE;
15785           break;
15786         }
15787     }
15788   if (null_input_bfd)
15789     return TRUE;
15790
15791   /* Populate abiflags using existing information.  */
15792   if (in_tdata->abiflags_valid)
15793     {
15794       obj_attribute *in_attr = elf_known_obj_attributes (ibfd)[OBJ_ATTR_GNU];
15795       Elf_Internal_ABIFlags_v0 in_abiflags;
15796       Elf_Internal_ABIFlags_v0 abiflags;
15797
15798       /* Set up the FP ABI attribute from the abiflags if it is not already
15799          set.  */
15800       if (in_attr[Tag_GNU_MIPS_ABI_FP].i == Val_GNU_MIPS_ABI_FP_ANY)
15801         in_attr[Tag_GNU_MIPS_ABI_FP].i = in_tdata->abiflags.fp_abi;
15802
15803       infer_mips_abiflags (ibfd, &abiflags);
15804       in_abiflags = in_tdata->abiflags;
15805
15806       /* It is not possible to infer the correct ISA revision
15807          for R3 or R5 so drop down to R2 for the checks.  */
15808       if (in_abiflags.isa_rev == 3 || in_abiflags.isa_rev == 5)
15809         in_abiflags.isa_rev = 2;
15810
15811       if (LEVEL_REV (in_abiflags.isa_level, in_abiflags.isa_rev)
15812           < LEVEL_REV (abiflags.isa_level, abiflags.isa_rev))
15813         _bfd_error_handler
15814           (_("%pB: warning: inconsistent ISA between e_flags and "
15815              ".MIPS.abiflags"), ibfd);
15816       if (abiflags.fp_abi != Val_GNU_MIPS_ABI_FP_ANY
15817           && in_abiflags.fp_abi != abiflags.fp_abi)
15818         _bfd_error_handler
15819           (_("%pB: warning: inconsistent FP ABI between .gnu.attributes and "
15820              ".MIPS.abiflags"), ibfd);
15821       if ((in_abiflags.ases & abiflags.ases) != abiflags.ases)
15822         _bfd_error_handler
15823           (_("%pB: warning: inconsistent ASEs between e_flags and "
15824              ".MIPS.abiflags"), ibfd);
15825       /* The isa_ext is allowed to be an extension of what can be inferred
15826          from e_flags.  */
15827       if (!mips_mach_extends_p (bfd_mips_isa_ext_mach (abiflags.isa_ext),
15828                                 bfd_mips_isa_ext_mach (in_abiflags.isa_ext)))
15829         _bfd_error_handler
15830           (_("%pB: warning: inconsistent ISA extensions between e_flags and "
15831              ".MIPS.abiflags"), ibfd);
15832       if (in_abiflags.flags2 != 0)
15833         _bfd_error_handler
15834           (_("%pB: warning: unexpected flag in the flags2 field of "
15835              ".MIPS.abiflags (0x%lx)"), ibfd,
15836            in_abiflags.flags2);
15837     }
15838   else
15839     {
15840       infer_mips_abiflags (ibfd, &in_tdata->abiflags);
15841       in_tdata->abiflags_valid = TRUE;
15842     }
15843
15844   if (!out_tdata->abiflags_valid)
15845     {
15846       /* Copy input abiflags if output abiflags are not already valid.  */
15847       out_tdata->abiflags = in_tdata->abiflags;
15848       out_tdata->abiflags_valid = TRUE;
15849     }
15850
15851   if (! elf_flags_init (obfd))
15852     {
15853       elf_flags_init (obfd) = TRUE;
15854       elf_elfheader (obfd)->e_flags = elf_elfheader (ibfd)->e_flags;
15855       elf_elfheader (obfd)->e_ident[EI_CLASS]
15856         = elf_elfheader (ibfd)->e_ident[EI_CLASS];
15857
15858       if (bfd_get_arch (obfd) == bfd_get_arch (ibfd)
15859           && (bfd_get_arch_info (obfd)->the_default
15860               || mips_mach_extends_p (bfd_get_mach (obfd),
15861                                       bfd_get_mach (ibfd))))
15862         {
15863           if (! bfd_set_arch_mach (obfd, bfd_get_arch (ibfd),
15864                                    bfd_get_mach (ibfd)))
15865             return FALSE;
15866
15867           /* Update the ABI flags isa_level, isa_rev and isa_ext fields.  */
15868           update_mips_abiflags_isa (obfd, &out_tdata->abiflags);
15869         }
15870
15871       ok = TRUE;
15872     }
15873   else
15874     ok = mips_elf_merge_obj_e_flags (ibfd, info);
15875
15876   ok = mips_elf_merge_obj_attributes (ibfd, info) && ok;
15877
15878   ok = mips_elf_merge_obj_abiflags (ibfd, obfd) && ok;
15879
15880   if (!ok)
15881     {
15882       bfd_set_error (bfd_error_bad_value);
15883       return FALSE;
15884     }
15885
15886   return TRUE;
15887 }
15888
15889 /* Function to keep MIPS specific file flags like as EF_MIPS_PIC.  */
15890
15891 bfd_boolean
15892 _bfd_mips_elf_set_private_flags (bfd *abfd, flagword flags)
15893 {
15894   BFD_ASSERT (!elf_flags_init (abfd)
15895               || elf_elfheader (abfd)->e_flags == flags);
15896
15897   elf_elfheader (abfd)->e_flags = flags;
15898   elf_flags_init (abfd) = TRUE;
15899   return TRUE;
15900 }
15901
15902 char *
15903 _bfd_mips_elf_get_target_dtag (bfd_vma dtag)
15904 {
15905   switch (dtag)
15906     {
15907     default: return "";
15908     case DT_MIPS_RLD_VERSION:
15909       return "MIPS_RLD_VERSION";
15910     case DT_MIPS_TIME_STAMP:
15911       return "MIPS_TIME_STAMP";
15912     case DT_MIPS_ICHECKSUM:
15913       return "MIPS_ICHECKSUM";
15914     case DT_MIPS_IVERSION:
15915       return "MIPS_IVERSION";
15916     case DT_MIPS_FLAGS:
15917       return "MIPS_FLAGS";
15918     case DT_MIPS_BASE_ADDRESS:
15919       return "MIPS_BASE_ADDRESS";
15920     case DT_MIPS_MSYM:
15921       return "MIPS_MSYM";
15922     case DT_MIPS_CONFLICT:
15923       return "MIPS_CONFLICT";
15924     case DT_MIPS_LIBLIST:
15925       return "MIPS_LIBLIST";
15926     case DT_MIPS_LOCAL_GOTNO:
15927       return "MIPS_LOCAL_GOTNO";
15928     case DT_MIPS_CONFLICTNO:
15929       return "MIPS_CONFLICTNO";
15930     case DT_MIPS_LIBLISTNO:
15931       return "MIPS_LIBLISTNO";
15932     case DT_MIPS_SYMTABNO:
15933       return "MIPS_SYMTABNO";
15934     case DT_MIPS_UNREFEXTNO:
15935       return "MIPS_UNREFEXTNO";
15936     case DT_MIPS_GOTSYM:
15937       return "MIPS_GOTSYM";
15938     case DT_MIPS_HIPAGENO:
15939       return "MIPS_HIPAGENO";
15940     case DT_MIPS_RLD_MAP:
15941       return "MIPS_RLD_MAP";
15942     case DT_MIPS_RLD_MAP_REL:
15943       return "MIPS_RLD_MAP_REL";
15944     case DT_MIPS_DELTA_CLASS:
15945       return "MIPS_DELTA_CLASS";
15946     case DT_MIPS_DELTA_CLASS_NO:
15947       return "MIPS_DELTA_CLASS_NO";
15948     case DT_MIPS_DELTA_INSTANCE:
15949       return "MIPS_DELTA_INSTANCE";
15950     case DT_MIPS_DELTA_INSTANCE_NO:
15951       return "MIPS_DELTA_INSTANCE_NO";
15952     case DT_MIPS_DELTA_RELOC:
15953       return "MIPS_DELTA_RELOC";
15954     case DT_MIPS_DELTA_RELOC_NO:
15955       return "MIPS_DELTA_RELOC_NO";
15956     case DT_MIPS_DELTA_SYM:
15957       return "MIPS_DELTA_SYM";
15958     case DT_MIPS_DELTA_SYM_NO:
15959       return "MIPS_DELTA_SYM_NO";
15960     case DT_MIPS_DELTA_CLASSSYM:
15961       return "MIPS_DELTA_CLASSSYM";
15962     case DT_MIPS_DELTA_CLASSSYM_NO:
15963       return "MIPS_DELTA_CLASSSYM_NO";
15964     case DT_MIPS_CXX_FLAGS:
15965       return "MIPS_CXX_FLAGS";
15966     case DT_MIPS_PIXIE_INIT:
15967       return "MIPS_PIXIE_INIT";
15968     case DT_MIPS_SYMBOL_LIB:
15969       return "MIPS_SYMBOL_LIB";
15970     case DT_MIPS_LOCALPAGE_GOTIDX:
15971       return "MIPS_LOCALPAGE_GOTIDX";
15972     case DT_MIPS_LOCAL_GOTIDX:
15973       return "MIPS_LOCAL_GOTIDX";
15974     case DT_MIPS_HIDDEN_GOTIDX:
15975       return "MIPS_HIDDEN_GOTIDX";
15976     case DT_MIPS_PROTECTED_GOTIDX:
15977       return "MIPS_PROTECTED_GOT_IDX";
15978     case DT_MIPS_OPTIONS:
15979       return "MIPS_OPTIONS";
15980     case DT_MIPS_INTERFACE:
15981       return "MIPS_INTERFACE";
15982     case DT_MIPS_DYNSTR_ALIGN:
15983       return "DT_MIPS_DYNSTR_ALIGN";
15984     case DT_MIPS_INTERFACE_SIZE:
15985       return "DT_MIPS_INTERFACE_SIZE";
15986     case DT_MIPS_RLD_TEXT_RESOLVE_ADDR:
15987       return "DT_MIPS_RLD_TEXT_RESOLVE_ADDR";
15988     case DT_MIPS_PERF_SUFFIX:
15989       return "DT_MIPS_PERF_SUFFIX";
15990     case DT_MIPS_COMPACT_SIZE:
15991       return "DT_MIPS_COMPACT_SIZE";
15992     case DT_MIPS_GP_VALUE:
15993       return "DT_MIPS_GP_VALUE";
15994     case DT_MIPS_AUX_DYNAMIC:
15995       return "DT_MIPS_AUX_DYNAMIC";
15996     case DT_MIPS_PLTGOT:
15997       return "DT_MIPS_PLTGOT";
15998     case DT_MIPS_RWPLT:
15999       return "DT_MIPS_RWPLT";
16000     case DT_MIPS_XHASH:
16001       return "DT_MIPS_XHASH";
16002     }
16003 }
16004
16005 /* Return the meaning of Tag_GNU_MIPS_ABI_FP value FP, or null if
16006    not known.  */
16007
16008 const char *
16009 _bfd_mips_fp_abi_string (int fp)
16010 {
16011   switch (fp)
16012     {
16013       /* These strings aren't translated because they're simply
16014          option lists.  */
16015     case Val_GNU_MIPS_ABI_FP_DOUBLE:
16016       return "-mdouble-float";
16017
16018     case Val_GNU_MIPS_ABI_FP_SINGLE:
16019       return "-msingle-float";
16020
16021     case Val_GNU_MIPS_ABI_FP_SOFT:
16022       return "-msoft-float";
16023
16024     case Val_GNU_MIPS_ABI_FP_OLD_64:
16025       return _("-mips32r2 -mfp64 (12 callee-saved)");
16026
16027     case Val_GNU_MIPS_ABI_FP_XX:
16028       return "-mfpxx";
16029
16030     case Val_GNU_MIPS_ABI_FP_64:
16031       return "-mgp32 -mfp64";
16032
16033     case Val_GNU_MIPS_ABI_FP_64A:
16034       return "-mgp32 -mfp64 -mno-odd-spreg";
16035
16036     default:
16037       return 0;
16038     }
16039 }
16040
16041 static void
16042 print_mips_ases (FILE *file, unsigned int mask)
16043 {
16044   if (mask & AFL_ASE_DSP)
16045     fputs ("\n\tDSP ASE", file);
16046   if (mask & AFL_ASE_DSPR2)
16047     fputs ("\n\tDSP R2 ASE", file);
16048   if (mask & AFL_ASE_DSPR3)
16049     fputs ("\n\tDSP R3 ASE", file);
16050   if (mask & AFL_ASE_EVA)
16051     fputs ("\n\tEnhanced VA Scheme", file);
16052   if (mask & AFL_ASE_MCU)
16053     fputs ("\n\tMCU (MicroController) ASE", file);
16054   if (mask & AFL_ASE_MDMX)
16055     fputs ("\n\tMDMX ASE", file);
16056   if (mask & AFL_ASE_MIPS3D)
16057     fputs ("\n\tMIPS-3D ASE", file);
16058   if (mask & AFL_ASE_MT)
16059     fputs ("\n\tMT ASE", file);
16060   if (mask & AFL_ASE_SMARTMIPS)
16061     fputs ("\n\tSmartMIPS ASE", file);
16062   if (mask & AFL_ASE_VIRT)
16063     fputs ("\n\tVZ ASE", file);
16064   if (mask & AFL_ASE_MSA)
16065     fputs ("\n\tMSA ASE", file);
16066   if (mask & AFL_ASE_MIPS16)
16067     fputs ("\n\tMIPS16 ASE", file);
16068   if (mask & AFL_ASE_MICROMIPS)
16069     fputs ("\n\tMICROMIPS ASE", file);
16070   if (mask & AFL_ASE_XPA)
16071     fputs ("\n\tXPA ASE", file);
16072   if (mask & AFL_ASE_MIPS16E2)
16073     fputs ("\n\tMIPS16e2 ASE", file);
16074   if (mask & AFL_ASE_CRC)
16075     fputs ("\n\tCRC ASE", file);
16076   if (mask & AFL_ASE_GINV)
16077     fputs ("\n\tGINV ASE", file);
16078   if (mask & AFL_ASE_LOONGSON_MMI)
16079     fputs ("\n\tLoongson MMI ASE", file);
16080   if (mask & AFL_ASE_LOONGSON_CAM)
16081     fputs ("\n\tLoongson CAM ASE", file);
16082   if (mask & AFL_ASE_LOONGSON_EXT)
16083     fputs ("\n\tLoongson EXT ASE", file);
16084   if (mask & AFL_ASE_LOONGSON_EXT2)
16085     fputs ("\n\tLoongson EXT2 ASE", file);
16086   if (mask == 0)
16087     fprintf (file, "\n\t%s", _("None"));
16088   else if ((mask & ~AFL_ASE_MASK) != 0)
16089     fprintf (stdout, "\n\t%s (%x)", _("Unknown"), mask & ~AFL_ASE_MASK);
16090 }
16091
16092 static void
16093 print_mips_isa_ext (FILE *file, unsigned int isa_ext)
16094 {
16095   switch (isa_ext)
16096     {
16097     case 0:
16098       fputs (_("None"), file);
16099       break;
16100     case AFL_EXT_XLR:
16101       fputs ("RMI XLR", file);
16102       break;
16103     case AFL_EXT_OCTEON3:
16104       fputs ("Cavium Networks Octeon3", file);
16105       break;
16106     case AFL_EXT_OCTEON2:
16107       fputs ("Cavium Networks Octeon2", file);
16108       break;
16109     case AFL_EXT_OCTEONP:
16110       fputs ("Cavium Networks OcteonP", file);
16111       break;
16112     case AFL_EXT_OCTEON:
16113       fputs ("Cavium Networks Octeon", file);
16114       break;
16115     case AFL_EXT_5900:
16116       fputs ("Toshiba R5900", file);
16117       break;
16118     case AFL_EXT_4650:
16119       fputs ("MIPS R4650", file);
16120       break;
16121     case AFL_EXT_4010:
16122       fputs ("LSI R4010", file);
16123       break;
16124     case AFL_EXT_4100:
16125       fputs ("NEC VR4100", file);
16126       break;
16127     case AFL_EXT_3900:
16128       fputs ("Toshiba R3900", file);
16129       break;
16130     case AFL_EXT_10000:
16131       fputs ("MIPS R10000", file);
16132       break;
16133     case AFL_EXT_SB1:
16134       fputs ("Broadcom SB-1", file);
16135       break;
16136     case AFL_EXT_4111:
16137       fputs ("NEC VR4111/VR4181", file);
16138       break;
16139     case AFL_EXT_4120:
16140       fputs ("NEC VR4120", file);
16141       break;
16142     case AFL_EXT_5400:
16143       fputs ("NEC VR5400", file);
16144       break;
16145     case AFL_EXT_5500:
16146       fputs ("NEC VR5500", file);
16147       break;
16148     case AFL_EXT_LOONGSON_2E:
16149       fputs ("ST Microelectronics Loongson 2E", file);
16150       break;
16151     case AFL_EXT_LOONGSON_2F:
16152       fputs ("ST Microelectronics Loongson 2F", file);
16153       break;
16154     case AFL_EXT_INTERAPTIV_MR2:
16155       fputs ("Imagination interAptiv MR2", file);
16156       break;
16157     default:
16158       fprintf (file, "%s (%d)", _("Unknown"), isa_ext);
16159       break;
16160     }
16161 }
16162
16163 static void
16164 print_mips_fp_abi_value (FILE *file, int val)
16165 {
16166   switch (val)
16167     {
16168     case Val_GNU_MIPS_ABI_FP_ANY:
16169       fprintf (file, _("Hard or soft float\n"));
16170       break;
16171     case Val_GNU_MIPS_ABI_FP_DOUBLE:
16172       fprintf (file, _("Hard float (double precision)\n"));
16173       break;
16174     case Val_GNU_MIPS_ABI_FP_SINGLE:
16175       fprintf (file, _("Hard float (single precision)\n"));
16176       break;
16177     case Val_GNU_MIPS_ABI_FP_SOFT:
16178       fprintf (file, _("Soft float\n"));
16179       break;
16180     case Val_GNU_MIPS_ABI_FP_OLD_64:
16181       fprintf (file, _("Hard float (MIPS32r2 64-bit FPU 12 callee-saved)\n"));
16182       break;
16183     case Val_GNU_MIPS_ABI_FP_XX:
16184       fprintf (file, _("Hard float (32-bit CPU, Any FPU)\n"));
16185       break;
16186     case Val_GNU_MIPS_ABI_FP_64:
16187       fprintf (file, _("Hard float (32-bit CPU, 64-bit FPU)\n"));
16188       break;
16189     case Val_GNU_MIPS_ABI_FP_64A:
16190       fprintf (file, _("Hard float compat (32-bit CPU, 64-bit FPU)\n"));
16191       break;
16192     default:
16193       fprintf (file, "??? (%d)\n", val);
16194       break;
16195     }
16196 }
16197
16198 static int
16199 get_mips_reg_size (int reg_size)
16200 {
16201   return (reg_size == AFL_REG_NONE) ? 0
16202          : (reg_size == AFL_REG_32) ? 32
16203          : (reg_size == AFL_REG_64) ? 64
16204          : (reg_size == AFL_REG_128) ? 128
16205          : -1;
16206 }
16207
16208 bfd_boolean
16209 _bfd_mips_elf_print_private_bfd_data (bfd *abfd, void *ptr)
16210 {
16211   FILE *file = ptr;
16212
16213   BFD_ASSERT (abfd != NULL && ptr != NULL);
16214
16215   /* Print normal ELF private data.  */
16216   _bfd_elf_print_private_bfd_data (abfd, ptr);
16217
16218   /* xgettext:c-format */
16219   fprintf (file, _("private flags = %lx:"), elf_elfheader (abfd)->e_flags);
16220
16221   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O32)
16222     fprintf (file, _(" [abi=O32]"));
16223   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O64)
16224     fprintf (file, _(" [abi=O64]"));
16225   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32)
16226     fprintf (file, _(" [abi=EABI32]"));
16227   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI64)
16228     fprintf (file, _(" [abi=EABI64]"));
16229   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI))
16230     fprintf (file, _(" [abi unknown]"));
16231   else if (ABI_N32_P (abfd))
16232     fprintf (file, _(" [abi=N32]"));
16233   else if (ABI_64_P (abfd))
16234     fprintf (file, _(" [abi=64]"));
16235   else
16236     fprintf (file, _(" [no abi set]"));
16237
16238   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1)
16239     fprintf (file, " [mips1]");
16240   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2)
16241     fprintf (file, " [mips2]");
16242   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_3)
16243     fprintf (file, " [mips3]");
16244   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_4)
16245     fprintf (file, " [mips4]");
16246   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_5)
16247     fprintf (file, " [mips5]");
16248   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32)
16249     fprintf (file, " [mips32]");
16250   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64)
16251     fprintf (file, " [mips64]");
16252   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2)
16253     fprintf (file, " [mips32r2]");
16254   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64R2)
16255     fprintf (file, " [mips64r2]");
16256   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R6)
16257     fprintf (file, " [mips32r6]");
16258   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64R6)
16259     fprintf (file, " [mips64r6]");
16260   else
16261     fprintf (file, _(" [unknown ISA]"));
16262
16263   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MDMX)
16264     fprintf (file, " [mdmx]");
16265
16266   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_M16)
16267     fprintf (file, " [mips16]");
16268
16269   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MICROMIPS)
16270     fprintf (file, " [micromips]");
16271
16272   if (elf_elfheader (abfd)->e_flags & EF_MIPS_NAN2008)
16273     fprintf (file, " [nan2008]");
16274
16275   if (elf_elfheader (abfd)->e_flags & EF_MIPS_FP64)
16276     fprintf (file, " [old fp64]");
16277
16278   if (elf_elfheader (abfd)->e_flags & EF_MIPS_32BITMODE)
16279     fprintf (file, " [32bitmode]");
16280   else
16281     fprintf (file, _(" [not 32bitmode]"));
16282
16283   if (elf_elfheader (abfd)->e_flags & EF_MIPS_NOREORDER)
16284     fprintf (file, " [noreorder]");
16285
16286   if (elf_elfheader (abfd)->e_flags & EF_MIPS_PIC)
16287     fprintf (file, " [PIC]");
16288
16289   if (elf_elfheader (abfd)->e_flags & EF_MIPS_CPIC)
16290     fprintf (file, " [CPIC]");
16291
16292   if (elf_elfheader (abfd)->e_flags & EF_MIPS_XGOT)
16293     fprintf (file, " [XGOT]");
16294
16295   if (elf_elfheader (abfd)->e_flags & EF_MIPS_UCODE)
16296     fprintf (file, " [UCODE]");
16297
16298   fputc ('\n', file);
16299
16300   if (mips_elf_tdata (abfd)->abiflags_valid)
16301     {
16302       Elf_Internal_ABIFlags_v0 *abiflags = &mips_elf_tdata (abfd)->abiflags;
16303       fprintf (file, "\nMIPS ABI Flags Version: %d\n", abiflags->version);
16304       fprintf (file, "\nISA: MIPS%d", abiflags->isa_level);
16305       if (abiflags->isa_rev > 1)
16306         fprintf (file, "r%d", abiflags->isa_rev);
16307       fprintf (file, "\nGPR size: %d",
16308                get_mips_reg_size (abiflags->gpr_size));
16309       fprintf (file, "\nCPR1 size: %d",
16310                get_mips_reg_size (abiflags->cpr1_size));
16311       fprintf (file, "\nCPR2 size: %d",
16312                get_mips_reg_size (abiflags->cpr2_size));
16313       fputs ("\nFP ABI: ", file);
16314       print_mips_fp_abi_value (file, abiflags->fp_abi);
16315       fputs ("ISA Extension: ", file);
16316       print_mips_isa_ext (file, abiflags->isa_ext);
16317       fputs ("\nASEs:", file);
16318       print_mips_ases (file, abiflags->ases);
16319       fprintf (file, "\nFLAGS 1: %8.8lx", abiflags->flags1);
16320       fprintf (file, "\nFLAGS 2: %8.8lx", abiflags->flags2);
16321       fputc ('\n', file);
16322     }
16323
16324   return TRUE;
16325 }
16326
16327 const struct bfd_elf_special_section _bfd_mips_elf_special_sections[] =
16328 {
16329   { STRING_COMMA_LEN (".lit4"),   0, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
16330   { STRING_COMMA_LEN (".lit8"),   0, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
16331   { STRING_COMMA_LEN (".mdebug"), 0, SHT_MIPS_DEBUG, 0 },
16332   { STRING_COMMA_LEN (".sbss"),  -2, SHT_NOBITS,     SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
16333   { STRING_COMMA_LEN (".sdata"), -2, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
16334   { STRING_COMMA_LEN (".ucode"),  0, SHT_MIPS_UCODE, 0 },
16335   { STRING_COMMA_LEN (".MIPS.xhash"),  0, SHT_MIPS_XHASH,   SHF_ALLOC },
16336   { NULL,                     0,  0, 0,              0 }
16337 };
16338
16339 /* Merge non visibility st_other attributes.  Ensure that the
16340    STO_OPTIONAL flag is copied into h->other, even if this is not a
16341    definiton of the symbol.  */
16342 void
16343 _bfd_mips_elf_merge_symbol_attribute (struct elf_link_hash_entry *h,
16344                                       const Elf_Internal_Sym *isym,
16345                                       bfd_boolean definition,
16346                                       bfd_boolean dynamic ATTRIBUTE_UNUSED)
16347 {
16348   if ((isym->st_other & ~ELF_ST_VISIBILITY (-1)) != 0)
16349     {
16350       unsigned char other;
16351
16352       other = (definition ? isym->st_other : h->other);
16353       other &= ~ELF_ST_VISIBILITY (-1);
16354       h->other = other | ELF_ST_VISIBILITY (h->other);
16355     }
16356
16357   if (!definition
16358       && ELF_MIPS_IS_OPTIONAL (isym->st_other))
16359     h->other |= STO_OPTIONAL;
16360 }
16361
16362 /* Decide whether an undefined symbol is special and can be ignored.
16363    This is the case for OPTIONAL symbols on IRIX.  */
16364 bfd_boolean
16365 _bfd_mips_elf_ignore_undef_symbol (struct elf_link_hash_entry *h)
16366 {
16367   return ELF_MIPS_IS_OPTIONAL (h->other) ? TRUE : FALSE;
16368 }
16369
16370 bfd_boolean
16371 _bfd_mips_elf_common_definition (Elf_Internal_Sym *sym)
16372 {
16373   return (sym->st_shndx == SHN_COMMON
16374           || sym->st_shndx == SHN_MIPS_ACOMMON
16375           || sym->st_shndx == SHN_MIPS_SCOMMON);
16376 }
16377
16378 /* Return address for Ith PLT stub in section PLT, for relocation REL
16379    or (bfd_vma) -1 if it should not be included.  */
16380
16381 bfd_vma
16382 _bfd_mips_elf_plt_sym_val (bfd_vma i, const asection *plt,
16383                            const arelent *rel ATTRIBUTE_UNUSED)
16384 {
16385   return (plt->vma
16386           + 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry)
16387           + i * 4 * ARRAY_SIZE (mips_exec_plt_entry));
16388 }
16389
16390 /* Build a table of synthetic symbols to represent the PLT.  As with MIPS16
16391    and microMIPS PLT slots we may have a many-to-one mapping between .plt
16392    and .got.plt and also the slots may be of a different size each we walk
16393    the PLT manually fetching instructions and matching them against known
16394    patterns.  To make things easier standard MIPS slots, if any, always come
16395    first.  As we don't create proper ELF symbols we use the UDATA.I member
16396    of ASYMBOL to carry ISA annotation.  The encoding used is the same as
16397    with the ST_OTHER member of the ELF symbol.  */
16398
16399 long
16400 _bfd_mips_elf_get_synthetic_symtab (bfd *abfd,
16401                                     long symcount ATTRIBUTE_UNUSED,
16402                                     asymbol **syms ATTRIBUTE_UNUSED,
16403                                     long dynsymcount, asymbol **dynsyms,
16404                                     asymbol **ret)
16405 {
16406   static const char pltname[] = "_PROCEDURE_LINKAGE_TABLE_";
16407   static const char microsuffix[] = "@micromipsplt";
16408   static const char m16suffix[] = "@mips16plt";
16409   static const char mipssuffix[] = "@plt";
16410
16411   bfd_boolean (*slurp_relocs) (bfd *, asection *, asymbol **, bfd_boolean);
16412   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
16413   bfd_boolean micromips_p = MICROMIPS_P (abfd);
16414   Elf_Internal_Shdr *hdr;
16415   bfd_byte *plt_data;
16416   bfd_vma plt_offset;
16417   unsigned int other;
16418   bfd_vma entry_size;
16419   bfd_vma plt0_size;
16420   asection *relplt;
16421   bfd_vma opcode;
16422   asection *plt;
16423   asymbol *send;
16424   size_t size;
16425   char *names;
16426   long counti;
16427   arelent *p;
16428   asymbol *s;
16429   char *nend;
16430   long count;
16431   long pi;
16432   long i;
16433   long n;
16434
16435   *ret = NULL;
16436
16437   if ((abfd->flags & (DYNAMIC | EXEC_P)) == 0 || dynsymcount <= 0)
16438     return 0;
16439
16440   relplt = bfd_get_section_by_name (abfd, ".rel.plt");
16441   if (relplt == NULL)
16442     return 0;
16443
16444   hdr = &elf_section_data (relplt)->this_hdr;
16445   if (hdr->sh_link != elf_dynsymtab (abfd) || hdr->sh_type != SHT_REL)
16446     return 0;
16447
16448   plt = bfd_get_section_by_name (abfd, ".plt");
16449   if (plt == NULL)
16450     return 0;
16451
16452   slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
16453   if (!(*slurp_relocs) (abfd, relplt, dynsyms, TRUE))
16454     return -1;
16455   p = relplt->relocation;
16456
16457   /* Calculating the exact amount of space required for symbols would
16458      require two passes over the PLT, so just pessimise assuming two
16459      PLT slots per relocation.  */
16460   count = relplt->size / hdr->sh_entsize;
16461   counti = count * bed->s->int_rels_per_ext_rel;
16462   size = 2 * count * sizeof (asymbol);
16463   size += count * (sizeof (mipssuffix) +
16464                    (micromips_p ? sizeof (microsuffix) : sizeof (m16suffix)));
16465   for (pi = 0; pi < counti; pi += bed->s->int_rels_per_ext_rel)
16466     size += 2 * strlen ((*p[pi].sym_ptr_ptr)->name);
16467
16468   /* Add the size of "_PROCEDURE_LINKAGE_TABLE_" too.  */
16469   size += sizeof (asymbol) + sizeof (pltname);
16470
16471   if (!bfd_malloc_and_get_section (abfd, plt, &plt_data))
16472     return -1;
16473
16474   if (plt->size < 16)
16475     return -1;
16476
16477   s = *ret = bfd_malloc (size);
16478   if (s == NULL)
16479     return -1;
16480   send = s + 2 * count + 1;
16481
16482   names = (char *) send;
16483   nend = (char *) s + size;
16484   n = 0;
16485
16486   opcode = bfd_get_micromips_32 (abfd, plt_data + 12);
16487   if (opcode == 0x3302fffe)
16488     {
16489       if (!micromips_p)
16490         return -1;
16491       plt0_size = 2 * ARRAY_SIZE (micromips_o32_exec_plt0_entry);
16492       other = STO_MICROMIPS;
16493     }
16494   else if (opcode == 0x0398c1d0)
16495     {
16496       if (!micromips_p)
16497         return -1;
16498       plt0_size = 2 * ARRAY_SIZE (micromips_insn32_o32_exec_plt0_entry);
16499       other = STO_MICROMIPS;
16500     }
16501   else
16502     {
16503       plt0_size = 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry);
16504       other = 0;
16505     }
16506
16507   s->the_bfd = abfd;
16508   s->flags = BSF_SYNTHETIC | BSF_FUNCTION | BSF_LOCAL;
16509   s->section = plt;
16510   s->value = 0;
16511   s->name = names;
16512   s->udata.i = other;
16513   memcpy (names, pltname, sizeof (pltname));
16514   names += sizeof (pltname);
16515   ++s, ++n;
16516
16517   pi = 0;
16518   for (plt_offset = plt0_size;
16519        plt_offset + 8 <= plt->size && s < send;
16520        plt_offset += entry_size)
16521     {
16522       bfd_vma gotplt_addr;
16523       const char *suffix;
16524       bfd_vma gotplt_hi;
16525       bfd_vma gotplt_lo;
16526       size_t suffixlen;
16527
16528       opcode = bfd_get_micromips_32 (abfd, plt_data + plt_offset + 4);
16529
16530       /* Check if the second word matches the expected MIPS16 instruction.  */
16531       if (opcode == 0x651aeb00)
16532         {
16533           if (micromips_p)
16534             return -1;
16535           /* Truncated table???  */
16536           if (plt_offset + 16 > plt->size)
16537             break;
16538           gotplt_addr = bfd_get_32 (abfd, plt_data + plt_offset + 12);
16539           entry_size = 2 * ARRAY_SIZE (mips16_o32_exec_plt_entry);
16540           suffixlen = sizeof (m16suffix);
16541           suffix = m16suffix;
16542           other = STO_MIPS16;
16543         }
16544       /* Likewise the expected microMIPS instruction (no insn32 mode).  */
16545       else if (opcode == 0xff220000)
16546         {
16547           if (!micromips_p)
16548             return -1;
16549           gotplt_hi = bfd_get_16 (abfd, plt_data + plt_offset) & 0x7f;
16550           gotplt_lo = bfd_get_16 (abfd, plt_data + plt_offset + 2) & 0xffff;
16551           gotplt_hi = ((gotplt_hi ^ 0x40) - 0x40) << 18;
16552           gotplt_lo <<= 2;
16553           gotplt_addr = gotplt_hi + gotplt_lo;
16554           gotplt_addr += ((plt->vma + plt_offset) | 3) ^ 3;
16555           entry_size = 2 * ARRAY_SIZE (micromips_o32_exec_plt_entry);
16556           suffixlen = sizeof (microsuffix);
16557           suffix = microsuffix;
16558           other = STO_MICROMIPS;
16559         }
16560       /* Likewise the expected microMIPS instruction (insn32 mode).  */
16561       else if ((opcode & 0xffff0000) == 0xff2f0000)
16562         {
16563           gotplt_hi = bfd_get_16 (abfd, plt_data + plt_offset + 2) & 0xffff;
16564           gotplt_lo = bfd_get_16 (abfd, plt_data + plt_offset + 6) & 0xffff;
16565           gotplt_hi = ((gotplt_hi ^ 0x8000) - 0x8000) << 16;
16566           gotplt_lo = (gotplt_lo ^ 0x8000) - 0x8000;
16567           gotplt_addr = gotplt_hi + gotplt_lo;
16568           entry_size = 2 * ARRAY_SIZE (micromips_insn32_o32_exec_plt_entry);
16569           suffixlen = sizeof (microsuffix);
16570           suffix = microsuffix;
16571           other = STO_MICROMIPS;
16572         }
16573       /* Otherwise assume standard MIPS code.  */
16574       else
16575         {
16576           gotplt_hi = bfd_get_32 (abfd, plt_data + plt_offset) & 0xffff;
16577           gotplt_lo = bfd_get_32 (abfd, plt_data + plt_offset + 4) & 0xffff;
16578           gotplt_hi = ((gotplt_hi ^ 0x8000) - 0x8000) << 16;
16579           gotplt_lo = (gotplt_lo ^ 0x8000) - 0x8000;
16580           gotplt_addr = gotplt_hi + gotplt_lo;
16581           entry_size = 4 * ARRAY_SIZE (mips_exec_plt_entry);
16582           suffixlen = sizeof (mipssuffix);
16583           suffix = mipssuffix;
16584           other = 0;
16585         }
16586       /* Truncated table???  */
16587       if (plt_offset + entry_size > plt->size)
16588         break;
16589
16590       for (i = 0;
16591            i < count && p[pi].address != gotplt_addr;
16592            i++, pi = (pi + bed->s->int_rels_per_ext_rel) % counti);
16593
16594       if (i < count)
16595         {
16596           size_t namelen;
16597           size_t len;
16598
16599           *s = **p[pi].sym_ptr_ptr;
16600           /* Undefined syms won't have BSF_LOCAL or BSF_GLOBAL set.  Since
16601              we are defining a symbol, ensure one of them is set.  */
16602           if ((s->flags & BSF_LOCAL) == 0)
16603             s->flags |= BSF_GLOBAL;
16604           s->flags |= BSF_SYNTHETIC;
16605           s->section = plt;
16606           s->value = plt_offset;
16607           s->name = names;
16608           s->udata.i = other;
16609
16610           len = strlen ((*p[pi].sym_ptr_ptr)->name);
16611           namelen = len + suffixlen;
16612           if (names + namelen > nend)
16613             break;
16614
16615           memcpy (names, (*p[pi].sym_ptr_ptr)->name, len);
16616           names += len;
16617           memcpy (names, suffix, suffixlen);
16618           names += suffixlen;
16619
16620           ++s, ++n;
16621           pi = (pi + bed->s->int_rels_per_ext_rel) % counti;
16622         }
16623     }
16624
16625   free (plt_data);
16626
16627   return n;
16628 }
16629
16630 /* Return the ABI flags associated with ABFD if available.  */
16631
16632 Elf_Internal_ABIFlags_v0 *
16633 bfd_mips_elf_get_abiflags (bfd *abfd)
16634 {
16635   struct mips_elf_obj_tdata *tdata = mips_elf_tdata (abfd);
16636
16637   return tdata->abiflags_valid ? &tdata->abiflags : NULL;
16638 }
16639
16640 /* MIPS libc ABI versions, used with the EI_ABIVERSION ELF file header
16641    field.  Taken from `libc-abis.h' generated at GNU libc build time.
16642    Using a MIPS_ prefix as other libc targets use different values.  */
16643 enum
16644 {
16645   MIPS_LIBC_ABI_DEFAULT = 0,
16646   MIPS_LIBC_ABI_MIPS_PLT,
16647   MIPS_LIBC_ABI_UNIQUE,
16648   MIPS_LIBC_ABI_MIPS_O32_FP64,
16649   MIPS_LIBC_ABI_ABSOLUTE,
16650   MIPS_LIBC_ABI_XHASH,
16651   MIPS_LIBC_ABI_MAX
16652 };
16653
16654 void
16655 _bfd_mips_post_process_headers (bfd *abfd, struct bfd_link_info *link_info)
16656 {
16657   struct mips_elf_link_hash_table *htab = NULL;
16658   Elf_Internal_Ehdr *i_ehdrp;
16659
16660   i_ehdrp = elf_elfheader (abfd);
16661   if (link_info)
16662     {
16663       htab = mips_elf_hash_table (link_info);
16664       BFD_ASSERT (htab != NULL);
16665     }
16666
16667   if (htab != NULL && htab->use_plts_and_copy_relocs && !htab->is_vxworks)
16668     i_ehdrp->e_ident[EI_ABIVERSION] = MIPS_LIBC_ABI_MIPS_PLT;
16669
16670   if (mips_elf_tdata (abfd)->abiflags.fp_abi == Val_GNU_MIPS_ABI_FP_64
16671       || mips_elf_tdata (abfd)->abiflags.fp_abi == Val_GNU_MIPS_ABI_FP_64A)
16672     i_ehdrp->e_ident[EI_ABIVERSION] = MIPS_LIBC_ABI_MIPS_O32_FP64;
16673
16674   /* Mark that we need support for absolute symbols in the dynamic loader.  */
16675   if (htab != NULL && htab->use_absolute_zero && htab->gnu_target)
16676     i_ehdrp->e_ident[EI_ABIVERSION] = MIPS_LIBC_ABI_ABSOLUTE;
16677
16678   /* Mark that we need support for .MIPS.xhash in the dynamic linker,
16679      if it is the only hash section that will be created.  */
16680   if (link_info && link_info->emit_gnu_hash && !link_info->emit_hash)
16681     i_ehdrp->e_ident[EI_ABIVERSION] = MIPS_LIBC_ABI_XHASH;
16682
16683   _bfd_elf_post_process_headers (abfd, link_info);
16684 }
16685
16686 int
16687 _bfd_mips_elf_compact_eh_encoding
16688   (struct bfd_link_info *link_info ATTRIBUTE_UNUSED)
16689 {
16690   return DW_EH_PE_pcrel | DW_EH_PE_sdata4;
16691 }
16692
16693 /* Return the opcode for can't unwind.  */
16694
16695 int
16696 _bfd_mips_elf_cant_unwind_opcode
16697   (struct bfd_link_info *link_info ATTRIBUTE_UNUSED)
16698 {
16699   return COMPACT_EH_CANT_UNWIND_OPCODE;
16700 }
16701
16702 /* Record a position XLAT_LOC in the xlat translation table, associated with
16703    the hash entry H.  The entry in the translation table will later be
16704    populated with the real symbol dynindx.  */
16705
16706 void
16707 _bfd_mips_elf_record_xhash_symbol (struct elf_link_hash_entry *h,
16708                                    bfd_vma xlat_loc)
16709 {
16710   struct mips_elf_link_hash_entry *hmips;
16711
16712   hmips = (struct mips_elf_link_hash_entry *) h;
16713   hmips->mipsxhash_loc = xlat_loc;
16714 }