]> Git Repo - binutils.git/blob - bfd/elfxx-mips.c
PR25191, internal error in _bfd_elf_set_section_contents
[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    <[email protected]>.
6    N32/64 ABI support added by Mark Mitchell, CodeSourcery, LLC.
7    <[email protected]>
8    Traditional MIPS targets support added by Koundinya.K, Dansk Data
9    Elektronik & Operations Research Group. <[email protected]>
10
11    This file is part of BFD, the Binary File Descriptor library.
12
13    This program is free software; you can redistribute it and/or modify
14    it under the terms of the GNU General Public License as published by
15    the Free Software Foundation; either version 3 of the License, or
16    (at your option) any later version.
17
18    This program is distributed in the hope that it will be useful,
19    but WITHOUT ANY WARRANTY; without even the implied warranty of
20    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21    GNU General Public License for more details.
22
23    You should have received a copy of the GNU General Public License
24    along with this program; if not, write to the Free Software
25    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
26    MA 02110-1301, USA.  */
27
28
29 /* This file handles functionality common to the different MIPS ABI's.  */
30
31 #include "sysdep.h"
32 #include "bfd.h"
33 #include "libbfd.h"
34 #include "libiberty.h"
35 #include "elf-bfd.h"
36 #include "ecoff-bfd.h"
37 #include "elfxx-mips.h"
38 #include "elf/mips.h"
39 #include "elf-vxworks.h"
40 #include "dwarf2.h"
41
42 /* Get the ECOFF swapping routines.  */
43 #include "coff/sym.h"
44 #include "coff/symconst.h"
45 #include "coff/ecoff.h"
46 #include "coff/mips.h"
47
48 #include "hashtab.h"
49
50 /* Types of TLS GOT entry.  */
51 enum mips_got_tls_type {
52   GOT_TLS_NONE,
53   GOT_TLS_GD,
54   GOT_TLS_LDM,
55   GOT_TLS_IE
56 };
57
58 /* This structure is used to hold information about one GOT entry.
59    There are four types of entry:
60
61       (1) an absolute address
62             requires: abfd == NULL
63             fields: d.address
64
65       (2) a SYMBOL + OFFSET address, where SYMBOL is local to an input bfd
66             requires: abfd != NULL, symndx >= 0, tls_type != GOT_TLS_LDM
67             fields: abfd, symndx, d.addend, tls_type
68
69       (3) a SYMBOL address, where SYMBOL is not local to an input bfd
70             requires: abfd != NULL, symndx == -1
71             fields: d.h, tls_type
72
73       (4) a TLS LDM slot
74             requires: abfd != NULL, symndx == 0, tls_type == GOT_TLS_LDM
75             fields: none; there's only one of these per GOT.  */
76 struct mips_got_entry
77 {
78   /* One input bfd that needs the GOT entry.  */
79   bfd *abfd;
80   /* The index of the symbol, as stored in the relocation r_info, if
81      we have a local symbol; -1 otherwise.  */
82   long symndx;
83   union
84   {
85     /* If abfd == NULL, an address that must be stored in the got.  */
86     bfd_vma address;
87     /* If abfd != NULL && symndx != -1, the addend of the relocation
88        that should be added to the symbol value.  */
89     bfd_vma addend;
90     /* If abfd != NULL && symndx == -1, the hash table entry
91        corresponding to a symbol in the GOT.  The symbol's entry
92        is in the local area if h->global_got_area is GGA_NONE,
93        otherwise it is in the global area.  */
94     struct mips_elf_link_hash_entry *h;
95   } d;
96
97   /* The TLS type of this GOT entry.  An LDM GOT entry will be a local
98      symbol entry with r_symndx == 0.  */
99   unsigned char tls_type;
100
101   /* True if we have filled in the GOT contents for a TLS entry,
102      and created the associated relocations.  */
103   unsigned char tls_initialized;
104
105   /* The offset from the beginning of the .got section to the entry
106      corresponding to this symbol+addend.  If it's a global symbol
107      whose offset is yet to be decided, it's going to be -1.  */
108   long gotidx;
109 };
110
111 /* This structure represents a GOT page reference from an input bfd.
112    Each instance represents a symbol + ADDEND, where the representation
113    of the symbol depends on whether it is local to the input bfd.
114    If it is, then SYMNDX >= 0, and the symbol has index SYMNDX in U.ABFD.
115    Otherwise, SYMNDX < 0 and U.H points to the symbol's hash table entry.
116
117    Page references with SYMNDX >= 0 always become page references
118    in the output.  Page references with SYMNDX < 0 only become page
119    references if the symbol binds locally; in other cases, the page
120    reference decays to a global GOT reference.  */
121 struct mips_got_page_ref
122 {
123   long symndx;
124   union
125   {
126     struct mips_elf_link_hash_entry *h;
127     bfd *abfd;
128   } u;
129   bfd_vma addend;
130 };
131
132 /* This structure describes a range of addends: [MIN_ADDEND, MAX_ADDEND].
133    The structures form a non-overlapping list that is sorted by increasing
134    MIN_ADDEND.  */
135 struct mips_got_page_range
136 {
137   struct mips_got_page_range *next;
138   bfd_signed_vma min_addend;
139   bfd_signed_vma max_addend;
140 };
141
142 /* This structure describes the range of addends that are applied to page
143    relocations against a given section.  */
144 struct mips_got_page_entry
145 {
146   /* The section that these entries are based on.  */
147   asection *sec;
148   /* The ranges for this page entry.  */
149   struct mips_got_page_range *ranges;
150   /* The maximum number of page entries needed for RANGES.  */
151   bfd_vma num_pages;
152 };
153
154 /* This structure is used to hold .got information when linking.  */
155
156 struct mips_got_info
157 {
158   /* The number of global .got entries.  */
159   unsigned int global_gotno;
160   /* The number of global .got entries that are in the GGA_RELOC_ONLY area.  */
161   unsigned int reloc_only_gotno;
162   /* The number of .got slots used for TLS.  */
163   unsigned int tls_gotno;
164   /* The first unused TLS .got entry.  Used only during
165      mips_elf_initialize_tls_index.  */
166   unsigned int tls_assigned_gotno;
167   /* The number of local .got entries, eventually including page entries.  */
168   unsigned int local_gotno;
169   /* The maximum number of page entries needed.  */
170   unsigned int page_gotno;
171   /* The number of relocations needed for the GOT entries.  */
172   unsigned int relocs;
173   /* The first unused local .got entry.  */
174   unsigned int assigned_low_gotno;
175   /* The last unused local .got entry.  */
176   unsigned int assigned_high_gotno;
177   /* A hash table holding members of the got.  */
178   struct htab *got_entries;
179   /* A hash table holding mips_got_page_ref structures.  */
180   struct htab *got_page_refs;
181   /* A hash table of mips_got_page_entry structures.  */
182   struct htab *got_page_entries;
183   /* In multi-got links, a pointer to the next got (err, rather, most
184      of the time, it points to the previous got).  */
185   struct mips_got_info *next;
186 };
187
188 /* Structure passed when merging bfds' gots.  */
189
190 struct mips_elf_got_per_bfd_arg
191 {
192   /* The output bfd.  */
193   bfd *obfd;
194   /* The link information.  */
195   struct bfd_link_info *info;
196   /* A pointer to the primary got, i.e., the one that's going to get
197      the implicit relocations from DT_MIPS_LOCAL_GOTNO and
198      DT_MIPS_GOTSYM.  */
199   struct mips_got_info *primary;
200   /* A non-primary got we're trying to merge with other input bfd's
201      gots.  */
202   struct mips_got_info *current;
203   /* The maximum number of got entries that can be addressed with a
204      16-bit offset.  */
205   unsigned int max_count;
206   /* The maximum number of page entries needed by each got.  */
207   unsigned int max_pages;
208   /* The total number of global entries which will live in the
209      primary got and be automatically relocated.  This includes
210      those not referenced by the primary GOT but included in
211      the "master" GOT.  */
212   unsigned int global_count;
213 };
214
215 /* A structure used to pass information to htab_traverse callbacks
216    when laying out the GOT.  */
217
218 struct mips_elf_traverse_got_arg
219 {
220   struct bfd_link_info *info;
221   struct mips_got_info *g;
222   int value;
223 };
224
225 struct _mips_elf_section_data
226 {
227   struct bfd_elf_section_data elf;
228   union
229   {
230     bfd_byte *tdata;
231   } u;
232 };
233
234 #define mips_elf_section_data(sec) \
235   ((struct _mips_elf_section_data *) elf_section_data (sec))
236
237 #define is_mips_elf(bfd)                                \
238   (bfd_get_flavour (bfd) == bfd_target_elf_flavour      \
239    && elf_tdata (bfd) != NULL                           \
240    && elf_object_id (bfd) == MIPS_ELF_DATA)
241
242 /* The ABI says that every symbol used by dynamic relocations must have
243    a global GOT entry.  Among other things, this provides the dynamic
244    linker with a free, directly-indexed cache.  The GOT can therefore
245    contain symbols that are not referenced by GOT relocations themselves
246    (in other words, it may have symbols that are not referenced by things
247    like R_MIPS_GOT16 and R_MIPS_GOT_PAGE).
248
249    GOT relocations are less likely to overflow if we put the associated
250    GOT entries towards the beginning.  We therefore divide the global
251    GOT entries into two areas: "normal" and "reloc-only".  Entries in
252    the first area can be used for both dynamic relocations and GP-relative
253    accesses, while those in the "reloc-only" area are for dynamic
254    relocations only.
255
256    These GGA_* ("Global GOT Area") values are organised so that lower
257    values are more general than higher values.  Also, non-GGA_NONE
258    values are ordered by the position of the area in the GOT.  */
259 #define GGA_NORMAL 0
260 #define GGA_RELOC_ONLY 1
261 #define GGA_NONE 2
262
263 /* Information about a non-PIC interface to a PIC function.  There are
264    two ways of creating these interfaces.  The first is to add:
265
266         lui     $25,%hi(func)
267         addiu   $25,$25,%lo(func)
268
269    immediately before a PIC function "func".  The second is to add:
270
271         lui     $25,%hi(func)
272         j       func
273         addiu   $25,$25,%lo(func)
274
275    to a separate trampoline section.
276
277    Stubs of the first kind go in a new section immediately before the
278    target function.  Stubs of the second kind go in a single section
279    pointed to by the hash table's "strampoline" field.  */
280 struct mips_elf_la25_stub {
281   /* The generated section that contains this stub.  */
282   asection *stub_section;
283
284   /* The offset of the stub from the start of STUB_SECTION.  */
285   bfd_vma offset;
286
287   /* One symbol for the original function.  Its location is available
288      in H->root.root.u.def.  */
289   struct mips_elf_link_hash_entry *h;
290 };
291
292 /* Macros for populating a mips_elf_la25_stub.  */
293
294 #define LA25_LUI(VAL) (0x3c190000 | (VAL))      /* lui t9,VAL */
295 #define LA25_J(VAL) (0x08000000 | (((VAL) >> 2) & 0x3ffffff)) /* j VAL */
296 #define LA25_BC(VAL) (0xc8000000 | (((VAL) >> 2) & 0x3ffffff)) /* bc VAL */
297 #define LA25_ADDIU(VAL) (0x27390000 | (VAL))    /* addiu t9,t9,VAL */
298 #define LA25_LUI_MICROMIPS(VAL)                                         \
299   (0x41b90000 | (VAL))                          /* lui t9,VAL */
300 #define LA25_J_MICROMIPS(VAL)                                           \
301   (0xd4000000 | (((VAL) >> 1) & 0x3ffffff))     /* j VAL */
302 #define LA25_ADDIU_MICROMIPS(VAL)                                       \
303   (0x33390000 | (VAL))                          /* addiu t9,t9,VAL */
304
305 /* This structure is passed to mips_elf_sort_hash_table_f when sorting
306    the dynamic symbols.  */
307
308 struct mips_elf_hash_sort_data
309 {
310   /* The symbol in the global GOT with the lowest dynamic symbol table
311      index.  */
312   struct elf_link_hash_entry *low;
313   /* The least dynamic symbol table index corresponding to a non-TLS
314      symbol with a GOT entry.  */
315   bfd_size_type min_got_dynindx;
316   /* The greatest dynamic symbol table index corresponding to a symbol
317      with a GOT entry that is not referenced (e.g., a dynamic symbol
318      with dynamic relocations pointing to it from non-primary GOTs).  */
319   bfd_size_type max_unref_got_dynindx;
320   /* The greatest dynamic symbol table index corresponding to a local
321      symbol.  */
322   bfd_size_type max_local_dynindx;
323   /* The greatest dynamic symbol table index corresponding to an external
324      symbol without a GOT entry.  */
325   bfd_size_type max_non_got_dynindx;
326   /* If non-NULL, output BFD for .MIPS.xhash finalization.  */
327   bfd *output_bfd;
328   /* If non-NULL, pointer to contents of .MIPS.xhash for filling in
329      real final dynindx.  */
330   bfd_byte *mipsxhash;
331 };
332
333 /* We make up to two PLT entries if needed, one for standard MIPS code
334    and one for compressed code, either a MIPS16 or microMIPS one.  We
335    keep a separate record of traditional lazy-binding stubs, for easier
336    processing.  */
337
338 struct plt_entry
339 {
340   /* Traditional SVR4 stub offset, or -1 if none.  */
341   bfd_vma stub_offset;
342
343   /* Standard PLT entry offset, or -1 if none.  */
344   bfd_vma mips_offset;
345
346   /* Compressed PLT entry offset, or -1 if none.  */
347   bfd_vma comp_offset;
348
349   /* The corresponding .got.plt index, or -1 if none.  */
350   bfd_vma gotplt_index;
351
352   /* Whether we need a standard PLT entry.  */
353   unsigned int need_mips : 1;
354
355   /* Whether we need a compressed PLT entry.  */
356   unsigned int need_comp : 1;
357 };
358
359 /* The MIPS ELF linker needs additional information for each symbol in
360    the global hash table.  */
361
362 struct mips_elf_link_hash_entry
363 {
364   struct elf_link_hash_entry root;
365
366   /* External symbol information.  */
367   EXTR esym;
368
369   /* The la25 stub we have created for ths symbol, if any.  */
370   struct mips_elf_la25_stub *la25_stub;
371
372   /* Number of R_MIPS_32, R_MIPS_REL32, or R_MIPS_64 relocs against
373      this symbol.  */
374   unsigned int possibly_dynamic_relocs;
375
376   /* If there is a stub that 32 bit functions should use to call this
377      16 bit function, this points to the section containing the stub.  */
378   asection *fn_stub;
379
380   /* If there is a stub that 16 bit functions should use to call this
381      32 bit function, this points to the section containing the stub.  */
382   asection *call_stub;
383
384   /* This is like the call_stub field, but it is used if the function
385      being called returns a floating point value.  */
386   asection *call_fp_stub;
387
388   /* If non-zero, location in .MIPS.xhash to write real final dynindx.  */
389   bfd_vma mipsxhash_loc;
390
391   /* The highest GGA_* value that satisfies all references to this symbol.  */
392   unsigned int global_got_area : 2;
393
394   /* True if all GOT relocations against this symbol are for calls.  This is
395      a looser condition than no_fn_stub below, because there may be other
396      non-call non-GOT relocations against the symbol.  */
397   unsigned int got_only_for_calls : 1;
398
399   /* True if one of the relocations described by possibly_dynamic_relocs
400      is against a readonly section.  */
401   unsigned int readonly_reloc : 1;
402
403   /* True if there is a relocation against this symbol that must be
404      resolved by the static linker (in other words, if the relocation
405      cannot possibly be made dynamic).  */
406   unsigned int has_static_relocs : 1;
407
408   /* True if we must not create a .MIPS.stubs entry for this symbol.
409      This is set, for example, if there are relocations related to
410      taking the function's address, i.e. any but R_MIPS_CALL*16 ones.
411      See "MIPS ABI Supplement, 3rd Edition", p. 4-20.  */
412   unsigned int no_fn_stub : 1;
413
414   /* Whether we need the fn_stub; this is true if this symbol appears
415      in any relocs other than a 16 bit call.  */
416   unsigned int need_fn_stub : 1;
417
418   /* True if this symbol is referenced by branch relocations from
419      any non-PIC input file.  This is used to determine whether an
420      la25 stub is required.  */
421   unsigned int has_nonpic_branches : 1;
422
423   /* Does this symbol need a traditional MIPS lazy-binding stub
424      (as opposed to a PLT entry)?  */
425   unsigned int needs_lazy_stub : 1;
426
427   /* Does this symbol resolve to a PLT entry?  */
428   unsigned int use_plt_entry : 1;
429 };
430
431 /* MIPS ELF linker hash table.  */
432
433 struct mips_elf_link_hash_table
434 {
435   struct elf_link_hash_table root;
436
437   /* The number of .rtproc entries.  */
438   bfd_size_type procedure_count;
439
440   /* The size of the .compact_rel section (if SGI_COMPAT).  */
441   bfd_size_type compact_rel_size;
442
443   /* This flag indicates that the value of DT_MIPS_RLD_MAP dynamic entry
444      is set to the address of __rld_obj_head as in IRIX5 and IRIX6.  */
445   bfd_boolean use_rld_obj_head;
446
447   /* The  __rld_map or __rld_obj_head symbol. */
448   struct elf_link_hash_entry *rld_symbol;
449
450   /* This is set if we see any mips16 stub sections.  */
451   bfd_boolean mips16_stubs_seen;
452
453   /* True if we can generate copy relocs and PLTs.  */
454   bfd_boolean use_plts_and_copy_relocs;
455
456   /* True if we can only use 32-bit microMIPS instructions.  */
457   bfd_boolean insn32;
458
459   /* True if we suppress checks for invalid branches between ISA modes.  */
460   bfd_boolean ignore_branch_isa;
461
462   /* True if we are targetting R6 compact branches.  */
463   bfd_boolean compact_branches;
464
465   /* True if we're generating code for VxWorks.  */
466   bfd_boolean is_vxworks;
467
468   /* True if we already reported the small-data section overflow.  */
469   bfd_boolean small_data_overflow_reported;
470
471   /* True if we use the special `__gnu_absolute_zero' symbol.  */
472   bfd_boolean use_absolute_zero;
473
474   /* True if we have been configured for a GNU target.  */
475   bfd_boolean gnu_target;
476
477   /* Shortcuts to some dynamic sections, or NULL if they are not
478      being used.  */
479   asection *srelplt2;
480   asection *sstubs;
481
482   /* The master GOT information.  */
483   struct mips_got_info *got_info;
484
485   /* The global symbol in the GOT with the lowest index in the dynamic
486      symbol table.  */
487   struct elf_link_hash_entry *global_gotsym;
488
489   /* The size of the PLT header in bytes.  */
490   bfd_vma plt_header_size;
491
492   /* The size of a standard PLT entry in bytes.  */
493   bfd_vma plt_mips_entry_size;
494
495   /* The size of a compressed PLT entry in bytes.  */
496   bfd_vma plt_comp_entry_size;
497
498   /* The offset of the next standard PLT entry to create.  */
499   bfd_vma plt_mips_offset;
500
501   /* The offset of the next compressed PLT entry to create.  */
502   bfd_vma plt_comp_offset;
503
504   /* The index of the next .got.plt entry to create.  */
505   bfd_vma plt_got_index;
506
507   /* The number of functions that need a lazy-binding stub.  */
508   bfd_vma lazy_stub_count;
509
510   /* The size of a function stub entry in bytes.  */
511   bfd_vma function_stub_size;
512
513   /* The number of reserved entries at the beginning of the GOT.  */
514   unsigned int reserved_gotno;
515
516   /* The section used for mips_elf_la25_stub trampolines.
517      See the comment above that structure for details.  */
518   asection *strampoline;
519
520   /* A table of mips_elf_la25_stubs, indexed by (input_section, offset)
521      pairs.  */
522   htab_t la25_stubs;
523
524   /* A function FN (NAME, IS, OS) that creates a new input section
525      called NAME and links it to output section OS.  If IS is nonnull,
526      the new section should go immediately before it, otherwise it
527      should go at the (current) beginning of OS.
528
529      The function returns the new section on success, otherwise it
530      returns null.  */
531   asection *(*add_stub_section) (const char *, asection *, asection *);
532
533   /* Small local sym cache.  */
534   struct sym_cache sym_cache;
535
536   /* Is the PLT header compressed?  */
537   unsigned int plt_header_is_comp : 1;
538 };
539
540 /* Get the MIPS ELF linker hash table from a link_info structure.  */
541
542 #define mips_elf_hash_table(p) \
543   (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
544   == MIPS_ELF_DATA ? ((struct mips_elf_link_hash_table *) ((p)->hash)) : NULL)
545
546 /* A structure used to communicate with htab_traverse callbacks.  */
547 struct mips_htab_traverse_info
548 {
549   /* The usual link-wide information.  */
550   struct bfd_link_info *info;
551   bfd *output_bfd;
552
553   /* Starts off FALSE and is set to TRUE if the link should be aborted.  */
554   bfd_boolean error;
555 };
556
557 /* MIPS ELF private object data.  */
558
559 struct mips_elf_obj_tdata
560 {
561   /* Generic ELF private object data.  */
562   struct elf_obj_tdata root;
563
564   /* Input BFD providing Tag_GNU_MIPS_ABI_FP attribute for output.  */
565   bfd *abi_fp_bfd;
566
567   /* Input BFD providing Tag_GNU_MIPS_ABI_MSA attribute for output.  */
568   bfd *abi_msa_bfd;
569
570   /* The abiflags for this object.  */
571   Elf_Internal_ABIFlags_v0 abiflags;
572   bfd_boolean abiflags_valid;
573
574   /* The GOT requirements of input bfds.  */
575   struct mips_got_info *got;
576
577   /* Used by _bfd_mips_elf_find_nearest_line.  The structure could be
578      included directly in this one, but there's no point to wasting
579      the memory just for the infrequently called find_nearest_line.  */
580   struct mips_elf_find_line *find_line_info;
581
582   /* An array of stub sections indexed by symbol number.  */
583   asection **local_stubs;
584   asection **local_call_stubs;
585
586   /* The Irix 5 support uses two virtual sections, which represent
587      text/data symbols defined in dynamic objects.  */
588   asymbol *elf_data_symbol;
589   asymbol *elf_text_symbol;
590   asection *elf_data_section;
591   asection *elf_text_section;
592 };
593
594 /* Get MIPS ELF private object data from BFD's tdata.  */
595
596 #define mips_elf_tdata(bfd) \
597   ((struct mips_elf_obj_tdata *) (bfd)->tdata.any)
598
599 #define TLS_RELOC_P(r_type) \
600   (r_type == R_MIPS_TLS_DTPMOD32                \
601    || r_type == R_MIPS_TLS_DTPMOD64             \
602    || r_type == R_MIPS_TLS_DTPREL32             \
603    || r_type == R_MIPS_TLS_DTPREL64             \
604    || r_type == R_MIPS_TLS_GD                   \
605    || r_type == R_MIPS_TLS_LDM                  \
606    || r_type == R_MIPS_TLS_DTPREL_HI16          \
607    || r_type == R_MIPS_TLS_DTPREL_LO16          \
608    || r_type == R_MIPS_TLS_GOTTPREL             \
609    || r_type == R_MIPS_TLS_TPREL32              \
610    || r_type == R_MIPS_TLS_TPREL64              \
611    || r_type == R_MIPS_TLS_TPREL_HI16           \
612    || r_type == R_MIPS_TLS_TPREL_LO16           \
613    || r_type == R_MIPS16_TLS_GD                 \
614    || r_type == R_MIPS16_TLS_LDM                \
615    || r_type == R_MIPS16_TLS_DTPREL_HI16        \
616    || r_type == R_MIPS16_TLS_DTPREL_LO16        \
617    || r_type == R_MIPS16_TLS_GOTTPREL           \
618    || r_type == R_MIPS16_TLS_TPREL_HI16         \
619    || r_type == R_MIPS16_TLS_TPREL_LO16         \
620    || r_type == R_MICROMIPS_TLS_GD              \
621    || r_type == R_MICROMIPS_TLS_LDM             \
622    || r_type == R_MICROMIPS_TLS_DTPREL_HI16     \
623    || r_type == R_MICROMIPS_TLS_DTPREL_LO16     \
624    || r_type == R_MICROMIPS_TLS_GOTTPREL        \
625    || r_type == R_MICROMIPS_TLS_TPREL_HI16      \
626    || r_type == R_MICROMIPS_TLS_TPREL_LO16)
627
628 /* Structure used to pass information to mips_elf_output_extsym.  */
629
630 struct extsym_info
631 {
632   bfd *abfd;
633   struct bfd_link_info *info;
634   struct ecoff_debug_info *debug;
635   const struct ecoff_debug_swap *swap;
636   bfd_boolean failed;
637 };
638
639 /* The names of the runtime procedure table symbols used on IRIX5.  */
640
641 static const char * const mips_elf_dynsym_rtproc_names[] =
642 {
643   "_procedure_table",
644   "_procedure_string_table",
645   "_procedure_table_size",
646   NULL
647 };
648
649 /* These structures are used to generate the .compact_rel section on
650    IRIX5.  */
651
652 typedef struct
653 {
654   unsigned long id1;            /* Always one?  */
655   unsigned long num;            /* Number of compact relocation entries.  */
656   unsigned long id2;            /* Always two?  */
657   unsigned long offset;         /* The file offset of the first relocation.  */
658   unsigned long reserved0;      /* Zero?  */
659   unsigned long reserved1;      /* Zero?  */
660 } Elf32_compact_rel;
661
662 typedef struct
663 {
664   bfd_byte id1[4];
665   bfd_byte num[4];
666   bfd_byte id2[4];
667   bfd_byte offset[4];
668   bfd_byte reserved0[4];
669   bfd_byte reserved1[4];
670 } Elf32_External_compact_rel;
671
672 typedef struct
673 {
674   unsigned int ctype : 1;       /* 1: long 0: short format. See below.  */
675   unsigned int rtype : 4;       /* Relocation types. See below.  */
676   unsigned int dist2to : 8;
677   unsigned int relvaddr : 19;   /* (VADDR - vaddr of the previous entry)/ 4 */
678   unsigned long konst;          /* KONST field. See below.  */
679   unsigned long vaddr;          /* VADDR to be relocated.  */
680 } Elf32_crinfo;
681
682 typedef struct
683 {
684   unsigned int ctype : 1;       /* 1: long 0: short format. See below.  */
685   unsigned int rtype : 4;       /* Relocation types. See below.  */
686   unsigned int dist2to : 8;
687   unsigned int relvaddr : 19;   /* (VADDR - vaddr of the previous entry)/ 4 */
688   unsigned long konst;          /* KONST field. See below.  */
689 } Elf32_crinfo2;
690
691 typedef struct
692 {
693   bfd_byte info[4];
694   bfd_byte konst[4];
695   bfd_byte vaddr[4];
696 } Elf32_External_crinfo;
697
698 typedef struct
699 {
700   bfd_byte info[4];
701   bfd_byte konst[4];
702 } Elf32_External_crinfo2;
703
704 /* These are the constants used to swap the bitfields in a crinfo.  */
705
706 #define CRINFO_CTYPE (0x1)
707 #define CRINFO_CTYPE_SH (31)
708 #define CRINFO_RTYPE (0xf)
709 #define CRINFO_RTYPE_SH (27)
710 #define CRINFO_DIST2TO (0xff)
711 #define CRINFO_DIST2TO_SH (19)
712 #define CRINFO_RELVADDR (0x7ffff)
713 #define CRINFO_RELVADDR_SH (0)
714
715 /* A compact relocation info has long (3 words) or short (2 words)
716    formats.  A short format doesn't have VADDR field and relvaddr
717    fields contains ((VADDR - vaddr of the previous entry) >> 2).  */
718 #define CRF_MIPS_LONG                   1
719 #define CRF_MIPS_SHORT                  0
720
721 /* There are 4 types of compact relocation at least. The value KONST
722    has different meaning for each type:
723
724    (type)               (konst)
725    CT_MIPS_REL32        Address in data
726    CT_MIPS_WORD         Address in word (XXX)
727    CT_MIPS_GPHI_LO      GP - vaddr
728    CT_MIPS_JMPAD        Address to jump
729    */
730
731 #define CRT_MIPS_REL32                  0xa
732 #define CRT_MIPS_WORD                   0xb
733 #define CRT_MIPS_GPHI_LO                0xc
734 #define CRT_MIPS_JMPAD                  0xd
735
736 #define mips_elf_set_cr_format(x,format)        ((x).ctype = (format))
737 #define mips_elf_set_cr_type(x,type)            ((x).rtype = (type))
738 #define mips_elf_set_cr_dist2to(x,v)            ((x).dist2to = (v))
739 #define mips_elf_set_cr_relvaddr(x,d)           ((x).relvaddr = (d)<<2)
740 \f
741 /* The structure of the runtime procedure descriptor created by the
742    loader for use by the static exception system.  */
743
744 typedef struct runtime_pdr {
745         bfd_vma adr;            /* Memory address of start of procedure.  */
746         long    regmask;        /* Save register mask.  */
747         long    regoffset;      /* Save register offset.  */
748         long    fregmask;       /* Save floating point register mask.  */
749         long    fregoffset;     /* Save floating point register offset.  */
750         long    frameoffset;    /* Frame size.  */
751         short   framereg;       /* Frame pointer register.  */
752         short   pcreg;          /* Offset or reg of return pc.  */
753         long    irpss;          /* Index into the runtime string table.  */
754         long    reserved;
755         struct exception_info *exception_info;/* Pointer to exception array.  */
756 } RPDR, *pRPDR;
757 #define cbRPDR sizeof (RPDR)
758 #define rpdNil ((pRPDR) 0)
759 \f
760 static struct mips_got_entry *mips_elf_create_local_got_entry
761   (bfd *, struct bfd_link_info *, bfd *, bfd_vma, unsigned long,
762    struct mips_elf_link_hash_entry *, int);
763 static bfd_boolean mips_elf_sort_hash_table_f
764   (struct mips_elf_link_hash_entry *, void *);
765 static bfd_vma mips_elf_high
766   (bfd_vma);
767 static bfd_boolean mips_elf_create_dynamic_relocation
768   (bfd *, struct bfd_link_info *, const Elf_Internal_Rela *,
769    struct mips_elf_link_hash_entry *, asection *, bfd_vma,
770    bfd_vma *, asection *);
771 static bfd_vma mips_elf_adjust_gp
772   (bfd *, struct mips_got_info *, bfd *);
773
774 /* This will be used when we sort the dynamic relocation records.  */
775 static bfd *reldyn_sorting_bfd;
776
777 /* True if ABFD is for CPUs with load interlocking that include
778    non-MIPS1 CPUs and R3900.  */
779 #define LOAD_INTERLOCKS_P(abfd) \
780   (   ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) != E_MIPS_ARCH_1) \
781    || ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == E_MIPS_MACH_3900))
782
783 /* True if ABFD is for CPUs that are faster if JAL is converted to BAL.
784    This should be safe for all architectures.  We enable this predicate
785    for RM9000 for now.  */
786 #define JAL_TO_BAL_P(abfd) \
787   ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == E_MIPS_MACH_9000)
788
789 /* True if ABFD is for CPUs that are faster if JALR is converted to BAL.
790    This should be safe for all architectures.  We enable this predicate for
791    all CPUs.  */
792 #define JALR_TO_BAL_P(abfd) 1
793
794 /* True if ABFD is for CPUs that are faster if JR is converted to B.
795    This should be safe for all architectures.  We enable this predicate for
796    all CPUs.  */
797 #define JR_TO_B_P(abfd) 1
798
799 /* True if ABFD is a PIC object.  */
800 #define PIC_OBJECT_P(abfd) \
801   ((elf_elfheader (abfd)->e_flags & EF_MIPS_PIC) != 0)
802
803 /* Nonzero if ABFD is using the O32 ABI.  */
804 #define ABI_O32_P(abfd) \
805   ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O32)
806
807 /* Nonzero if ABFD is using the N32 ABI.  */
808 #define ABI_N32_P(abfd) \
809   ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI2) != 0)
810
811 /* Nonzero if ABFD is using the N64 ABI.  */
812 #define ABI_64_P(abfd) \
813   (get_elf_backend_data (abfd)->s->elfclass == ELFCLASS64)
814
815 /* Nonzero if ABFD is using NewABI conventions.  */
816 #define NEWABI_P(abfd) (ABI_N32_P (abfd) || ABI_64_P (abfd))
817
818 /* Nonzero if ABFD has microMIPS code.  */
819 #define MICROMIPS_P(abfd) \
820   ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MICROMIPS) != 0)
821
822 /* Nonzero if ABFD is MIPS R6.  */
823 #define MIPSR6_P(abfd) \
824   ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R6 \
825     || (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64R6)
826
827 /* The IRIX compatibility level we are striving for.  */
828 #define IRIX_COMPAT(abfd) \
829   (get_elf_backend_data (abfd)->elf_backend_mips_irix_compat (abfd))
830
831 /* Whether we are trying to be compatible with IRIX at all.  */
832 #define SGI_COMPAT(abfd) \
833   (IRIX_COMPAT (abfd) != ict_none)
834
835 /* The name of the options section.  */
836 #define MIPS_ELF_OPTIONS_SECTION_NAME(abfd) \
837   (NEWABI_P (abfd) ? ".MIPS.options" : ".options")
838
839 /* True if NAME is the recognized name of any SHT_MIPS_OPTIONS section.
840    Some IRIX system files do not use MIPS_ELF_OPTIONS_SECTION_NAME.  */
841 #define MIPS_ELF_OPTIONS_SECTION_NAME_P(NAME) \
842   (strcmp (NAME, ".MIPS.options") == 0 || strcmp (NAME, ".options") == 0)
843
844 /* True if NAME is the recognized name of any SHT_MIPS_ABIFLAGS section.  */
845 #define MIPS_ELF_ABIFLAGS_SECTION_NAME_P(NAME) \
846   (strcmp (NAME, ".MIPS.abiflags") == 0)
847
848 /* Whether the section is readonly.  */
849 #define MIPS_ELF_READONLY_SECTION(sec) \
850   ((sec->flags & (SEC_ALLOC | SEC_LOAD | SEC_READONLY))         \
851    == (SEC_ALLOC | SEC_LOAD | SEC_READONLY))
852
853 /* The name of the stub section.  */
854 #define MIPS_ELF_STUB_SECTION_NAME(abfd) ".MIPS.stubs"
855
856 /* The size of an external REL relocation.  */
857 #define MIPS_ELF_REL_SIZE(abfd) \
858   (get_elf_backend_data (abfd)->s->sizeof_rel)
859
860 /* The size of an external RELA relocation.  */
861 #define MIPS_ELF_RELA_SIZE(abfd) \
862   (get_elf_backend_data (abfd)->s->sizeof_rela)
863
864 /* The size of an external dynamic table entry.  */
865 #define MIPS_ELF_DYN_SIZE(abfd) \
866   (get_elf_backend_data (abfd)->s->sizeof_dyn)
867
868 /* The size of a GOT entry.  */
869 #define MIPS_ELF_GOT_SIZE(abfd) \
870   (get_elf_backend_data (abfd)->s->arch_size / 8)
871
872 /* The size of the .rld_map section. */
873 #define MIPS_ELF_RLD_MAP_SIZE(abfd) \
874   (get_elf_backend_data (abfd)->s->arch_size / 8)
875
876 /* The size of a symbol-table entry.  */
877 #define MIPS_ELF_SYM_SIZE(abfd) \
878   (get_elf_backend_data (abfd)->s->sizeof_sym)
879
880 /* The default alignment for sections, as a power of two.  */
881 #define MIPS_ELF_LOG_FILE_ALIGN(abfd)                           \
882   (get_elf_backend_data (abfd)->s->log_file_align)
883
884 /* Get word-sized data.  */
885 #define MIPS_ELF_GET_WORD(abfd, ptr) \
886   (ABI_64_P (abfd) ? bfd_get_64 (abfd, ptr) : bfd_get_32 (abfd, ptr))
887
888 /* Put out word-sized data.  */
889 #define MIPS_ELF_PUT_WORD(abfd, val, ptr)       \
890   (ABI_64_P (abfd)                              \
891    ? bfd_put_64 (abfd, val, ptr)                \
892    : bfd_put_32 (abfd, val, ptr))
893
894 /* The opcode for word-sized loads (LW or LD).  */
895 #define MIPS_ELF_LOAD_WORD(abfd) \
896   (ABI_64_P (abfd) ? 0xdc000000 : 0x8c000000)
897
898 /* Add a dynamic symbol table-entry.  */
899 #define MIPS_ELF_ADD_DYNAMIC_ENTRY(info, tag, val)      \
900   _bfd_elf_add_dynamic_entry (info, tag, val)
901
902 #define MIPS_ELF_RTYPE_TO_HOWTO(abfd, rtype, rela)                      \
903   (get_elf_backend_data (abfd)->elf_backend_mips_rtype_to_howto (abfd, rtype, rela))
904
905 /* The name of the dynamic relocation section.  */
906 #define MIPS_ELF_REL_DYN_NAME(INFO) \
907   (mips_elf_hash_table (INFO)->is_vxworks ? ".rela.dyn" : ".rel.dyn")
908
909 /* In case we're on a 32-bit machine, construct a 64-bit "-1" value
910    from smaller values.  Start with zero, widen, *then* decrement.  */
911 #define MINUS_ONE       (((bfd_vma)0) - 1)
912 #define MINUS_TWO       (((bfd_vma)0) - 2)
913
914 /* The value to write into got[1] for SVR4 targets, to identify it is
915    a GNU object.  The dynamic linker can then use got[1] to store the
916    module pointer.  */
917 #define MIPS_ELF_GNU_GOT1_MASK(abfd) \
918   ((bfd_vma) 1 << (ABI_64_P (abfd) ? 63 : 31))
919
920 /* The offset of $gp from the beginning of the .got section.  */
921 #define ELF_MIPS_GP_OFFSET(INFO) \
922   (mips_elf_hash_table (INFO)->is_vxworks ? 0x0 : 0x7ff0)
923
924 /* The maximum size of the GOT for it to be addressable using 16-bit
925    offsets from $gp.  */
926 #define MIPS_ELF_GOT_MAX_SIZE(INFO) (ELF_MIPS_GP_OFFSET (INFO) + 0x7fff)
927
928 /* Instructions which appear in a stub.  */
929 #define STUB_LW(abfd)                                                   \
930   ((ABI_64_P (abfd)                                                     \
931     ? 0xdf998010                                /* ld t9,0x8010(gp) */  \
932     : 0x8f998010))                              /* lw t9,0x8010(gp) */
933 #define STUB_MOVE 0x03e07825                    /* or t7,ra,zero */
934 #define STUB_LUI(VAL) (0x3c180000 + (VAL))      /* lui t8,VAL */
935 #define STUB_JALR 0x0320f809                    /* jalr ra,t9 */
936 #define STUB_JALRC 0xf8190000                   /* jalrc ra,t9 */
937 #define STUB_ORI(VAL) (0x37180000 + (VAL))      /* ori t8,t8,VAL */
938 #define STUB_LI16U(VAL) (0x34180000 + (VAL))    /* ori t8,zero,VAL unsigned */
939 #define STUB_LI16S(abfd, VAL)                                           \
940    ((ABI_64_P (abfd)                                                    \
941     ? (0x64180000 + (VAL))      /* daddiu t8,zero,VAL sign extended */  \
942     : (0x24180000 + (VAL))))    /* addiu t8,zero,VAL sign extended */
943
944 /* Likewise for the microMIPS ASE.  */
945 #define STUB_LW_MICROMIPS(abfd)                                         \
946   (ABI_64_P (abfd)                                                      \
947    ? 0xdf3c8010                                 /* ld t9,0x8010(gp) */  \
948    : 0xff3c8010)                                /* lw t9,0x8010(gp) */
949 #define STUB_MOVE_MICROMIPS 0x0dff              /* move t7,ra */
950 #define STUB_MOVE32_MICROMIPS 0x001f7a90        /* or t7,ra,zero */
951 #define STUB_LUI_MICROMIPS(VAL)                                         \
952    (0x41b80000 + (VAL))                         /* lui t8,VAL */
953 #define STUB_JALR_MICROMIPS 0x45d9              /* jalr t9 */
954 #define STUB_JALR32_MICROMIPS 0x03f90f3c        /* jalr ra,t9 */
955 #define STUB_ORI_MICROMIPS(VAL)                                         \
956   (0x53180000 + (VAL))                          /* ori t8,t8,VAL */
957 #define STUB_LI16U_MICROMIPS(VAL)                                       \
958   (0x53000000 + (VAL))                          /* ori t8,zero,VAL unsigned */
959 #define STUB_LI16S_MICROMIPS(abfd, VAL)                                 \
960    (ABI_64_P (abfd)                                                     \
961     ? 0x5f000000 + (VAL)        /* daddiu t8,zero,VAL sign extended */  \
962     : 0x33000000 + (VAL))       /* addiu t8,zero,VAL sign extended */
963
964 #define MIPS_FUNCTION_STUB_NORMAL_SIZE 16
965 #define MIPS_FUNCTION_STUB_BIG_SIZE 20
966 #define MICROMIPS_FUNCTION_STUB_NORMAL_SIZE 12
967 #define MICROMIPS_FUNCTION_STUB_BIG_SIZE 16
968 #define MICROMIPS_INSN32_FUNCTION_STUB_NORMAL_SIZE 16
969 #define MICROMIPS_INSN32_FUNCTION_STUB_BIG_SIZE 20
970
971 /* The name of the dynamic interpreter.  This is put in the .interp
972    section.  */
973
974 #define ELF_DYNAMIC_INTERPRETER(abfd)           \
975    (ABI_N32_P (abfd) ? "/usr/lib32/libc.so.1"   \
976     : ABI_64_P (abfd) ? "/usr/lib64/libc.so.1"  \
977     : "/usr/lib/libc.so.1")
978
979 #ifdef BFD64
980 #define MNAME(bfd,pre,pos) \
981   (ABI_64_P (bfd) ? CONCAT4 (pre,64,_,pos) : CONCAT4 (pre,32,_,pos))
982 #define ELF_R_SYM(bfd, i)                                       \
983   (ABI_64_P (bfd) ? ELF64_R_SYM (i) : ELF32_R_SYM (i))
984 #define ELF_R_TYPE(bfd, i)                                      \
985   (ABI_64_P (bfd) ? ELF64_MIPS_R_TYPE (i) : ELF32_R_TYPE (i))
986 #define ELF_R_INFO(bfd, s, t)                                   \
987   (ABI_64_P (bfd) ? ELF64_R_INFO (s, t) : ELF32_R_INFO (s, t))
988 #else
989 #define MNAME(bfd,pre,pos) CONCAT4 (pre,32,_,pos)
990 #define ELF_R_SYM(bfd, i)                                       \
991   (ELF32_R_SYM (i))
992 #define ELF_R_TYPE(bfd, i)                                      \
993   (ELF32_R_TYPE (i))
994 #define ELF_R_INFO(bfd, s, t)                                   \
995   (ELF32_R_INFO (s, t))
996 #endif
997 \f
998   /* The mips16 compiler uses a couple of special sections to handle
999      floating point arguments.
1000
1001      Section names that look like .mips16.fn.FNNAME contain stubs that
1002      copy floating point arguments from the fp regs to the gp regs and
1003      then jump to FNNAME.  If any 32 bit function calls FNNAME, the
1004      call should be redirected to the stub instead.  If no 32 bit
1005      function calls FNNAME, the stub should be discarded.  We need to
1006      consider any reference to the function, not just a call, because
1007      if the address of the function is taken we will need the stub,
1008      since the address might be passed to a 32 bit function.
1009
1010      Section names that look like .mips16.call.FNNAME contain stubs
1011      that copy floating point arguments from the gp regs to the fp
1012      regs and then jump to FNNAME.  If FNNAME is a 32 bit function,
1013      then any 16 bit function that calls FNNAME should be redirected
1014      to the stub instead.  If FNNAME is not a 32 bit function, the
1015      stub should be discarded.
1016
1017      .mips16.call.fp.FNNAME sections are similar, but contain stubs
1018      which call FNNAME and then copy the return value from the fp regs
1019      to the gp regs.  These stubs store the return value in $18 while
1020      calling FNNAME; any function which might call one of these stubs
1021      must arrange to save $18 around the call.  (This case is not
1022      needed for 32 bit functions that call 16 bit functions, because
1023      16 bit functions always return floating point values in both
1024      $f0/$f1 and $2/$3.)
1025
1026      Note that in all cases FNNAME might be defined statically.
1027      Therefore, FNNAME is not used literally.  Instead, the relocation
1028      information will indicate which symbol the section is for.
1029
1030      We record any stubs that we find in the symbol table.  */
1031
1032 #define FN_STUB ".mips16.fn."
1033 #define CALL_STUB ".mips16.call."
1034 #define CALL_FP_STUB ".mips16.call.fp."
1035
1036 #define FN_STUB_P(name) CONST_STRNEQ (name, FN_STUB)
1037 #define CALL_STUB_P(name) CONST_STRNEQ (name, CALL_STUB)
1038 #define CALL_FP_STUB_P(name) CONST_STRNEQ (name, CALL_FP_STUB)
1039 \f
1040 /* The format of the first PLT entry in an O32 executable.  */
1041 static const bfd_vma mips_o32_exec_plt0_entry[] =
1042 {
1043   0x3c1c0000,   /* lui $28, %hi(&GOTPLT[0])                             */
1044   0x8f990000,   /* lw $25, %lo(&GOTPLT[0])($28)                         */
1045   0x279c0000,   /* addiu $28, $28, %lo(&GOTPLT[0])                      */
1046   0x031cc023,   /* subu $24, $24, $28                                   */
1047   0x03e07825,   /* or t7, ra, zero                                      */
1048   0x0018c082,   /* srl $24, $24, 2                                      */
1049   0x0320f809,   /* jalr $25                                             */
1050   0x2718fffe    /* subu $24, $24, 2                                     */
1051 };
1052
1053 /* The format of the first PLT entry in an O32 executable using compact
1054    jumps.  */
1055 static const bfd_vma mipsr6_o32_exec_plt0_entry_compact[] =
1056 {
1057   0x3c1c0000,   /* lui $28, %hi(&GOTPLT[0])                             */
1058   0x8f990000,   /* lw $25, %lo(&GOTPLT[0])($28)                         */
1059   0x279c0000,   /* addiu $28, $28, %lo(&GOTPLT[0])                      */
1060   0x031cc023,   /* subu $24, $24, $28                                   */
1061   0x03e07821,   /* move $15, $31        # 32-bit move (addu)            */
1062   0x0018c082,   /* srl $24, $24, 2                                      */
1063   0x2718fffe,   /* subu $24, $24, 2                                     */
1064   0xf8190000    /* jalrc $25                                            */
1065 };
1066
1067 /* The format of the first PLT entry in an N32 executable.  Different
1068    because gp ($28) is not available; we use t2 ($14) instead.  */
1069 static const bfd_vma mips_n32_exec_plt0_entry[] =
1070 {
1071   0x3c0e0000,   /* lui $14, %hi(&GOTPLT[0])                             */
1072   0x8dd90000,   /* lw $25, %lo(&GOTPLT[0])($14)                         */
1073   0x25ce0000,   /* addiu $14, $14, %lo(&GOTPLT[0])                      */
1074   0x030ec023,   /* subu $24, $24, $14                                   */
1075   0x03e07825,   /* or t7, ra, zero                                      */
1076   0x0018c082,   /* srl $24, $24, 2                                      */
1077   0x0320f809,   /* jalr $25                                             */
1078   0x2718fffe    /* subu $24, $24, 2                                     */
1079 };
1080
1081 /* The format of the first PLT entry in an N32 executable using compact
1082    jumps.  Different because gp ($28) is not available; we use t2 ($14)
1083    instead.  */
1084 static const bfd_vma mipsr6_n32_exec_plt0_entry_compact[] =
1085 {
1086   0x3c0e0000,   /* lui $14, %hi(&GOTPLT[0])                             */
1087   0x8dd90000,   /* lw $25, %lo(&GOTPLT[0])($14)                         */
1088   0x25ce0000,   /* addiu $14, $14, %lo(&GOTPLT[0])                      */
1089   0x030ec023,   /* subu $24, $24, $14                                   */
1090   0x03e07821,   /* move $15, $31        # 32-bit move (addu)            */
1091   0x0018c082,   /* srl $24, $24, 2                                      */
1092   0x2718fffe,   /* subu $24, $24, 2                                     */
1093   0xf8190000    /* jalrc $25                                            */
1094 };
1095
1096 /* The format of the first PLT entry in an N64 executable.  Different
1097    from N32 because of the increased size of GOT entries.  */
1098 static const bfd_vma mips_n64_exec_plt0_entry[] =
1099 {
1100   0x3c0e0000,   /* lui $14, %hi(&GOTPLT[0])                             */
1101   0xddd90000,   /* ld $25, %lo(&GOTPLT[0])($14)                         */
1102   0x25ce0000,   /* addiu $14, $14, %lo(&GOTPLT[0])                      */
1103   0x030ec023,   /* subu $24, $24, $14                                   */
1104   0x03e07825,   /* or t7, ra, zero                                      */
1105   0x0018c0c2,   /* srl $24, $24, 3                                      */
1106   0x0320f809,   /* jalr $25                                             */
1107   0x2718fffe    /* subu $24, $24, 2                                     */
1108 };
1109
1110 /* The format of the first PLT entry in an N64 executable using compact
1111    jumps.  Different from N32 because of the increased size of GOT
1112    entries.  */
1113 static const bfd_vma mipsr6_n64_exec_plt0_entry_compact[] =
1114 {
1115   0x3c0e0000,   /* lui $14, %hi(&GOTPLT[0])                             */
1116   0xddd90000,   /* ld $25, %lo(&GOTPLT[0])($14)                         */
1117   0x25ce0000,   /* addiu $14, $14, %lo(&GOTPLT[0])                      */
1118   0x030ec023,   /* subu $24, $24, $14                                   */
1119   0x03e0782d,   /* move $15, $31        # 64-bit move (daddu)           */
1120   0x0018c0c2,   /* srl $24, $24, 3                                      */
1121   0x2718fffe,   /* subu $24, $24, 2                                     */
1122   0xf8190000    /* jalrc $25                                            */
1123 };
1124
1125
1126 /* The format of the microMIPS first PLT entry in an O32 executable.
1127    We rely on v0 ($2) rather than t8 ($24) to contain the address
1128    of the GOTPLT entry handled, so this stub may only be used when
1129    all the subsequent PLT entries are microMIPS code too.
1130
1131    The trailing NOP is for alignment and correct disassembly only.  */
1132 static const bfd_vma micromips_o32_exec_plt0_entry[] =
1133 {
1134   0x7980, 0x0000,       /* addiupc $3, (&GOTPLT[0]) - .                 */
1135   0xff23, 0x0000,       /* lw $25, 0($3)                                */
1136   0x0535,               /* subu $2, $2, $3                              */
1137   0x2525,               /* srl $2, $2, 2                                */
1138   0x3302, 0xfffe,       /* subu $24, $2, 2                              */
1139   0x0dff,               /* move $15, $31                                */
1140   0x45f9,               /* jalrs $25                                    */
1141   0x0f83,               /* move $28, $3                                 */
1142   0x0c00                /* nop                                          */
1143 };
1144
1145 /* The format of the microMIPS first PLT entry in an O32 executable
1146    in the insn32 mode.  */
1147 static const bfd_vma micromips_insn32_o32_exec_plt0_entry[] =
1148 {
1149   0x41bc, 0x0000,       /* lui $28, %hi(&GOTPLT[0])                     */
1150   0xff3c, 0x0000,       /* lw $25, %lo(&GOTPLT[0])($28)                 */
1151   0x339c, 0x0000,       /* addiu $28, $28, %lo(&GOTPLT[0])              */
1152   0x0398, 0xc1d0,       /* subu $24, $24, $28                           */
1153   0x001f, 0x7a90,       /* or $15, $31, zero                            */
1154   0x0318, 0x1040,       /* srl $24, $24, 2                              */
1155   0x03f9, 0x0f3c,       /* jalr $25                                     */
1156   0x3318, 0xfffe        /* subu $24, $24, 2                             */
1157 };
1158
1159 /* The format of subsequent standard PLT entries.  */
1160 static const bfd_vma mips_exec_plt_entry[] =
1161 {
1162   0x3c0f0000,   /* lui $15, %hi(.got.plt entry)                 */
1163   0x01f90000,   /* l[wd] $25, %lo(.got.plt entry)($15)          */
1164   0x25f80000,   /* addiu $24, $15, %lo(.got.plt entry)          */
1165   0x03200008    /* jr $25                                       */
1166 };
1167
1168 static const bfd_vma mipsr6_exec_plt_entry[] =
1169 {
1170   0x3c0f0000,   /* lui $15, %hi(.got.plt entry)                 */
1171   0x01f90000,   /* l[wd] $25, %lo(.got.plt entry)($15)          */
1172   0x25f80000,   /* addiu $24, $15, %lo(.got.plt entry)          */
1173   0x03200009    /* jr $25                                       */
1174 };
1175
1176 static const bfd_vma mipsr6_exec_plt_entry_compact[] =
1177 {
1178   0x3c0f0000,   /* lui $15, %hi(.got.plt entry)                 */
1179   0x01f90000,   /* l[wd] $25, %lo(.got.plt entry)($15)          */
1180   0x25f80000,   /* addiu $24, $15, %lo(.got.plt entry)          */
1181   0xd8190000    /* jic $25, 0                                   */
1182 };
1183
1184 /* The format of subsequent MIPS16 o32 PLT entries.  We use v0 ($2)
1185    and v1 ($3) as temporaries because t8 ($24) and t9 ($25) are not
1186    directly addressable.  */
1187 static const bfd_vma mips16_o32_exec_plt_entry[] =
1188 {
1189   0xb203,               /* lw $2, 12($pc)                       */
1190   0x9a60,               /* lw $3, 0($2)                         */
1191   0x651a,               /* move $24, $2                         */
1192   0xeb00,               /* jr $3                                */
1193   0x653b,               /* move $25, $3                         */
1194   0x6500,               /* nop                                  */
1195   0x0000, 0x0000        /* .word (.got.plt entry)               */
1196 };
1197
1198 /* The format of subsequent microMIPS o32 PLT entries.  We use v0 ($2)
1199    as a temporary because t8 ($24) is not addressable with ADDIUPC.  */
1200 static const bfd_vma micromips_o32_exec_plt_entry[] =
1201 {
1202   0x7900, 0x0000,       /* addiupc $2, (.got.plt entry) - .     */
1203   0xff22, 0x0000,       /* lw $25, 0($2)                        */
1204   0x4599,               /* jr $25                               */
1205   0x0f02                /* move $24, $2                         */
1206 };
1207
1208 /* The format of subsequent microMIPS o32 PLT entries in the insn32 mode.  */
1209 static const bfd_vma micromips_insn32_o32_exec_plt_entry[] =
1210 {
1211   0x41af, 0x0000,       /* lui $15, %hi(.got.plt entry)         */
1212   0xff2f, 0x0000,       /* lw $25, %lo(.got.plt entry)($15)     */
1213   0x0019, 0x0f3c,       /* jr $25                               */
1214   0x330f, 0x0000        /* addiu $24, $15, %lo(.got.plt entry)  */
1215 };
1216
1217 /* The format of the first PLT entry in a VxWorks executable.  */
1218 static const bfd_vma mips_vxworks_exec_plt0_entry[] =
1219 {
1220   0x3c190000,   /* lui t9, %hi(_GLOBAL_OFFSET_TABLE_)           */
1221   0x27390000,   /* addiu t9, t9, %lo(_GLOBAL_OFFSET_TABLE_)     */
1222   0x8f390008,   /* lw t9, 8(t9)                                 */
1223   0x00000000,   /* nop                                          */
1224   0x03200008,   /* jr t9                                        */
1225   0x00000000    /* nop                                          */
1226 };
1227
1228 /* The format of subsequent PLT entries.  */
1229 static const bfd_vma mips_vxworks_exec_plt_entry[] =
1230 {
1231   0x10000000,   /* b .PLT_resolver                      */
1232   0x24180000,   /* li t8, <pltindex>                    */
1233   0x3c190000,   /* lui t9, %hi(<.got.plt slot>)         */
1234   0x27390000,   /* addiu t9, t9, %lo(<.got.plt slot>)   */
1235   0x8f390000,   /* lw t9, 0(t9)                         */
1236   0x00000000,   /* nop                                  */
1237   0x03200008,   /* jr t9                                */
1238   0x00000000    /* nop                                  */
1239 };
1240
1241 /* The format of the first PLT entry in a VxWorks shared object.  */
1242 static const bfd_vma mips_vxworks_shared_plt0_entry[] =
1243 {
1244   0x8f990008,   /* lw t9, 8(gp)         */
1245   0x00000000,   /* nop                  */
1246   0x03200008,   /* jr t9                */
1247   0x00000000,   /* nop                  */
1248   0x00000000,   /* nop                  */
1249   0x00000000    /* nop                  */
1250 };
1251
1252 /* The format of subsequent PLT entries.  */
1253 static const bfd_vma mips_vxworks_shared_plt_entry[] =
1254 {
1255   0x10000000,   /* b .PLT_resolver      */
1256   0x24180000    /* li t8, <pltindex>    */
1257 };
1258 \f
1259 /* microMIPS 32-bit opcode helper installer.  */
1260
1261 static void
1262 bfd_put_micromips_32 (const bfd *abfd, bfd_vma opcode, bfd_byte *ptr)
1263 {
1264   bfd_put_16 (abfd, (opcode >> 16) & 0xffff, ptr);
1265   bfd_put_16 (abfd,  opcode        & 0xffff, ptr + 2);
1266 }
1267
1268 /* microMIPS 32-bit opcode helper retriever.  */
1269
1270 static bfd_vma
1271 bfd_get_micromips_32 (const bfd *abfd, const bfd_byte *ptr)
1272 {
1273   return (bfd_get_16 (abfd, ptr) << 16) | bfd_get_16 (abfd, ptr + 2);
1274 }
1275 \f
1276 /* Look up an entry in a MIPS ELF linker hash table.  */
1277
1278 #define mips_elf_link_hash_lookup(table, string, create, copy, follow)  \
1279   ((struct mips_elf_link_hash_entry *)                                  \
1280    elf_link_hash_lookup (&(table)->root, (string), (create),            \
1281                          (copy), (follow)))
1282
1283 /* Traverse a MIPS ELF linker hash table.  */
1284
1285 #define mips_elf_link_hash_traverse(table, func, info)                  \
1286   (elf_link_hash_traverse                                               \
1287    (&(table)->root,                                                     \
1288     (bfd_boolean (*) (struct elf_link_hash_entry *, void *)) (func),    \
1289     (info)))
1290
1291 /* Find the base offsets for thread-local storage in this object,
1292    for GD/LD and IE/LE respectively.  */
1293
1294 #define TP_OFFSET 0x7000
1295 #define DTP_OFFSET 0x8000
1296
1297 static bfd_vma
1298 dtprel_base (struct bfd_link_info *info)
1299 {
1300   /* If tls_sec is NULL, we should have signalled an error already.  */
1301   if (elf_hash_table (info)->tls_sec == NULL)
1302     return 0;
1303   return elf_hash_table (info)->tls_sec->vma + DTP_OFFSET;
1304 }
1305
1306 static bfd_vma
1307 tprel_base (struct bfd_link_info *info)
1308 {
1309   /* If tls_sec is NULL, we should have signalled an error already.  */
1310   if (elf_hash_table (info)->tls_sec == NULL)
1311     return 0;
1312   return elf_hash_table (info)->tls_sec->vma + TP_OFFSET;
1313 }
1314
1315 /* Create an entry in a MIPS ELF linker hash table.  */
1316
1317 static struct bfd_hash_entry *
1318 mips_elf_link_hash_newfunc (struct bfd_hash_entry *entry,
1319                             struct bfd_hash_table *table, const char *string)
1320 {
1321   struct mips_elf_link_hash_entry *ret =
1322     (struct mips_elf_link_hash_entry *) entry;
1323
1324   /* Allocate the structure if it has not already been allocated by a
1325      subclass.  */
1326   if (ret == NULL)
1327     ret = bfd_hash_allocate (table, sizeof (struct mips_elf_link_hash_entry));
1328   if (ret == NULL)
1329     return (struct bfd_hash_entry *) ret;
1330
1331   /* Call the allocation method of the superclass.  */
1332   ret = ((struct mips_elf_link_hash_entry *)
1333          _bfd_elf_link_hash_newfunc ((struct bfd_hash_entry *) ret,
1334                                      table, string));
1335   if (ret != NULL)
1336     {
1337       /* Set local fields.  */
1338       memset (&ret->esym, 0, sizeof (EXTR));
1339       /* We use -2 as a marker to indicate that the information has
1340          not been set.  -1 means there is no associated ifd.  */
1341       ret->esym.ifd = -2;
1342       ret->la25_stub = 0;
1343       ret->possibly_dynamic_relocs = 0;
1344       ret->fn_stub = NULL;
1345       ret->call_stub = NULL;
1346       ret->call_fp_stub = NULL;
1347       ret->mipsxhash_loc = 0;
1348       ret->global_got_area = GGA_NONE;
1349       ret->got_only_for_calls = TRUE;
1350       ret->readonly_reloc = FALSE;
1351       ret->has_static_relocs = FALSE;
1352       ret->no_fn_stub = FALSE;
1353       ret->need_fn_stub = FALSE;
1354       ret->has_nonpic_branches = FALSE;
1355       ret->needs_lazy_stub = FALSE;
1356       ret->use_plt_entry = FALSE;
1357     }
1358
1359   return (struct bfd_hash_entry *) ret;
1360 }
1361
1362 /* Allocate MIPS ELF private object data.  */
1363
1364 bfd_boolean
1365 _bfd_mips_elf_mkobject (bfd *abfd)
1366 {
1367   return bfd_elf_allocate_object (abfd, sizeof (struct mips_elf_obj_tdata),
1368                                   MIPS_ELF_DATA);
1369 }
1370
1371 bfd_boolean
1372 _bfd_mips_elf_new_section_hook (bfd *abfd, asection *sec)
1373 {
1374   if (!sec->used_by_bfd)
1375     {
1376       struct _mips_elf_section_data *sdata;
1377       bfd_size_type amt = sizeof (*sdata);
1378
1379       sdata = bfd_zalloc (abfd, amt);
1380       if (sdata == NULL)
1381         return FALSE;
1382       sec->used_by_bfd = sdata;
1383     }
1384
1385   return _bfd_elf_new_section_hook (abfd, sec);
1386 }
1387 \f
1388 /* Read ECOFF debugging information from a .mdebug section into a
1389    ecoff_debug_info structure.  */
1390
1391 bfd_boolean
1392 _bfd_mips_elf_read_ecoff_info (bfd *abfd, asection *section,
1393                                struct ecoff_debug_info *debug)
1394 {
1395   HDRR *symhdr;
1396   const struct ecoff_debug_swap *swap;
1397   char *ext_hdr;
1398
1399   swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
1400   memset (debug, 0, sizeof (*debug));
1401
1402   ext_hdr = bfd_malloc (swap->external_hdr_size);
1403   if (ext_hdr == NULL && swap->external_hdr_size != 0)
1404     goto error_return;
1405
1406   if (! bfd_get_section_contents (abfd, section, ext_hdr, 0,
1407                                   swap->external_hdr_size))
1408     goto error_return;
1409
1410   symhdr = &debug->symbolic_header;
1411   (*swap->swap_hdr_in) (abfd, ext_hdr, symhdr);
1412
1413   /* The symbolic header contains absolute file offsets and sizes to
1414      read.  */
1415 #define READ(ptr, offset, count, size, type)                            \
1416   if (symhdr->count == 0)                                               \
1417     debug->ptr = NULL;                                                  \
1418   else                                                                  \
1419     {                                                                   \
1420       bfd_size_type amt = (bfd_size_type) size * symhdr->count;         \
1421       debug->ptr = bfd_malloc (amt);                                    \
1422       if (debug->ptr == NULL)                                           \
1423         goto error_return;                                              \
1424       if (bfd_seek (abfd, symhdr->offset, SEEK_SET) != 0                \
1425           || bfd_bread (debug->ptr, amt, abfd) != amt)                  \
1426         goto error_return;                                              \
1427     }
1428
1429   READ (line, cbLineOffset, cbLine, sizeof (unsigned char), unsigned char *);
1430   READ (external_dnr, cbDnOffset, idnMax, swap->external_dnr_size, void *);
1431   READ (external_pdr, cbPdOffset, ipdMax, swap->external_pdr_size, void *);
1432   READ (external_sym, cbSymOffset, isymMax, swap->external_sym_size, void *);
1433   READ (external_opt, cbOptOffset, ioptMax, swap->external_opt_size, void *);
1434   READ (external_aux, cbAuxOffset, iauxMax, sizeof (union aux_ext),
1435         union aux_ext *);
1436   READ (ss, cbSsOffset, issMax, sizeof (char), char *);
1437   READ (ssext, cbSsExtOffset, issExtMax, sizeof (char), char *);
1438   READ (external_fdr, cbFdOffset, ifdMax, swap->external_fdr_size, void *);
1439   READ (external_rfd, cbRfdOffset, crfd, swap->external_rfd_size, void *);
1440   READ (external_ext, cbExtOffset, iextMax, swap->external_ext_size, void *);
1441 #undef READ
1442
1443   debug->fdr = NULL;
1444
1445   return TRUE;
1446
1447  error_return:
1448   if (ext_hdr != NULL)
1449     free (ext_hdr);
1450   if (debug->line != NULL)
1451     free (debug->line);
1452   if (debug->external_dnr != NULL)
1453     free (debug->external_dnr);
1454   if (debug->external_pdr != NULL)
1455     free (debug->external_pdr);
1456   if (debug->external_sym != NULL)
1457     free (debug->external_sym);
1458   if (debug->external_opt != NULL)
1459     free (debug->external_opt);
1460   if (debug->external_aux != NULL)
1461     free (debug->external_aux);
1462   if (debug->ss != NULL)
1463     free (debug->ss);
1464   if (debug->ssext != NULL)
1465     free (debug->ssext);
1466   if (debug->external_fdr != NULL)
1467     free (debug->external_fdr);
1468   if (debug->external_rfd != NULL)
1469     free (debug->external_rfd);
1470   if (debug->external_ext != NULL)
1471     free (debug->external_ext);
1472   return FALSE;
1473 }
1474 \f
1475 /* Swap RPDR (runtime procedure table entry) for output.  */
1476
1477 static void
1478 ecoff_swap_rpdr_out (bfd *abfd, const RPDR *in, struct rpdr_ext *ex)
1479 {
1480   H_PUT_S32 (abfd, in->adr, ex->p_adr);
1481   H_PUT_32 (abfd, in->regmask, ex->p_regmask);
1482   H_PUT_32 (abfd, in->regoffset, ex->p_regoffset);
1483   H_PUT_32 (abfd, in->fregmask, ex->p_fregmask);
1484   H_PUT_32 (abfd, in->fregoffset, ex->p_fregoffset);
1485   H_PUT_32 (abfd, in->frameoffset, ex->p_frameoffset);
1486
1487   H_PUT_16 (abfd, in->framereg, ex->p_framereg);
1488   H_PUT_16 (abfd, in->pcreg, ex->p_pcreg);
1489
1490   H_PUT_32 (abfd, in->irpss, ex->p_irpss);
1491 }
1492
1493 /* Create a runtime procedure table from the .mdebug section.  */
1494
1495 static bfd_boolean
1496 mips_elf_create_procedure_table (void *handle, bfd *abfd,
1497                                  struct bfd_link_info *info, asection *s,
1498                                  struct ecoff_debug_info *debug)
1499 {
1500   const struct ecoff_debug_swap *swap;
1501   HDRR *hdr = &debug->symbolic_header;
1502   RPDR *rpdr, *rp;
1503   struct rpdr_ext *erp;
1504   void *rtproc;
1505   struct pdr_ext *epdr;
1506   struct sym_ext *esym;
1507   char *ss, **sv;
1508   char *str;
1509   bfd_size_type size;
1510   bfd_size_type count;
1511   unsigned long sindex;
1512   unsigned long i;
1513   PDR pdr;
1514   SYMR sym;
1515   const char *no_name_func = _("static procedure (no name)");
1516
1517   epdr = NULL;
1518   rpdr = NULL;
1519   esym = NULL;
1520   ss = NULL;
1521   sv = NULL;
1522
1523   swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
1524
1525   sindex = strlen (no_name_func) + 1;
1526   count = hdr->ipdMax;
1527   if (count > 0)
1528     {
1529       size = swap->external_pdr_size;
1530
1531       epdr = bfd_malloc (size * count);
1532       if (epdr == NULL)
1533         goto error_return;
1534
1535       if (! _bfd_ecoff_get_accumulated_pdr (handle, (bfd_byte *) epdr))
1536         goto error_return;
1537
1538       size = sizeof (RPDR);
1539       rp = rpdr = bfd_malloc (size * count);
1540       if (rpdr == NULL)
1541         goto error_return;
1542
1543       size = sizeof (char *);
1544       sv = bfd_malloc (size * count);
1545       if (sv == NULL)
1546         goto error_return;
1547
1548       count = hdr->isymMax;
1549       size = swap->external_sym_size;
1550       esym = bfd_malloc (size * count);
1551       if (esym == NULL)
1552         goto error_return;
1553
1554       if (! _bfd_ecoff_get_accumulated_sym (handle, (bfd_byte *) esym))
1555         goto error_return;
1556
1557       count = hdr->issMax;
1558       ss = bfd_malloc (count);
1559       if (ss == NULL)
1560         goto error_return;
1561       if (! _bfd_ecoff_get_accumulated_ss (handle, (bfd_byte *) ss))
1562         goto error_return;
1563
1564       count = hdr->ipdMax;
1565       for (i = 0; i < (unsigned long) count; i++, rp++)
1566         {
1567           (*swap->swap_pdr_in) (abfd, epdr + i, &pdr);
1568           (*swap->swap_sym_in) (abfd, &esym[pdr.isym], &sym);
1569           rp->adr = sym.value;
1570           rp->regmask = pdr.regmask;
1571           rp->regoffset = pdr.regoffset;
1572           rp->fregmask = pdr.fregmask;
1573           rp->fregoffset = pdr.fregoffset;
1574           rp->frameoffset = pdr.frameoffset;
1575           rp->framereg = pdr.framereg;
1576           rp->pcreg = pdr.pcreg;
1577           rp->irpss = sindex;
1578           sv[i] = ss + sym.iss;
1579           sindex += strlen (sv[i]) + 1;
1580         }
1581     }
1582
1583   size = sizeof (struct rpdr_ext) * (count + 2) + sindex;
1584   size = BFD_ALIGN (size, 16);
1585   rtproc = bfd_alloc (abfd, size);
1586   if (rtproc == NULL)
1587     {
1588       mips_elf_hash_table (info)->procedure_count = 0;
1589       goto error_return;
1590     }
1591
1592   mips_elf_hash_table (info)->procedure_count = count + 2;
1593
1594   erp = rtproc;
1595   memset (erp, 0, sizeof (struct rpdr_ext));
1596   erp++;
1597   str = (char *) rtproc + sizeof (struct rpdr_ext) * (count + 2);
1598   strcpy (str, no_name_func);
1599   str += strlen (no_name_func) + 1;
1600   for (i = 0; i < count; i++)
1601     {
1602       ecoff_swap_rpdr_out (abfd, rpdr + i, erp + i);
1603       strcpy (str, sv[i]);
1604       str += strlen (sv[i]) + 1;
1605     }
1606   H_PUT_S32 (abfd, -1, (erp + count)->p_adr);
1607
1608   /* Set the size and contents of .rtproc section.  */
1609   s->size = size;
1610   s->contents = rtproc;
1611
1612   /* Skip this section later on (I don't think this currently
1613      matters, but someday it might).  */
1614   s->map_head.link_order = NULL;
1615
1616   if (epdr != NULL)
1617     free (epdr);
1618   if (rpdr != NULL)
1619     free (rpdr);
1620   if (esym != NULL)
1621     free (esym);
1622   if (ss != NULL)
1623     free (ss);
1624   if (sv != NULL)
1625     free (sv);
1626
1627   return TRUE;
1628
1629  error_return:
1630   if (epdr != NULL)
1631     free (epdr);
1632   if (rpdr != NULL)
1633     free (rpdr);
1634   if (esym != NULL)
1635     free (esym);
1636   if (ss != NULL)
1637     free (ss);
1638   if (sv != NULL)
1639     free (sv);
1640   return FALSE;
1641 }
1642 \f
1643 /* We're going to create a stub for H.  Create a symbol for the stub's
1644    value and size, to help make the disassembly easier to read.  */
1645
1646 static bfd_boolean
1647 mips_elf_create_stub_symbol (struct bfd_link_info *info,
1648                              struct mips_elf_link_hash_entry *h,
1649                              const char *prefix, asection *s, bfd_vma value,
1650                              bfd_vma size)
1651 {
1652   bfd_boolean micromips_p = ELF_ST_IS_MICROMIPS (h->root.other);
1653   struct bfd_link_hash_entry *bh;
1654   struct elf_link_hash_entry *elfh;
1655   char *name;
1656   bfd_boolean res;
1657
1658   if (micromips_p)
1659     value |= 1;
1660
1661   /* Create a new symbol.  */
1662   name = concat (prefix, h->root.root.root.string, NULL);
1663   bh = NULL;
1664   res = _bfd_generic_link_add_one_symbol (info, s->owner, name,
1665                                           BSF_LOCAL, s, value, NULL,
1666                                           TRUE, FALSE, &bh);
1667   free (name);
1668   if (! res)
1669     return FALSE;
1670
1671   /* Make it a local function.  */
1672   elfh = (struct elf_link_hash_entry *) bh;
1673   elfh->type = ELF_ST_INFO (STB_LOCAL, STT_FUNC);
1674   elfh->size = size;
1675   elfh->forced_local = 1;
1676   if (micromips_p)
1677     elfh->other = ELF_ST_SET_MICROMIPS (elfh->other);
1678   return TRUE;
1679 }
1680
1681 /* We're about to redefine H.  Create a symbol to represent H's
1682    current value and size, to help make the disassembly easier
1683    to read.  */
1684
1685 static bfd_boolean
1686 mips_elf_create_shadow_symbol (struct bfd_link_info *info,
1687                                struct mips_elf_link_hash_entry *h,
1688                                const char *prefix)
1689 {
1690   struct bfd_link_hash_entry *bh;
1691   struct elf_link_hash_entry *elfh;
1692   char *name;
1693   asection *s;
1694   bfd_vma value;
1695   bfd_boolean res;
1696
1697   /* Read the symbol's value.  */
1698   BFD_ASSERT (h->root.root.type == bfd_link_hash_defined
1699               || h->root.root.type == bfd_link_hash_defweak);
1700   s = h->root.root.u.def.section;
1701   value = h->root.root.u.def.value;
1702
1703   /* Create a new symbol.  */
1704   name = concat (prefix, h->root.root.root.string, NULL);
1705   bh = NULL;
1706   res = _bfd_generic_link_add_one_symbol (info, s->owner, name,
1707                                           BSF_LOCAL, s, value, NULL,
1708                                           TRUE, FALSE, &bh);
1709   free (name);
1710   if (! res)
1711     return FALSE;
1712
1713   /* Make it local and copy the other attributes from H.  */
1714   elfh = (struct elf_link_hash_entry *) bh;
1715   elfh->type = ELF_ST_INFO (STB_LOCAL, ELF_ST_TYPE (h->root.type));
1716   elfh->other = h->root.other;
1717   elfh->size = h->root.size;
1718   elfh->forced_local = 1;
1719   return TRUE;
1720 }
1721
1722 /* Return TRUE if relocations in SECTION can refer directly to a MIPS16
1723    function rather than to a hard-float stub.  */
1724
1725 static bfd_boolean
1726 section_allows_mips16_refs_p (asection *section)
1727 {
1728   const char *name;
1729
1730   name = bfd_section_name (section);
1731   return (FN_STUB_P (name)
1732           || CALL_STUB_P (name)
1733           || CALL_FP_STUB_P (name)
1734           || strcmp (name, ".pdr") == 0);
1735 }
1736
1737 /* [RELOCS, RELEND) are the relocations against SEC, which is a MIPS16
1738    stub section of some kind.  Return the R_SYMNDX of the target
1739    function, or 0 if we can't decide which function that is.  */
1740
1741 static unsigned long
1742 mips16_stub_symndx (const struct elf_backend_data *bed,
1743                     asection *sec ATTRIBUTE_UNUSED,
1744                     const Elf_Internal_Rela *relocs,
1745                     const Elf_Internal_Rela *relend)
1746 {
1747   int int_rels_per_ext_rel = bed->s->int_rels_per_ext_rel;
1748   const Elf_Internal_Rela *rel;
1749
1750   /* Trust the first R_MIPS_NONE relocation, if any, but not a subsequent
1751      one in a compound relocation.  */
1752   for (rel = relocs; rel < relend; rel += int_rels_per_ext_rel)
1753     if (ELF_R_TYPE (sec->owner, rel->r_info) == R_MIPS_NONE)
1754       return ELF_R_SYM (sec->owner, rel->r_info);
1755
1756   /* Otherwise trust the first relocation, whatever its kind.  This is
1757      the traditional behavior.  */
1758   if (relocs < relend)
1759     return ELF_R_SYM (sec->owner, relocs->r_info);
1760
1761   return 0;
1762 }
1763
1764 /* Check the mips16 stubs for a particular symbol, and see if we can
1765    discard them.  */
1766
1767 static void
1768 mips_elf_check_mips16_stubs (struct bfd_link_info *info,
1769                              struct mips_elf_link_hash_entry *h)
1770 {
1771   /* Dynamic symbols must use the standard call interface, in case other
1772      objects try to call them.  */
1773   if (h->fn_stub != NULL
1774       && h->root.dynindx != -1)
1775     {
1776       mips_elf_create_shadow_symbol (info, h, ".mips16.");
1777       h->need_fn_stub = TRUE;
1778     }
1779
1780   if (h->fn_stub != NULL
1781       && ! h->need_fn_stub)
1782     {
1783       /* We don't need the fn_stub; the only references to this symbol
1784          are 16 bit calls.  Clobber the size to 0 to prevent it from
1785          being included in the link.  */
1786       h->fn_stub->size = 0;
1787       h->fn_stub->flags &= ~SEC_RELOC;
1788       h->fn_stub->reloc_count = 0;
1789       h->fn_stub->flags |= SEC_EXCLUDE;
1790       h->fn_stub->output_section = bfd_abs_section_ptr;
1791     }
1792
1793   if (h->call_stub != NULL
1794       && ELF_ST_IS_MIPS16 (h->root.other))
1795     {
1796       /* We don't need the call_stub; this is a 16 bit function, so
1797          calls from other 16 bit functions are OK.  Clobber the size
1798          to 0 to prevent it from being included in the link.  */
1799       h->call_stub->size = 0;
1800       h->call_stub->flags &= ~SEC_RELOC;
1801       h->call_stub->reloc_count = 0;
1802       h->call_stub->flags |= SEC_EXCLUDE;
1803       h->call_stub->output_section = bfd_abs_section_ptr;
1804     }
1805
1806   if (h->call_fp_stub != NULL
1807       && ELF_ST_IS_MIPS16 (h->root.other))
1808     {
1809       /* We don't need the call_stub; this is a 16 bit function, so
1810          calls from other 16 bit functions are OK.  Clobber the size
1811          to 0 to prevent it from being included in the link.  */
1812       h->call_fp_stub->size = 0;
1813       h->call_fp_stub->flags &= ~SEC_RELOC;
1814       h->call_fp_stub->reloc_count = 0;
1815       h->call_fp_stub->flags |= SEC_EXCLUDE;
1816       h->call_fp_stub->output_section = bfd_abs_section_ptr;
1817     }
1818 }
1819
1820 /* Hashtable callbacks for mips_elf_la25_stubs.  */
1821
1822 static hashval_t
1823 mips_elf_la25_stub_hash (const void *entry_)
1824 {
1825   const struct mips_elf_la25_stub *entry;
1826
1827   entry = (struct mips_elf_la25_stub *) entry_;
1828   return entry->h->root.root.u.def.section->id
1829     + entry->h->root.root.u.def.value;
1830 }
1831
1832 static int
1833 mips_elf_la25_stub_eq (const void *entry1_, const void *entry2_)
1834 {
1835   const struct mips_elf_la25_stub *entry1, *entry2;
1836
1837   entry1 = (struct mips_elf_la25_stub *) entry1_;
1838   entry2 = (struct mips_elf_la25_stub *) entry2_;
1839   return ((entry1->h->root.root.u.def.section
1840            == entry2->h->root.root.u.def.section)
1841           && (entry1->h->root.root.u.def.value
1842               == entry2->h->root.root.u.def.value));
1843 }
1844
1845 /* Called by the linker to set up the la25 stub-creation code.  FN is
1846    the linker's implementation of add_stub_function.  Return true on
1847    success.  */
1848
1849 bfd_boolean
1850 _bfd_mips_elf_init_stubs (struct bfd_link_info *info,
1851                           asection *(*fn) (const char *, asection *,
1852                                            asection *))
1853 {
1854   struct mips_elf_link_hash_table *htab;
1855
1856   htab = mips_elf_hash_table (info);
1857   if (htab == NULL)
1858     return FALSE;
1859
1860   htab->add_stub_section = fn;
1861   htab->la25_stubs = htab_try_create (1, mips_elf_la25_stub_hash,
1862                                       mips_elf_la25_stub_eq, NULL);
1863   if (htab->la25_stubs == NULL)
1864     return FALSE;
1865
1866   return TRUE;
1867 }
1868
1869 /* Return true if H is a locally-defined PIC function, in the sense
1870    that it or its fn_stub might need $25 to be valid on entry.
1871    Note that MIPS16 functions set up $gp using PC-relative instructions,
1872    so they themselves never need $25 to be valid.  Only non-MIPS16
1873    entry points are of interest here.  */
1874
1875 static bfd_boolean
1876 mips_elf_local_pic_function_p (struct mips_elf_link_hash_entry *h)
1877 {
1878   return ((h->root.root.type == bfd_link_hash_defined
1879            || h->root.root.type == bfd_link_hash_defweak)
1880           && h->root.def_regular
1881           && !bfd_is_abs_section (h->root.root.u.def.section)
1882           && !bfd_is_und_section (h->root.root.u.def.section)
1883           && (!ELF_ST_IS_MIPS16 (h->root.other)
1884               || (h->fn_stub && h->need_fn_stub))
1885           && (PIC_OBJECT_P (h->root.root.u.def.section->owner)
1886               || ELF_ST_IS_MIPS_PIC (h->root.other)));
1887 }
1888
1889 /* Set *SEC to the input section that contains the target of STUB.
1890    Return the offset of the target from the start of that section.  */
1891
1892 static bfd_vma
1893 mips_elf_get_la25_target (struct mips_elf_la25_stub *stub,
1894                           asection **sec)
1895 {
1896   if (ELF_ST_IS_MIPS16 (stub->h->root.other))
1897     {
1898       BFD_ASSERT (stub->h->need_fn_stub);
1899       *sec = stub->h->fn_stub;
1900       return 0;
1901     }
1902   else
1903     {
1904       *sec = stub->h->root.root.u.def.section;
1905       return stub->h->root.root.u.def.value;
1906     }
1907 }
1908
1909 /* STUB describes an la25 stub that we have decided to implement
1910    by inserting an LUI/ADDIU pair before the target function.
1911    Create the section and redirect the function symbol to it.  */
1912
1913 static bfd_boolean
1914 mips_elf_add_la25_intro (struct mips_elf_la25_stub *stub,
1915                          struct bfd_link_info *info)
1916 {
1917   struct mips_elf_link_hash_table *htab;
1918   char *name;
1919   asection *s, *input_section;
1920   unsigned int align;
1921
1922   htab = mips_elf_hash_table (info);
1923   if (htab == NULL)
1924     return FALSE;
1925
1926   /* Create a unique name for the new section.  */
1927   name = bfd_malloc (11 + sizeof (".text.stub."));
1928   if (name == NULL)
1929     return FALSE;
1930   sprintf (name, ".text.stub.%d", (int) htab_elements (htab->la25_stubs));
1931
1932   /* Create the section.  */
1933   mips_elf_get_la25_target (stub, &input_section);
1934   s = htab->add_stub_section (name, input_section,
1935                               input_section->output_section);
1936   if (s == NULL)
1937     return FALSE;
1938
1939   /* Make sure that any padding goes before the stub.  */
1940   align = input_section->alignment_power;
1941   if (!bfd_set_section_alignment (s, align))
1942     return FALSE;
1943   if (align > 3)
1944     s->size = (1 << align) - 8;
1945
1946   /* Create a symbol for the stub.  */
1947   mips_elf_create_stub_symbol (info, stub->h, ".pic.", s, s->size, 8);
1948   stub->stub_section = s;
1949   stub->offset = s->size;
1950
1951   /* Allocate room for it.  */
1952   s->size += 8;
1953   return TRUE;
1954 }
1955
1956 /* STUB describes an la25 stub that we have decided to implement
1957    with a separate trampoline.  Allocate room for it and redirect
1958    the function symbol to it.  */
1959
1960 static bfd_boolean
1961 mips_elf_add_la25_trampoline (struct mips_elf_la25_stub *stub,
1962                               struct bfd_link_info *info)
1963 {
1964   struct mips_elf_link_hash_table *htab;
1965   asection *s;
1966
1967   htab = mips_elf_hash_table (info);
1968   if (htab == NULL)
1969     return FALSE;
1970
1971   /* Create a trampoline section, if we haven't already.  */
1972   s = htab->strampoline;
1973   if (s == NULL)
1974     {
1975       asection *input_section = stub->h->root.root.u.def.section;
1976       s = htab->add_stub_section (".text", NULL,
1977                                   input_section->output_section);
1978       if (s == NULL || !bfd_set_section_alignment (s, 4))
1979         return FALSE;
1980       htab->strampoline = s;
1981     }
1982
1983   /* Create a symbol for the stub.  */
1984   mips_elf_create_stub_symbol (info, stub->h, ".pic.", s, s->size, 16);
1985   stub->stub_section = s;
1986   stub->offset = s->size;
1987
1988   /* Allocate room for it.  */
1989   s->size += 16;
1990   return TRUE;
1991 }
1992
1993 /* H describes a symbol that needs an la25 stub.  Make sure that an
1994    appropriate stub exists and point H at it.  */
1995
1996 static bfd_boolean
1997 mips_elf_add_la25_stub (struct bfd_link_info *info,
1998                         struct mips_elf_link_hash_entry *h)
1999 {
2000   struct mips_elf_link_hash_table *htab;
2001   struct mips_elf_la25_stub search, *stub;
2002   bfd_boolean use_trampoline_p;
2003   asection *s;
2004   bfd_vma value;
2005   void **slot;
2006
2007   /* Describe the stub we want.  */
2008   search.stub_section = NULL;
2009   search.offset = 0;
2010   search.h = h;
2011
2012   /* See if we've already created an equivalent stub.  */
2013   htab = mips_elf_hash_table (info);
2014   if (htab == NULL)
2015     return FALSE;
2016
2017   slot = htab_find_slot (htab->la25_stubs, &search, INSERT);
2018   if (slot == NULL)
2019     return FALSE;
2020
2021   stub = (struct mips_elf_la25_stub *) *slot;
2022   if (stub != NULL)
2023     {
2024       /* We can reuse the existing stub.  */
2025       h->la25_stub = stub;
2026       return TRUE;
2027     }
2028
2029   /* Create a permanent copy of ENTRY and add it to the hash table.  */
2030   stub = bfd_malloc (sizeof (search));
2031   if (stub == NULL)
2032     return FALSE;
2033   *stub = search;
2034   *slot = stub;
2035
2036   /* Prefer to use LUI/ADDIU stubs if the function is at the beginning
2037      of the section and if we would need no more than 2 nops.  */
2038   value = mips_elf_get_la25_target (stub, &s);
2039   if (ELF_ST_IS_MICROMIPS (stub->h->root.other))
2040     value &= ~1;
2041   use_trampoline_p = (value != 0 || s->alignment_power > 4);
2042
2043   h->la25_stub = stub;
2044   return (use_trampoline_p
2045           ? mips_elf_add_la25_trampoline (stub, info)
2046           : mips_elf_add_la25_intro (stub, info));
2047 }
2048
2049 /* A mips_elf_link_hash_traverse callback that is called before sizing
2050    sections.  DATA points to a mips_htab_traverse_info structure.  */
2051
2052 static bfd_boolean
2053 mips_elf_check_symbols (struct mips_elf_link_hash_entry *h, void *data)
2054 {
2055   struct mips_htab_traverse_info *hti;
2056
2057   hti = (struct mips_htab_traverse_info *) data;
2058   if (!bfd_link_relocatable (hti->info))
2059     mips_elf_check_mips16_stubs (hti->info, h);
2060
2061   if (mips_elf_local_pic_function_p (h))
2062     {
2063       /* PR 12845: If H is in a section that has been garbage
2064          collected it will have its output section set to *ABS*.  */
2065       if (bfd_is_abs_section (h->root.root.u.def.section->output_section))
2066         return TRUE;
2067
2068       /* H is a function that might need $25 to be valid on entry.
2069          If we're creating a non-PIC relocatable object, mark H as
2070          being PIC.  If we're creating a non-relocatable object with
2071          non-PIC branches and jumps to H, make sure that H has an la25
2072          stub.  */
2073       if (bfd_link_relocatable (hti->info))
2074         {
2075           if (!PIC_OBJECT_P (hti->output_bfd))
2076             h->root.other = ELF_ST_SET_MIPS_PIC (h->root.other);
2077         }
2078       else if (h->has_nonpic_branches && !mips_elf_add_la25_stub (hti->info, h))
2079         {
2080           hti->error = TRUE;
2081           return FALSE;
2082         }
2083     }
2084   return TRUE;
2085 }
2086 \f
2087 /* R_MIPS16_26 is used for the mips16 jal and jalx instructions.
2088    Most mips16 instructions are 16 bits, but these instructions
2089    are 32 bits.
2090
2091    The format of these instructions is:
2092
2093    +--------------+--------------------------------+
2094    |     JALX     | X|   Imm 20:16  |   Imm 25:21  |
2095    +--------------+--------------------------------+
2096    |                Immediate  15:0                |
2097    +-----------------------------------------------+
2098
2099    JALX is the 5-bit value 00011.  X is 0 for jal, 1 for jalx.
2100    Note that the immediate value in the first word is swapped.
2101
2102    When producing a relocatable object file, R_MIPS16_26 is
2103    handled mostly like R_MIPS_26.  In particular, the addend is
2104    stored as a straight 26-bit value in a 32-bit instruction.
2105    (gas makes life simpler for itself by never adjusting a
2106    R_MIPS16_26 reloc to be against a section, so the addend is
2107    always zero).  However, the 32 bit instruction is stored as 2
2108    16-bit values, rather than a single 32-bit value.  In a
2109    big-endian file, the result is the same; in a little-endian
2110    file, the two 16-bit halves of the 32 bit value are swapped.
2111    This is so that a disassembler can recognize the jal
2112    instruction.
2113
2114    When doing a final link, R_MIPS16_26 is treated as a 32 bit
2115    instruction stored as two 16-bit values.  The addend A is the
2116    contents of the targ26 field.  The calculation is the same as
2117    R_MIPS_26.  When storing the calculated value, reorder the
2118    immediate value as shown above, and don't forget to store the
2119    value as two 16-bit values.
2120
2121    To put it in MIPS ABI terms, the relocation field is T-targ26-16,
2122    defined as
2123
2124    big-endian:
2125    +--------+----------------------+
2126    |        |                      |
2127    |        |    targ26-16         |
2128    |31    26|25                   0|
2129    +--------+----------------------+
2130
2131    little-endian:
2132    +----------+------+-------------+
2133    |          |      |             |
2134    |  sub1    |      |     sub2    |
2135    |0        9|10  15|16         31|
2136    +----------+--------------------+
2137    where targ26-16 is sub1 followed by sub2 (i.e., the addend field A is
2138    ((sub1 << 16) | sub2)).
2139
2140    When producing a relocatable object file, the calculation is
2141    (((A < 2) | ((P + 4) & 0xf0000000) + S) >> 2)
2142    When producing a fully linked file, the calculation is
2143    let R = (((A < 2) | ((P + 4) & 0xf0000000) + S) >> 2)
2144    ((R & 0x1f0000) << 5) | ((R & 0x3e00000) >> 5) | (R & 0xffff)
2145
2146    The table below lists the other MIPS16 instruction relocations.
2147    Each one is calculated in the same way as the non-MIPS16 relocation
2148    given on the right, but using the extended MIPS16 layout of 16-bit
2149    immediate fields:
2150
2151         R_MIPS16_GPREL          R_MIPS_GPREL16
2152         R_MIPS16_GOT16          R_MIPS_GOT16
2153         R_MIPS16_CALL16         R_MIPS_CALL16
2154         R_MIPS16_HI16           R_MIPS_HI16
2155         R_MIPS16_LO16           R_MIPS_LO16
2156
2157    A typical instruction will have a format like this:
2158
2159    +--------------+--------------------------------+
2160    |    EXTEND    |     Imm 10:5    |   Imm 15:11  |
2161    +--------------+--------------------------------+
2162    |    Major     |   rx   |   ry   |   Imm  4:0   |
2163    +--------------+--------------------------------+
2164
2165    EXTEND is the five bit value 11110.  Major is the instruction
2166    opcode.
2167
2168    All we need to do here is shuffle the bits appropriately.
2169    As above, the two 16-bit halves must be swapped on a
2170    little-endian system.
2171
2172    Finally R_MIPS16_PC16_S1 corresponds to R_MIPS_PC16, however the
2173    relocatable field is shifted by 1 rather than 2 and the same bit
2174    shuffling is done as with the relocations above.  */
2175
2176 static inline bfd_boolean
2177 mips16_reloc_p (int r_type)
2178 {
2179   switch (r_type)
2180     {
2181     case R_MIPS16_26:
2182     case R_MIPS16_GPREL:
2183     case R_MIPS16_GOT16:
2184     case R_MIPS16_CALL16:
2185     case R_MIPS16_HI16:
2186     case R_MIPS16_LO16:
2187     case R_MIPS16_TLS_GD:
2188     case R_MIPS16_TLS_LDM:
2189     case R_MIPS16_TLS_DTPREL_HI16:
2190     case R_MIPS16_TLS_DTPREL_LO16:
2191     case R_MIPS16_TLS_GOTTPREL:
2192     case R_MIPS16_TLS_TPREL_HI16:
2193     case R_MIPS16_TLS_TPREL_LO16:
2194     case R_MIPS16_PC16_S1:
2195       return TRUE;
2196
2197     default:
2198       return FALSE;
2199     }
2200 }
2201
2202 /* Check if a microMIPS reloc.  */
2203
2204 static inline bfd_boolean
2205 micromips_reloc_p (unsigned int r_type)
2206 {
2207   return r_type >= R_MICROMIPS_min && r_type < R_MICROMIPS_max;
2208 }
2209
2210 /* Similar to MIPS16, the two 16-bit halves in microMIPS must be swapped
2211    on a little-endian system.  This does not apply to R_MICROMIPS_PC7_S1
2212    and R_MICROMIPS_PC10_S1 relocs that apply to 16-bit instructions.  */
2213
2214 static inline bfd_boolean
2215 micromips_reloc_shuffle_p (unsigned int r_type)
2216 {
2217   return (micromips_reloc_p (r_type)
2218           && r_type != R_MICROMIPS_PC7_S1
2219           && r_type != R_MICROMIPS_PC10_S1);
2220 }
2221
2222 static inline bfd_boolean
2223 got16_reloc_p (int r_type)
2224 {
2225   return (r_type == R_MIPS_GOT16
2226           || r_type == R_MIPS16_GOT16
2227           || r_type == R_MICROMIPS_GOT16);
2228 }
2229
2230 static inline bfd_boolean
2231 call16_reloc_p (int r_type)
2232 {
2233   return (r_type == R_MIPS_CALL16
2234           || r_type == R_MIPS16_CALL16
2235           || r_type == R_MICROMIPS_CALL16);
2236 }
2237
2238 static inline bfd_boolean
2239 got_disp_reloc_p (unsigned int r_type)
2240 {
2241   return r_type == R_MIPS_GOT_DISP || r_type == R_MICROMIPS_GOT_DISP;
2242 }
2243
2244 static inline bfd_boolean
2245 got_page_reloc_p (unsigned int r_type)
2246 {
2247   return r_type == R_MIPS_GOT_PAGE || r_type == R_MICROMIPS_GOT_PAGE;
2248 }
2249
2250 static inline bfd_boolean
2251 got_lo16_reloc_p (unsigned int r_type)
2252 {
2253   return r_type == R_MIPS_GOT_LO16 || r_type == R_MICROMIPS_GOT_LO16;
2254 }
2255
2256 static inline bfd_boolean
2257 call_hi16_reloc_p (unsigned int r_type)
2258 {
2259   return r_type == R_MIPS_CALL_HI16 || r_type == R_MICROMIPS_CALL_HI16;
2260 }
2261
2262 static inline bfd_boolean
2263 call_lo16_reloc_p (unsigned int r_type)
2264 {
2265   return r_type == R_MIPS_CALL_LO16 || r_type == R_MICROMIPS_CALL_LO16;
2266 }
2267
2268 static inline bfd_boolean
2269 hi16_reloc_p (int r_type)
2270 {
2271   return (r_type == R_MIPS_HI16
2272           || r_type == R_MIPS16_HI16
2273           || r_type == R_MICROMIPS_HI16
2274           || r_type == R_MIPS_PCHI16);
2275 }
2276
2277 static inline bfd_boolean
2278 lo16_reloc_p (int r_type)
2279 {
2280   return (r_type == R_MIPS_LO16
2281           || r_type == R_MIPS16_LO16
2282           || r_type == R_MICROMIPS_LO16
2283           || r_type == R_MIPS_PCLO16);
2284 }
2285
2286 static inline bfd_boolean
2287 mips16_call_reloc_p (int r_type)
2288 {
2289   return r_type == R_MIPS16_26 || r_type == R_MIPS16_CALL16;
2290 }
2291
2292 static inline bfd_boolean
2293 jal_reloc_p (int r_type)
2294 {
2295   return (r_type == R_MIPS_26
2296           || r_type == R_MIPS16_26
2297           || r_type == R_MICROMIPS_26_S1);
2298 }
2299
2300 static inline bfd_boolean
2301 b_reloc_p (int r_type)
2302 {
2303   return (r_type == R_MIPS_PC26_S2
2304           || r_type == R_MIPS_PC21_S2
2305           || r_type == R_MIPS_PC16
2306           || r_type == R_MIPS_GNU_REL16_S2
2307           || r_type == R_MIPS16_PC16_S1
2308           || r_type == R_MICROMIPS_PC16_S1
2309           || r_type == R_MICROMIPS_PC10_S1
2310           || r_type == R_MICROMIPS_PC7_S1);
2311 }
2312
2313 static inline bfd_boolean
2314 aligned_pcrel_reloc_p (int r_type)
2315 {
2316   return (r_type == R_MIPS_PC18_S3
2317           || r_type == R_MIPS_PC19_S2);
2318 }
2319
2320 static inline bfd_boolean
2321 branch_reloc_p (int r_type)
2322 {
2323   return (r_type == R_MIPS_26
2324           || r_type == R_MIPS_PC26_S2
2325           || r_type == R_MIPS_PC21_S2
2326           || r_type == R_MIPS_PC16
2327           || r_type == R_MIPS_GNU_REL16_S2);
2328 }
2329
2330 static inline bfd_boolean
2331 mips16_branch_reloc_p (int r_type)
2332 {
2333   return (r_type == R_MIPS16_26
2334           || r_type == R_MIPS16_PC16_S1);
2335 }
2336
2337 static inline bfd_boolean
2338 micromips_branch_reloc_p (int r_type)
2339 {
2340   return (r_type == R_MICROMIPS_26_S1
2341           || r_type == R_MICROMIPS_PC16_S1
2342           || r_type == R_MICROMIPS_PC10_S1
2343           || r_type == R_MICROMIPS_PC7_S1);
2344 }
2345
2346 static inline bfd_boolean
2347 tls_gd_reloc_p (unsigned int r_type)
2348 {
2349   return (r_type == R_MIPS_TLS_GD
2350           || r_type == R_MIPS16_TLS_GD
2351           || r_type == R_MICROMIPS_TLS_GD);
2352 }
2353
2354 static inline bfd_boolean
2355 tls_ldm_reloc_p (unsigned int r_type)
2356 {
2357   return (r_type == R_MIPS_TLS_LDM
2358           || r_type == R_MIPS16_TLS_LDM
2359           || r_type == R_MICROMIPS_TLS_LDM);
2360 }
2361
2362 static inline bfd_boolean
2363 tls_gottprel_reloc_p (unsigned int r_type)
2364 {
2365   return (r_type == R_MIPS_TLS_GOTTPREL
2366           || r_type == R_MIPS16_TLS_GOTTPREL
2367           || r_type == R_MICROMIPS_TLS_GOTTPREL);
2368 }
2369
2370 void
2371 _bfd_mips_elf_reloc_unshuffle (bfd *abfd, int r_type,
2372                                bfd_boolean jal_shuffle, bfd_byte *data)
2373 {
2374   bfd_vma first, second, val;
2375
2376   if (!mips16_reloc_p (r_type) && !micromips_reloc_shuffle_p (r_type))
2377     return;
2378
2379   /* Pick up the first and second halfwords of the instruction.  */
2380   first = bfd_get_16 (abfd, data);
2381   second = bfd_get_16 (abfd, data + 2);
2382   if (micromips_reloc_p (r_type) || (r_type == R_MIPS16_26 && !jal_shuffle))
2383     val = first << 16 | second;
2384   else if (r_type != R_MIPS16_26)
2385     val = (((first & 0xf800) << 16) | ((second & 0xffe0) << 11)
2386            | ((first & 0x1f) << 11) | (first & 0x7e0) | (second & 0x1f));
2387   else
2388     val = (((first & 0xfc00) << 16) | ((first & 0x3e0) << 11)
2389            | ((first & 0x1f) << 21) | second);
2390   bfd_put_32 (abfd, val, data);
2391 }
2392
2393 void
2394 _bfd_mips_elf_reloc_shuffle (bfd *abfd, int r_type,
2395                              bfd_boolean jal_shuffle, bfd_byte *data)
2396 {
2397   bfd_vma first, second, val;
2398
2399   if (!mips16_reloc_p (r_type) && !micromips_reloc_shuffle_p (r_type))
2400     return;
2401
2402   val = bfd_get_32 (abfd, data);
2403   if (micromips_reloc_p (r_type) || (r_type == R_MIPS16_26 && !jal_shuffle))
2404     {
2405       second = val & 0xffff;
2406       first = val >> 16;
2407     }
2408   else if (r_type != R_MIPS16_26)
2409     {
2410       second = ((val >> 11) & 0xffe0) | (val & 0x1f);
2411       first = ((val >> 16) & 0xf800) | ((val >> 11) & 0x1f) | (val & 0x7e0);
2412     }
2413   else
2414     {
2415       second = val & 0xffff;
2416       first = ((val >> 16) & 0xfc00) | ((val >> 11) & 0x3e0)
2417                | ((val >> 21) & 0x1f);
2418     }
2419   bfd_put_16 (abfd, second, data + 2);
2420   bfd_put_16 (abfd, first, data);
2421 }
2422
2423 bfd_reloc_status_type
2424 _bfd_mips_elf_gprel16_with_gp (bfd *abfd, asymbol *symbol,
2425                                arelent *reloc_entry, asection *input_section,
2426                                bfd_boolean relocatable, void *data, bfd_vma gp)
2427 {
2428   bfd_vma relocation;
2429   bfd_signed_vma val;
2430   bfd_reloc_status_type status;
2431
2432   if (bfd_is_com_section (symbol->section))
2433     relocation = 0;
2434   else
2435     relocation = symbol->value;
2436
2437   relocation += symbol->section->output_section->vma;
2438   relocation += symbol->section->output_offset;
2439
2440   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2441     return bfd_reloc_outofrange;
2442
2443   /* Set val to the offset into the section or symbol.  */
2444   val = reloc_entry->addend;
2445
2446   _bfd_mips_elf_sign_extend (val, 16);
2447
2448   /* Adjust val for the final section location and GP value.  If we
2449      are producing relocatable output, we don't want to do this for
2450      an external symbol.  */
2451   if (! relocatable
2452       || (symbol->flags & BSF_SECTION_SYM) != 0)
2453     val += relocation - gp;
2454
2455   if (reloc_entry->howto->partial_inplace)
2456     {
2457       status = _bfd_relocate_contents (reloc_entry->howto, abfd, val,
2458                                        (bfd_byte *) data
2459                                        + reloc_entry->address);
2460       if (status != bfd_reloc_ok)
2461         return status;
2462     }
2463   else
2464     reloc_entry->addend = val;
2465
2466   if (relocatable)
2467     reloc_entry->address += input_section->output_offset;
2468
2469   return bfd_reloc_ok;
2470 }
2471
2472 /* Used to store a REL high-part relocation such as R_MIPS_HI16 or
2473    R_MIPS_GOT16.  REL is the relocation, INPUT_SECTION is the section
2474    that contains the relocation field and DATA points to the start of
2475    INPUT_SECTION.  */
2476
2477 struct mips_hi16
2478 {
2479   struct mips_hi16 *next;
2480   bfd_byte *data;
2481   asection *input_section;
2482   arelent rel;
2483 };
2484
2485 /* FIXME: This should not be a static variable.  */
2486
2487 static struct mips_hi16 *mips_hi16_list;
2488
2489 /* A howto special_function for REL *HI16 relocations.  We can only
2490    calculate the correct value once we've seen the partnering
2491    *LO16 relocation, so just save the information for later.
2492
2493    The ABI requires that the *LO16 immediately follow the *HI16.
2494    However, as a GNU extension, we permit an arbitrary number of
2495    *HI16s to be associated with a single *LO16.  This significantly
2496    simplies the relocation handling in gcc.  */
2497
2498 bfd_reloc_status_type
2499 _bfd_mips_elf_hi16_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry,
2500                           asymbol *symbol ATTRIBUTE_UNUSED, void *data,
2501                           asection *input_section, bfd *output_bfd,
2502                           char **error_message ATTRIBUTE_UNUSED)
2503 {
2504   struct mips_hi16 *n;
2505
2506   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2507     return bfd_reloc_outofrange;
2508
2509   n = bfd_malloc (sizeof *n);
2510   if (n == NULL)
2511     return bfd_reloc_outofrange;
2512
2513   n->next = mips_hi16_list;
2514   n->data = data;
2515   n->input_section = input_section;
2516   n->rel = *reloc_entry;
2517   mips_hi16_list = n;
2518
2519   if (output_bfd != NULL)
2520     reloc_entry->address += input_section->output_offset;
2521
2522   return bfd_reloc_ok;
2523 }
2524
2525 /* A howto special_function for REL R_MIPS*_GOT16 relocations.  This is just
2526    like any other 16-bit relocation when applied to global symbols, but is
2527    treated in the same as R_MIPS_HI16 when applied to local symbols.  */
2528
2529 bfd_reloc_status_type
2530 _bfd_mips_elf_got16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2531                            void *data, asection *input_section,
2532                            bfd *output_bfd, char **error_message)
2533 {
2534   if ((symbol->flags & (BSF_GLOBAL | BSF_WEAK)) != 0
2535       || bfd_is_und_section (bfd_asymbol_section (symbol))
2536       || bfd_is_com_section (bfd_asymbol_section (symbol)))
2537     /* The relocation is against a global symbol.  */
2538     return _bfd_mips_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2539                                         input_section, output_bfd,
2540                                         error_message);
2541
2542   return _bfd_mips_elf_hi16_reloc (abfd, reloc_entry, symbol, data,
2543                                    input_section, output_bfd, error_message);
2544 }
2545
2546 /* A howto special_function for REL *LO16 relocations.  The *LO16 itself
2547    is a straightforward 16 bit inplace relocation, but we must deal with
2548    any partnering high-part relocations as well.  */
2549
2550 bfd_reloc_status_type
2551 _bfd_mips_elf_lo16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2552                           void *data, asection *input_section,
2553                           bfd *output_bfd, char **error_message)
2554 {
2555   bfd_vma vallo;
2556   bfd_byte *location = (bfd_byte *) data + reloc_entry->address;
2557
2558   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2559     return bfd_reloc_outofrange;
2560
2561   _bfd_mips_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, FALSE,
2562                                  location);
2563   vallo = bfd_get_32 (abfd, location);
2564   _bfd_mips_elf_reloc_shuffle (abfd, reloc_entry->howto->type, FALSE,
2565                                location);
2566
2567   while (mips_hi16_list != NULL)
2568     {
2569       bfd_reloc_status_type ret;
2570       struct mips_hi16 *hi;
2571
2572       hi = mips_hi16_list;
2573
2574       /* R_MIPS*_GOT16 relocations are something of a special case.  We
2575          want to install the addend in the same way as for a R_MIPS*_HI16
2576          relocation (with a rightshift of 16).  However, since GOT16
2577          relocations can also be used with global symbols, their howto
2578          has a rightshift of 0.  */
2579       if (hi->rel.howto->type == R_MIPS_GOT16)
2580         hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MIPS_HI16, FALSE);
2581       else if (hi->rel.howto->type == R_MIPS16_GOT16)
2582         hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MIPS16_HI16, FALSE);
2583       else if (hi->rel.howto->type == R_MICROMIPS_GOT16)
2584         hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MICROMIPS_HI16, FALSE);
2585
2586       /* VALLO is a signed 16-bit number.  Bias it by 0x8000 so that any
2587          carry or borrow will induce a change of +1 or -1 in the high part.  */
2588       hi->rel.addend += (vallo + 0x8000) & 0xffff;
2589
2590       ret = _bfd_mips_elf_generic_reloc (abfd, &hi->rel, symbol, hi->data,
2591                                          hi->input_section, output_bfd,
2592                                          error_message);
2593       if (ret != bfd_reloc_ok)
2594         return ret;
2595
2596       mips_hi16_list = hi->next;
2597       free (hi);
2598     }
2599
2600   return _bfd_mips_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2601                                       input_section, output_bfd,
2602                                       error_message);
2603 }
2604
2605 /* A generic howto special_function.  This calculates and installs the
2606    relocation itself, thus avoiding the oft-discussed problems in
2607    bfd_perform_relocation and bfd_install_relocation.  */
2608
2609 bfd_reloc_status_type
2610 _bfd_mips_elf_generic_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry,
2611                              asymbol *symbol, void *data ATTRIBUTE_UNUSED,
2612                              asection *input_section, bfd *output_bfd,
2613                              char **error_message ATTRIBUTE_UNUSED)
2614 {
2615   bfd_signed_vma val;
2616   bfd_reloc_status_type status;
2617   bfd_boolean relocatable;
2618
2619   relocatable = (output_bfd != NULL);
2620
2621   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2622     return bfd_reloc_outofrange;
2623
2624   /* Build up the field adjustment in VAL.  */
2625   val = 0;
2626   if (!relocatable || (symbol->flags & BSF_SECTION_SYM) != 0)
2627     {
2628       /* Either we're calculating the final field value or we have a
2629          relocation against a section symbol.  Add in the section's
2630          offset or address.  */
2631       val += symbol->section->output_section->vma;
2632       val += symbol->section->output_offset;
2633     }
2634
2635   if (!relocatable)
2636     {
2637       /* We're calculating the final field value.  Add in the symbol's value
2638          and, if pc-relative, subtract the address of the field itself.  */
2639       val += symbol->value;
2640       if (reloc_entry->howto->pc_relative)
2641         {
2642           val -= input_section->output_section->vma;
2643           val -= input_section->output_offset;
2644           val -= reloc_entry->address;
2645         }
2646     }
2647
2648   /* VAL is now the final adjustment.  If we're keeping this relocation
2649      in the output file, and if the relocation uses a separate addend,
2650      we just need to add VAL to that addend.  Otherwise we need to add
2651      VAL to the relocation field itself.  */
2652   if (relocatable && !reloc_entry->howto->partial_inplace)
2653     reloc_entry->addend += val;
2654   else
2655     {
2656       bfd_byte *location = (bfd_byte *) data + reloc_entry->address;
2657
2658       /* Add in the separate addend, if any.  */
2659       val += reloc_entry->addend;
2660
2661       /* Add VAL to the relocation field.  */
2662       _bfd_mips_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, FALSE,
2663                                      location);
2664       status = _bfd_relocate_contents (reloc_entry->howto, abfd, val,
2665                                        location);
2666       _bfd_mips_elf_reloc_shuffle (abfd, reloc_entry->howto->type, FALSE,
2667                                    location);
2668
2669       if (status != bfd_reloc_ok)
2670         return status;
2671     }
2672
2673   if (relocatable)
2674     reloc_entry->address += input_section->output_offset;
2675
2676   return bfd_reloc_ok;
2677 }
2678 \f
2679 /* Swap an entry in a .gptab section.  Note that these routines rely
2680    on the equivalence of the two elements of the union.  */
2681
2682 static void
2683 bfd_mips_elf32_swap_gptab_in (bfd *abfd, const Elf32_External_gptab *ex,
2684                               Elf32_gptab *in)
2685 {
2686   in->gt_entry.gt_g_value = H_GET_32 (abfd, ex->gt_entry.gt_g_value);
2687   in->gt_entry.gt_bytes = H_GET_32 (abfd, ex->gt_entry.gt_bytes);
2688 }
2689
2690 static void
2691 bfd_mips_elf32_swap_gptab_out (bfd *abfd, const Elf32_gptab *in,
2692                                Elf32_External_gptab *ex)
2693 {
2694   H_PUT_32 (abfd, in->gt_entry.gt_g_value, ex->gt_entry.gt_g_value);
2695   H_PUT_32 (abfd, in->gt_entry.gt_bytes, ex->gt_entry.gt_bytes);
2696 }
2697
2698 static void
2699 bfd_elf32_swap_compact_rel_out (bfd *abfd, const Elf32_compact_rel *in,
2700                                 Elf32_External_compact_rel *ex)
2701 {
2702   H_PUT_32 (abfd, in->id1, ex->id1);
2703   H_PUT_32 (abfd, in->num, ex->num);
2704   H_PUT_32 (abfd, in->id2, ex->id2);
2705   H_PUT_32 (abfd, in->offset, ex->offset);
2706   H_PUT_32 (abfd, in->reserved0, ex->reserved0);
2707   H_PUT_32 (abfd, in->reserved1, ex->reserved1);
2708 }
2709
2710 static void
2711 bfd_elf32_swap_crinfo_out (bfd *abfd, const Elf32_crinfo *in,
2712                            Elf32_External_crinfo *ex)
2713 {
2714   unsigned long l;
2715
2716   l = (((in->ctype & CRINFO_CTYPE) << CRINFO_CTYPE_SH)
2717        | ((in->rtype & CRINFO_RTYPE) << CRINFO_RTYPE_SH)
2718        | ((in->dist2to & CRINFO_DIST2TO) << CRINFO_DIST2TO_SH)
2719        | ((in->relvaddr & CRINFO_RELVADDR) << CRINFO_RELVADDR_SH));
2720   H_PUT_32 (abfd, l, ex->info);
2721   H_PUT_32 (abfd, in->konst, ex->konst);
2722   H_PUT_32 (abfd, in->vaddr, ex->vaddr);
2723 }
2724 \f
2725 /* A .reginfo section holds a single Elf32_RegInfo structure.  These
2726    routines swap this structure in and out.  They are used outside of
2727    BFD, so they are globally visible.  */
2728
2729 void
2730 bfd_mips_elf32_swap_reginfo_in (bfd *abfd, const Elf32_External_RegInfo *ex,
2731                                 Elf32_RegInfo *in)
2732 {
2733   in->ri_gprmask = H_GET_32 (abfd, ex->ri_gprmask);
2734   in->ri_cprmask[0] = H_GET_32 (abfd, ex->ri_cprmask[0]);
2735   in->ri_cprmask[1] = H_GET_32 (abfd, ex->ri_cprmask[1]);
2736   in->ri_cprmask[2] = H_GET_32 (abfd, ex->ri_cprmask[2]);
2737   in->ri_cprmask[3] = H_GET_32 (abfd, ex->ri_cprmask[3]);
2738   in->ri_gp_value = H_GET_32 (abfd, ex->ri_gp_value);
2739 }
2740
2741 void
2742 bfd_mips_elf32_swap_reginfo_out (bfd *abfd, const Elf32_RegInfo *in,
2743                                  Elf32_External_RegInfo *ex)
2744 {
2745   H_PUT_32 (abfd, in->ri_gprmask, ex->ri_gprmask);
2746   H_PUT_32 (abfd, in->ri_cprmask[0], ex->ri_cprmask[0]);
2747   H_PUT_32 (abfd, in->ri_cprmask[1], ex->ri_cprmask[1]);
2748   H_PUT_32 (abfd, in->ri_cprmask[2], ex->ri_cprmask[2]);
2749   H_PUT_32 (abfd, in->ri_cprmask[3], ex->ri_cprmask[3]);
2750   H_PUT_32 (abfd, in->ri_gp_value, ex->ri_gp_value);
2751 }
2752
2753 /* In the 64 bit ABI, the .MIPS.options section holds register
2754    information in an Elf64_Reginfo structure.  These routines swap
2755    them in and out.  They are globally visible because they are used
2756    outside of BFD.  These routines are here so that gas can call them
2757    without worrying about whether the 64 bit ABI has been included.  */
2758
2759 void
2760 bfd_mips_elf64_swap_reginfo_in (bfd *abfd, const Elf64_External_RegInfo *ex,
2761                                 Elf64_Internal_RegInfo *in)
2762 {
2763   in->ri_gprmask = H_GET_32 (abfd, ex->ri_gprmask);
2764   in->ri_pad = H_GET_32 (abfd, ex->ri_pad);
2765   in->ri_cprmask[0] = H_GET_32 (abfd, ex->ri_cprmask[0]);
2766   in->ri_cprmask[1] = H_GET_32 (abfd, ex->ri_cprmask[1]);
2767   in->ri_cprmask[2] = H_GET_32 (abfd, ex->ri_cprmask[2]);
2768   in->ri_cprmask[3] = H_GET_32 (abfd, ex->ri_cprmask[3]);
2769   in->ri_gp_value = H_GET_64 (abfd, ex->ri_gp_value);
2770 }
2771
2772 void
2773 bfd_mips_elf64_swap_reginfo_out (bfd *abfd, const Elf64_Internal_RegInfo *in,
2774                                  Elf64_External_RegInfo *ex)
2775 {
2776   H_PUT_32 (abfd, in->ri_gprmask, ex->ri_gprmask);
2777   H_PUT_32 (abfd, in->ri_pad, ex->ri_pad);
2778   H_PUT_32 (abfd, in->ri_cprmask[0], ex->ri_cprmask[0]);
2779   H_PUT_32 (abfd, in->ri_cprmask[1], ex->ri_cprmask[1]);
2780   H_PUT_32 (abfd, in->ri_cprmask[2], ex->ri_cprmask[2]);
2781   H_PUT_32 (abfd, in->ri_cprmask[3], ex->ri_cprmask[3]);
2782   H_PUT_64 (abfd, in->ri_gp_value, ex->ri_gp_value);
2783 }
2784
2785 /* Swap in an options header.  */
2786
2787 void
2788 bfd_mips_elf_swap_options_in (bfd *abfd, const Elf_External_Options *ex,
2789                               Elf_Internal_Options *in)
2790 {
2791   in->kind = H_GET_8 (abfd, ex->kind);
2792   in->size = H_GET_8 (abfd, ex->size);
2793   in->section = H_GET_16 (abfd, ex->section);
2794   in->info = H_GET_32 (abfd, ex->info);
2795 }
2796
2797 /* Swap out an options header.  */
2798
2799 void
2800 bfd_mips_elf_swap_options_out (bfd *abfd, const Elf_Internal_Options *in,
2801                                Elf_External_Options *ex)
2802 {
2803   H_PUT_8 (abfd, in->kind, ex->kind);
2804   H_PUT_8 (abfd, in->size, ex->size);
2805   H_PUT_16 (abfd, in->section, ex->section);
2806   H_PUT_32 (abfd, in->info, ex->info);
2807 }
2808
2809 /* Swap in an abiflags structure.  */
2810
2811 void
2812 bfd_mips_elf_swap_abiflags_v0_in (bfd *abfd,
2813                                   const Elf_External_ABIFlags_v0 *ex,
2814                                   Elf_Internal_ABIFlags_v0 *in)
2815 {
2816   in->version = H_GET_16 (abfd, ex->version);
2817   in->isa_level = H_GET_8 (abfd, ex->isa_level);
2818   in->isa_rev = H_GET_8 (abfd, ex->isa_rev);
2819   in->gpr_size = H_GET_8 (abfd, ex->gpr_size);
2820   in->cpr1_size = H_GET_8 (abfd, ex->cpr1_size);
2821   in->cpr2_size = H_GET_8 (abfd, ex->cpr2_size);
2822   in->fp_abi = H_GET_8 (abfd, ex->fp_abi);
2823   in->isa_ext = H_GET_32 (abfd, ex->isa_ext);
2824   in->ases = H_GET_32 (abfd, ex->ases);
2825   in->flags1 = H_GET_32 (abfd, ex->flags1);
2826   in->flags2 = H_GET_32 (abfd, ex->flags2);
2827 }
2828
2829 /* Swap out an abiflags structure.  */
2830
2831 void
2832 bfd_mips_elf_swap_abiflags_v0_out (bfd *abfd,
2833                                    const Elf_Internal_ABIFlags_v0 *in,
2834                                    Elf_External_ABIFlags_v0 *ex)
2835 {
2836   H_PUT_16 (abfd, in->version, ex->version);
2837   H_PUT_8 (abfd, in->isa_level, ex->isa_level);
2838   H_PUT_8 (abfd, in->isa_rev, ex->isa_rev);
2839   H_PUT_8 (abfd, in->gpr_size, ex->gpr_size);
2840   H_PUT_8 (abfd, in->cpr1_size, ex->cpr1_size);
2841   H_PUT_8 (abfd, in->cpr2_size, ex->cpr2_size);
2842   H_PUT_8 (abfd, in->fp_abi, ex->fp_abi);
2843   H_PUT_32 (abfd, in->isa_ext, ex->isa_ext);
2844   H_PUT_32 (abfd, in->ases, ex->ases);
2845   H_PUT_32 (abfd, in->flags1, ex->flags1);
2846   H_PUT_32 (abfd, in->flags2, ex->flags2);
2847 }
2848 \f
2849 /* This function is called via qsort() to sort the dynamic relocation
2850    entries by increasing r_symndx value.  */
2851
2852 static int
2853 sort_dynamic_relocs (const void *arg1, const void *arg2)
2854 {
2855   Elf_Internal_Rela int_reloc1;
2856   Elf_Internal_Rela int_reloc2;
2857   int diff;
2858
2859   bfd_elf32_swap_reloc_in (reldyn_sorting_bfd, arg1, &int_reloc1);
2860   bfd_elf32_swap_reloc_in (reldyn_sorting_bfd, arg2, &int_reloc2);
2861
2862   diff = ELF32_R_SYM (int_reloc1.r_info) - ELF32_R_SYM (int_reloc2.r_info);
2863   if (diff != 0)
2864     return diff;
2865
2866   if (int_reloc1.r_offset < int_reloc2.r_offset)
2867     return -1;
2868   if (int_reloc1.r_offset > int_reloc2.r_offset)
2869     return 1;
2870   return 0;
2871 }
2872
2873 /* Like sort_dynamic_relocs, but used for elf64 relocations.  */
2874
2875 static int
2876 sort_dynamic_relocs_64 (const void *arg1 ATTRIBUTE_UNUSED,
2877                         const void *arg2 ATTRIBUTE_UNUSED)
2878 {
2879 #ifdef BFD64
2880   Elf_Internal_Rela int_reloc1[3];
2881   Elf_Internal_Rela int_reloc2[3];
2882
2883   (*get_elf_backend_data (reldyn_sorting_bfd)->s->swap_reloc_in)
2884     (reldyn_sorting_bfd, arg1, int_reloc1);
2885   (*get_elf_backend_data (reldyn_sorting_bfd)->s->swap_reloc_in)
2886     (reldyn_sorting_bfd, arg2, int_reloc2);
2887
2888   if (ELF64_R_SYM (int_reloc1[0].r_info) < ELF64_R_SYM (int_reloc2[0].r_info))
2889     return -1;
2890   if (ELF64_R_SYM (int_reloc1[0].r_info) > ELF64_R_SYM (int_reloc2[0].r_info))
2891     return 1;
2892
2893   if (int_reloc1[0].r_offset < int_reloc2[0].r_offset)
2894     return -1;
2895   if (int_reloc1[0].r_offset > int_reloc2[0].r_offset)
2896     return 1;
2897   return 0;
2898 #else
2899   abort ();
2900 #endif
2901 }
2902
2903
2904 /* This routine is used to write out ECOFF debugging external symbol
2905    information.  It is called via mips_elf_link_hash_traverse.  The
2906    ECOFF external symbol information must match the ELF external
2907    symbol information.  Unfortunately, at this point we don't know
2908    whether a symbol is required by reloc information, so the two
2909    tables may wind up being different.  We must sort out the external
2910    symbol information before we can set the final size of the .mdebug
2911    section, and we must set the size of the .mdebug section before we
2912    can relocate any sections, and we can't know which symbols are
2913    required by relocation until we relocate the sections.
2914    Fortunately, it is relatively unlikely that any symbol will be
2915    stripped but required by a reloc.  In particular, it can not happen
2916    when generating a final executable.  */
2917
2918 static bfd_boolean
2919 mips_elf_output_extsym (struct mips_elf_link_hash_entry *h, void *data)
2920 {
2921   struct extsym_info *einfo = data;
2922   bfd_boolean strip;
2923   asection *sec, *output_section;
2924
2925   if (h->root.indx == -2)
2926     strip = FALSE;
2927   else if ((h->root.def_dynamic
2928             || h->root.ref_dynamic
2929             || h->root.type == bfd_link_hash_new)
2930            && !h->root.def_regular
2931            && !h->root.ref_regular)
2932     strip = TRUE;
2933   else if (einfo->info->strip == strip_all
2934            || (einfo->info->strip == strip_some
2935                && bfd_hash_lookup (einfo->info->keep_hash,
2936                                    h->root.root.root.string,
2937                                    FALSE, FALSE) == NULL))
2938     strip = TRUE;
2939   else
2940     strip = FALSE;
2941
2942   if (strip)
2943     return TRUE;
2944
2945   if (h->esym.ifd == -2)
2946     {
2947       h->esym.jmptbl = 0;
2948       h->esym.cobol_main = 0;
2949       h->esym.weakext = 0;
2950       h->esym.reserved = 0;
2951       h->esym.ifd = ifdNil;
2952       h->esym.asym.value = 0;
2953       h->esym.asym.st = stGlobal;
2954
2955       if (h->root.root.type == bfd_link_hash_undefined
2956           || h->root.root.type == bfd_link_hash_undefweak)
2957         {
2958           const char *name;
2959
2960           /* Use undefined class.  Also, set class and type for some
2961              special symbols.  */
2962           name = h->root.root.root.string;
2963           if (strcmp (name, mips_elf_dynsym_rtproc_names[0]) == 0
2964               || strcmp (name, mips_elf_dynsym_rtproc_names[1]) == 0)
2965             {
2966               h->esym.asym.sc = scData;
2967               h->esym.asym.st = stLabel;
2968               h->esym.asym.value = 0;
2969             }
2970           else if (strcmp (name, mips_elf_dynsym_rtproc_names[2]) == 0)
2971             {
2972               h->esym.asym.sc = scAbs;
2973               h->esym.asym.st = stLabel;
2974               h->esym.asym.value =
2975                 mips_elf_hash_table (einfo->info)->procedure_count;
2976             }
2977           else
2978             h->esym.asym.sc = scUndefined;
2979         }
2980       else if (h->root.root.type != bfd_link_hash_defined
2981           && h->root.root.type != bfd_link_hash_defweak)
2982         h->esym.asym.sc = scAbs;
2983       else
2984         {
2985           const char *name;
2986
2987           sec = h->root.root.u.def.section;
2988           output_section = sec->output_section;
2989
2990           /* When making a shared library and symbol h is the one from
2991              the another shared library, OUTPUT_SECTION may be null.  */
2992           if (output_section == NULL)
2993             h->esym.asym.sc = scUndefined;
2994           else
2995             {
2996               name = bfd_section_name (output_section);
2997
2998               if (strcmp (name, ".text") == 0)
2999                 h->esym.asym.sc = scText;
3000               else if (strcmp (name, ".data") == 0)
3001                 h->esym.asym.sc = scData;
3002               else if (strcmp (name, ".sdata") == 0)
3003                 h->esym.asym.sc = scSData;
3004               else if (strcmp (name, ".rodata") == 0
3005                        || strcmp (name, ".rdata") == 0)
3006                 h->esym.asym.sc = scRData;
3007               else if (strcmp (name, ".bss") == 0)
3008                 h->esym.asym.sc = scBss;
3009               else if (strcmp (name, ".sbss") == 0)
3010                 h->esym.asym.sc = scSBss;
3011               else if (strcmp (name, ".init") == 0)
3012                 h->esym.asym.sc = scInit;
3013               else if (strcmp (name, ".fini") == 0)
3014                 h->esym.asym.sc = scFini;
3015               else
3016                 h->esym.asym.sc = scAbs;
3017             }
3018         }
3019
3020       h->esym.asym.reserved = 0;
3021       h->esym.asym.index = indexNil;
3022     }
3023
3024   if (h->root.root.type == bfd_link_hash_common)
3025     h->esym.asym.value = h->root.root.u.c.size;
3026   else if (h->root.root.type == bfd_link_hash_defined
3027            || h->root.root.type == bfd_link_hash_defweak)
3028     {
3029       if (h->esym.asym.sc == scCommon)
3030         h->esym.asym.sc = scBss;
3031       else if (h->esym.asym.sc == scSCommon)
3032         h->esym.asym.sc = scSBss;
3033
3034       sec = h->root.root.u.def.section;
3035       output_section = sec->output_section;
3036       if (output_section != NULL)
3037         h->esym.asym.value = (h->root.root.u.def.value
3038                               + sec->output_offset
3039                               + output_section->vma);
3040       else
3041         h->esym.asym.value = 0;
3042     }
3043   else
3044     {
3045       struct mips_elf_link_hash_entry *hd = h;
3046
3047       while (hd->root.root.type == bfd_link_hash_indirect)
3048         hd = (struct mips_elf_link_hash_entry *)h->root.root.u.i.link;
3049
3050       if (hd->needs_lazy_stub)
3051         {
3052           BFD_ASSERT (hd->root.plt.plist != NULL);
3053           BFD_ASSERT (hd->root.plt.plist->stub_offset != MINUS_ONE);
3054           /* Set type and value for a symbol with a function stub.  */
3055           h->esym.asym.st = stProc;
3056           sec = hd->root.root.u.def.section;
3057           if (sec == NULL)
3058             h->esym.asym.value = 0;
3059           else
3060             {
3061               output_section = sec->output_section;
3062               if (output_section != NULL)
3063                 h->esym.asym.value = (hd->root.plt.plist->stub_offset
3064                                       + sec->output_offset
3065                                       + output_section->vma);
3066               else
3067                 h->esym.asym.value = 0;
3068             }
3069         }
3070     }
3071
3072   if (! bfd_ecoff_debug_one_external (einfo->abfd, einfo->debug, einfo->swap,
3073                                       h->root.root.root.string,
3074                                       &h->esym))
3075     {
3076       einfo->failed = TRUE;
3077       return FALSE;
3078     }
3079
3080   return TRUE;
3081 }
3082
3083 /* A comparison routine used to sort .gptab entries.  */
3084
3085 static int
3086 gptab_compare (const void *p1, const void *p2)
3087 {
3088   const Elf32_gptab *a1 = p1;
3089   const Elf32_gptab *a2 = p2;
3090
3091   return a1->gt_entry.gt_g_value - a2->gt_entry.gt_g_value;
3092 }
3093 \f
3094 /* Functions to manage the got entry hash table.  */
3095
3096 /* Use all 64 bits of a bfd_vma for the computation of a 32-bit
3097    hash number.  */
3098
3099 static INLINE hashval_t
3100 mips_elf_hash_bfd_vma (bfd_vma addr)
3101 {
3102 #ifdef BFD64
3103   return addr + (addr >> 32);
3104 #else
3105   return addr;
3106 #endif
3107 }
3108
3109 static hashval_t
3110 mips_elf_got_entry_hash (const void *entry_)
3111 {
3112   const struct mips_got_entry *entry = (struct mips_got_entry *)entry_;
3113
3114   return (entry->symndx
3115           + ((entry->tls_type == GOT_TLS_LDM) << 18)
3116           + (entry->tls_type == GOT_TLS_LDM ? 0
3117              : !entry->abfd ? mips_elf_hash_bfd_vma (entry->d.address)
3118              : entry->symndx >= 0 ? (entry->abfd->id
3119                                      + mips_elf_hash_bfd_vma (entry->d.addend))
3120              : entry->d.h->root.root.root.hash));
3121 }
3122
3123 static int
3124 mips_elf_got_entry_eq (const void *entry1, const void *entry2)
3125 {
3126   const struct mips_got_entry *e1 = (struct mips_got_entry *)entry1;
3127   const struct mips_got_entry *e2 = (struct mips_got_entry *)entry2;
3128
3129   return (e1->symndx == e2->symndx
3130           && e1->tls_type == e2->tls_type
3131           && (e1->tls_type == GOT_TLS_LDM ? TRUE
3132               : !e1->abfd ? !e2->abfd && e1->d.address == e2->d.address
3133               : e1->symndx >= 0 ? (e1->abfd == e2->abfd
3134                                    && e1->d.addend == e2->d.addend)
3135               : e2->abfd && e1->d.h == e2->d.h));
3136 }
3137
3138 static hashval_t
3139 mips_got_page_ref_hash (const void *ref_)
3140 {
3141   const struct mips_got_page_ref *ref;
3142
3143   ref = (const struct mips_got_page_ref *) ref_;
3144   return ((ref->symndx >= 0
3145            ? (hashval_t) (ref->u.abfd->id + ref->symndx)
3146            : ref->u.h->root.root.root.hash)
3147           + mips_elf_hash_bfd_vma (ref->addend));
3148 }
3149
3150 static int
3151 mips_got_page_ref_eq (const void *ref1_, const void *ref2_)
3152 {
3153   const struct mips_got_page_ref *ref1, *ref2;
3154
3155   ref1 = (const struct mips_got_page_ref *) ref1_;
3156   ref2 = (const struct mips_got_page_ref *) ref2_;
3157   return (ref1->symndx == ref2->symndx
3158           && (ref1->symndx < 0
3159               ? ref1->u.h == ref2->u.h
3160               : ref1->u.abfd == ref2->u.abfd)
3161           && ref1->addend == ref2->addend);
3162 }
3163
3164 static hashval_t
3165 mips_got_page_entry_hash (const void *entry_)
3166 {
3167   const struct mips_got_page_entry *entry;
3168
3169   entry = (const struct mips_got_page_entry *) entry_;
3170   return entry->sec->id;
3171 }
3172
3173 static int
3174 mips_got_page_entry_eq (const void *entry1_, const void *entry2_)
3175 {
3176   const struct mips_got_page_entry *entry1, *entry2;
3177
3178   entry1 = (const struct mips_got_page_entry *) entry1_;
3179   entry2 = (const struct mips_got_page_entry *) entry2_;
3180   return entry1->sec == entry2->sec;
3181 }
3182 \f
3183 /* Create and return a new mips_got_info structure.  */
3184
3185 static struct mips_got_info *
3186 mips_elf_create_got_info (bfd *abfd)
3187 {
3188   struct mips_got_info *g;
3189
3190   g = bfd_zalloc (abfd, sizeof (struct mips_got_info));
3191   if (g == NULL)
3192     return NULL;
3193
3194   g->got_entries = htab_try_create (1, mips_elf_got_entry_hash,
3195                                     mips_elf_got_entry_eq, NULL);
3196   if (g->got_entries == NULL)
3197     return NULL;
3198
3199   g->got_page_refs = htab_try_create (1, mips_got_page_ref_hash,
3200                                       mips_got_page_ref_eq, NULL);
3201   if (g->got_page_refs == NULL)
3202     return NULL;
3203
3204   return g;
3205 }
3206
3207 /* Return the GOT info for input bfd ABFD, trying to create a new one if
3208    CREATE_P and if ABFD doesn't already have a GOT.  */
3209
3210 static struct mips_got_info *
3211 mips_elf_bfd_got (bfd *abfd, bfd_boolean create_p)
3212 {
3213   struct mips_elf_obj_tdata *tdata;
3214
3215   if (!is_mips_elf (abfd))
3216     return NULL;
3217
3218   tdata = mips_elf_tdata (abfd);
3219   if (!tdata->got && create_p)
3220     tdata->got = mips_elf_create_got_info (abfd);
3221   return tdata->got;
3222 }
3223
3224 /* Record that ABFD should use output GOT G.  */
3225
3226 static void
3227 mips_elf_replace_bfd_got (bfd *abfd, struct mips_got_info *g)
3228 {
3229   struct mips_elf_obj_tdata *tdata;
3230
3231   BFD_ASSERT (is_mips_elf (abfd));
3232   tdata = mips_elf_tdata (abfd);
3233   if (tdata->got)
3234     {
3235       /* The GOT structure itself and the hash table entries are
3236          allocated to a bfd, but the hash tables aren't.  */
3237       htab_delete (tdata->got->got_entries);
3238       htab_delete (tdata->got->got_page_refs);
3239       if (tdata->got->got_page_entries)
3240         htab_delete (tdata->got->got_page_entries);
3241     }
3242   tdata->got = g;
3243 }
3244
3245 /* Return the dynamic relocation section.  If it doesn't exist, try to
3246    create a new it if CREATE_P, otherwise return NULL.  Also return NULL
3247    if creation fails.  */
3248
3249 static asection *
3250 mips_elf_rel_dyn_section (struct bfd_link_info *info, bfd_boolean create_p)
3251 {
3252   const char *dname;
3253   asection *sreloc;
3254   bfd *dynobj;
3255
3256   dname = MIPS_ELF_REL_DYN_NAME (info);
3257   dynobj = elf_hash_table (info)->dynobj;
3258   sreloc = bfd_get_linker_section (dynobj, dname);
3259   if (sreloc == NULL && create_p)
3260     {
3261       sreloc = bfd_make_section_anyway_with_flags (dynobj, dname,
3262                                                    (SEC_ALLOC
3263                                                     | SEC_LOAD
3264                                                     | SEC_HAS_CONTENTS
3265                                                     | SEC_IN_MEMORY
3266                                                     | SEC_LINKER_CREATED
3267                                                     | SEC_READONLY));
3268       if (sreloc == NULL
3269           || !bfd_set_section_alignment (sreloc,
3270                                          MIPS_ELF_LOG_FILE_ALIGN (dynobj)))
3271         return NULL;
3272     }
3273   return sreloc;
3274 }
3275
3276 /* Return the GOT_TLS_* type required by relocation type R_TYPE.  */
3277
3278 static int
3279 mips_elf_reloc_tls_type (unsigned int r_type)
3280 {
3281   if (tls_gd_reloc_p (r_type))
3282     return GOT_TLS_GD;
3283
3284   if (tls_ldm_reloc_p (r_type))
3285     return GOT_TLS_LDM;
3286
3287   if (tls_gottprel_reloc_p (r_type))
3288     return GOT_TLS_IE;
3289
3290   return GOT_TLS_NONE;
3291 }
3292
3293 /* Return the number of GOT slots needed for GOT TLS type TYPE.  */
3294
3295 static int
3296 mips_tls_got_entries (unsigned int type)
3297 {
3298   switch (type)
3299     {
3300     case GOT_TLS_GD:
3301     case GOT_TLS_LDM:
3302       return 2;
3303
3304     case GOT_TLS_IE:
3305       return 1;
3306
3307     case GOT_TLS_NONE:
3308       return 0;
3309     }
3310   abort ();
3311 }
3312
3313 /* Count the number of relocations needed for a TLS GOT entry, with
3314    access types from TLS_TYPE, and symbol H (or a local symbol if H
3315    is NULL).  */
3316
3317 static int
3318 mips_tls_got_relocs (struct bfd_link_info *info, unsigned char tls_type,
3319                      struct elf_link_hash_entry *h)
3320 {
3321   int indx = 0;
3322   bfd_boolean need_relocs = FALSE;
3323   bfd_boolean dyn = elf_hash_table (info)->dynamic_sections_created;
3324
3325   if (h != NULL
3326       && h->dynindx != -1
3327       && WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info), h)
3328       && (bfd_link_dll (info) || !SYMBOL_REFERENCES_LOCAL (info, h)))
3329     indx = h->dynindx;
3330
3331   if ((bfd_link_dll (info) || indx != 0)
3332       && (h == NULL
3333           || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
3334           || h->root.type != bfd_link_hash_undefweak))
3335     need_relocs = TRUE;
3336
3337   if (!need_relocs)
3338     return 0;
3339
3340   switch (tls_type)
3341     {
3342     case GOT_TLS_GD:
3343       return indx != 0 ? 2 : 1;
3344
3345     case GOT_TLS_IE:
3346       return 1;
3347
3348     case GOT_TLS_LDM:
3349       return bfd_link_dll (info) ? 1 : 0;
3350
3351     default:
3352       return 0;
3353     }
3354 }
3355
3356 /* Add the number of GOT entries and TLS relocations required by ENTRY
3357    to G.  */
3358
3359 static void
3360 mips_elf_count_got_entry (struct bfd_link_info *info,
3361                           struct mips_got_info *g,
3362                           struct mips_got_entry *entry)
3363 {
3364   if (entry->tls_type)
3365     {
3366       g->tls_gotno += mips_tls_got_entries (entry->tls_type);
3367       g->relocs += mips_tls_got_relocs (info, entry->tls_type,
3368                                         entry->symndx < 0
3369                                         ? &entry->d.h->root : NULL);
3370     }
3371   else if (entry->symndx >= 0 || entry->d.h->global_got_area == GGA_NONE)
3372     g->local_gotno += 1;
3373   else
3374     g->global_gotno += 1;
3375 }
3376
3377 /* Output a simple dynamic relocation into SRELOC.  */
3378
3379 static void
3380 mips_elf_output_dynamic_relocation (bfd *output_bfd,
3381                                     asection *sreloc,
3382                                     unsigned long reloc_index,
3383                                     unsigned long indx,
3384                                     int r_type,
3385                                     bfd_vma offset)
3386 {
3387   Elf_Internal_Rela rel[3];
3388
3389   memset (rel, 0, sizeof (rel));
3390
3391   rel[0].r_info = ELF_R_INFO (output_bfd, indx, r_type);
3392   rel[0].r_offset = rel[1].r_offset = rel[2].r_offset = offset;
3393
3394   if (ABI_64_P (output_bfd))
3395     {
3396       (*get_elf_backend_data (output_bfd)->s->swap_reloc_out)
3397         (output_bfd, &rel[0],
3398          (sreloc->contents
3399           + reloc_index * sizeof (Elf64_Mips_External_Rel)));
3400     }
3401   else
3402     bfd_elf32_swap_reloc_out
3403       (output_bfd, &rel[0],
3404        (sreloc->contents
3405         + reloc_index * sizeof (Elf32_External_Rel)));
3406 }
3407
3408 /* Initialize a set of TLS GOT entries for one symbol.  */
3409
3410 static void
3411 mips_elf_initialize_tls_slots (bfd *abfd, struct bfd_link_info *info,
3412                                struct mips_got_entry *entry,
3413                                struct mips_elf_link_hash_entry *h,
3414                                bfd_vma value)
3415 {
3416   bfd_boolean dyn = elf_hash_table (info)->dynamic_sections_created;
3417   struct mips_elf_link_hash_table *htab;
3418   int indx;
3419   asection *sreloc, *sgot;
3420   bfd_vma got_offset, got_offset2;
3421   bfd_boolean need_relocs = FALSE;
3422
3423   htab = mips_elf_hash_table (info);
3424   if (htab == NULL)
3425     return;
3426
3427   sgot = htab->root.sgot;
3428
3429   indx = 0;
3430   if (h != NULL
3431       && h->root.dynindx != -1
3432       && WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info), &h->root)
3433       && (bfd_link_dll (info) || !SYMBOL_REFERENCES_LOCAL (info, &h->root)))
3434     indx = h->root.dynindx;
3435
3436   if (entry->tls_initialized)
3437     return;
3438
3439   if ((bfd_link_dll (info) || indx != 0)
3440       && (h == NULL
3441           || ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT
3442           || h->root.type != bfd_link_hash_undefweak))
3443     need_relocs = TRUE;
3444
3445   /* MINUS_ONE means the symbol is not defined in this object.  It may not
3446      be defined at all; assume that the value doesn't matter in that
3447      case.  Otherwise complain if we would use the value.  */
3448   BFD_ASSERT (value != MINUS_ONE || (indx != 0 && need_relocs)
3449               || h->root.root.type == bfd_link_hash_undefweak);
3450
3451   /* Emit necessary relocations.  */
3452   sreloc = mips_elf_rel_dyn_section (info, FALSE);
3453   got_offset = entry->gotidx;
3454
3455   switch (entry->tls_type)
3456     {
3457     case GOT_TLS_GD:
3458       /* General Dynamic.  */
3459       got_offset2 = got_offset + MIPS_ELF_GOT_SIZE (abfd);
3460
3461       if (need_relocs)
3462         {
3463           mips_elf_output_dynamic_relocation
3464             (abfd, sreloc, sreloc->reloc_count++, indx,
3465              ABI_64_P (abfd) ? R_MIPS_TLS_DTPMOD64 : R_MIPS_TLS_DTPMOD32,
3466              sgot->output_offset + sgot->output_section->vma + got_offset);
3467
3468           if (indx)
3469             mips_elf_output_dynamic_relocation
3470               (abfd, sreloc, sreloc->reloc_count++, indx,
3471                ABI_64_P (abfd) ? R_MIPS_TLS_DTPREL64 : R_MIPS_TLS_DTPREL32,
3472                sgot->output_offset + sgot->output_section->vma + got_offset2);
3473           else
3474             MIPS_ELF_PUT_WORD (abfd, value - dtprel_base (info),
3475                                sgot->contents + got_offset2);
3476         }
3477       else
3478         {
3479           MIPS_ELF_PUT_WORD (abfd, 1,
3480                              sgot->contents + got_offset);
3481           MIPS_ELF_PUT_WORD (abfd, value - dtprel_base (info),
3482                              sgot->contents + got_offset2);
3483         }
3484       break;
3485
3486     case GOT_TLS_IE:
3487       /* Initial Exec model.  */
3488       if (need_relocs)
3489         {
3490           if (indx == 0)
3491             MIPS_ELF_PUT_WORD (abfd, value - elf_hash_table (info)->tls_sec->vma,
3492                                sgot->contents + got_offset);
3493           else
3494             MIPS_ELF_PUT_WORD (abfd, 0,
3495                                sgot->contents + got_offset);
3496
3497           mips_elf_output_dynamic_relocation
3498             (abfd, sreloc, sreloc->reloc_count++, indx,
3499              ABI_64_P (abfd) ? R_MIPS_TLS_TPREL64 : R_MIPS_TLS_TPREL32,
3500              sgot->output_offset + sgot->output_section->vma + got_offset);
3501         }
3502       else
3503         MIPS_ELF_PUT_WORD (abfd, value - tprel_base (info),
3504                            sgot->contents + got_offset);
3505       break;
3506
3507     case GOT_TLS_LDM:
3508       /* The initial offset is zero, and the LD offsets will include the
3509          bias by DTP_OFFSET.  */
3510       MIPS_ELF_PUT_WORD (abfd, 0,
3511                          sgot->contents + got_offset
3512                          + MIPS_ELF_GOT_SIZE (abfd));
3513
3514       if (!bfd_link_dll (info))
3515         MIPS_ELF_PUT_WORD (abfd, 1,
3516                            sgot->contents + got_offset);
3517       else
3518         mips_elf_output_dynamic_relocation
3519           (abfd, sreloc, sreloc->reloc_count++, indx,
3520            ABI_64_P (abfd) ? R_MIPS_TLS_DTPMOD64 : R_MIPS_TLS_DTPMOD32,
3521            sgot->output_offset + sgot->output_section->vma + got_offset);
3522       break;
3523
3524     default:
3525       abort ();
3526     }
3527
3528   entry->tls_initialized = TRUE;
3529 }
3530
3531 /* Return the offset from _GLOBAL_OFFSET_TABLE_ of the .got.plt entry
3532    for global symbol H.  .got.plt comes before the GOT, so the offset
3533    will be negative.  */
3534
3535 static bfd_vma
3536 mips_elf_gotplt_index (struct bfd_link_info *info,
3537                        struct elf_link_hash_entry *h)
3538 {
3539   bfd_vma got_address, got_value;
3540   struct mips_elf_link_hash_table *htab;
3541
3542   htab = mips_elf_hash_table (info);
3543   BFD_ASSERT (htab != NULL);
3544
3545   BFD_ASSERT (h->plt.plist != NULL);
3546   BFD_ASSERT (h->plt.plist->gotplt_index != MINUS_ONE);
3547
3548   /* Calculate the address of the associated .got.plt entry.  */
3549   got_address = (htab->root.sgotplt->output_section->vma
3550                  + htab->root.sgotplt->output_offset
3551                  + (h->plt.plist->gotplt_index
3552                     * MIPS_ELF_GOT_SIZE (info->output_bfd)));
3553
3554   /* Calculate the value of _GLOBAL_OFFSET_TABLE_.  */
3555   got_value = (htab->root.hgot->root.u.def.section->output_section->vma
3556                + htab->root.hgot->root.u.def.section->output_offset
3557                + htab->root.hgot->root.u.def.value);
3558
3559   return got_address - got_value;
3560 }
3561
3562 /* Return the GOT offset for address VALUE.   If there is not yet a GOT
3563    entry for this value, create one.  If R_SYMNDX refers to a TLS symbol,
3564    create a TLS GOT entry instead.  Return -1 if no satisfactory GOT
3565    offset can be found.  */
3566
3567 static bfd_vma
3568 mips_elf_local_got_index (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
3569                           bfd_vma value, unsigned long r_symndx,
3570                           struct mips_elf_link_hash_entry *h, int r_type)
3571 {
3572   struct mips_elf_link_hash_table *htab;
3573   struct mips_got_entry *entry;
3574
3575   htab = mips_elf_hash_table (info);
3576   BFD_ASSERT (htab != NULL);
3577
3578   entry = mips_elf_create_local_got_entry (abfd, info, ibfd, value,
3579                                            r_symndx, h, r_type);
3580   if (!entry)
3581     return MINUS_ONE;
3582
3583   if (entry->tls_type)
3584     mips_elf_initialize_tls_slots (abfd, info, entry, h, value);
3585   return entry->gotidx;
3586 }
3587
3588 /* Return the GOT index of global symbol H in the primary GOT.  */
3589
3590 static bfd_vma
3591 mips_elf_primary_global_got_index (bfd *obfd, struct bfd_link_info *info,
3592                                    struct elf_link_hash_entry *h)
3593 {
3594   struct mips_elf_link_hash_table *htab;
3595   long global_got_dynindx;
3596   struct mips_got_info *g;
3597   bfd_vma got_index;
3598
3599   htab = mips_elf_hash_table (info);
3600   BFD_ASSERT (htab != NULL);
3601
3602   global_got_dynindx = 0;
3603   if (htab->global_gotsym != NULL)
3604     global_got_dynindx = htab->global_gotsym->dynindx;
3605
3606   /* Once we determine the global GOT entry with the lowest dynamic
3607      symbol table index, we must put all dynamic symbols with greater
3608      indices into the primary GOT.  That makes it easy to calculate the
3609      GOT offset.  */
3610   BFD_ASSERT (h->dynindx >= global_got_dynindx);
3611   g = mips_elf_bfd_got (obfd, FALSE);
3612   got_index = ((h->dynindx - global_got_dynindx + g->local_gotno)
3613                * MIPS_ELF_GOT_SIZE (obfd));
3614   BFD_ASSERT (got_index < htab->root.sgot->size);
3615
3616   return got_index;
3617 }
3618
3619 /* Return the GOT index for the global symbol indicated by H, which is
3620    referenced by a relocation of type R_TYPE in IBFD.  */
3621
3622 static bfd_vma
3623 mips_elf_global_got_index (bfd *obfd, struct bfd_link_info *info, bfd *ibfd,
3624                            struct elf_link_hash_entry *h, int r_type)
3625 {
3626   struct mips_elf_link_hash_table *htab;
3627   struct mips_got_info *g;
3628   struct mips_got_entry lookup, *entry;
3629   bfd_vma gotidx;
3630
3631   htab = mips_elf_hash_table (info);
3632   BFD_ASSERT (htab != NULL);
3633
3634   g = mips_elf_bfd_got (ibfd, FALSE);
3635   BFD_ASSERT (g);
3636
3637   lookup.tls_type = mips_elf_reloc_tls_type (r_type);
3638   if (!lookup.tls_type && g == mips_elf_bfd_got (obfd, FALSE))
3639     return mips_elf_primary_global_got_index (obfd, info, h);
3640
3641   lookup.abfd = ibfd;
3642   lookup.symndx = -1;
3643   lookup.d.h = (struct mips_elf_link_hash_entry *) h;
3644   entry = htab_find (g->got_entries, &lookup);
3645   BFD_ASSERT (entry);
3646
3647   gotidx = entry->gotidx;
3648   BFD_ASSERT (gotidx > 0 && gotidx < htab->root.sgot->size);
3649
3650   if (lookup.tls_type)
3651     {
3652       bfd_vma value = MINUS_ONE;
3653
3654       if ((h->root.type == bfd_link_hash_defined
3655            || h->root.type == bfd_link_hash_defweak)
3656           && h->root.u.def.section->output_section)
3657         value = (h->root.u.def.value
3658                  + h->root.u.def.section->output_offset
3659                  + h->root.u.def.section->output_section->vma);
3660
3661       mips_elf_initialize_tls_slots (obfd, info, entry, lookup.d.h, value);
3662     }
3663   return gotidx;
3664 }
3665
3666 /* Find a GOT page entry that points to within 32KB of VALUE.  These
3667    entries are supposed to be placed at small offsets in the GOT, i.e.,
3668    within 32KB of GP.  Return the index of the GOT entry, or -1 if no
3669    entry could be created.  If OFFSETP is nonnull, use it to return the
3670    offset of the GOT entry from VALUE.  */
3671
3672 static bfd_vma
3673 mips_elf_got_page (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
3674                    bfd_vma value, bfd_vma *offsetp)
3675 {
3676   bfd_vma page, got_index;
3677   struct mips_got_entry *entry;
3678
3679   page = (value + 0x8000) & ~(bfd_vma) 0xffff;
3680   entry = mips_elf_create_local_got_entry (abfd, info, ibfd, page, 0,
3681                                            NULL, R_MIPS_GOT_PAGE);
3682
3683   if (!entry)
3684     return MINUS_ONE;
3685
3686   got_index = entry->gotidx;
3687
3688   if (offsetp)
3689     *offsetp = value - entry->d.address;
3690
3691   return got_index;
3692 }
3693
3694 /* Find a local GOT entry for an R_MIPS*_GOT16 relocation against VALUE.
3695    EXTERNAL is true if the relocation was originally against a global
3696    symbol that binds locally.  */
3697
3698 static bfd_vma
3699 mips_elf_got16_entry (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
3700                       bfd_vma value, bfd_boolean external)
3701 {
3702   struct mips_got_entry *entry;
3703
3704   /* GOT16 relocations against local symbols are followed by a LO16
3705      relocation; those against global symbols are not.  Thus if the
3706      symbol was originally local, the GOT16 relocation should load the
3707      equivalent of %hi(VALUE), otherwise it should load VALUE itself.  */
3708   if (! external)
3709     value = mips_elf_high (value) << 16;
3710
3711   /* It doesn't matter whether the original relocation was R_MIPS_GOT16,
3712      R_MIPS16_GOT16, R_MIPS_CALL16, etc.  The format of the entry is the
3713      same in all cases.  */
3714   entry = mips_elf_create_local_got_entry (abfd, info, ibfd, value, 0,
3715                                            NULL, R_MIPS_GOT16);
3716   if (entry)
3717     return entry->gotidx;
3718   else
3719     return MINUS_ONE;
3720 }
3721
3722 /* Returns the offset for the entry at the INDEXth position
3723    in the GOT.  */
3724
3725 static bfd_vma
3726 mips_elf_got_offset_from_index (struct bfd_link_info *info, bfd *output_bfd,
3727                                 bfd *input_bfd, bfd_vma got_index)
3728 {
3729   struct mips_elf_link_hash_table *htab;
3730   asection *sgot;
3731   bfd_vma gp;
3732
3733   htab = mips_elf_hash_table (info);
3734   BFD_ASSERT (htab != NULL);
3735
3736   sgot = htab->root.sgot;
3737   gp = _bfd_get_gp_value (output_bfd)
3738     + mips_elf_adjust_gp (output_bfd, htab->got_info, input_bfd);
3739
3740   return sgot->output_section->vma + sgot->output_offset + got_index - gp;
3741 }
3742
3743 /* Create and return a local GOT entry for VALUE, which was calculated
3744    from a symbol belonging to INPUT_SECTON.  Return NULL if it could not
3745    be created.  If R_SYMNDX refers to a TLS symbol, create a TLS entry
3746    instead.  */
3747
3748 static struct mips_got_entry *
3749 mips_elf_create_local_got_entry (bfd *abfd, struct bfd_link_info *info,
3750                                  bfd *ibfd, bfd_vma value,
3751                                  unsigned long r_symndx,
3752                                  struct mips_elf_link_hash_entry *h,
3753                                  int r_type)
3754 {
3755   struct mips_got_entry lookup, *entry;
3756   void **loc;
3757   struct mips_got_info *g;
3758   struct mips_elf_link_hash_table *htab;
3759   bfd_vma gotidx;
3760
3761   htab = mips_elf_hash_table (info);
3762   BFD_ASSERT (htab != NULL);
3763
3764   g = mips_elf_bfd_got (ibfd, FALSE);
3765   if (g == NULL)
3766     {
3767       g = mips_elf_bfd_got (abfd, FALSE);
3768       BFD_ASSERT (g != NULL);
3769     }
3770
3771   /* This function shouldn't be called for symbols that live in the global
3772      area of the GOT.  */
3773   BFD_ASSERT (h == NULL || h->global_got_area == GGA_NONE);
3774
3775   lookup.tls_type = mips_elf_reloc_tls_type (r_type);
3776   if (lookup.tls_type)
3777     {
3778       lookup.abfd = ibfd;
3779       if (tls_ldm_reloc_p (r_type))
3780         {
3781           lookup.symndx = 0;
3782           lookup.d.addend = 0;
3783         }
3784       else if (h == NULL)
3785         {
3786           lookup.symndx = r_symndx;
3787           lookup.d.addend = 0;
3788         }
3789       else
3790         {
3791           lookup.symndx = -1;
3792           lookup.d.h = h;
3793         }
3794
3795       entry = (struct mips_got_entry *) htab_find (g->got_entries, &lookup);
3796       BFD_ASSERT (entry);
3797
3798       gotidx = entry->gotidx;
3799       BFD_ASSERT (gotidx > 0 && gotidx < htab->root.sgot->size);
3800
3801       return entry;
3802     }
3803
3804   lookup.abfd = NULL;
3805   lookup.symndx = -1;
3806   lookup.d.address = value;
3807   loc = htab_find_slot (g->got_entries, &lookup, INSERT);
3808   if (!loc)
3809     return NULL;
3810
3811   entry = (struct mips_got_entry *) *loc;
3812   if (entry)
3813     return entry;
3814
3815   if (g->assigned_low_gotno > g->assigned_high_gotno)
3816     {
3817       /* We didn't allocate enough space in the GOT.  */
3818       _bfd_error_handler
3819         (_("not enough GOT space for local GOT entries"));
3820       bfd_set_error (bfd_error_bad_value);
3821       return NULL;
3822     }
3823
3824   entry = (struct mips_got_entry *) bfd_alloc (abfd, sizeof (*entry));
3825   if (!entry)
3826     return NULL;
3827
3828   if (got16_reloc_p (r_type)
3829       || call16_reloc_p (r_type)
3830       || got_page_reloc_p (r_type)
3831       || got_disp_reloc_p (r_type))
3832     lookup.gotidx = MIPS_ELF_GOT_SIZE (abfd) * g->assigned_low_gotno++;
3833   else
3834     lookup.gotidx = MIPS_ELF_GOT_SIZE (abfd) * g->assigned_high_gotno--;
3835
3836   *entry = lookup;
3837   *loc = entry;
3838
3839   MIPS_ELF_PUT_WORD (abfd, value, htab->root.sgot->contents + entry->gotidx);
3840
3841   /* These GOT entries need a dynamic relocation on VxWorks.  */
3842   if (htab->is_vxworks)
3843     {
3844       Elf_Internal_Rela outrel;
3845       asection *s;
3846       bfd_byte *rloc;
3847       bfd_vma got_address;
3848
3849       s = mips_elf_rel_dyn_section (info, FALSE);
3850       got_address = (htab->root.sgot->output_section->vma
3851                      + htab->root.sgot->output_offset
3852                      + entry->gotidx);
3853
3854       rloc = s->contents + (s->reloc_count++ * sizeof (Elf32_External_Rela));
3855       outrel.r_offset = got_address;
3856       outrel.r_info = ELF32_R_INFO (STN_UNDEF, R_MIPS_32);
3857       outrel.r_addend = value;
3858       bfd_elf32_swap_reloca_out (abfd, &outrel, rloc);
3859     }
3860
3861   return entry;
3862 }
3863
3864 /* Return the number of dynamic section symbols required by OUTPUT_BFD.
3865    The number might be exact or a worst-case estimate, depending on how
3866    much information is available to elf_backend_omit_section_dynsym at
3867    the current linking stage.  */
3868
3869 static bfd_size_type
3870 count_section_dynsyms (bfd *output_bfd, struct bfd_link_info *info)
3871 {
3872   bfd_size_type count;
3873
3874   count = 0;
3875   if (bfd_link_pic (info)
3876       || elf_hash_table (info)->is_relocatable_executable)
3877     {
3878       asection *p;
3879       const struct elf_backend_data *bed;
3880
3881       bed = get_elf_backend_data (output_bfd);
3882       for (p = output_bfd->sections; p ; p = p->next)
3883         if ((p->flags & SEC_EXCLUDE) == 0
3884             && (p->flags & SEC_ALLOC) != 0
3885             && elf_hash_table (info)->dynamic_relocs
3886             && !(*bed->elf_backend_omit_section_dynsym) (output_bfd, info, p))
3887           ++count;
3888     }
3889   return count;
3890 }
3891
3892 /* Sort the dynamic symbol table so that symbols that need GOT entries
3893    appear towards the end.  */
3894
3895 static bfd_boolean
3896 mips_elf_sort_hash_table (bfd *abfd, struct bfd_link_info *info)
3897 {
3898   struct mips_elf_link_hash_table *htab;
3899   struct mips_elf_hash_sort_data hsd;
3900   struct mips_got_info *g;
3901
3902   htab = mips_elf_hash_table (info);
3903   BFD_ASSERT (htab != NULL);
3904
3905   if (htab->root.dynsymcount == 0)
3906     return TRUE;
3907
3908   g = htab->got_info;
3909   if (g == NULL)
3910     return TRUE;
3911
3912   hsd.low = NULL;
3913   hsd.max_unref_got_dynindx
3914     = hsd.min_got_dynindx
3915     = (htab->root.dynsymcount - g->reloc_only_gotno);
3916   /* Add 1 to local symbol indices to account for the mandatory NULL entry
3917      at the head of the table; see `_bfd_elf_link_renumber_dynsyms'.  */
3918   hsd.max_local_dynindx = count_section_dynsyms (abfd, info) + 1;
3919   hsd.max_non_got_dynindx = htab->root.local_dynsymcount + 1;
3920   hsd.output_bfd = abfd;
3921   if (htab->root.dynobj != NULL
3922       && htab->root.dynamic_sections_created
3923       && info->emit_gnu_hash)
3924     {
3925       asection *s = bfd_get_linker_section (htab->root.dynobj, ".MIPS.xhash");
3926       BFD_ASSERT (s != NULL);
3927       hsd.mipsxhash = s->contents;
3928       BFD_ASSERT (hsd.mipsxhash != NULL);
3929     }
3930   else
3931     hsd.mipsxhash = NULL;
3932   mips_elf_link_hash_traverse (htab, mips_elf_sort_hash_table_f, &hsd);
3933
3934   /* There should have been enough room in the symbol table to
3935      accommodate both the GOT and non-GOT symbols.  */
3936   BFD_ASSERT (hsd.max_local_dynindx <= htab->root.local_dynsymcount + 1);
3937   BFD_ASSERT (hsd.max_non_got_dynindx <= hsd.min_got_dynindx);
3938   BFD_ASSERT (hsd.max_unref_got_dynindx == htab->root.dynsymcount);
3939   BFD_ASSERT (htab->root.dynsymcount - hsd.min_got_dynindx == g->global_gotno);
3940
3941   /* Now we know which dynamic symbol has the lowest dynamic symbol
3942      table index in the GOT.  */
3943   htab->global_gotsym = hsd.low;
3944
3945   return TRUE;
3946 }
3947
3948 /* If H needs a GOT entry, assign it the highest available dynamic
3949    index.  Otherwise, assign it the lowest available dynamic
3950    index.  */
3951
3952 static bfd_boolean
3953 mips_elf_sort_hash_table_f (struct mips_elf_link_hash_entry *h, void *data)
3954 {
3955   struct mips_elf_hash_sort_data *hsd = data;
3956
3957   /* Symbols without dynamic symbol table entries aren't interesting
3958      at all.  */
3959   if (h->root.dynindx == -1)
3960     return TRUE;
3961
3962   switch (h->global_got_area)
3963     {
3964     case GGA_NONE:
3965       if (h->root.forced_local)
3966         h->root.dynindx = hsd->max_local_dynindx++;
3967       else
3968         h->root.dynindx = hsd->max_non_got_dynindx++;
3969       break;
3970
3971     case GGA_NORMAL:
3972       h->root.dynindx = --hsd->min_got_dynindx;
3973       hsd->low = (struct elf_link_hash_entry *) h;
3974       break;
3975
3976     case GGA_RELOC_ONLY:
3977       if (hsd->max_unref_got_dynindx == hsd->min_got_dynindx)
3978         hsd->low = (struct elf_link_hash_entry *) h;
3979       h->root.dynindx = hsd->max_unref_got_dynindx++;
3980       break;
3981     }
3982
3983   /* Populate the .MIPS.xhash translation table entry with
3984      the symbol dynindx.  */
3985   if (h->mipsxhash_loc != 0 && hsd->mipsxhash != NULL)
3986     bfd_put_32 (hsd->output_bfd, h->root.dynindx,
3987                 hsd->mipsxhash + h->mipsxhash_loc);
3988
3989   return TRUE;
3990 }
3991
3992 /* Record that input bfd ABFD requires a GOT entry like *LOOKUP
3993    (which is owned by the caller and shouldn't be added to the
3994    hash table directly).  */
3995
3996 static bfd_boolean
3997 mips_elf_record_got_entry (struct bfd_link_info *info, bfd *abfd,
3998                            struct mips_got_entry *lookup)
3999 {
4000   struct mips_elf_link_hash_table *htab;
4001   struct mips_got_entry *entry;
4002   struct mips_got_info *g;
4003   void **loc, **bfd_loc;
4004
4005   /* Make sure there's a slot for this entry in the master GOT.  */
4006   htab = mips_elf_hash_table (info);
4007   g = htab->got_info;
4008   loc = htab_find_slot (g->got_entries, lookup, INSERT);
4009   if (!loc)
4010     return FALSE;
4011
4012   /* Populate the entry if it isn't already.  */
4013   entry = (struct mips_got_entry *) *loc;
4014   if (!entry)
4015     {
4016       entry = (struct mips_got_entry *) bfd_alloc (abfd, sizeof (*entry));
4017       if (!entry)
4018         return FALSE;
4019
4020       lookup->tls_initialized = FALSE;
4021       lookup->gotidx = -1;
4022       *entry = *lookup;
4023       *loc = entry;
4024     }
4025
4026   /* Reuse the same GOT entry for the BFD's GOT.  */
4027   g = mips_elf_bfd_got (abfd, TRUE);
4028   if (!g)
4029     return FALSE;
4030
4031   bfd_loc = htab_find_slot (g->got_entries, lookup, INSERT);
4032   if (!bfd_loc)
4033     return FALSE;
4034
4035   if (!*bfd_loc)
4036     *bfd_loc = entry;
4037   return TRUE;
4038 }
4039
4040 /* ABFD has a GOT relocation of type R_TYPE against H.  Reserve a GOT
4041    entry for it.  FOR_CALL is true if the caller is only interested in
4042    using the GOT entry for calls.  */
4043
4044 static bfd_boolean
4045 mips_elf_record_global_got_symbol (struct elf_link_hash_entry *h,
4046                                    bfd *abfd, struct bfd_link_info *info,
4047                                    bfd_boolean for_call, int r_type)
4048 {
4049   struct mips_elf_link_hash_table *htab;
4050   struct mips_elf_link_hash_entry *hmips;
4051   struct mips_got_entry entry;
4052   unsigned char tls_type;
4053
4054   htab = mips_elf_hash_table (info);
4055   BFD_ASSERT (htab != NULL);
4056
4057   hmips = (struct mips_elf_link_hash_entry *) h;
4058   if (!for_call)
4059     hmips->got_only_for_calls = FALSE;
4060
4061   /* A global symbol in the GOT must also be in the dynamic symbol
4062      table.  */
4063   if (h->dynindx == -1)
4064     {
4065       switch (ELF_ST_VISIBILITY (h->other))
4066         {
4067         case STV_INTERNAL:
4068         case STV_HIDDEN:
4069           _bfd_mips_elf_hide_symbol (info, h, TRUE);
4070           break;
4071         }
4072       if (!bfd_elf_link_record_dynamic_symbol (info, h))
4073         return FALSE;
4074     }
4075
4076   tls_type = mips_elf_reloc_tls_type (r_type);
4077   if (tls_type == GOT_TLS_NONE && hmips->global_got_area > GGA_NORMAL)
4078     hmips->global_got_area = GGA_NORMAL;
4079
4080   entry.abfd = abfd;
4081   entry.symndx = -1;
4082   entry.d.h = (struct mips_elf_link_hash_entry *) h;
4083   entry.tls_type = tls_type;
4084   return mips_elf_record_got_entry (info, abfd, &entry);
4085 }
4086
4087 /* ABFD has a GOT relocation of type R_TYPE against symbol SYMNDX + ADDEND,
4088    where SYMNDX is a local symbol.  Reserve a GOT entry for it.  */
4089
4090 static bfd_boolean
4091 mips_elf_record_local_got_symbol (bfd *abfd, long symndx, bfd_vma addend,
4092                                   struct bfd_link_info *info, int r_type)
4093 {
4094   struct mips_elf_link_hash_table *htab;
4095   struct mips_got_info *g;
4096   struct mips_got_entry entry;
4097
4098   htab = mips_elf_hash_table (info);
4099   BFD_ASSERT (htab != NULL);
4100
4101   g = htab->got_info;
4102   BFD_ASSERT (g != NULL);
4103
4104   entry.abfd = abfd;
4105   entry.symndx = symndx;
4106   entry.d.addend = addend;
4107   entry.tls_type = mips_elf_reloc_tls_type (r_type);
4108   return mips_elf_record_got_entry (info, abfd, &entry);
4109 }
4110
4111 /* Record that ABFD has a page relocation against SYMNDX + ADDEND.
4112    H is the symbol's hash table entry, or null if SYMNDX is local
4113    to ABFD.  */
4114
4115 static bfd_boolean
4116 mips_elf_record_got_page_ref (struct bfd_link_info *info, bfd *abfd,
4117                               long symndx, struct elf_link_hash_entry *h,
4118                               bfd_signed_vma addend)
4119 {
4120   struct mips_elf_link_hash_table *htab;
4121   struct mips_got_info *g1, *g2;
4122   struct mips_got_page_ref lookup, *entry;
4123   void **loc, **bfd_loc;
4124
4125   htab = mips_elf_hash_table (info);
4126   BFD_ASSERT (htab != NULL);
4127
4128   g1 = htab->got_info;
4129   BFD_ASSERT (g1 != NULL);
4130
4131   if (h)
4132     {
4133       lookup.symndx = -1;
4134       lookup.u.h = (struct mips_elf_link_hash_entry *) h;
4135     }
4136   else
4137     {
4138       lookup.symndx = symndx;
4139       lookup.u.abfd = abfd;
4140     }
4141   lookup.addend = addend;
4142   loc = htab_find_slot (g1->got_page_refs, &lookup, INSERT);
4143   if (loc == NULL)
4144     return FALSE;
4145
4146   entry = (struct mips_got_page_ref *) *loc;
4147   if (!entry)
4148     {
4149       entry = bfd_alloc (abfd, sizeof (*entry));
4150       if (!entry)
4151         return FALSE;
4152
4153       *entry = lookup;
4154       *loc = entry;
4155     }
4156
4157   /* Add the same entry to the BFD's GOT.  */
4158   g2 = mips_elf_bfd_got (abfd, TRUE);
4159   if (!g2)
4160     return FALSE;
4161
4162   bfd_loc = htab_find_slot (g2->got_page_refs, &lookup, INSERT);
4163   if (!bfd_loc)
4164     return FALSE;
4165
4166   if (!*bfd_loc)
4167     *bfd_loc = entry;
4168
4169   return TRUE;
4170 }
4171
4172 /* Add room for N relocations to the .rel(a).dyn section in ABFD.  */
4173
4174 static void
4175 mips_elf_allocate_dynamic_relocations (bfd *abfd, struct bfd_link_info *info,
4176                                        unsigned int n)
4177 {
4178   asection *s;
4179   struct mips_elf_link_hash_table *htab;
4180
4181   htab = mips_elf_hash_table (info);
4182   BFD_ASSERT (htab != NULL);
4183
4184   s = mips_elf_rel_dyn_section (info, FALSE);
4185   BFD_ASSERT (s != NULL);
4186
4187   if (htab->is_vxworks)
4188     s->size += n * MIPS_ELF_RELA_SIZE (abfd);
4189   else
4190     {
4191       if (s->size == 0)
4192         {
4193           /* Make room for a null element.  */
4194           s->size += MIPS_ELF_REL_SIZE (abfd);
4195           ++s->reloc_count;
4196         }
4197       s->size += n * MIPS_ELF_REL_SIZE (abfd);
4198     }
4199 }
4200 \f
4201 /* A htab_traverse callback for GOT entries, with DATA pointing to a
4202    mips_elf_traverse_got_arg structure.  Count the number of GOT
4203    entries and TLS relocs.  Set DATA->value to true if we need
4204    to resolve indirect or warning symbols and then recreate the GOT.  */
4205
4206 static int
4207 mips_elf_check_recreate_got (void **entryp, void *data)
4208 {
4209   struct mips_got_entry *entry;
4210   struct mips_elf_traverse_got_arg *arg;
4211
4212   entry = (struct mips_got_entry *) *entryp;
4213   arg = (struct mips_elf_traverse_got_arg *) data;
4214   if (entry->abfd != NULL && entry->symndx == -1)
4215     {
4216       struct mips_elf_link_hash_entry *h;
4217
4218       h = entry->d.h;
4219       if (h->root.root.type == bfd_link_hash_indirect
4220           || h->root.root.type == bfd_link_hash_warning)
4221         {
4222           arg->value = TRUE;
4223           return 0;
4224         }
4225     }
4226   mips_elf_count_got_entry (arg->info, arg->g, entry);
4227   return 1;
4228 }
4229
4230 /* A htab_traverse callback for GOT entries, with DATA pointing to a
4231    mips_elf_traverse_got_arg structure.  Add all entries to DATA->g,
4232    converting entries for indirect and warning symbols into entries
4233    for the target symbol.  Set DATA->g to null on error.  */
4234
4235 static int
4236 mips_elf_recreate_got (void **entryp, void *data)
4237 {
4238   struct mips_got_entry new_entry, *entry;
4239   struct mips_elf_traverse_got_arg *arg;
4240   void **slot;
4241
4242   entry = (struct mips_got_entry *) *entryp;
4243   arg = (struct mips_elf_traverse_got_arg *) data;
4244   if (entry->abfd != NULL
4245       && entry->symndx == -1
4246       && (entry->d.h->root.root.type == bfd_link_hash_indirect
4247           || entry->d.h->root.root.type == bfd_link_hash_warning))
4248     {
4249       struct mips_elf_link_hash_entry *h;
4250
4251       new_entry = *entry;
4252       entry = &new_entry;
4253       h = entry->d.h;
4254       do
4255         {
4256           BFD_ASSERT (h->global_got_area == GGA_NONE);
4257           h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
4258         }
4259       while (h->root.root.type == bfd_link_hash_indirect
4260              || h->root.root.type == bfd_link_hash_warning);
4261       entry->d.h = h;
4262     }
4263   slot = htab_find_slot (arg->g->got_entries, entry, INSERT);
4264   if (slot == NULL)
4265     {
4266       arg->g = NULL;
4267       return 0;
4268     }
4269   if (*slot == NULL)
4270     {
4271       if (entry == &new_entry)
4272         {
4273           entry = bfd_alloc (entry->abfd, sizeof (*entry));
4274           if (!entry)
4275             {
4276               arg->g = NULL;
4277               return 0;
4278             }
4279           *entry = new_entry;
4280         }
4281       *slot = entry;
4282       mips_elf_count_got_entry (arg->info, arg->g, entry);
4283     }
4284   return 1;
4285 }
4286
4287 /* Return the maximum number of GOT page entries required for RANGE.  */
4288
4289 static bfd_vma
4290 mips_elf_pages_for_range (const struct mips_got_page_range *range)
4291 {
4292   return (range->max_addend - range->min_addend + 0x1ffff) >> 16;
4293 }
4294
4295 /* Record that G requires a page entry that can reach SEC + ADDEND.  */
4296
4297 static bfd_boolean
4298 mips_elf_record_got_page_entry (struct mips_elf_traverse_got_arg *arg,
4299                                 asection *sec, bfd_signed_vma addend)
4300 {
4301   struct mips_got_info *g = arg->g;
4302   struct mips_got_page_entry lookup, *entry;
4303   struct mips_got_page_range **range_ptr, *range;
4304   bfd_vma old_pages, new_pages;
4305   void **loc;
4306
4307   /* Find the mips_got_page_entry hash table entry for this section.  */
4308   lookup.sec = sec;
4309   loc = htab_find_slot (g->got_page_entries, &lookup, INSERT);
4310   if (loc == NULL)
4311     return FALSE;
4312
4313   /* Create a mips_got_page_entry if this is the first time we've
4314      seen the section.  */
4315   entry = (struct mips_got_page_entry *) *loc;
4316   if (!entry)
4317     {
4318       entry = bfd_zalloc (arg->info->output_bfd, sizeof (*entry));
4319       if (!entry)
4320         return FALSE;
4321
4322       entry->sec = sec;
4323       *loc = entry;
4324     }
4325
4326   /* Skip over ranges whose maximum extent cannot share a page entry
4327      with ADDEND.  */
4328   range_ptr = &entry->ranges;
4329   while (*range_ptr && addend > (*range_ptr)->max_addend + 0xffff)
4330     range_ptr = &(*range_ptr)->next;
4331
4332   /* If we scanned to the end of the list, or found a range whose
4333      minimum extent cannot share a page entry with ADDEND, create
4334      a new singleton range.  */
4335   range = *range_ptr;
4336   if (!range || addend < range->min_addend - 0xffff)
4337     {
4338       range = bfd_zalloc (arg->info->output_bfd, sizeof (*range));
4339       if (!range)
4340         return FALSE;
4341
4342       range->next = *range_ptr;
4343       range->min_addend = addend;
4344       range->max_addend = addend;
4345
4346       *range_ptr = range;
4347       entry->num_pages++;
4348       g->page_gotno++;
4349       return TRUE;
4350     }
4351
4352   /* Remember how many pages the old range contributed.  */
4353   old_pages = mips_elf_pages_for_range (range);
4354
4355   /* Update the ranges.  */
4356   if (addend < range->min_addend)
4357     range->min_addend = addend;
4358   else if (addend > range->max_addend)
4359     {
4360       if (range->next && addend >= range->next->min_addend - 0xffff)
4361         {
4362           old_pages += mips_elf_pages_for_range (range->next);
4363           range->max_addend = range->next->max_addend;
4364           range->next = range->next->next;
4365         }
4366       else
4367         range->max_addend = addend;
4368     }
4369
4370   /* Record any change in the total estimate.  */
4371   new_pages = mips_elf_pages_for_range (range);
4372   if (old_pages != new_pages)
4373     {
4374       entry->num_pages += new_pages - old_pages;
4375       g->page_gotno += new_pages - old_pages;
4376     }
4377
4378   return TRUE;
4379 }
4380
4381 /* A htab_traverse callback for which *REFP points to a mips_got_page_ref
4382    and for which DATA points to a mips_elf_traverse_got_arg.  Work out
4383    whether the page reference described by *REFP needs a GOT page entry,
4384    and record that entry in DATA->g if so.  Set DATA->g to null on failure.  */
4385
4386 static bfd_boolean
4387 mips_elf_resolve_got_page_ref (void **refp, void *data)
4388 {
4389   struct mips_got_page_ref *ref;
4390   struct mips_elf_traverse_got_arg *arg;
4391   struct mips_elf_link_hash_table *htab;
4392   asection *sec;
4393   bfd_vma addend;
4394
4395   ref = (struct mips_got_page_ref *) *refp;
4396   arg = (struct mips_elf_traverse_got_arg *) data;
4397   htab = mips_elf_hash_table (arg->info);
4398
4399   if (ref->symndx < 0)
4400     {
4401       struct mips_elf_link_hash_entry *h;
4402
4403       /* Global GOT_PAGEs decay to GOT_DISP and so don't need page entries.  */
4404       h = ref->u.h;
4405       if (!SYMBOL_REFERENCES_LOCAL (arg->info, &h->root))
4406         return 1;
4407
4408       /* Ignore undefined symbols; we'll issue an error later if
4409          appropriate.  */
4410       if (!((h->root.root.type == bfd_link_hash_defined
4411              || h->root.root.type == bfd_link_hash_defweak)
4412             && h->root.root.u.def.section))
4413         return 1;
4414
4415       sec = h->root.root.u.def.section;
4416       addend = h->root.root.u.def.value + ref->addend;
4417     }
4418   else
4419     {
4420       Elf_Internal_Sym *isym;
4421
4422       /* Read in the symbol.  */
4423       isym = bfd_sym_from_r_symndx (&htab->sym_cache, ref->u.abfd,
4424                                     ref->symndx);
4425       if (isym == NULL)
4426         {
4427           arg->g = NULL;
4428           return 0;
4429         }
4430
4431       /* Get the associated input section.  */
4432       sec = bfd_section_from_elf_index (ref->u.abfd, isym->st_shndx);
4433       if (sec == NULL)
4434         {
4435           arg->g = NULL;
4436           return 0;
4437         }
4438
4439       /* If this is a mergable section, work out the section and offset
4440          of the merged data.  For section symbols, the addend specifies
4441          of the offset _of_ the first byte in the data, otherwise it
4442          specifies the offset _from_ the first byte.  */
4443       if (sec->flags & SEC_MERGE)
4444         {
4445           void *secinfo;
4446
4447           secinfo = elf_section_data (sec)->sec_info;
4448           if (ELF_ST_TYPE (isym->st_info) == STT_SECTION)
4449             addend = _bfd_merged_section_offset (ref->u.abfd, &sec, secinfo,
4450                                                  isym->st_value + ref->addend);
4451           else
4452             addend = _bfd_merged_section_offset (ref->u.abfd, &sec, secinfo,
4453                                                  isym->st_value) + ref->addend;
4454         }
4455       else
4456         addend = isym->st_value + ref->addend;
4457     }
4458   if (!mips_elf_record_got_page_entry (arg, sec, addend))
4459     {
4460       arg->g = NULL;
4461       return 0;
4462     }
4463   return 1;
4464 }
4465
4466 /* If any entries in G->got_entries are for indirect or warning symbols,
4467    replace them with entries for the target symbol.  Convert g->got_page_refs
4468    into got_page_entry structures and estimate the number of page entries
4469    that they require.  */
4470
4471 static bfd_boolean
4472 mips_elf_resolve_final_got_entries (struct bfd_link_info *info,
4473                                     struct mips_got_info *g)
4474 {
4475   struct mips_elf_traverse_got_arg tga;
4476   struct mips_got_info oldg;
4477
4478   oldg = *g;
4479
4480   tga.info = info;
4481   tga.g = g;
4482   tga.value = FALSE;
4483   htab_traverse (g->got_entries, mips_elf_check_recreate_got, &tga);
4484   if (tga.value)
4485     {
4486       *g = oldg;
4487       g->got_entries = htab_create (htab_size (oldg.got_entries),
4488                                     mips_elf_got_entry_hash,
4489                                     mips_elf_got_entry_eq, NULL);
4490       if (!g->got_entries)
4491         return FALSE;
4492
4493       htab_traverse (oldg.got_entries, mips_elf_recreate_got, &tga);
4494       if (!tga.g)
4495         return FALSE;
4496
4497       htab_delete (oldg.got_entries);
4498     }
4499
4500   g->got_page_entries = htab_try_create (1, mips_got_page_entry_hash,
4501                                          mips_got_page_entry_eq, NULL);
4502   if (g->got_page_entries == NULL)
4503     return FALSE;
4504
4505   tga.info = info;
4506   tga.g = g;
4507   htab_traverse (g->got_page_refs, mips_elf_resolve_got_page_ref, &tga);
4508
4509   return TRUE;
4510 }
4511
4512 /* Return true if a GOT entry for H should live in the local rather than
4513    global GOT area.  */
4514
4515 static bfd_boolean
4516 mips_use_local_got_p (struct bfd_link_info *info,
4517                       struct mips_elf_link_hash_entry *h)
4518 {
4519   /* Symbols that aren't in the dynamic symbol table must live in the
4520      local GOT.  This includes symbols that are completely undefined
4521      and which therefore don't bind locally.  We'll report undefined
4522      symbols later if appropriate.  */
4523   if (h->root.dynindx == -1)
4524     return TRUE;
4525
4526   /* Absolute symbols, if ever they need a GOT entry, cannot ever go
4527      to the local GOT, as they would be implicitly relocated by the
4528      base address by the dynamic loader.  */
4529   if (bfd_is_abs_symbol (&h->root.root))
4530     return FALSE;
4531
4532   /* Symbols that bind locally can (and in the case of forced-local
4533      symbols, must) live in the local GOT.  */
4534   if (h->got_only_for_calls
4535       ? SYMBOL_CALLS_LOCAL (info, &h->root)
4536       : SYMBOL_REFERENCES_LOCAL (info, &h->root))
4537     return TRUE;
4538
4539   /* If this is an executable that must provide a definition of the symbol,
4540      either though PLTs or copy relocations, then that address should go in
4541      the local rather than global GOT.  */
4542   if (bfd_link_executable (info) && h->has_static_relocs)
4543     return TRUE;
4544
4545   return FALSE;
4546 }
4547
4548 /* A mips_elf_link_hash_traverse callback for which DATA points to the
4549    link_info structure.  Decide whether the hash entry needs an entry in
4550    the global part of the primary GOT, setting global_got_area accordingly.
4551    Count the number of global symbols that are in the primary GOT only
4552    because they have relocations against them (reloc_only_gotno).  */
4553
4554 static int
4555 mips_elf_count_got_symbols (struct mips_elf_link_hash_entry *h, void *data)
4556 {
4557   struct bfd_link_info *info;
4558   struct mips_elf_link_hash_table *htab;
4559   struct mips_got_info *g;
4560
4561   info = (struct bfd_link_info *) data;
4562   htab = mips_elf_hash_table (info);
4563   g = htab->got_info;
4564   if (h->global_got_area != GGA_NONE)
4565     {
4566       /* Make a final decision about whether the symbol belongs in the
4567          local or global GOT.  */
4568       if (mips_use_local_got_p (info, h))
4569         /* The symbol belongs in the local GOT.  We no longer need this
4570            entry if it was only used for relocations; those relocations
4571            will be against the null or section symbol instead of H.  */
4572         h->global_got_area = GGA_NONE;
4573       else if (htab->is_vxworks
4574                && h->got_only_for_calls
4575                && h->root.plt.plist->mips_offset != MINUS_ONE)
4576         /* On VxWorks, calls can refer directly to the .got.plt entry;
4577            they don't need entries in the regular GOT.  .got.plt entries
4578            will be allocated by _bfd_mips_elf_adjust_dynamic_symbol.  */
4579         h->global_got_area = GGA_NONE;
4580       else if (h->global_got_area == GGA_RELOC_ONLY)
4581         {
4582           g->reloc_only_gotno++;
4583           g->global_gotno++;
4584         }
4585     }
4586   return 1;
4587 }
4588 \f
4589 /* A htab_traverse callback for GOT entries.  Add each one to the GOT
4590    given in mips_elf_traverse_got_arg DATA.  Clear DATA->G on error.  */
4591
4592 static int
4593 mips_elf_add_got_entry (void **entryp, void *data)
4594 {
4595   struct mips_got_entry *entry;
4596   struct mips_elf_traverse_got_arg *arg;
4597   void **slot;
4598
4599   entry = (struct mips_got_entry *) *entryp;
4600   arg = (struct mips_elf_traverse_got_arg *) data;
4601   slot = htab_find_slot (arg->g->got_entries, entry, INSERT);
4602   if (!slot)
4603     {
4604       arg->g = NULL;
4605       return 0;
4606     }
4607   if (!*slot)
4608     {
4609       *slot = entry;
4610       mips_elf_count_got_entry (arg->info, arg->g, entry);
4611     }
4612   return 1;
4613 }
4614
4615 /* A htab_traverse callback for GOT page entries.  Add each one to the GOT
4616    given in mips_elf_traverse_got_arg DATA.  Clear DATA->G on error.  */
4617
4618 static int
4619 mips_elf_add_got_page_entry (void **entryp, void *data)
4620 {
4621   struct mips_got_page_entry *entry;
4622   struct mips_elf_traverse_got_arg *arg;
4623   void **slot;
4624
4625   entry = (struct mips_got_page_entry *) *entryp;
4626   arg = (struct mips_elf_traverse_got_arg *) data;
4627   slot = htab_find_slot (arg->g->got_page_entries, entry, INSERT);
4628   if (!slot)
4629     {
4630       arg->g = NULL;
4631       return 0;
4632     }
4633   if (!*slot)
4634     {
4635       *slot = entry;
4636       arg->g->page_gotno += entry->num_pages;
4637     }
4638   return 1;
4639 }
4640
4641 /* Consider merging FROM, which is ABFD's GOT, into TO.  Return -1 if
4642    this would lead to overflow, 1 if they were merged successfully,
4643    and 0 if a merge failed due to lack of memory.  (These values are chosen
4644    so that nonnegative return values can be returned by a htab_traverse
4645    callback.)  */
4646
4647 static int
4648 mips_elf_merge_got_with (bfd *abfd, struct mips_got_info *from,
4649                          struct mips_got_info *to,
4650                          struct mips_elf_got_per_bfd_arg *arg)
4651 {
4652   struct mips_elf_traverse_got_arg tga;
4653   unsigned int estimate;
4654
4655   /* Work out how many page entries we would need for the combined GOT.  */
4656   estimate = arg->max_pages;
4657   if (estimate >= from->page_gotno + to->page_gotno)
4658     estimate = from->page_gotno + to->page_gotno;
4659
4660   /* And conservatively estimate how many local and TLS entries
4661      would be needed.  */
4662   estimate += from->local_gotno + to->local_gotno;
4663   estimate += from->tls_gotno + to->tls_gotno;
4664
4665   /* If we're merging with the primary got, any TLS relocations will
4666      come after the full set of global entries.  Otherwise estimate those
4667      conservatively as well.  */
4668   if (to == arg->primary && from->tls_gotno + to->tls_gotno)
4669     estimate += arg->global_count;
4670   else
4671     estimate += from->global_gotno + to->global_gotno;
4672
4673   /* Bail out if the combined GOT might be too big.  */
4674   if (estimate > arg->max_count)
4675     return -1;
4676
4677   /* Transfer the bfd's got information from FROM to TO.  */
4678   tga.info = arg->info;
4679   tga.g = to;
4680   htab_traverse (from->got_entries, mips_elf_add_got_entry, &tga);
4681   if (!tga.g)
4682     return 0;
4683
4684   htab_traverse (from->got_page_entries, mips_elf_add_got_page_entry, &tga);
4685   if (!tga.g)
4686     return 0;
4687
4688   mips_elf_replace_bfd_got (abfd, to);
4689   return 1;
4690 }
4691
4692 /* Attempt to merge GOT G, which belongs to ABFD.  Try to use as much
4693    as possible of the primary got, since it doesn't require explicit
4694    dynamic relocations, but don't use bfds that would reference global
4695    symbols out of the addressable range.  Failing the primary got,
4696    attempt to merge with the current got, or finish the current got
4697    and then make make the new got current.  */
4698
4699 static bfd_boolean
4700 mips_elf_merge_got (bfd *abfd, struct mips_got_info *g,
4701                     struct mips_elf_got_per_bfd_arg *arg)
4702 {
4703   unsigned int estimate;
4704   int result;
4705
4706   if (!mips_elf_resolve_final_got_entries (arg->info, g))
4707     return FALSE;
4708
4709   /* Work out the number of page, local and TLS entries.  */
4710   estimate = arg->max_pages;
4711   if (estimate > g->page_gotno)
4712     estimate = g->page_gotno;
4713   estimate += g->local_gotno + g->tls_gotno;
4714
4715   /* We place TLS GOT entries after both locals and globals.  The globals
4716      for the primary GOT may overflow the normal GOT size limit, so be
4717      sure not to merge a GOT which requires TLS with the primary GOT in that
4718      case.  This doesn't affect non-primary GOTs.  */
4719   estimate += (g->tls_gotno > 0 ? arg->global_count : g->global_gotno);
4720
4721   if (estimate <= arg->max_count)
4722     {
4723       /* If we don't have a primary GOT, use it as
4724          a starting point for the primary GOT.  */
4725       if (!arg->primary)
4726         {
4727           arg->primary = g;
4728           return TRUE;
4729         }
4730
4731       /* Try merging with the primary GOT.  */
4732       result = mips_elf_merge_got_with (abfd, g, arg->primary, arg);
4733       if (result >= 0)
4734         return result;
4735     }
4736
4737   /* If we can merge with the last-created got, do it.  */
4738   if (arg->current)
4739     {
4740       result = mips_elf_merge_got_with (abfd, g, arg->current, arg);
4741       if (result >= 0)
4742         return result;
4743     }
4744
4745   /* Well, we couldn't merge, so create a new GOT.  Don't check if it
4746      fits; if it turns out that it doesn't, we'll get relocation
4747      overflows anyway.  */
4748   g->next = arg->current;
4749   arg->current = g;
4750
4751   return TRUE;
4752 }
4753
4754 /* ENTRYP is a hash table entry for a mips_got_entry.  Set its gotidx
4755    to GOTIDX, duplicating the entry if it has already been assigned
4756    an index in a different GOT.  */
4757
4758 static bfd_boolean
4759 mips_elf_set_gotidx (void **entryp, long gotidx)
4760 {
4761   struct mips_got_entry *entry;
4762
4763   entry = (struct mips_got_entry *) *entryp;
4764   if (entry->gotidx > 0)
4765     {
4766       struct mips_got_entry *new_entry;
4767
4768       new_entry = bfd_alloc (entry->abfd, sizeof (*entry));
4769       if (!new_entry)
4770         return FALSE;
4771
4772       *new_entry = *entry;
4773       *entryp = new_entry;
4774       entry = new_entry;
4775     }
4776   entry->gotidx = gotidx;
4777   return TRUE;
4778 }
4779
4780 /* Set the TLS GOT index for the GOT entry in ENTRYP.  DATA points to a
4781    mips_elf_traverse_got_arg in which DATA->value is the size of one
4782    GOT entry.  Set DATA->g to null on failure.  */
4783
4784 static int
4785 mips_elf_initialize_tls_index (void **entryp, void *data)
4786 {
4787   struct mips_got_entry *entry;
4788   struct mips_elf_traverse_got_arg *arg;
4789
4790   /* We're only interested in TLS symbols.  */
4791   entry = (struct mips_got_entry *) *entryp;
4792   if (entry->tls_type == GOT_TLS_NONE)
4793     return 1;
4794
4795   arg = (struct mips_elf_traverse_got_arg *) data;
4796   if (!mips_elf_set_gotidx (entryp, arg->value * arg->g->tls_assigned_gotno))
4797     {
4798       arg->g = NULL;
4799       return 0;
4800     }
4801
4802   /* Account for the entries we've just allocated.  */
4803   arg->g->tls_assigned_gotno += mips_tls_got_entries (entry->tls_type);
4804   return 1;
4805 }
4806
4807 /* A htab_traverse callback for GOT entries, where DATA points to a
4808    mips_elf_traverse_got_arg.  Set the global_got_area of each global
4809    symbol to DATA->value.  */
4810
4811 static int
4812 mips_elf_set_global_got_area (void **entryp, void *data)
4813 {
4814   struct mips_got_entry *entry;
4815   struct mips_elf_traverse_got_arg *arg;
4816
4817   entry = (struct mips_got_entry *) *entryp;
4818   arg = (struct mips_elf_traverse_got_arg *) data;
4819   if (entry->abfd != NULL
4820       && entry->symndx == -1
4821       && entry->d.h->global_got_area != GGA_NONE)
4822     entry->d.h->global_got_area = arg->value;
4823   return 1;
4824 }
4825
4826 /* A htab_traverse callback for secondary GOT entries, where DATA points
4827    to a mips_elf_traverse_got_arg.  Assign GOT indices to global entries
4828    and record the number of relocations they require.  DATA->value is
4829    the size of one GOT entry.  Set DATA->g to null on failure.  */
4830
4831 static int
4832 mips_elf_set_global_gotidx (void **entryp, void *data)
4833 {
4834   struct mips_got_entry *entry;
4835   struct mips_elf_traverse_got_arg *arg;
4836
4837   entry = (struct mips_got_entry *) *entryp;
4838   arg = (struct mips_elf_traverse_got_arg *) data;
4839   if (entry->abfd != NULL
4840       && entry->symndx == -1
4841       && entry->d.h->global_got_area != GGA_NONE)
4842     {
4843       if (!mips_elf_set_gotidx (entryp, arg->value * arg->g->assigned_low_gotno))
4844         {
4845           arg->g = NULL;
4846           return 0;
4847         }
4848       arg->g->assigned_low_gotno += 1;
4849
4850       if (bfd_link_pic (arg->info)
4851           || (elf_hash_table (arg->info)->dynamic_sections_created
4852               && entry->d.h->root.def_dynamic
4853               && !entry->d.h->root.def_regular))
4854         arg->g->relocs += 1;
4855     }
4856
4857   return 1;
4858 }
4859
4860 /* A htab_traverse callback for GOT entries for which DATA is the
4861    bfd_link_info.  Forbid any global symbols from having traditional
4862    lazy-binding stubs.  */
4863
4864 static int
4865 mips_elf_forbid_lazy_stubs (void **entryp, void *data)
4866 {
4867   struct bfd_link_info *info;
4868   struct mips_elf_link_hash_table *htab;
4869   struct mips_got_entry *entry;
4870
4871   entry = (struct mips_got_entry *) *entryp;
4872   info = (struct bfd_link_info *) data;
4873   htab = mips_elf_hash_table (info);
4874   BFD_ASSERT (htab != NULL);
4875
4876   if (entry->abfd != NULL
4877       && entry->symndx == -1
4878       && entry->d.h->needs_lazy_stub)
4879     {
4880       entry->d.h->needs_lazy_stub = FALSE;
4881       htab->lazy_stub_count--;
4882     }
4883
4884   return 1;
4885 }
4886
4887 /* Return the offset of an input bfd IBFD's GOT from the beginning of
4888    the primary GOT.  */
4889 static bfd_vma
4890 mips_elf_adjust_gp (bfd *abfd, struct mips_got_info *g, bfd *ibfd)
4891 {
4892   if (!g->next)
4893     return 0;
4894
4895   g = mips_elf_bfd_got (ibfd, FALSE);
4896   if (! g)
4897     return 0;
4898
4899   BFD_ASSERT (g->next);
4900
4901   g = g->next;
4902
4903   return (g->local_gotno + g->global_gotno + g->tls_gotno)
4904     * MIPS_ELF_GOT_SIZE (abfd);
4905 }
4906
4907 /* Turn a single GOT that is too big for 16-bit addressing into
4908    a sequence of GOTs, each one 16-bit addressable.  */
4909
4910 static bfd_boolean
4911 mips_elf_multi_got (bfd *abfd, struct bfd_link_info *info,
4912                     asection *got, bfd_size_type pages)
4913 {
4914   struct mips_elf_link_hash_table *htab;
4915   struct mips_elf_got_per_bfd_arg got_per_bfd_arg;
4916   struct mips_elf_traverse_got_arg tga;
4917   struct mips_got_info *g, *gg;
4918   unsigned int assign, needed_relocs;
4919   bfd *dynobj, *ibfd;
4920
4921   dynobj = elf_hash_table (info)->dynobj;
4922   htab = mips_elf_hash_table (info);
4923   BFD_ASSERT (htab != NULL);
4924
4925   g = htab->got_info;
4926
4927   got_per_bfd_arg.obfd = abfd;
4928   got_per_bfd_arg.info = info;
4929   got_per_bfd_arg.current = NULL;
4930   got_per_bfd_arg.primary = NULL;
4931   got_per_bfd_arg.max_count = ((MIPS_ELF_GOT_MAX_SIZE (info)
4932                                 / MIPS_ELF_GOT_SIZE (abfd))
4933                                - htab->reserved_gotno);
4934   got_per_bfd_arg.max_pages = pages;
4935   /* The number of globals that will be included in the primary GOT.
4936      See the calls to mips_elf_set_global_got_area below for more
4937      information.  */
4938   got_per_bfd_arg.global_count = g->global_gotno;
4939
4940   /* Try to merge the GOTs of input bfds together, as long as they
4941      don't seem to exceed the maximum GOT size, choosing one of them
4942      to be the primary GOT.  */
4943   for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link.next)
4944     {
4945       gg = mips_elf_bfd_got (ibfd, FALSE);
4946       if (gg && !mips_elf_merge_got (ibfd, gg, &got_per_bfd_arg))
4947         return FALSE;
4948     }
4949
4950   /* If we do not find any suitable primary GOT, create an empty one.  */
4951   if (got_per_bfd_arg.primary == NULL)
4952     g->next = mips_elf_create_got_info (abfd);
4953   else
4954     g->next = got_per_bfd_arg.primary;
4955   g->next->next = got_per_bfd_arg.current;
4956
4957   /* GG is now the master GOT, and G is the primary GOT.  */
4958   gg = g;
4959   g = g->next;
4960
4961   /* Map the output bfd to the primary got.  That's what we're going
4962      to use for bfds that use GOT16 or GOT_PAGE relocations that we
4963      didn't mark in check_relocs, and we want a quick way to find it.
4964      We can't just use gg->next because we're going to reverse the
4965      list.  */
4966   mips_elf_replace_bfd_got (abfd, g);
4967
4968   /* Every symbol that is referenced in a dynamic relocation must be
4969      present in the primary GOT, so arrange for them to appear after
4970      those that are actually referenced.  */
4971   gg->reloc_only_gotno = gg->global_gotno - g->global_gotno;
4972   g->global_gotno = gg->global_gotno;
4973
4974   tga.info = info;
4975   tga.value = GGA_RELOC_ONLY;
4976   htab_traverse (gg->got_entries, mips_elf_set_global_got_area, &tga);
4977   tga.value = GGA_NORMAL;
4978   htab_traverse (g->got_entries, mips_elf_set_global_got_area, &tga);
4979
4980   /* Now go through the GOTs assigning them offset ranges.
4981      [assigned_low_gotno, local_gotno[ will be set to the range of local
4982      entries in each GOT.  We can then compute the end of a GOT by
4983      adding local_gotno to global_gotno.  We reverse the list and make
4984      it circular since then we'll be able to quickly compute the
4985      beginning of a GOT, by computing the end of its predecessor.  To
4986      avoid special cases for the primary GOT, while still preserving
4987      assertions that are valid for both single- and multi-got links,
4988      we arrange for the main got struct to have the right number of
4989      global entries, but set its local_gotno such that the initial
4990      offset of the primary GOT is zero.  Remember that the primary GOT
4991      will become the last item in the circular linked list, so it
4992      points back to the master GOT.  */
4993   gg->local_gotno = -g->global_gotno;
4994   gg->global_gotno = g->global_gotno;
4995   gg->tls_gotno = 0;
4996   assign = 0;
4997   gg->next = gg;
4998
4999   do
5000     {
5001       struct mips_got_info *gn;
5002
5003       assign += htab->reserved_gotno;
5004       g->assigned_low_gotno = assign;
5005       g->local_gotno += assign;
5006       g->local_gotno += (pages < g->page_gotno ? pages : g->page_gotno);
5007       g->assigned_high_gotno = g->local_gotno - 1;
5008       assign = g->local_gotno + g->global_gotno + g->tls_gotno;
5009
5010       /* Take g out of the direct list, and push it onto the reversed
5011          list that gg points to.  g->next is guaranteed to be nonnull after
5012          this operation, as required by mips_elf_initialize_tls_index. */
5013       gn = g->next;
5014       g->next = gg->next;
5015       gg->next = g;
5016
5017       /* Set up any TLS entries.  We always place the TLS entries after
5018          all non-TLS entries.  */
5019       g->tls_assigned_gotno = g->local_gotno + g->global_gotno;
5020       tga.g = g;
5021       tga.value = MIPS_ELF_GOT_SIZE (abfd);
5022       htab_traverse (g->got_entries, mips_elf_initialize_tls_index, &tga);
5023       if (!tga.g)
5024         return FALSE;
5025       BFD_ASSERT (g->tls_assigned_gotno == assign);
5026
5027       /* Move onto the next GOT.  It will be a secondary GOT if nonull.  */
5028       g = gn;
5029
5030       /* Forbid global symbols in every non-primary GOT from having
5031          lazy-binding stubs.  */
5032       if (g)
5033         htab_traverse (g->got_entries, mips_elf_forbid_lazy_stubs, info);
5034     }
5035   while (g);
5036
5037   got->size = assign * MIPS_ELF_GOT_SIZE (abfd);
5038
5039   needed_relocs = 0;
5040   for (g = gg->next; g && g->next != gg; g = g->next)
5041     {
5042       unsigned int save_assign;
5043
5044       /* Assign offsets to global GOT entries and count how many
5045          relocations they need.  */
5046       save_assign = g->assigned_low_gotno;
5047       g->assigned_low_gotno = g->local_gotno;
5048       tga.info = info;
5049       tga.value = MIPS_ELF_GOT_SIZE (abfd);
5050       tga.g = g;
5051       htab_traverse (g->got_entries, mips_elf_set_global_gotidx, &tga);
5052       if (!tga.g)
5053         return FALSE;
5054       BFD_ASSERT (g->assigned_low_gotno == g->local_gotno + g->global_gotno);
5055       g->assigned_low_gotno = save_assign;
5056
5057       if (bfd_link_pic (info))
5058         {
5059           g->relocs += g->local_gotno - g->assigned_low_gotno;
5060           BFD_ASSERT (g->assigned_low_gotno == g->next->local_gotno
5061                       + g->next->global_gotno
5062                       + g->next->tls_gotno
5063                       + htab->reserved_gotno);
5064         }
5065       needed_relocs += g->relocs;
5066     }
5067   needed_relocs += g->relocs;
5068
5069   if (needed_relocs)
5070     mips_elf_allocate_dynamic_relocations (dynobj, info,
5071                                            needed_relocs);
5072
5073   return TRUE;
5074 }
5075
5076 \f
5077 /* Returns the first relocation of type r_type found, beginning with
5078    RELOCATION.  RELEND is one-past-the-end of the relocation table.  */
5079
5080 static const Elf_Internal_Rela *
5081 mips_elf_next_relocation (bfd *abfd ATTRIBUTE_UNUSED, unsigned int r_type,
5082                           const Elf_Internal_Rela *relocation,
5083                           const Elf_Internal_Rela *relend)
5084 {
5085   unsigned long r_symndx = ELF_R_SYM (abfd, relocation->r_info);
5086
5087   while (relocation < relend)
5088     {
5089       if (ELF_R_TYPE (abfd, relocation->r_info) == r_type
5090           && ELF_R_SYM (abfd, relocation->r_info) == r_symndx)
5091         return relocation;
5092
5093       ++relocation;
5094     }
5095
5096   /* We didn't find it.  */
5097   return NULL;
5098 }
5099
5100 /* Return whether an input relocation is against a local symbol.  */
5101
5102 static bfd_boolean
5103 mips_elf_local_relocation_p (bfd *input_bfd,
5104                              const Elf_Internal_Rela *relocation,
5105                              asection **local_sections)
5106 {
5107   unsigned long r_symndx;
5108   Elf_Internal_Shdr *symtab_hdr;
5109   size_t extsymoff;
5110
5111   r_symndx = ELF_R_SYM (input_bfd, relocation->r_info);
5112   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
5113   extsymoff = (elf_bad_symtab (input_bfd)) ? 0 : symtab_hdr->sh_info;
5114
5115   if (r_symndx < extsymoff)
5116     return TRUE;
5117   if (elf_bad_symtab (input_bfd) && local_sections[r_symndx] != NULL)
5118     return TRUE;
5119
5120   return FALSE;
5121 }
5122 \f
5123 /* Sign-extend VALUE, which has the indicated number of BITS.  */
5124
5125 bfd_vma
5126 _bfd_mips_elf_sign_extend (bfd_vma value, int bits)
5127 {
5128   if (value & ((bfd_vma) 1 << (bits - 1)))
5129     /* VALUE is negative.  */
5130     value |= ((bfd_vma) - 1) << bits;
5131
5132   return value;
5133 }
5134
5135 /* Return non-zero if the indicated VALUE has overflowed the maximum
5136    range expressible by a signed number with the indicated number of
5137    BITS.  */
5138
5139 static bfd_boolean
5140 mips_elf_overflow_p (bfd_vma value, int bits)
5141 {
5142   bfd_signed_vma svalue = (bfd_signed_vma) value;
5143
5144   if (svalue > (1 << (bits - 1)) - 1)
5145     /* The value is too big.  */
5146     return TRUE;
5147   else if (svalue < -(1 << (bits - 1)))
5148     /* The value is too small.  */
5149     return TRUE;
5150
5151   /* All is well.  */
5152   return FALSE;
5153 }
5154
5155 /* Calculate the %high function.  */
5156
5157 static bfd_vma
5158 mips_elf_high (bfd_vma value)
5159 {
5160   return ((value + (bfd_vma) 0x8000) >> 16) & 0xffff;
5161 }
5162
5163 /* Calculate the %higher function.  */
5164
5165 static bfd_vma
5166 mips_elf_higher (bfd_vma value ATTRIBUTE_UNUSED)
5167 {
5168 #ifdef BFD64
5169   return ((value + (bfd_vma) 0x80008000) >> 32) & 0xffff;
5170 #else
5171   abort ();
5172   return MINUS_ONE;
5173 #endif
5174 }
5175
5176 /* Calculate the %highest function.  */
5177
5178 static bfd_vma
5179 mips_elf_highest (bfd_vma value ATTRIBUTE_UNUSED)
5180 {
5181 #ifdef BFD64
5182   return ((value + (((bfd_vma) 0x8000 << 32) | 0x80008000)) >> 48) & 0xffff;
5183 #else
5184   abort ();
5185   return MINUS_ONE;
5186 #endif
5187 }
5188 \f
5189 /* Create the .compact_rel section.  */
5190
5191 static bfd_boolean
5192 mips_elf_create_compact_rel_section
5193   (bfd *abfd, struct bfd_link_info *info ATTRIBUTE_UNUSED)
5194 {
5195   flagword flags;
5196   register asection *s;
5197
5198   if (bfd_get_linker_section (abfd, ".compact_rel") == NULL)
5199     {
5200       flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED
5201                | SEC_READONLY);
5202
5203       s = bfd_make_section_anyway_with_flags (abfd, ".compact_rel", flags);
5204       if (s == NULL
5205           || !bfd_set_section_alignment (s, MIPS_ELF_LOG_FILE_ALIGN (abfd)))
5206         return FALSE;
5207
5208       s->size = sizeof (Elf32_External_compact_rel);
5209     }
5210
5211   return TRUE;
5212 }
5213
5214 /* Create the .got section to hold the global offset table.  */
5215
5216 static bfd_boolean
5217 mips_elf_create_got_section (bfd *abfd, struct bfd_link_info *info)
5218 {
5219   flagword flags;
5220   register asection *s;
5221   struct elf_link_hash_entry *h;
5222   struct bfd_link_hash_entry *bh;
5223   struct mips_elf_link_hash_table *htab;
5224
5225   htab = mips_elf_hash_table (info);
5226   BFD_ASSERT (htab != NULL);
5227
5228   /* This function may be called more than once.  */
5229   if (htab->root.sgot)
5230     return TRUE;
5231
5232   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
5233            | SEC_LINKER_CREATED);
5234
5235   /* We have to use an alignment of 2**4 here because this is hardcoded
5236      in the function stub generation and in the linker script.  */
5237   s = bfd_make_section_anyway_with_flags (abfd, ".got", flags);
5238   if (s == NULL
5239       || !bfd_set_section_alignment (s, 4))
5240     return FALSE;
5241   htab->root.sgot = s;
5242
5243   /* Define the symbol _GLOBAL_OFFSET_TABLE_.  We don't do this in the
5244      linker script because we don't want to define the symbol if we
5245      are not creating a global offset table.  */
5246   bh = NULL;
5247   if (! (_bfd_generic_link_add_one_symbol
5248          (info, abfd, "_GLOBAL_OFFSET_TABLE_", BSF_GLOBAL, s,
5249           0, NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
5250     return FALSE;
5251
5252   h = (struct elf_link_hash_entry *) bh;
5253   h->non_elf = 0;
5254   h->def_regular = 1;
5255   h->type = STT_OBJECT;
5256   h->other = (h->other & ~ELF_ST_VISIBILITY (-1)) | STV_HIDDEN;
5257   elf_hash_table (info)->hgot = h;
5258
5259   if (bfd_link_pic (info)
5260       && ! bfd_elf_link_record_dynamic_symbol (info, h))
5261     return FALSE;
5262
5263   htab->got_info = mips_elf_create_got_info (abfd);
5264   mips_elf_section_data (s)->elf.this_hdr.sh_flags
5265     |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL;
5266
5267   /* We also need a .got.plt section when generating PLTs.  */
5268   s = bfd_make_section_anyway_with_flags (abfd, ".got.plt",
5269                                           SEC_ALLOC | SEC_LOAD
5270                                           | SEC_HAS_CONTENTS
5271                                           | SEC_IN_MEMORY
5272                                           | SEC_LINKER_CREATED);
5273   if (s == NULL)
5274     return FALSE;
5275   htab->root.sgotplt = s;
5276
5277   return TRUE;
5278 }
5279 \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 (sec);
5541
5542       /* For relocations against a section symbol and ones against no
5543          symbol (absolute relocations) infer the ISA mode from the addend.  */
5544       if (section_p || r_symndx == STN_UNDEF)
5545         {
5546           target_is_16_bit_code_p = (addend & 1) && !micromips_p;
5547           target_is_micromips_code_p = (addend & 1) && micromips_p;
5548         }
5549       /* For relocations against an absolute symbol infer the ISA mode
5550          from the value of the symbol plus addend.  */
5551       else if (bfd_is_abs_section (sec))
5552         {
5553           target_is_16_bit_code_p = ((symbol + addend) & 1) && !micromips_p;
5554           target_is_micromips_code_p = ((symbol + addend) & 1) && micromips_p;
5555         }
5556       /* Otherwise just use the regular symbol annotation available.  */
5557       else
5558         {
5559           target_is_16_bit_code_p = ELF_ST_IS_MIPS16 (sym->st_other);
5560           target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (sym->st_other);
5561         }
5562     }
5563   else
5564     {
5565       /* ??? Could we use RELOC_FOR_GLOBAL_SYMBOL here ?  */
5566
5567       /* For global symbols we look up the symbol in the hash-table.  */
5568       h = ((struct mips_elf_link_hash_entry *)
5569            elf_sym_hashes (input_bfd) [r_symndx - extsymoff]);
5570       /* Find the real hash-table entry for this symbol.  */
5571       while (h->root.root.type == bfd_link_hash_indirect
5572              || h->root.root.type == bfd_link_hash_warning)
5573         h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
5574
5575       /* Record the name of this symbol, for our caller.  */
5576       *namep = h->root.root.root.string;
5577
5578       /* See if this is the special _gp_disp symbol.  Note that such a
5579          symbol must always be a global symbol.  */
5580       if (strcmp (*namep, "_gp_disp") == 0
5581           && ! NEWABI_P (input_bfd))
5582         {
5583           /* Relocations against _gp_disp are permitted only with
5584              R_MIPS_HI16 and R_MIPS_LO16 relocations.  */
5585           if (!hi16_reloc_p (r_type) && !lo16_reloc_p (r_type))
5586             return bfd_reloc_notsupported;
5587
5588           gp_disp_p = TRUE;
5589         }
5590       /* See if this is the special _gp symbol.  Note that such a
5591          symbol must always be a global symbol.  */
5592       else if (strcmp (*namep, "__gnu_local_gp") == 0)
5593         gnu_local_gp_p = TRUE;
5594
5595
5596       /* If this symbol is defined, calculate its address.  Note that
5597          _gp_disp is a magic symbol, always implicitly defined by the
5598          linker, so it's inappropriate to check to see whether or not
5599          its defined.  */
5600       else if ((h->root.root.type == bfd_link_hash_defined
5601                 || h->root.root.type == bfd_link_hash_defweak)
5602                && h->root.root.u.def.section)
5603         {
5604           sec = h->root.root.u.def.section;
5605           if (sec->output_section)
5606             symbol = (h->root.root.u.def.value
5607                       + sec->output_section->vma
5608                       + sec->output_offset);
5609           else
5610             symbol = h->root.root.u.def.value;
5611         }
5612       else if (h->root.root.type == bfd_link_hash_undefweak)
5613         /* We allow relocations against undefined weak symbols, giving
5614            it the value zero, so that you can undefined weak functions
5615            and check to see if they exist by looking at their
5616            addresses.  */
5617         symbol = 0;
5618       else if (info->unresolved_syms_in_objects == RM_IGNORE
5619                && ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT)
5620         symbol = 0;
5621       else if (strcmp (*namep, SGI_COMPAT (input_bfd)
5622                        ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING") == 0)
5623         {
5624           /* If this is a dynamic link, we should have created a
5625              _DYNAMIC_LINK symbol or _DYNAMIC_LINKING(for normal mips) symbol
5626              in _bfd_mips_elf_create_dynamic_sections.
5627              Otherwise, we should define the symbol with a value of 0.
5628              FIXME: It should probably get into the symbol table
5629              somehow as well.  */
5630           BFD_ASSERT (! bfd_link_pic (info));
5631           BFD_ASSERT (bfd_get_section_by_name (abfd, ".dynamic") == NULL);
5632           symbol = 0;
5633         }
5634       else if (ELF_MIPS_IS_OPTIONAL (h->root.other))
5635         {
5636           /* This is an optional symbol - an Irix specific extension to the
5637              ELF spec.  Ignore it for now.
5638              XXX - FIXME - there is more to the spec for OPTIONAL symbols
5639              than simply ignoring them, but we do not handle this for now.
5640              For information see the "64-bit ELF Object File Specification"
5641              which is available from here:
5642              http://techpubs.sgi.com/library/manuals/4000/007-4658-001/pdf/007-4658-001.pdf  */
5643           symbol = 0;
5644         }
5645       else
5646         {
5647           bfd_boolean reject_undefined
5648             = (info->unresolved_syms_in_objects == RM_GENERATE_ERROR
5649                || ELF_ST_VISIBILITY (h->root.other) != STV_DEFAULT);
5650
5651           (*info->callbacks->undefined_symbol)
5652             (info, h->root.root.root.string, input_bfd,
5653              input_section, relocation->r_offset, reject_undefined);
5654
5655           if (reject_undefined)
5656             return bfd_reloc_undefined;
5657
5658           symbol = 0;
5659         }
5660
5661       target_is_16_bit_code_p = ELF_ST_IS_MIPS16 (h->root.other);
5662       target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (h->root.other);
5663     }
5664
5665   /* If this is a reference to a 16-bit function with a stub, we need
5666      to redirect the relocation to the stub unless:
5667
5668      (a) the relocation is for a MIPS16 JAL;
5669
5670      (b) the relocation is for a MIPS16 PIC call, and there are no
5671          non-MIPS16 uses of the GOT slot; or
5672
5673      (c) the section allows direct references to MIPS16 functions.  */
5674   if (r_type != R_MIPS16_26
5675       && !bfd_link_relocatable (info)
5676       && ((h != NULL
5677            && h->fn_stub != NULL
5678            && (r_type != R_MIPS16_CALL16 || h->need_fn_stub))
5679           || (local_p
5680               && mips_elf_tdata (input_bfd)->local_stubs != NULL
5681               && mips_elf_tdata (input_bfd)->local_stubs[r_symndx] != NULL))
5682       && !section_allows_mips16_refs_p (input_section))
5683     {
5684       /* This is a 32- or 64-bit call to a 16-bit function.  We should
5685          have already noticed that we were going to need the
5686          stub.  */
5687       if (local_p)
5688         {
5689           sec = mips_elf_tdata (input_bfd)->local_stubs[r_symndx];
5690           value = 0;
5691         }
5692       else
5693         {
5694           BFD_ASSERT (h->need_fn_stub);
5695           if (h->la25_stub)
5696             {
5697               /* If a LA25 header for the stub itself exists, point to the
5698                  prepended LUI/ADDIU sequence.  */
5699               sec = h->la25_stub->stub_section;
5700               value = h->la25_stub->offset;
5701             }
5702           else
5703             {
5704               sec = h->fn_stub;
5705               value = 0;
5706             }
5707         }
5708
5709       symbol = sec->output_section->vma + sec->output_offset + value;
5710       /* The target is 16-bit, but the stub isn't.  */
5711       target_is_16_bit_code_p = FALSE;
5712     }
5713   /* If this is a MIPS16 call with a stub, that is made through the PLT or
5714      to a standard MIPS function, we need to redirect the call to the stub.
5715      Note that we specifically exclude R_MIPS16_CALL16 from this behavior;
5716      indirect calls should use an indirect stub instead.  */
5717   else if (r_type == R_MIPS16_26 && !bfd_link_relocatable (info)
5718            && ((h != NULL && (h->call_stub != NULL || h->call_fp_stub != NULL))
5719                || (local_p
5720                    && mips_elf_tdata (input_bfd)->local_call_stubs != NULL
5721                    && mips_elf_tdata (input_bfd)->local_call_stubs[r_symndx] != NULL))
5722            && ((h != NULL && h->use_plt_entry) || !target_is_16_bit_code_p))
5723     {
5724       if (local_p)
5725         sec = mips_elf_tdata (input_bfd)->local_call_stubs[r_symndx];
5726       else
5727         {
5728           /* If both call_stub and call_fp_stub are defined, we can figure
5729              out which one to use by checking which one appears in the input
5730              file.  */
5731           if (h->call_stub != NULL && h->call_fp_stub != NULL)
5732             {
5733               asection *o;
5734
5735               sec = NULL;
5736               for (o = input_bfd->sections; o != NULL; o = o->next)
5737                 {
5738                   if (CALL_FP_STUB_P (bfd_section_name (o)))
5739                     {
5740                       sec = h->call_fp_stub;
5741                       break;
5742                     }
5743                 }
5744               if (sec == NULL)
5745                 sec = h->call_stub;
5746             }
5747           else if (h->call_stub != NULL)
5748             sec = h->call_stub;
5749           else
5750             sec = h->call_fp_stub;
5751         }
5752
5753       BFD_ASSERT (sec->size > 0);
5754       symbol = sec->output_section->vma + sec->output_offset;
5755     }
5756   /* If this is a direct call to a PIC function, redirect to the
5757      non-PIC stub.  */
5758   else if (h != NULL && h->la25_stub
5759            && mips_elf_relocation_needs_la25_stub (input_bfd, r_type,
5760                                                    target_is_16_bit_code_p))
5761     {
5762         symbol = (h->la25_stub->stub_section->output_section->vma
5763                   + h->la25_stub->stub_section->output_offset
5764                   + h->la25_stub->offset);
5765         if (ELF_ST_IS_MICROMIPS (h->root.other))
5766           symbol |= 1;
5767     }
5768   /* For direct MIPS16 and microMIPS calls make sure the compressed PLT
5769      entry is used if a standard PLT entry has also been made.  In this
5770      case the symbol will have been set by mips_elf_set_plt_sym_value
5771      to point to the standard PLT entry, so redirect to the compressed
5772      one.  */
5773   else if ((mips16_branch_reloc_p (r_type)
5774             || micromips_branch_reloc_p (r_type))
5775            && !bfd_link_relocatable (info)
5776            && h != NULL
5777            && h->use_plt_entry
5778            && h->root.plt.plist->comp_offset != MINUS_ONE
5779            && h->root.plt.plist->mips_offset != MINUS_ONE)
5780     {
5781       bfd_boolean micromips_p = MICROMIPS_P (abfd);
5782
5783       sec = htab->root.splt;
5784       symbol = (sec->output_section->vma
5785                 + sec->output_offset
5786                 + htab->plt_header_size
5787                 + htab->plt_mips_offset
5788                 + h->root.plt.plist->comp_offset
5789                 + 1);
5790
5791       target_is_16_bit_code_p = !micromips_p;
5792       target_is_micromips_code_p = micromips_p;
5793     }
5794
5795   /* Make sure MIPS16 and microMIPS are not used together.  */
5796   if ((mips16_branch_reloc_p (r_type) && target_is_micromips_code_p)
5797       || (micromips_branch_reloc_p (r_type) && target_is_16_bit_code_p))
5798    {
5799       _bfd_error_handler
5800         (_("MIPS16 and microMIPS functions cannot call each other"));
5801       return bfd_reloc_notsupported;
5802    }
5803
5804   /* Calls from 16-bit code to 32-bit code and vice versa require the
5805      mode change.  However, we can ignore calls to undefined weak symbols,
5806      which should never be executed at runtime.  This exception is important
5807      because the assembly writer may have "known" that any definition of the
5808      symbol would be 16-bit code, and that direct jumps were therefore
5809      acceptable.  */
5810   *cross_mode_jump_p = (!bfd_link_relocatable (info)
5811                         && !(h && h->root.root.type == bfd_link_hash_undefweak)
5812                         && ((mips16_branch_reloc_p (r_type)
5813                              && !target_is_16_bit_code_p)
5814                             || (micromips_branch_reloc_p (r_type)
5815                                 && !target_is_micromips_code_p)
5816                             || ((branch_reloc_p (r_type)
5817                                  || r_type == R_MIPS_JALR)
5818                                 && (target_is_16_bit_code_p
5819                                     || target_is_micromips_code_p))));
5820
5821   resolved_to_zero = (h != NULL
5822                       && UNDEFWEAK_NO_DYNAMIC_RELOC (info, &h->root));
5823
5824   switch (r_type)
5825     {
5826     case R_MIPS16_CALL16:
5827     case R_MIPS16_GOT16:
5828     case R_MIPS_CALL16:
5829     case R_MIPS_GOT16:
5830     case R_MIPS_GOT_PAGE:
5831     case R_MIPS_GOT_DISP:
5832     case R_MIPS_GOT_LO16:
5833     case R_MIPS_CALL_LO16:
5834     case R_MICROMIPS_CALL16:
5835     case R_MICROMIPS_GOT16:
5836     case R_MICROMIPS_GOT_PAGE:
5837     case R_MICROMIPS_GOT_DISP:
5838     case R_MICROMIPS_GOT_LO16:
5839     case R_MICROMIPS_CALL_LO16:
5840       if (resolved_to_zero
5841           && !bfd_link_relocatable (info)
5842           && mips_elf_nullify_got_load (input_bfd, contents,
5843                                         relocation, howto, TRUE))
5844         return bfd_reloc_continue;
5845
5846       /* Fall through.  */
5847     case R_MIPS_GOT_HI16:
5848     case R_MIPS_CALL_HI16:
5849     case R_MICROMIPS_GOT_HI16:
5850     case R_MICROMIPS_CALL_HI16:
5851       if (resolved_to_zero
5852           && htab->use_absolute_zero
5853           && bfd_link_pic (info))
5854         {
5855           /* Redirect to the special `__gnu_absolute_zero' symbol.  */
5856           h = mips_elf_link_hash_lookup (htab, "__gnu_absolute_zero",
5857                                          FALSE, FALSE, FALSE);
5858           BFD_ASSERT (h != NULL);
5859         }
5860       break;
5861     }
5862
5863   local_p = (h == NULL || mips_use_local_got_p (info, h));
5864
5865   gp0 = _bfd_get_gp_value (input_bfd);
5866   gp = _bfd_get_gp_value (abfd);
5867   if (htab->got_info)
5868     gp += mips_elf_adjust_gp (abfd, htab->got_info, input_bfd);
5869
5870   if (gnu_local_gp_p)
5871     symbol = gp;
5872
5873   /* Global R_MIPS_GOT_PAGE/R_MICROMIPS_GOT_PAGE relocations are equivalent
5874      to R_MIPS_GOT_DISP/R_MICROMIPS_GOT_DISP.  The addend is applied by the
5875      corresponding R_MIPS_GOT_OFST/R_MICROMIPS_GOT_OFST.  */
5876   if (got_page_reloc_p (r_type) && !local_p)
5877     {
5878       r_type = (micromips_reloc_p (r_type)
5879                 ? R_MICROMIPS_GOT_DISP : R_MIPS_GOT_DISP);
5880       addend = 0;
5881     }
5882
5883   /* If we haven't already determined the GOT offset, and we're going
5884      to need it, get it now.  */
5885   switch (r_type)
5886     {
5887     case R_MIPS16_CALL16:
5888     case R_MIPS16_GOT16:
5889     case R_MIPS_CALL16:
5890     case R_MIPS_GOT16:
5891     case R_MIPS_GOT_DISP:
5892     case R_MIPS_GOT_HI16:
5893     case R_MIPS_CALL_HI16:
5894     case R_MIPS_GOT_LO16:
5895     case R_MIPS_CALL_LO16:
5896     case R_MICROMIPS_CALL16:
5897     case R_MICROMIPS_GOT16:
5898     case R_MICROMIPS_GOT_DISP:
5899     case R_MICROMIPS_GOT_HI16:
5900     case R_MICROMIPS_CALL_HI16:
5901     case R_MICROMIPS_GOT_LO16:
5902     case R_MICROMIPS_CALL_LO16:
5903     case R_MIPS_TLS_GD:
5904     case R_MIPS_TLS_GOTTPREL:
5905     case R_MIPS_TLS_LDM:
5906     case R_MIPS16_TLS_GD:
5907     case R_MIPS16_TLS_GOTTPREL:
5908     case R_MIPS16_TLS_LDM:
5909     case R_MICROMIPS_TLS_GD:
5910     case R_MICROMIPS_TLS_GOTTPREL:
5911     case R_MICROMIPS_TLS_LDM:
5912       /* Find the index into the GOT where this value is located.  */
5913       if (tls_ldm_reloc_p (r_type))
5914         {
5915           g = mips_elf_local_got_index (abfd, input_bfd, info,
5916                                         0, 0, NULL, r_type);
5917           if (g == MINUS_ONE)
5918             return bfd_reloc_outofrange;
5919         }
5920       else if (!local_p)
5921         {
5922           /* On VxWorks, CALL relocations should refer to the .got.plt
5923              entry, which is initialized to point at the PLT stub.  */
5924           if (htab->is_vxworks
5925               && (call_hi16_reloc_p (r_type)
5926                   || call_lo16_reloc_p (r_type)
5927                   || call16_reloc_p (r_type)))
5928             {
5929               BFD_ASSERT (addend == 0);
5930               BFD_ASSERT (h->root.needs_plt);
5931               g = mips_elf_gotplt_index (info, &h->root);
5932             }
5933           else
5934             {
5935               BFD_ASSERT (addend == 0);
5936               g = mips_elf_global_got_index (abfd, info, input_bfd,
5937                                              &h->root, r_type);
5938               if (!TLS_RELOC_P (r_type)
5939                   && !elf_hash_table (info)->dynamic_sections_created)
5940                 /* This is a static link.  We must initialize the GOT entry.  */
5941                 MIPS_ELF_PUT_WORD (dynobj, symbol, htab->root.sgot->contents + g);
5942             }
5943         }
5944       else if (!htab->is_vxworks
5945                && (call16_reloc_p (r_type) || got16_reloc_p (r_type)))
5946         /* The calculation below does not involve "g".  */
5947         break;
5948       else
5949         {
5950           g = mips_elf_local_got_index (abfd, input_bfd, info,
5951                                         symbol + addend, r_symndx, h, r_type);
5952           if (g == MINUS_ONE)
5953             return bfd_reloc_outofrange;
5954         }
5955
5956       /* Convert GOT indices to actual offsets.  */
5957       g = mips_elf_got_offset_from_index (info, abfd, input_bfd, g);
5958       break;
5959     }
5960
5961   /* Relocations against the VxWorks __GOTT_BASE__ and __GOTT_INDEX__
5962      symbols are resolved by the loader.  Add them to .rela.dyn.  */
5963   if (h != NULL && is_gott_symbol (info, &h->root))
5964     {
5965       Elf_Internal_Rela outrel;
5966       bfd_byte *loc;
5967       asection *s;
5968
5969       s = mips_elf_rel_dyn_section (info, FALSE);
5970       loc = s->contents + s->reloc_count++ * sizeof (Elf32_External_Rela);
5971
5972       outrel.r_offset = (input_section->output_section->vma
5973                          + input_section->output_offset
5974                          + relocation->r_offset);
5975       outrel.r_info = ELF32_R_INFO (h->root.dynindx, r_type);
5976       outrel.r_addend = addend;
5977       bfd_elf32_swap_reloca_out (abfd, &outrel, loc);
5978
5979       /* If we've written this relocation for a readonly section,
5980          we need to set DF_TEXTREL again, so that we do not delete the
5981          DT_TEXTREL tag.  */
5982       if (MIPS_ELF_READONLY_SECTION (input_section))
5983         info->flags |= DF_TEXTREL;
5984
5985       *valuep = 0;
5986       return bfd_reloc_ok;
5987     }
5988
5989   /* Figure out what kind of relocation is being performed.  */
5990   switch (r_type)
5991     {
5992     case R_MIPS_NONE:
5993       return bfd_reloc_continue;
5994
5995     case R_MIPS_16:
5996       if (howto->partial_inplace)
5997         addend = _bfd_mips_elf_sign_extend (addend, 16);
5998       value = symbol + addend;
5999       overflowed_p = mips_elf_overflow_p (value, 16);
6000       break;
6001
6002     case R_MIPS_32:
6003     case R_MIPS_REL32:
6004     case R_MIPS_64:
6005       if ((bfd_link_pic (info)
6006            || (htab->root.dynamic_sections_created
6007                && h != NULL
6008                && h->root.def_dynamic
6009                && !h->root.def_regular
6010                && !h->has_static_relocs))
6011           && r_symndx != STN_UNDEF
6012           && (h == NULL
6013               || h->root.root.type != bfd_link_hash_undefweak
6014               || (ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT
6015                   && !resolved_to_zero))
6016           && (input_section->flags & SEC_ALLOC) != 0)
6017         {
6018           /* If we're creating a shared library, then we can't know
6019              where the symbol will end up.  So, we create a relocation
6020              record in the output, and leave the job up to the dynamic
6021              linker.  We must do the same for executable references to
6022              shared library symbols, unless we've decided to use copy
6023              relocs or PLTs instead.  */
6024           value = addend;
6025           if (!mips_elf_create_dynamic_relocation (abfd,
6026                                                    info,
6027                                                    relocation,
6028                                                    h,
6029                                                    sec,
6030                                                    symbol,
6031                                                    &value,
6032                                                    input_section))
6033             return bfd_reloc_undefined;
6034         }
6035       else
6036         {
6037           if (r_type != R_MIPS_REL32)
6038             value = symbol + addend;
6039           else
6040             value = addend;
6041         }
6042       value &= howto->dst_mask;
6043       break;
6044
6045     case R_MIPS_PC32:
6046       value = symbol + addend - p;
6047       value &= howto->dst_mask;
6048       break;
6049
6050     case R_MIPS16_26:
6051       /* The calculation for R_MIPS16_26 is just the same as for an
6052          R_MIPS_26.  It's only the storage of the relocated field into
6053          the output file that's different.  That's handled in
6054          mips_elf_perform_relocation.  So, we just fall through to the
6055          R_MIPS_26 case here.  */
6056     case R_MIPS_26:
6057     case R_MICROMIPS_26_S1:
6058       {
6059         unsigned int shift;
6060
6061         /* Shift is 2, unusually, for microMIPS JALX.  */
6062         shift = (!*cross_mode_jump_p && r_type == R_MICROMIPS_26_S1) ? 1 : 2;
6063
6064         if (howto->partial_inplace && !section_p)
6065           value = _bfd_mips_elf_sign_extend (addend, 26 + shift);
6066         else
6067           value = addend;
6068         value += symbol;
6069
6070         /* Make sure the target of a jump is suitably aligned.  Bit 0 must
6071            be the correct ISA mode selector except for weak undefined
6072            symbols.  */
6073         if ((was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6074             && (*cross_mode_jump_p
6075                 ? (value & 3) != (r_type == R_MIPS_26)
6076                 : (value & ((1 << shift) - 1)) != (r_type != R_MIPS_26)))
6077           return bfd_reloc_outofrange;
6078
6079         value >>= shift;
6080         if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6081           overflowed_p = (value >> 26) != ((p + 4) >> (26 + shift));
6082         value &= howto->dst_mask;
6083       }
6084       break;
6085
6086     case R_MIPS_TLS_DTPREL_HI16:
6087     case R_MIPS16_TLS_DTPREL_HI16:
6088     case R_MICROMIPS_TLS_DTPREL_HI16:
6089       value = (mips_elf_high (addend + symbol - dtprel_base (info))
6090                & howto->dst_mask);
6091       break;
6092
6093     case R_MIPS_TLS_DTPREL_LO16:
6094     case R_MIPS_TLS_DTPREL32:
6095     case R_MIPS_TLS_DTPREL64:
6096     case R_MIPS16_TLS_DTPREL_LO16:
6097     case R_MICROMIPS_TLS_DTPREL_LO16:
6098       value = (symbol + addend - dtprel_base (info)) & howto->dst_mask;
6099       break;
6100
6101     case R_MIPS_TLS_TPREL_HI16:
6102     case R_MIPS16_TLS_TPREL_HI16:
6103     case R_MICROMIPS_TLS_TPREL_HI16:
6104       value = (mips_elf_high (addend + symbol - tprel_base (info))
6105                & howto->dst_mask);
6106       break;
6107
6108     case R_MIPS_TLS_TPREL_LO16:
6109     case R_MIPS_TLS_TPREL32:
6110     case R_MIPS_TLS_TPREL64:
6111     case R_MIPS16_TLS_TPREL_LO16:
6112     case R_MICROMIPS_TLS_TPREL_LO16:
6113       value = (symbol + addend - tprel_base (info)) & howto->dst_mask;
6114       break;
6115
6116     case R_MIPS_HI16:
6117     case R_MIPS16_HI16:
6118     case R_MICROMIPS_HI16:
6119       if (!gp_disp_p)
6120         {
6121           value = mips_elf_high (addend + symbol);
6122           value &= howto->dst_mask;
6123         }
6124       else
6125         {
6126           /* For MIPS16 ABI code we generate this sequence
6127                 0: li      $v0,%hi(_gp_disp)
6128                 4: addiupc $v1,%lo(_gp_disp)
6129                 8: sll     $v0,16
6130                12: addu    $v0,$v1
6131                14: move    $gp,$v0
6132              So the offsets of hi and lo relocs are the same, but the
6133              base $pc is that used by the ADDIUPC instruction at $t9 + 4.
6134              ADDIUPC clears the low two bits of the instruction address,
6135              so the base is ($t9 + 4) & ~3.  */
6136           if (r_type == R_MIPS16_HI16)
6137             value = mips_elf_high (addend + gp - ((p + 4) & ~(bfd_vma) 0x3));
6138           /* The microMIPS .cpload sequence uses the same assembly
6139              instructions as the traditional psABI version, but the
6140              incoming $t9 has the low bit set.  */
6141           else if (r_type == R_MICROMIPS_HI16)
6142             value = mips_elf_high (addend + gp - p - 1);
6143           else
6144             value = mips_elf_high (addend + gp - p);
6145         }
6146       break;
6147
6148     case R_MIPS_LO16:
6149     case R_MIPS16_LO16:
6150     case R_MICROMIPS_LO16:
6151     case R_MICROMIPS_HI0_LO16:
6152       if (!gp_disp_p)
6153         value = (symbol + addend) & howto->dst_mask;
6154       else
6155         {
6156           /* See the comment for R_MIPS16_HI16 above for the reason
6157              for this conditional.  */
6158           if (r_type == R_MIPS16_LO16)
6159             value = addend + gp - (p & ~(bfd_vma) 0x3);
6160           else if (r_type == R_MICROMIPS_LO16
6161                    || r_type == R_MICROMIPS_HI0_LO16)
6162             value = addend + gp - p + 3;
6163           else
6164             value = addend + gp - p + 4;
6165           /* The MIPS ABI requires checking the R_MIPS_LO16 relocation
6166              for overflow.  But, on, say, IRIX5, relocations against
6167              _gp_disp are normally generated from the .cpload
6168              pseudo-op.  It generates code that normally looks like
6169              this:
6170
6171                lui    $gp,%hi(_gp_disp)
6172                addiu  $gp,$gp,%lo(_gp_disp)
6173                addu   $gp,$gp,$t9
6174
6175              Here $t9 holds the address of the function being called,
6176              as required by the MIPS ELF ABI.  The R_MIPS_LO16
6177              relocation can easily overflow in this situation, but the
6178              R_MIPS_HI16 relocation will handle the overflow.
6179              Therefore, we consider this a bug in the MIPS ABI, and do
6180              not check for overflow here.  */
6181         }
6182       break;
6183
6184     case R_MIPS_LITERAL:
6185     case R_MICROMIPS_LITERAL:
6186       /* Because we don't merge literal sections, we can handle this
6187          just like R_MIPS_GPREL16.  In the long run, we should merge
6188          shared literals, and then we will need to additional work
6189          here.  */
6190
6191       /* Fall through.  */
6192
6193     case R_MIPS16_GPREL:
6194       /* The R_MIPS16_GPREL performs the same calculation as
6195          R_MIPS_GPREL16, but stores the relocated bits in a different
6196          order.  We don't need to do anything special here; the
6197          differences are handled in mips_elf_perform_relocation.  */
6198     case R_MIPS_GPREL16:
6199     case R_MICROMIPS_GPREL7_S2:
6200     case R_MICROMIPS_GPREL16:
6201       /* Only sign-extend the addend if it was extracted from the
6202          instruction.  If the addend was separate, leave it alone,
6203          otherwise we may lose significant bits.  */
6204       if (howto->partial_inplace)
6205         addend = _bfd_mips_elf_sign_extend (addend, 16);
6206       value = symbol + addend - gp;
6207       /* If the symbol was local, any earlier relocatable links will
6208          have adjusted its addend with the gp offset, so compensate
6209          for that now.  Don't do it for symbols forced local in this
6210          link, though, since they won't have had the gp offset applied
6211          to them before.  */
6212       if (was_local_p)
6213         value += gp0;
6214       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6215         overflowed_p = mips_elf_overflow_p (value, 16);
6216       break;
6217
6218     case R_MIPS16_GOT16:
6219     case R_MIPS16_CALL16:
6220     case R_MIPS_GOT16:
6221     case R_MIPS_CALL16:
6222     case R_MICROMIPS_GOT16:
6223     case R_MICROMIPS_CALL16:
6224       /* VxWorks does not have separate local and global semantics for
6225          R_MIPS*_GOT16; every relocation evaluates to "G".  */
6226       if (!htab->is_vxworks && local_p)
6227         {
6228           value = mips_elf_got16_entry (abfd, input_bfd, info,
6229                                         symbol + addend, !was_local_p);
6230           if (value == MINUS_ONE)
6231             return bfd_reloc_outofrange;
6232           value
6233             = mips_elf_got_offset_from_index (info, abfd, input_bfd, value);
6234           overflowed_p = mips_elf_overflow_p (value, 16);
6235           break;
6236         }
6237
6238       /* Fall through.  */
6239
6240     case R_MIPS_TLS_GD:
6241     case R_MIPS_TLS_GOTTPREL:
6242     case R_MIPS_TLS_LDM:
6243     case R_MIPS_GOT_DISP:
6244     case R_MIPS16_TLS_GD:
6245     case R_MIPS16_TLS_GOTTPREL:
6246     case R_MIPS16_TLS_LDM:
6247     case R_MICROMIPS_TLS_GD:
6248     case R_MICROMIPS_TLS_GOTTPREL:
6249     case R_MICROMIPS_TLS_LDM:
6250     case R_MICROMIPS_GOT_DISP:
6251       value = g;
6252       overflowed_p = mips_elf_overflow_p (value, 16);
6253       break;
6254
6255     case R_MIPS_GPREL32:
6256       value = (addend + symbol + gp0 - gp);
6257       if (!save_addend)
6258         value &= howto->dst_mask;
6259       break;
6260
6261     case R_MIPS_PC16:
6262     case R_MIPS_GNU_REL16_S2:
6263       if (howto->partial_inplace)
6264         addend = _bfd_mips_elf_sign_extend (addend, 18);
6265
6266       /* No need to exclude weak undefined symbols here as they resolve
6267          to 0 and never set `*cross_mode_jump_p', so this alignment check
6268          will never trigger for them.  */
6269       if (*cross_mode_jump_p
6270           ? ((symbol + addend) & 3) != 1
6271           : ((symbol + addend) & 3) != 0)
6272         return bfd_reloc_outofrange;
6273
6274       value = symbol + addend - p;
6275       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6276         overflowed_p = mips_elf_overflow_p (value, 18);
6277       value >>= howto->rightshift;
6278       value &= howto->dst_mask;
6279       break;
6280
6281     case R_MIPS16_PC16_S1:
6282       if (howto->partial_inplace)
6283         addend = _bfd_mips_elf_sign_extend (addend, 17);
6284
6285       if ((was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6286           && (*cross_mode_jump_p
6287               ? ((symbol + addend) & 3) != 0
6288               : ((symbol + addend) & 1) == 0))
6289         return bfd_reloc_outofrange;
6290
6291       value = symbol + addend - p;
6292       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6293         overflowed_p = mips_elf_overflow_p (value, 17);
6294       value >>= howto->rightshift;
6295       value &= howto->dst_mask;
6296       break;
6297
6298     case R_MIPS_PC21_S2:
6299       if (howto->partial_inplace)
6300         addend = _bfd_mips_elf_sign_extend (addend, 23);
6301
6302       if ((symbol + addend) & 3)
6303         return bfd_reloc_outofrange;
6304
6305       value = symbol + addend - p;
6306       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6307         overflowed_p = mips_elf_overflow_p (value, 23);
6308       value >>= howto->rightshift;
6309       value &= howto->dst_mask;
6310       break;
6311
6312     case R_MIPS_PC26_S2:
6313       if (howto->partial_inplace)
6314         addend = _bfd_mips_elf_sign_extend (addend, 28);
6315
6316       if ((symbol + addend) & 3)
6317         return bfd_reloc_outofrange;
6318
6319       value = symbol + addend - p;
6320       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6321         overflowed_p = mips_elf_overflow_p (value, 28);
6322       value >>= howto->rightshift;
6323       value &= howto->dst_mask;
6324       break;
6325
6326     case R_MIPS_PC18_S3:
6327       if (howto->partial_inplace)
6328         addend = _bfd_mips_elf_sign_extend (addend, 21);
6329
6330       if ((symbol + addend) & 7)
6331         return bfd_reloc_outofrange;
6332
6333       value = symbol + addend - ((p | 7) ^ 7);
6334       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6335         overflowed_p = mips_elf_overflow_p (value, 21);
6336       value >>= howto->rightshift;
6337       value &= howto->dst_mask;
6338       break;
6339
6340     case R_MIPS_PC19_S2:
6341       if (howto->partial_inplace)
6342         addend = _bfd_mips_elf_sign_extend (addend, 21);
6343
6344       if ((symbol + addend) & 3)
6345         return bfd_reloc_outofrange;
6346
6347       value = symbol + addend - p;
6348       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6349         overflowed_p = mips_elf_overflow_p (value, 21);
6350       value >>= howto->rightshift;
6351       value &= howto->dst_mask;
6352       break;
6353
6354     case R_MIPS_PCHI16:
6355       value = mips_elf_high (symbol + addend - p);
6356       value &= howto->dst_mask;
6357       break;
6358
6359     case R_MIPS_PCLO16:
6360       if (howto->partial_inplace)
6361         addend = _bfd_mips_elf_sign_extend (addend, 16);
6362       value = symbol + addend - p;
6363       value &= howto->dst_mask;
6364       break;
6365
6366     case R_MICROMIPS_PC7_S1:
6367       if (howto->partial_inplace)
6368         addend = _bfd_mips_elf_sign_extend (addend, 8);
6369
6370       if ((was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6371           && (*cross_mode_jump_p
6372               ? ((symbol + addend + 2) & 3) != 0
6373               : ((symbol + addend + 2) & 1) == 0))
6374         return bfd_reloc_outofrange;
6375
6376       value = symbol + addend - p;
6377       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6378         overflowed_p = mips_elf_overflow_p (value, 8);
6379       value >>= howto->rightshift;
6380       value &= howto->dst_mask;
6381       break;
6382
6383     case R_MICROMIPS_PC10_S1:
6384       if (howto->partial_inplace)
6385         addend = _bfd_mips_elf_sign_extend (addend, 11);
6386
6387       if ((was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6388           && (*cross_mode_jump_p
6389               ? ((symbol + addend + 2) & 3) != 0
6390               : ((symbol + addend + 2) & 1) == 0))
6391         return bfd_reloc_outofrange;
6392
6393       value = symbol + addend - p;
6394       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6395         overflowed_p = mips_elf_overflow_p (value, 11);
6396       value >>= howto->rightshift;
6397       value &= howto->dst_mask;
6398       break;
6399
6400     case R_MICROMIPS_PC16_S1:
6401       if (howto->partial_inplace)
6402         addend = _bfd_mips_elf_sign_extend (addend, 17);
6403
6404       if ((was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6405           && (*cross_mode_jump_p
6406               ? ((symbol + addend) & 3) != 0
6407               : ((symbol + addend) & 1) == 0))
6408         return bfd_reloc_outofrange;
6409
6410       value = symbol + addend - p;
6411       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6412         overflowed_p = mips_elf_overflow_p (value, 17);
6413       value >>= howto->rightshift;
6414       value &= howto->dst_mask;
6415       break;
6416
6417     case R_MICROMIPS_PC23_S2:
6418       if (howto->partial_inplace)
6419         addend = _bfd_mips_elf_sign_extend (addend, 25);
6420       value = symbol + addend - ((p | 3) ^ 3);
6421       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6422         overflowed_p = mips_elf_overflow_p (value, 25);
6423       value >>= howto->rightshift;
6424       value &= howto->dst_mask;
6425       break;
6426
6427     case R_MIPS_GOT_HI16:
6428     case R_MIPS_CALL_HI16:
6429     case R_MICROMIPS_GOT_HI16:
6430     case R_MICROMIPS_CALL_HI16:
6431       /* We're allowed to handle these two relocations identically.
6432          The dynamic linker is allowed to handle the CALL relocations
6433          differently by creating a lazy evaluation stub.  */
6434       value = g;
6435       value = mips_elf_high (value);
6436       value &= howto->dst_mask;
6437       break;
6438
6439     case R_MIPS_GOT_LO16:
6440     case R_MIPS_CALL_LO16:
6441     case R_MICROMIPS_GOT_LO16:
6442     case R_MICROMIPS_CALL_LO16:
6443       value = g & howto->dst_mask;
6444       break;
6445
6446     case R_MIPS_GOT_PAGE:
6447     case R_MICROMIPS_GOT_PAGE:
6448       value = mips_elf_got_page (abfd, input_bfd, info, symbol + addend, NULL);
6449       if (value == MINUS_ONE)
6450         return bfd_reloc_outofrange;
6451       value = mips_elf_got_offset_from_index (info, abfd, input_bfd, value);
6452       overflowed_p = mips_elf_overflow_p (value, 16);
6453       break;
6454
6455     case R_MIPS_GOT_OFST:
6456     case R_MICROMIPS_GOT_OFST:
6457       if (local_p)
6458         mips_elf_got_page (abfd, input_bfd, info, symbol + addend, &value);
6459       else
6460         value = addend;
6461       overflowed_p = mips_elf_overflow_p (value, 16);
6462       break;
6463
6464     case R_MIPS_SUB:
6465     case R_MICROMIPS_SUB:
6466       value = symbol - addend;
6467       value &= howto->dst_mask;
6468       break;
6469
6470     case R_MIPS_HIGHER:
6471     case R_MICROMIPS_HIGHER:
6472       value = mips_elf_higher (addend + symbol);
6473       value &= howto->dst_mask;
6474       break;
6475
6476     case R_MIPS_HIGHEST:
6477     case R_MICROMIPS_HIGHEST:
6478       value = mips_elf_highest (addend + symbol);
6479       value &= howto->dst_mask;
6480       break;
6481
6482     case R_MIPS_SCN_DISP:
6483     case R_MICROMIPS_SCN_DISP:
6484       value = symbol + addend - sec->output_offset;
6485       value &= howto->dst_mask;
6486       break;
6487
6488     case R_MIPS_JALR:
6489     case R_MICROMIPS_JALR:
6490       /* This relocation is only a hint.  In some cases, we optimize
6491          it into a bal instruction.  But we don't try to optimize
6492          when the symbol does not resolve locally.  */
6493       if (h != NULL && !SYMBOL_CALLS_LOCAL (info, &h->root))
6494         return bfd_reloc_continue;
6495       /* We can't optimize cross-mode jumps either.  */
6496       if (*cross_mode_jump_p)
6497         return bfd_reloc_continue;
6498       value = symbol + addend;
6499       /* Neither we can non-instruction-aligned targets.  */
6500       if (r_type == R_MIPS_JALR ? (value & 3) != 0 : (value & 1) == 0)
6501         return bfd_reloc_continue;
6502       break;
6503
6504     case R_MIPS_PJUMP:
6505     case R_MIPS_GNU_VTINHERIT:
6506     case R_MIPS_GNU_VTENTRY:
6507       /* We don't do anything with these at present.  */
6508       return bfd_reloc_continue;
6509
6510     default:
6511       /* An unrecognized relocation type.  */
6512       return bfd_reloc_notsupported;
6513     }
6514
6515   /* Store the VALUE for our caller.  */
6516   *valuep = value;
6517   return overflowed_p ? bfd_reloc_overflow : bfd_reloc_ok;
6518 }
6519
6520 /* It has been determined that the result of the RELOCATION is the
6521    VALUE.  Use HOWTO to place VALUE into the output file at the
6522    appropriate position.  The SECTION is the section to which the
6523    relocation applies.
6524    CROSS_MODE_JUMP_P is true if the relocation field
6525    is a MIPS16 or microMIPS jump to standard MIPS code, or vice versa.
6526
6527    Returns FALSE if anything goes wrong.  */
6528
6529 static bfd_boolean
6530 mips_elf_perform_relocation (struct bfd_link_info *info,
6531                              reloc_howto_type *howto,
6532                              const Elf_Internal_Rela *relocation,
6533                              bfd_vma value, bfd *input_bfd,
6534                              asection *input_section, bfd_byte *contents,
6535                              bfd_boolean cross_mode_jump_p)
6536 {
6537   bfd_vma x;
6538   bfd_byte *location;
6539   int r_type = ELF_R_TYPE (input_bfd, relocation->r_info);
6540
6541   /* Figure out where the relocation is occurring.  */
6542   location = contents + relocation->r_offset;
6543
6544   _bfd_mips_elf_reloc_unshuffle (input_bfd, r_type, FALSE, location);
6545
6546   /* Obtain the current value.  */
6547   x = mips_elf_obtain_contents (howto, relocation, input_bfd, contents);
6548
6549   /* Clear the field we are setting.  */
6550   x &= ~howto->dst_mask;
6551
6552   /* Set the field.  */
6553   x |= (value & howto->dst_mask);
6554
6555   /* Detect incorrect JALX usage.  If required, turn JAL or BAL into JALX.  */
6556   if (!cross_mode_jump_p && jal_reloc_p (r_type))
6557     {
6558       bfd_vma opcode = x >> 26;
6559
6560       if (r_type == R_MIPS16_26 ? opcode == 0x7
6561           : r_type == R_MICROMIPS_26_S1 ? opcode == 0x3c
6562           : opcode == 0x1d)
6563         {
6564           info->callbacks->einfo
6565             (_("%X%H: unsupported JALX to the same ISA mode\n"),
6566              input_bfd, input_section, relocation->r_offset);
6567           return TRUE;
6568         }
6569     }
6570   if (cross_mode_jump_p && jal_reloc_p (r_type))
6571     {
6572       bfd_boolean ok;
6573       bfd_vma opcode = x >> 26;
6574       bfd_vma jalx_opcode;
6575
6576       /* Check to see if the opcode is already JAL or JALX.  */
6577       if (r_type == R_MIPS16_26)
6578         {
6579           ok = ((opcode == 0x6) || (opcode == 0x7));
6580           jalx_opcode = 0x7;
6581         }
6582       else if (r_type == R_MICROMIPS_26_S1)
6583         {
6584           ok = ((opcode == 0x3d) || (opcode == 0x3c));
6585           jalx_opcode = 0x3c;
6586         }
6587       else
6588         {
6589           ok = ((opcode == 0x3) || (opcode == 0x1d));
6590           jalx_opcode = 0x1d;
6591         }
6592
6593       /* If the opcode is not JAL or JALX, there's a problem.  We cannot
6594          convert J or JALS to JALX.  */
6595       if (!ok)
6596         {
6597           info->callbacks->einfo
6598             (_("%X%H: unsupported jump between ISA modes; "
6599                "consider recompiling with interlinking enabled\n"),
6600              input_bfd, input_section, relocation->r_offset);
6601           return TRUE;
6602         }
6603
6604       /* Make this the JALX opcode.  */
6605       x = (x & ~(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_section_name (hdr->bfd_section);
7389
7390       /* .sbss is not handled specially here because the GNU/Linux
7391          prelinker can convert .sbss from NOBITS to PROGBITS and
7392          changing it back to NOBITS breaks the binary.  The entry in
7393          _bfd_mips_elf_special_sections will ensure the correct flags
7394          are set on .sbss if BFD creates it without reading it from an
7395          input file, and without special handling here the flags set
7396          on it in an input file will be followed.  */
7397       if (strcmp (name, ".sdata") == 0
7398           || strcmp (name, ".lit8") == 0
7399           || strcmp (name, ".lit4") == 0)
7400         hdr->sh_flags |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL;
7401       else if (strcmp (name, ".srdata") == 0)
7402         hdr->sh_flags |= SHF_ALLOC | SHF_MIPS_GPREL;
7403       else if (strcmp (name, ".compact_rel") == 0)
7404         hdr->sh_flags = 0;
7405       else if (strcmp (name, ".rtproc") == 0)
7406         {
7407           if (hdr->sh_addralign != 0 && hdr->sh_entsize == 0)
7408             {
7409               unsigned int adjust;
7410
7411               adjust = hdr->sh_size % hdr->sh_addralign;
7412               if (adjust != 0)
7413                 hdr->sh_size += hdr->sh_addralign - adjust;
7414             }
7415         }
7416     }
7417
7418   return TRUE;
7419 }
7420
7421 /* Handle a MIPS specific section when reading an object file.  This
7422    is called when elfcode.h finds a section with an unknown type.
7423    This routine supports both the 32-bit and 64-bit ELF ABI.
7424
7425    FIXME: We need to handle the SHF_MIPS_GPREL flag, but I'm not sure
7426    how to.  */
7427
7428 bfd_boolean
7429 _bfd_mips_elf_section_from_shdr (bfd *abfd,
7430                                  Elf_Internal_Shdr *hdr,
7431                                  const char *name,
7432                                  int shindex)
7433 {
7434   flagword flags = 0;
7435
7436   /* There ought to be a place to keep ELF backend specific flags, but
7437      at the moment there isn't one.  We just keep track of the
7438      sections by their name, instead.  Fortunately, the ABI gives
7439      suggested names for all the MIPS specific sections, so we will
7440      probably get away with this.  */
7441   switch (hdr->sh_type)
7442     {
7443     case SHT_MIPS_LIBLIST:
7444       if (strcmp (name, ".liblist") != 0)
7445         return FALSE;
7446       break;
7447     case SHT_MIPS_MSYM:
7448       if (strcmp (name, ".msym") != 0)
7449         return FALSE;
7450       break;
7451     case SHT_MIPS_CONFLICT:
7452       if (strcmp (name, ".conflict") != 0)
7453         return FALSE;
7454       break;
7455     case SHT_MIPS_GPTAB:
7456       if (! CONST_STRNEQ (name, ".gptab."))
7457         return FALSE;
7458       break;
7459     case SHT_MIPS_UCODE:
7460       if (strcmp (name, ".ucode") != 0)
7461         return FALSE;
7462       break;
7463     case SHT_MIPS_DEBUG:
7464       if (strcmp (name, ".mdebug") != 0)
7465         return FALSE;
7466       flags = SEC_DEBUGGING;
7467       break;
7468     case SHT_MIPS_REGINFO:
7469       if (strcmp (name, ".reginfo") != 0
7470           || hdr->sh_size != sizeof (Elf32_External_RegInfo))
7471         return FALSE;
7472       flags = (SEC_LINK_ONCE | SEC_LINK_DUPLICATES_SAME_SIZE);
7473       break;
7474     case SHT_MIPS_IFACE:
7475       if (strcmp (name, ".MIPS.interfaces") != 0)
7476         return FALSE;
7477       break;
7478     case SHT_MIPS_CONTENT:
7479       if (! CONST_STRNEQ (name, ".MIPS.content"))
7480         return FALSE;
7481       break;
7482     case SHT_MIPS_OPTIONS:
7483       if (!MIPS_ELF_OPTIONS_SECTION_NAME_P (name))
7484         return FALSE;
7485       break;
7486     case SHT_MIPS_ABIFLAGS:
7487       if (!MIPS_ELF_ABIFLAGS_SECTION_NAME_P (name))
7488         return FALSE;
7489       flags = (SEC_LINK_ONCE | SEC_LINK_DUPLICATES_SAME_SIZE);
7490       break;
7491     case SHT_MIPS_DWARF:
7492       if (! CONST_STRNEQ (name, ".debug_")
7493           && ! CONST_STRNEQ (name, ".zdebug_"))
7494         return FALSE;
7495       break;
7496     case SHT_MIPS_SYMBOL_LIB:
7497       if (strcmp (name, ".MIPS.symlib") != 0)
7498         return FALSE;
7499       break;
7500     case SHT_MIPS_EVENTS:
7501       if (! CONST_STRNEQ (name, ".MIPS.events")
7502           && ! CONST_STRNEQ (name, ".MIPS.post_rel"))
7503         return FALSE;
7504       break;
7505     case SHT_MIPS_XHASH:
7506       if (strcmp (name, ".MIPS.xhash") != 0)
7507         return FALSE;
7508     default:
7509       break;
7510     }
7511
7512   if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
7513     return FALSE;
7514
7515   if (flags)
7516     {
7517       if (!bfd_set_section_flags (hdr->bfd_section,
7518                                   (bfd_section_flags (hdr->bfd_section)
7519                                    | flags)))
7520         return FALSE;
7521     }
7522
7523   if (hdr->sh_type == SHT_MIPS_ABIFLAGS)
7524     {
7525       Elf_External_ABIFlags_v0 ext;
7526
7527       if (! bfd_get_section_contents (abfd, hdr->bfd_section,
7528                                       &ext, 0, sizeof ext))
7529         return FALSE;
7530       bfd_mips_elf_swap_abiflags_v0_in (abfd, &ext,
7531                                         &mips_elf_tdata (abfd)->abiflags);
7532       if (mips_elf_tdata (abfd)->abiflags.version != 0)
7533         return FALSE;
7534       mips_elf_tdata (abfd)->abiflags_valid = TRUE;
7535     }
7536
7537   /* FIXME: We should record sh_info for a .gptab section.  */
7538
7539   /* For a .reginfo section, set the gp value in the tdata information
7540      from the contents of this section.  We need the gp value while
7541      processing relocs, so we just get it now.  The .reginfo section
7542      is not used in the 64-bit MIPS ELF ABI.  */
7543   if (hdr->sh_type == SHT_MIPS_REGINFO)
7544     {
7545       Elf32_External_RegInfo ext;
7546       Elf32_RegInfo s;
7547
7548       if (! bfd_get_section_contents (abfd, hdr->bfd_section,
7549                                       &ext, 0, sizeof ext))
7550         return FALSE;
7551       bfd_mips_elf32_swap_reginfo_in (abfd, &ext, &s);
7552       elf_gp (abfd) = s.ri_gp_value;
7553     }
7554
7555   /* For a SHT_MIPS_OPTIONS section, look for a ODK_REGINFO entry, and
7556      set the gp value based on what we find.  We may see both
7557      SHT_MIPS_REGINFO and SHT_MIPS_OPTIONS/ODK_REGINFO; in that case,
7558      they should agree.  */
7559   if (hdr->sh_type == SHT_MIPS_OPTIONS)
7560     {
7561       bfd_byte *contents, *l, *lend;
7562
7563       contents = bfd_malloc (hdr->sh_size);
7564       if (contents == NULL)
7565         return FALSE;
7566       if (! bfd_get_section_contents (abfd, hdr->bfd_section, contents,
7567                                       0, hdr->sh_size))
7568         {
7569           free (contents);
7570           return FALSE;
7571         }
7572       l = contents;
7573       lend = contents + hdr->sh_size;
7574       while (l + sizeof (Elf_External_Options) <= lend)
7575         {
7576           Elf_Internal_Options intopt;
7577
7578           bfd_mips_elf_swap_options_in (abfd, (Elf_External_Options *) l,
7579                                         &intopt);
7580           if (intopt.size < sizeof (Elf_External_Options))
7581             {
7582               _bfd_error_handler
7583                 /* xgettext:c-format */
7584                 (_("%pB: warning: bad `%s' option size %u smaller than"
7585                    " its header"),
7586                 abfd, MIPS_ELF_OPTIONS_SECTION_NAME (abfd), intopt.size);
7587               break;
7588             }
7589           if (ABI_64_P (abfd) && intopt.kind == ODK_REGINFO)
7590             {
7591               Elf64_Internal_RegInfo intreg;
7592
7593               bfd_mips_elf64_swap_reginfo_in
7594                 (abfd,
7595                  ((Elf64_External_RegInfo *)
7596                   (l + sizeof (Elf_External_Options))),
7597                  &intreg);
7598               elf_gp (abfd) = intreg.ri_gp_value;
7599             }
7600           else if (intopt.kind == ODK_REGINFO)
7601             {
7602               Elf32_RegInfo intreg;
7603
7604               bfd_mips_elf32_swap_reginfo_in
7605                 (abfd,
7606                  ((Elf32_External_RegInfo *)
7607                   (l + sizeof (Elf_External_Options))),
7608                  &intreg);
7609               elf_gp (abfd) = intreg.ri_gp_value;
7610             }
7611           l += intopt.size;
7612         }
7613       free (contents);
7614     }
7615
7616   return TRUE;
7617 }
7618
7619 /* Set the correct type for a MIPS ELF section.  We do this by the
7620    section name, which is a hack, but ought to work.  This routine is
7621    used by both the 32-bit and the 64-bit ABI.  */
7622
7623 bfd_boolean
7624 _bfd_mips_elf_fake_sections (bfd *abfd, Elf_Internal_Shdr *hdr, asection *sec)
7625 {
7626   const char *name = bfd_section_name (sec);
7627
7628   if (strcmp (name, ".liblist") == 0)
7629     {
7630       hdr->sh_type = SHT_MIPS_LIBLIST;
7631       hdr->sh_info = sec->size / sizeof (Elf32_Lib);
7632       /* The sh_link field is set in final_write_processing.  */
7633     }
7634   else if (strcmp (name, ".conflict") == 0)
7635     hdr->sh_type = SHT_MIPS_CONFLICT;
7636   else if (CONST_STRNEQ (name, ".gptab."))
7637     {
7638       hdr->sh_type = SHT_MIPS_GPTAB;
7639       hdr->sh_entsize = sizeof (Elf32_External_gptab);
7640       /* The sh_info field is set in final_write_processing.  */
7641     }
7642   else if (strcmp (name, ".ucode") == 0)
7643     hdr->sh_type = SHT_MIPS_UCODE;
7644   else if (strcmp (name, ".mdebug") == 0)
7645     {
7646       hdr->sh_type = SHT_MIPS_DEBUG;
7647       /* In a shared object on IRIX 5.3, the .mdebug section has an
7648          entsize of 0.  FIXME: Does this matter?  */
7649       if (SGI_COMPAT (abfd) && (abfd->flags & DYNAMIC) != 0)
7650         hdr->sh_entsize = 0;
7651       else
7652         hdr->sh_entsize = 1;
7653     }
7654   else if (strcmp (name, ".reginfo") == 0)
7655     {
7656       hdr->sh_type = SHT_MIPS_REGINFO;
7657       /* In a shared object on IRIX 5.3, the .reginfo section has an
7658          entsize of 0x18.  FIXME: Does this matter?  */
7659       if (SGI_COMPAT (abfd))
7660         {
7661           if ((abfd->flags & DYNAMIC) != 0)
7662             hdr->sh_entsize = sizeof (Elf32_External_RegInfo);
7663           else
7664             hdr->sh_entsize = 1;
7665         }
7666       else
7667         hdr->sh_entsize = sizeof (Elf32_External_RegInfo);
7668     }
7669   else if (SGI_COMPAT (abfd)
7670            && (strcmp (name, ".hash") == 0
7671                || strcmp (name, ".dynamic") == 0
7672                || strcmp (name, ".dynstr") == 0))
7673     {
7674       if (SGI_COMPAT (abfd))
7675         hdr->sh_entsize = 0;
7676 #if 0
7677       /* This isn't how the IRIX6 linker behaves.  */
7678       hdr->sh_info = SIZEOF_MIPS_DYNSYM_SECNAMES;
7679 #endif
7680     }
7681   else if (strcmp (name, ".got") == 0
7682            || strcmp (name, ".srdata") == 0
7683            || strcmp (name, ".sdata") == 0
7684            || strcmp (name, ".sbss") == 0
7685            || strcmp (name, ".lit4") == 0
7686            || strcmp (name, ".lit8") == 0)
7687     hdr->sh_flags |= SHF_MIPS_GPREL;
7688   else if (strcmp (name, ".MIPS.interfaces") == 0)
7689     {
7690       hdr->sh_type = SHT_MIPS_IFACE;
7691       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7692     }
7693   else if (CONST_STRNEQ (name, ".MIPS.content"))
7694     {
7695       hdr->sh_type = SHT_MIPS_CONTENT;
7696       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7697       /* The sh_info field is set in final_write_processing.  */
7698     }
7699   else if (MIPS_ELF_OPTIONS_SECTION_NAME_P (name))
7700     {
7701       hdr->sh_type = SHT_MIPS_OPTIONS;
7702       hdr->sh_entsize = 1;
7703       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7704     }
7705   else if (CONST_STRNEQ (name, ".MIPS.abiflags"))
7706     {
7707       hdr->sh_type = SHT_MIPS_ABIFLAGS;
7708       hdr->sh_entsize = sizeof (Elf_External_ABIFlags_v0);
7709     }
7710   else if (CONST_STRNEQ (name, ".debug_")
7711            || CONST_STRNEQ (name, ".zdebug_"))
7712     {
7713       hdr->sh_type = SHT_MIPS_DWARF;
7714
7715       /* Irix facilities such as libexc expect a single .debug_frame
7716          per executable, the system ones have NOSTRIP set and the linker
7717          doesn't merge sections with different flags so ...  */
7718       if (SGI_COMPAT (abfd) && CONST_STRNEQ (name, ".debug_frame"))
7719         hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7720     }
7721   else if (strcmp (name, ".MIPS.symlib") == 0)
7722     {
7723       hdr->sh_type = SHT_MIPS_SYMBOL_LIB;
7724       /* The sh_link and sh_info fields are set in
7725          final_write_processing.  */
7726     }
7727   else if (CONST_STRNEQ (name, ".MIPS.events")
7728            || CONST_STRNEQ (name, ".MIPS.post_rel"))
7729     {
7730       hdr->sh_type = SHT_MIPS_EVENTS;
7731       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7732       /* The sh_link field is set in final_write_processing.  */
7733     }
7734   else if (strcmp (name, ".msym") == 0)
7735     {
7736       hdr->sh_type = SHT_MIPS_MSYM;
7737       hdr->sh_flags |= SHF_ALLOC;
7738       hdr->sh_entsize = 8;
7739     }
7740   else if (strcmp (name, ".MIPS.xhash") == 0)
7741     {
7742       hdr->sh_type = SHT_MIPS_XHASH;
7743       hdr->sh_flags |= SHF_ALLOC;
7744       hdr->sh_entsize = get_elf_backend_data(abfd)->s->arch_size == 64 ? 0 : 4;
7745     }
7746
7747   /* The generic elf_fake_sections will set up REL_HDR using the default
7748    kind of relocations.  We used to set up a second header for the
7749    non-default kind of relocations here, but only NewABI would use
7750    these, and the IRIX ld doesn't like resulting empty RELA sections.
7751    Thus we create those header only on demand now.  */
7752
7753   return TRUE;
7754 }
7755
7756 /* Given a BFD section, try to locate the corresponding ELF section
7757    index.  This is used by both the 32-bit and the 64-bit ABI.
7758    Actually, it's not clear to me that the 64-bit ABI supports these,
7759    but for non-PIC objects we will certainly want support for at least
7760    the .scommon section.  */
7761
7762 bfd_boolean
7763 _bfd_mips_elf_section_from_bfd_section (bfd *abfd ATTRIBUTE_UNUSED,
7764                                         asection *sec, int *retval)
7765 {
7766   if (strcmp (bfd_section_name (sec), ".scommon") == 0)
7767     {
7768       *retval = SHN_MIPS_SCOMMON;
7769       return TRUE;
7770     }
7771   if (strcmp (bfd_section_name (sec), ".acommon") == 0)
7772     {
7773       *retval = SHN_MIPS_ACOMMON;
7774       return TRUE;
7775     }
7776   return FALSE;
7777 }
7778 \f
7779 /* Hook called by the linker routine which adds symbols from an object
7780    file.  We must handle the special MIPS section numbers here.  */
7781
7782 bfd_boolean
7783 _bfd_mips_elf_add_symbol_hook (bfd *abfd, struct bfd_link_info *info,
7784                                Elf_Internal_Sym *sym, const char **namep,
7785                                flagword *flagsp ATTRIBUTE_UNUSED,
7786                                asection **secp, bfd_vma *valp)
7787 {
7788   if (SGI_COMPAT (abfd)
7789       && (abfd->flags & DYNAMIC) != 0
7790       && strcmp (*namep, "_rld_new_interface") == 0)
7791     {
7792       /* Skip IRIX5 rld entry name.  */
7793       *namep = NULL;
7794       return TRUE;
7795     }
7796
7797   /* Shared objects may have a dynamic symbol '_gp_disp' defined as
7798      a SECTION *ABS*.  This causes ld to think it can resolve _gp_disp
7799      by setting a DT_NEEDED for the shared object.  Since _gp_disp is
7800      a magic symbol resolved by the linker, we ignore this bogus definition
7801      of _gp_disp.  New ABI objects do not suffer from this problem so this
7802      is not done for them. */
7803   if (!NEWABI_P(abfd)
7804       && (sym->st_shndx == SHN_ABS)
7805       && (strcmp (*namep, "_gp_disp") == 0))
7806     {
7807       *namep = NULL;
7808       return TRUE;
7809     }
7810
7811   switch (sym->st_shndx)
7812     {
7813     case SHN_COMMON:
7814       /* Common symbols less than the GP size are automatically
7815          treated as SHN_MIPS_SCOMMON symbols.  */
7816       if (sym->st_size > elf_gp_size (abfd)
7817           || ELF_ST_TYPE (sym->st_info) == STT_TLS
7818           || IRIX_COMPAT (abfd) == ict_irix6)
7819         break;
7820       /* Fall through.  */
7821     case SHN_MIPS_SCOMMON:
7822       *secp = bfd_make_section_old_way (abfd, ".scommon");
7823       (*secp)->flags |= SEC_IS_COMMON;
7824       *valp = sym->st_size;
7825       break;
7826
7827     case SHN_MIPS_TEXT:
7828       /* This section is used in a shared object.  */
7829       if (mips_elf_tdata (abfd)->elf_text_section == NULL)
7830         {
7831           asymbol *elf_text_symbol;
7832           asection *elf_text_section;
7833           bfd_size_type amt = sizeof (asection);
7834
7835           elf_text_section = bfd_zalloc (abfd, amt);
7836           if (elf_text_section == NULL)
7837             return FALSE;
7838
7839           amt = sizeof (asymbol);
7840           elf_text_symbol = bfd_zalloc (abfd, amt);
7841           if (elf_text_symbol == NULL)
7842             return FALSE;
7843
7844           /* Initialize the section.  */
7845
7846           mips_elf_tdata (abfd)->elf_text_section = elf_text_section;
7847           mips_elf_tdata (abfd)->elf_text_symbol = elf_text_symbol;
7848
7849           elf_text_section->symbol = elf_text_symbol;
7850           elf_text_section->symbol_ptr_ptr = &mips_elf_tdata (abfd)->elf_text_symbol;
7851
7852           elf_text_section->name = ".text";
7853           elf_text_section->flags = SEC_NO_FLAGS;
7854           elf_text_section->output_section = NULL;
7855           elf_text_section->owner = abfd;
7856           elf_text_symbol->name = ".text";
7857           elf_text_symbol->flags = BSF_SECTION_SYM | BSF_DYNAMIC;
7858           elf_text_symbol->section = elf_text_section;
7859         }
7860       /* This code used to do *secp = bfd_und_section_ptr if
7861          bfd_link_pic (info).  I don't know why, and that doesn't make sense,
7862          so I took it out.  */
7863       *secp = mips_elf_tdata (abfd)->elf_text_section;
7864       break;
7865
7866     case SHN_MIPS_ACOMMON:
7867       /* Fall through. XXX Can we treat this as allocated data?  */
7868     case SHN_MIPS_DATA:
7869       /* This section is used in a shared object.  */
7870       if (mips_elf_tdata (abfd)->elf_data_section == NULL)
7871         {
7872           asymbol *elf_data_symbol;
7873           asection *elf_data_section;
7874           bfd_size_type amt = sizeof (asection);
7875
7876           elf_data_section = bfd_zalloc (abfd, amt);
7877           if (elf_data_section == NULL)
7878             return FALSE;
7879
7880           amt = sizeof (asymbol);
7881           elf_data_symbol = bfd_zalloc (abfd, amt);
7882           if (elf_data_symbol == NULL)
7883             return FALSE;
7884
7885           /* Initialize the section.  */
7886
7887           mips_elf_tdata (abfd)->elf_data_section = elf_data_section;
7888           mips_elf_tdata (abfd)->elf_data_symbol = elf_data_symbol;
7889
7890           elf_data_section->symbol = elf_data_symbol;
7891           elf_data_section->symbol_ptr_ptr = &mips_elf_tdata (abfd)->elf_data_symbol;
7892
7893           elf_data_section->name = ".data";
7894           elf_data_section->flags = SEC_NO_FLAGS;
7895           elf_data_section->output_section = NULL;
7896           elf_data_section->owner = abfd;
7897           elf_data_symbol->name = ".data";
7898           elf_data_symbol->flags = BSF_SECTION_SYM | BSF_DYNAMIC;
7899           elf_data_symbol->section = elf_data_section;
7900         }
7901       /* This code used to do *secp = bfd_und_section_ptr if
7902          bfd_link_pic (info).  I don't know why, and that doesn't make sense,
7903          so I took it out.  */
7904       *secp = mips_elf_tdata (abfd)->elf_data_section;
7905       break;
7906
7907     case SHN_MIPS_SUNDEFINED:
7908       *secp = bfd_und_section_ptr;
7909       break;
7910     }
7911
7912   if (SGI_COMPAT (abfd)
7913       && ! bfd_link_pic (info)
7914       && info->output_bfd->xvec == abfd->xvec
7915       && strcmp (*namep, "__rld_obj_head") == 0)
7916     {
7917       struct elf_link_hash_entry *h;
7918       struct bfd_link_hash_entry *bh;
7919
7920       /* Mark __rld_obj_head as dynamic.  */
7921       bh = NULL;
7922       if (! (_bfd_generic_link_add_one_symbol
7923              (info, abfd, *namep, BSF_GLOBAL, *secp, *valp, NULL, FALSE,
7924               get_elf_backend_data (abfd)->collect, &bh)))
7925         return FALSE;
7926
7927       h = (struct elf_link_hash_entry *) bh;
7928       h->non_elf = 0;
7929       h->def_regular = 1;
7930       h->type = STT_OBJECT;
7931
7932       if (! bfd_elf_link_record_dynamic_symbol (info, h))
7933         return FALSE;
7934
7935       mips_elf_hash_table (info)->use_rld_obj_head = TRUE;
7936       mips_elf_hash_table (info)->rld_symbol = h;
7937     }
7938
7939   /* If this is a mips16 text symbol, add 1 to the value to make it
7940      odd.  This will cause something like .word SYM to come up with
7941      the right value when it is loaded into the PC.  */
7942   if (ELF_ST_IS_COMPRESSED (sym->st_other))
7943     ++*valp;
7944
7945   return TRUE;
7946 }
7947
7948 /* This hook function is called before the linker writes out a global
7949    symbol.  We mark symbols as small common if appropriate.  This is
7950    also where we undo the increment of the value for a mips16 symbol.  */
7951
7952 int
7953 _bfd_mips_elf_link_output_symbol_hook
7954   (struct bfd_link_info *info ATTRIBUTE_UNUSED,
7955    const char *name ATTRIBUTE_UNUSED, Elf_Internal_Sym *sym,
7956    asection *input_sec, struct elf_link_hash_entry *h ATTRIBUTE_UNUSED)
7957 {
7958   /* If we see a common symbol, which implies a relocatable link, then
7959      if a symbol was small common in an input file, mark it as small
7960      common in the output file.  */
7961   if (sym->st_shndx == SHN_COMMON
7962       && strcmp (input_sec->name, ".scommon") == 0)
7963     sym->st_shndx = SHN_MIPS_SCOMMON;
7964
7965   if (ELF_ST_IS_COMPRESSED (sym->st_other))
7966     sym->st_value &= ~1;
7967
7968   return 1;
7969 }
7970 \f
7971 /* Functions for the dynamic linker.  */
7972
7973 /* Create dynamic sections when linking against a dynamic object.  */
7974
7975 bfd_boolean
7976 _bfd_mips_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
7977 {
7978   struct elf_link_hash_entry *h;
7979   struct bfd_link_hash_entry *bh;
7980   flagword flags;
7981   register asection *s;
7982   const char * const *namep;
7983   struct mips_elf_link_hash_table *htab;
7984
7985   htab = mips_elf_hash_table (info);
7986   BFD_ASSERT (htab != NULL);
7987
7988   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
7989            | SEC_LINKER_CREATED | SEC_READONLY);
7990
7991   /* The psABI requires a read-only .dynamic section, but the VxWorks
7992      EABI doesn't.  */
7993   if (!htab->is_vxworks)
7994     {
7995       s = bfd_get_linker_section (abfd, ".dynamic");
7996       if (s != NULL)
7997         {
7998           if (!bfd_set_section_flags (s, flags))
7999             return FALSE;
8000         }
8001     }
8002
8003   /* We need to create .got section.  */
8004   if (!mips_elf_create_got_section (abfd, info))
8005     return FALSE;
8006
8007   if (! mips_elf_rel_dyn_section (info, TRUE))
8008     return FALSE;
8009
8010   /* Create .stub section.  */
8011   s = bfd_make_section_anyway_with_flags (abfd,
8012                                           MIPS_ELF_STUB_SECTION_NAME (abfd),
8013                                           flags | SEC_CODE);
8014   if (s == NULL
8015       || !bfd_set_section_alignment (s, MIPS_ELF_LOG_FILE_ALIGN (abfd)))
8016     return FALSE;
8017   htab->sstubs = s;
8018
8019   if (!mips_elf_hash_table (info)->use_rld_obj_head
8020       && bfd_link_executable (info)
8021       && bfd_get_linker_section (abfd, ".rld_map") == NULL)
8022     {
8023       s = bfd_make_section_anyway_with_flags (abfd, ".rld_map",
8024                                               flags &~ (flagword) SEC_READONLY);
8025       if (s == NULL
8026           || !bfd_set_section_alignment (s, MIPS_ELF_LOG_FILE_ALIGN (abfd)))
8027         return FALSE;
8028     }
8029
8030   /* Create .MIPS.xhash section.  */
8031   if (info->emit_gnu_hash)
8032     s = bfd_make_section_anyway_with_flags (abfd, ".MIPS.xhash",
8033                                             flags | SEC_READONLY);
8034
8035   /* On IRIX5, we adjust add some additional symbols and change the
8036      alignments of several sections.  There is no ABI documentation
8037      indicating that this is necessary on IRIX6, nor any evidence that
8038      the linker takes such action.  */
8039   if (IRIX_COMPAT (abfd) == ict_irix5)
8040     {
8041       for (namep = mips_elf_dynsym_rtproc_names; *namep != NULL; namep++)
8042         {
8043           bh = NULL;
8044           if (! (_bfd_generic_link_add_one_symbol
8045                  (info, abfd, *namep, BSF_GLOBAL, bfd_und_section_ptr, 0,
8046                   NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
8047             return FALSE;
8048
8049           h = (struct elf_link_hash_entry *) bh;
8050           h->mark = 1;
8051           h->non_elf = 0;
8052           h->def_regular = 1;
8053           h->type = STT_SECTION;
8054
8055           if (! bfd_elf_link_record_dynamic_symbol (info, h))
8056             return FALSE;
8057         }
8058
8059       /* We need to create a .compact_rel section.  */
8060       if (SGI_COMPAT (abfd))
8061         {
8062           if (!mips_elf_create_compact_rel_section (abfd, info))
8063             return FALSE;
8064         }
8065
8066       /* Change alignments of some sections.  */
8067       s = bfd_get_linker_section (abfd, ".hash");
8068       if (s != NULL)
8069         bfd_set_section_alignment (s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
8070
8071       s = bfd_get_linker_section (abfd, ".dynsym");
8072       if (s != NULL)
8073         bfd_set_section_alignment (s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
8074
8075       s = bfd_get_linker_section (abfd, ".dynstr");
8076       if (s != NULL)
8077         bfd_set_section_alignment (s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
8078
8079       /* ??? */
8080       s = bfd_get_section_by_name (abfd, ".reginfo");
8081       if (s != NULL)
8082         bfd_set_section_alignment (s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
8083
8084       s = bfd_get_linker_section (abfd, ".dynamic");
8085       if (s != NULL)
8086         bfd_set_section_alignment (s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
8087     }
8088
8089   if (bfd_link_executable (info))
8090     {
8091       const char *name;
8092
8093       name = SGI_COMPAT (abfd) ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING";
8094       bh = NULL;
8095       if (!(_bfd_generic_link_add_one_symbol
8096             (info, abfd, name, BSF_GLOBAL, bfd_abs_section_ptr, 0,
8097              NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
8098         return FALSE;
8099
8100       h = (struct elf_link_hash_entry *) bh;
8101       h->non_elf = 0;
8102       h->def_regular = 1;
8103       h->type = STT_SECTION;
8104
8105       if (! bfd_elf_link_record_dynamic_symbol (info, h))
8106         return FALSE;
8107
8108       if (! mips_elf_hash_table (info)->use_rld_obj_head)
8109         {
8110           /* __rld_map is a four byte word located in the .data section
8111              and is filled in by the rtld to contain a pointer to
8112              the _r_debug structure. Its symbol value will be set in
8113              _bfd_mips_elf_finish_dynamic_symbol.  */
8114           s = bfd_get_linker_section (abfd, ".rld_map");
8115           BFD_ASSERT (s != NULL);
8116
8117           name = SGI_COMPAT (abfd) ? "__rld_map" : "__RLD_MAP";
8118           bh = NULL;
8119           if (!(_bfd_generic_link_add_one_symbol
8120                 (info, abfd, name, BSF_GLOBAL, s, 0, NULL, FALSE,
8121                  get_elf_backend_data (abfd)->collect, &bh)))
8122             return FALSE;
8123
8124           h = (struct elf_link_hash_entry *) bh;
8125           h->non_elf = 0;
8126           h->def_regular = 1;
8127           h->type = STT_OBJECT;
8128
8129           if (! bfd_elf_link_record_dynamic_symbol (info, h))
8130             return FALSE;
8131           mips_elf_hash_table (info)->rld_symbol = h;
8132         }
8133     }
8134
8135   /* Create the .plt, .rel(a).plt, .dynbss and .rel(a).bss sections.
8136      Also, on VxWorks, create the _PROCEDURE_LINKAGE_TABLE_ symbol.  */
8137   if (!_bfd_elf_create_dynamic_sections (abfd, info))
8138     return FALSE;
8139
8140   /* Do the usual VxWorks handling.  */
8141   if (htab->is_vxworks
8142       && !elf_vxworks_create_dynamic_sections (abfd, info, &htab->srelplt2))
8143     return FALSE;
8144
8145   return TRUE;
8146 }
8147 \f
8148 /* Return true if relocation REL against section SEC is a REL rather than
8149    RELA relocation.  RELOCS is the first relocation in the section and
8150    ABFD is the bfd that contains SEC.  */
8151
8152 static bfd_boolean
8153 mips_elf_rel_relocation_p (bfd *abfd, asection *sec,
8154                            const Elf_Internal_Rela *relocs,
8155                            const Elf_Internal_Rela *rel)
8156 {
8157   Elf_Internal_Shdr *rel_hdr;
8158   const struct elf_backend_data *bed;
8159
8160   /* To determine which flavor of relocation this is, we depend on the
8161      fact that the INPUT_SECTION's REL_HDR is read before RELA_HDR.  */
8162   rel_hdr = elf_section_data (sec)->rel.hdr;
8163   if (rel_hdr == NULL)
8164     return FALSE;
8165   bed = get_elf_backend_data (abfd);
8166   return ((size_t) (rel - relocs)
8167           < NUM_SHDR_ENTRIES (rel_hdr) * bed->s->int_rels_per_ext_rel);
8168 }
8169
8170 /* Read the addend for REL relocation REL, which belongs to bfd ABFD.
8171    HOWTO is the relocation's howto and CONTENTS points to the contents
8172    of the section that REL is against.  */
8173
8174 static bfd_vma
8175 mips_elf_read_rel_addend (bfd *abfd, const Elf_Internal_Rela *rel,
8176                           reloc_howto_type *howto, bfd_byte *contents)
8177 {
8178   bfd_byte *location;
8179   unsigned int r_type;
8180   bfd_vma addend;
8181   bfd_vma bytes;
8182
8183   r_type = ELF_R_TYPE (abfd, rel->r_info);
8184   location = contents + rel->r_offset;
8185
8186   /* Get the addend, which is stored in the input file.  */
8187   _bfd_mips_elf_reloc_unshuffle (abfd, r_type, FALSE, location);
8188   bytes = mips_elf_obtain_contents (howto, rel, abfd, contents);
8189   _bfd_mips_elf_reloc_shuffle (abfd, r_type, FALSE, location);
8190
8191   addend = bytes & howto->src_mask;
8192
8193   /* Shift is 2, unusually, for microMIPS JALX.  Adjust the addend
8194      accordingly.  */
8195   if (r_type == R_MICROMIPS_26_S1 && (bytes >> 26) == 0x3c)
8196     addend <<= 1;
8197
8198   return addend;
8199 }
8200
8201 /* REL is a relocation in ABFD that needs a partnering LO16 relocation
8202    and *ADDEND is the addend for REL itself.  Look for the LO16 relocation
8203    and update *ADDEND with the final addend.  Return true on success
8204    or false if the LO16 could not be found.  RELEND is the exclusive
8205    upper bound on the relocations for REL's section.  */
8206
8207 static bfd_boolean
8208 mips_elf_add_lo16_rel_addend (bfd *abfd,
8209                               const Elf_Internal_Rela *rel,
8210                               const Elf_Internal_Rela *relend,
8211                               bfd_byte *contents, bfd_vma *addend)
8212 {
8213   unsigned int r_type, lo16_type;
8214   const Elf_Internal_Rela *lo16_relocation;
8215   reloc_howto_type *lo16_howto;
8216   bfd_vma l;
8217
8218   r_type = ELF_R_TYPE (abfd, rel->r_info);
8219   if (mips16_reloc_p (r_type))
8220     lo16_type = R_MIPS16_LO16;
8221   else if (micromips_reloc_p (r_type))
8222     lo16_type = R_MICROMIPS_LO16;
8223   else if (r_type == R_MIPS_PCHI16)
8224     lo16_type = R_MIPS_PCLO16;
8225   else
8226     lo16_type = R_MIPS_LO16;
8227
8228   /* The combined value is the sum of the HI16 addend, left-shifted by
8229      sixteen bits, and the LO16 addend, sign extended.  (Usually, the
8230      code does a `lui' of the HI16 value, and then an `addiu' of the
8231      LO16 value.)
8232
8233      Scan ahead to find a matching LO16 relocation.
8234
8235      According to the MIPS ELF ABI, the R_MIPS_LO16 relocation must
8236      be immediately following.  However, for the IRIX6 ABI, the next
8237      relocation may be a composed relocation consisting of several
8238      relocations for the same address.  In that case, the R_MIPS_LO16
8239      relocation may occur as one of these.  We permit a similar
8240      extension in general, as that is useful for GCC.
8241
8242      In some cases GCC dead code elimination removes the LO16 but keeps
8243      the corresponding HI16.  This is strictly speaking a violation of
8244      the ABI but not immediately harmful.  */
8245   lo16_relocation = mips_elf_next_relocation (abfd, lo16_type, rel, relend);
8246   if (lo16_relocation == NULL)
8247     return FALSE;
8248
8249   /* Obtain the addend kept there.  */
8250   lo16_howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, lo16_type, FALSE);
8251   l = mips_elf_read_rel_addend (abfd, lo16_relocation, lo16_howto, contents);
8252
8253   l <<= lo16_howto->rightshift;
8254   l = _bfd_mips_elf_sign_extend (l, 16);
8255
8256   *addend <<= 16;
8257   *addend += l;
8258   return TRUE;
8259 }
8260
8261 /* Try to read the contents of section SEC in bfd ABFD.  Return true and
8262    store the contents in *CONTENTS on success.  Assume that *CONTENTS
8263    already holds the contents if it is nonull on entry.  */
8264
8265 static bfd_boolean
8266 mips_elf_get_section_contents (bfd *abfd, asection *sec, bfd_byte **contents)
8267 {
8268   if (*contents)
8269     return TRUE;
8270
8271   /* Get cached copy if it exists.  */
8272   if (elf_section_data (sec)->this_hdr.contents != NULL)
8273     {
8274       *contents = elf_section_data (sec)->this_hdr.contents;
8275       return TRUE;
8276     }
8277
8278   return bfd_malloc_and_get_section (abfd, sec, contents);
8279 }
8280
8281 /* Make a new PLT record to keep internal data.  */
8282
8283 static struct plt_entry *
8284 mips_elf_make_plt_record (bfd *abfd)
8285 {
8286   struct plt_entry *entry;
8287
8288   entry = bfd_zalloc (abfd, sizeof (*entry));
8289   if (entry == NULL)
8290     return NULL;
8291
8292   entry->stub_offset = MINUS_ONE;
8293   entry->mips_offset = MINUS_ONE;
8294   entry->comp_offset = MINUS_ONE;
8295   entry->gotplt_index = MINUS_ONE;
8296   return entry;
8297 }
8298
8299 /* Define the special `__gnu_absolute_zero' symbol.  We only need this
8300    for PIC code, as otherwise there is no load-time relocation involved
8301    and local GOT entries whose value is zero at static link time will
8302    retain their value at load time.  */
8303
8304 static bfd_boolean
8305 mips_elf_define_absolute_zero (bfd *abfd, struct bfd_link_info *info,
8306                                struct mips_elf_link_hash_table *htab,
8307                                unsigned int r_type)
8308 {
8309   union
8310     {
8311       struct elf_link_hash_entry *eh;
8312       struct bfd_link_hash_entry *bh;
8313     }
8314   hzero;
8315
8316   BFD_ASSERT (!htab->use_absolute_zero);
8317   BFD_ASSERT (bfd_link_pic (info));
8318
8319   hzero.bh = NULL;
8320   if (!_bfd_generic_link_add_one_symbol (info, abfd, "__gnu_absolute_zero",
8321                                          BSF_GLOBAL, bfd_abs_section_ptr, 0,
8322                                          NULL, FALSE, FALSE, &hzero.bh))
8323     return FALSE;
8324
8325   BFD_ASSERT (hzero.bh != NULL);
8326   hzero.eh->size = 0;
8327   hzero.eh->type = STT_NOTYPE;
8328   hzero.eh->other = STV_PROTECTED;
8329   hzero.eh->def_regular = 1;
8330   hzero.eh->non_elf = 0;
8331
8332   if (!mips_elf_record_global_got_symbol (hzero.eh, abfd, info, TRUE, r_type))
8333     return FALSE;
8334
8335   htab->use_absolute_zero = TRUE;
8336
8337   return TRUE;
8338 }
8339
8340 /* Look through the relocs for a section during the first phase, and
8341    allocate space in the global offset table and record the need for
8342    standard MIPS and compressed procedure linkage table entries.  */
8343
8344 bfd_boolean
8345 _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
8346                             asection *sec, const Elf_Internal_Rela *relocs)
8347 {
8348   const char *name;
8349   bfd *dynobj;
8350   Elf_Internal_Shdr *symtab_hdr;
8351   struct elf_link_hash_entry **sym_hashes;
8352   size_t extsymoff;
8353   const Elf_Internal_Rela *rel;
8354   const Elf_Internal_Rela *rel_end;
8355   asection *sreloc;
8356   const struct elf_backend_data *bed;
8357   struct mips_elf_link_hash_table *htab;
8358   bfd_byte *contents;
8359   bfd_vma addend;
8360   reloc_howto_type *howto;
8361
8362   if (bfd_link_relocatable (info))
8363     return TRUE;
8364
8365   htab = mips_elf_hash_table (info);
8366   BFD_ASSERT (htab != NULL);
8367
8368   dynobj = elf_hash_table (info)->dynobj;
8369   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
8370   sym_hashes = elf_sym_hashes (abfd);
8371   extsymoff = (elf_bad_symtab (abfd)) ? 0 : symtab_hdr->sh_info;
8372
8373   bed = get_elf_backend_data (abfd);
8374   rel_end = relocs + sec->reloc_count;
8375
8376   /* Check for the mips16 stub sections.  */
8377
8378   name = bfd_section_name (sec);
8379   if (FN_STUB_P (name))
8380     {
8381       unsigned long r_symndx;
8382
8383       /* Look at the relocation information to figure out which symbol
8384          this is for.  */
8385
8386       r_symndx = mips16_stub_symndx (bed, sec, relocs, rel_end);
8387       if (r_symndx == 0)
8388         {
8389           _bfd_error_handler
8390             /* xgettext:c-format */
8391             (_("%pB: warning: cannot determine the target function for"
8392                " stub section `%s'"),
8393              abfd, name);
8394           bfd_set_error (bfd_error_bad_value);
8395           return FALSE;
8396         }
8397
8398       if (r_symndx < extsymoff
8399           || sym_hashes[r_symndx - extsymoff] == NULL)
8400         {
8401           asection *o;
8402
8403           /* This stub is for a local symbol.  This stub will only be
8404              needed if there is some relocation in this BFD, other
8405              than a 16 bit function call, which refers to this symbol.  */
8406           for (o = abfd->sections; o != NULL; o = o->next)
8407             {
8408               Elf_Internal_Rela *sec_relocs;
8409               const Elf_Internal_Rela *r, *rend;
8410
8411               /* We can ignore stub sections when looking for relocs.  */
8412               if ((o->flags & SEC_RELOC) == 0
8413                   || o->reloc_count == 0
8414                   || section_allows_mips16_refs_p (o))
8415                 continue;
8416
8417               sec_relocs
8418                 = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
8419                                              info->keep_memory);
8420               if (sec_relocs == NULL)
8421                 return FALSE;
8422
8423               rend = sec_relocs + o->reloc_count;
8424               for (r = sec_relocs; r < rend; r++)
8425                 if (ELF_R_SYM (abfd, r->r_info) == r_symndx
8426                     && !mips16_call_reloc_p (ELF_R_TYPE (abfd, r->r_info)))
8427                   break;
8428
8429               if (elf_section_data (o)->relocs != sec_relocs)
8430                 free (sec_relocs);
8431
8432               if (r < rend)
8433                 break;
8434             }
8435
8436           if (o == NULL)
8437             {
8438               /* There is no non-call reloc for this stub, so we do
8439                  not need it.  Since this function is called before
8440                  the linker maps input sections to output sections, we
8441                  can easily discard it by setting the SEC_EXCLUDE
8442                  flag.  */
8443               sec->flags |= SEC_EXCLUDE;
8444               return TRUE;
8445             }
8446
8447           /* Record this stub in an array of local symbol stubs for
8448              this BFD.  */
8449           if (mips_elf_tdata (abfd)->local_stubs == NULL)
8450             {
8451               unsigned long symcount;
8452               asection **n;
8453               bfd_size_type amt;
8454
8455               if (elf_bad_symtab (abfd))
8456                 symcount = NUM_SHDR_ENTRIES (symtab_hdr);
8457               else
8458                 symcount = symtab_hdr->sh_info;
8459               amt = symcount * sizeof (asection *);
8460               n = bfd_zalloc (abfd, amt);
8461               if (n == NULL)
8462                 return FALSE;
8463               mips_elf_tdata (abfd)->local_stubs = n;
8464             }
8465
8466           sec->flags |= SEC_KEEP;
8467           mips_elf_tdata (abfd)->local_stubs[r_symndx] = sec;
8468
8469           /* We don't need to set mips16_stubs_seen in this case.
8470              That flag is used to see whether we need to look through
8471              the global symbol table for stubs.  We don't need to set
8472              it here, because we just have a local stub.  */
8473         }
8474       else
8475         {
8476           struct mips_elf_link_hash_entry *h;
8477
8478           h = ((struct mips_elf_link_hash_entry *)
8479                sym_hashes[r_symndx - extsymoff]);
8480
8481           while (h->root.root.type == bfd_link_hash_indirect
8482                  || h->root.root.type == bfd_link_hash_warning)
8483             h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
8484
8485           /* H is the symbol this stub is for.  */
8486
8487           /* If we already have an appropriate stub for this function, we
8488              don't need another one, so we can discard this one.  Since
8489              this function is called before the linker maps input sections
8490              to output sections, we can easily discard it by setting the
8491              SEC_EXCLUDE flag.  */
8492           if (h->fn_stub != NULL)
8493             {
8494               sec->flags |= SEC_EXCLUDE;
8495               return TRUE;
8496             }
8497
8498           sec->flags |= SEC_KEEP;
8499           h->fn_stub = sec;
8500           mips_elf_hash_table (info)->mips16_stubs_seen = TRUE;
8501         }
8502     }
8503   else if (CALL_STUB_P (name) || CALL_FP_STUB_P (name))
8504     {
8505       unsigned long r_symndx;
8506       struct mips_elf_link_hash_entry *h;
8507       asection **loc;
8508
8509       /* Look at the relocation information to figure out which symbol
8510          this is for.  */
8511
8512       r_symndx = mips16_stub_symndx (bed, sec, relocs, rel_end);
8513       if (r_symndx == 0)
8514         {
8515           _bfd_error_handler
8516             /* xgettext:c-format */
8517             (_("%pB: warning: cannot determine the target function for"
8518                " stub section `%s'"),
8519              abfd, name);
8520           bfd_set_error (bfd_error_bad_value);
8521           return FALSE;
8522         }
8523
8524       if (r_symndx < extsymoff
8525           || sym_hashes[r_symndx - extsymoff] == NULL)
8526         {
8527           asection *o;
8528
8529           /* This stub is for a local symbol.  This stub will only be
8530              needed if there is some relocation (R_MIPS16_26) in this BFD
8531              that refers to this symbol.  */
8532           for (o = abfd->sections; o != NULL; o = o->next)
8533             {
8534               Elf_Internal_Rela *sec_relocs;
8535               const Elf_Internal_Rela *r, *rend;
8536
8537               /* We can ignore stub sections when looking for relocs.  */
8538               if ((o->flags & SEC_RELOC) == 0
8539                   || o->reloc_count == 0
8540                   || section_allows_mips16_refs_p (o))
8541                 continue;
8542
8543               sec_relocs
8544                 = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
8545                                              info->keep_memory);
8546               if (sec_relocs == NULL)
8547                 return FALSE;
8548
8549               rend = sec_relocs + o->reloc_count;
8550               for (r = sec_relocs; r < rend; r++)
8551                 if (ELF_R_SYM (abfd, r->r_info) == r_symndx
8552                     && ELF_R_TYPE (abfd, r->r_info) == R_MIPS16_26)
8553                     break;
8554
8555               if (elf_section_data (o)->relocs != sec_relocs)
8556                 free (sec_relocs);
8557
8558               if (r < rend)
8559                 break;
8560             }
8561
8562           if (o == NULL)
8563             {
8564               /* There is no non-call reloc for this stub, so we do
8565                  not need it.  Since this function is called before
8566                  the linker maps input sections to output sections, we
8567                  can easily discard it by setting the SEC_EXCLUDE
8568                  flag.  */
8569               sec->flags |= SEC_EXCLUDE;
8570               return TRUE;
8571             }
8572
8573           /* Record this stub in an array of local symbol call_stubs for
8574              this BFD.  */
8575           if (mips_elf_tdata (abfd)->local_call_stubs == NULL)
8576             {
8577               unsigned long symcount;
8578               asection **n;
8579               bfd_size_type amt;
8580
8581               if (elf_bad_symtab (abfd))
8582                 symcount = NUM_SHDR_ENTRIES (symtab_hdr);
8583               else
8584                 symcount = symtab_hdr->sh_info;
8585               amt = symcount * sizeof (asection *);
8586               n = bfd_zalloc (abfd, amt);
8587               if (n == NULL)
8588                 return FALSE;
8589               mips_elf_tdata (abfd)->local_call_stubs = n;
8590             }
8591
8592           sec->flags |= SEC_KEEP;
8593           mips_elf_tdata (abfd)->local_call_stubs[r_symndx] = sec;
8594
8595           /* We don't need to set mips16_stubs_seen in this case.
8596              That flag is used to see whether we need to look through
8597              the global symbol table for stubs.  We don't need to set
8598              it here, because we just have a local stub.  */
8599         }
8600       else
8601         {
8602           h = ((struct mips_elf_link_hash_entry *)
8603                sym_hashes[r_symndx - extsymoff]);
8604
8605           /* H is the symbol this stub is for.  */
8606
8607           if (CALL_FP_STUB_P (name))
8608             loc = &h->call_fp_stub;
8609           else
8610             loc = &h->call_stub;
8611
8612           /* If we already have an appropriate stub for this function, we
8613              don't need another one, so we can discard this one.  Since
8614              this function is called before the linker maps input sections
8615              to output sections, we can easily discard it by setting the
8616              SEC_EXCLUDE flag.  */
8617           if (*loc != NULL)
8618             {
8619               sec->flags |= SEC_EXCLUDE;
8620               return TRUE;
8621             }
8622
8623           sec->flags |= SEC_KEEP;
8624           *loc = sec;
8625           mips_elf_hash_table (info)->mips16_stubs_seen = TRUE;
8626         }
8627     }
8628
8629   sreloc = NULL;
8630   contents = NULL;
8631   for (rel = relocs; rel < rel_end; ++rel)
8632     {
8633       unsigned long r_symndx;
8634       unsigned int r_type;
8635       struct elf_link_hash_entry *h;
8636       bfd_boolean can_make_dynamic_p;
8637       bfd_boolean call_reloc_p;
8638       bfd_boolean constrain_symbol_p;
8639
8640       r_symndx = ELF_R_SYM (abfd, rel->r_info);
8641       r_type = ELF_R_TYPE (abfd, rel->r_info);
8642
8643       if (r_symndx < extsymoff)
8644         h = NULL;
8645       else if (r_symndx >= extsymoff + NUM_SHDR_ENTRIES (symtab_hdr))
8646         {
8647           _bfd_error_handler
8648             /* xgettext:c-format */
8649             (_("%pB: malformed reloc detected for section %s"),
8650              abfd, name);
8651           bfd_set_error (bfd_error_bad_value);
8652           return FALSE;
8653         }
8654       else
8655         {
8656           h = sym_hashes[r_symndx - extsymoff];
8657           if (h != NULL)
8658             {
8659               while (h->root.type == bfd_link_hash_indirect
8660                      || h->root.type == bfd_link_hash_warning)
8661                 h = (struct elf_link_hash_entry *) h->root.u.i.link;
8662             }
8663         }
8664
8665       /* Set CAN_MAKE_DYNAMIC_P to true if we can convert this
8666          relocation into a dynamic one.  */
8667       can_make_dynamic_p = FALSE;
8668
8669       /* Set CALL_RELOC_P to true if the relocation is for a call,
8670          and if pointer equality therefore doesn't matter.  */
8671       call_reloc_p = FALSE;
8672
8673       /* Set CONSTRAIN_SYMBOL_P if we need to take the relocation
8674          into account when deciding how to define the symbol.
8675          Relocations in nonallocatable sections such as .pdr and
8676          .debug* should have no effect.  */
8677       constrain_symbol_p = ((sec->flags & SEC_ALLOC) != 0);
8678
8679       switch (r_type)
8680         {
8681         case R_MIPS_CALL16:
8682         case R_MIPS_CALL_HI16:
8683         case R_MIPS_CALL_LO16:
8684         case R_MIPS16_CALL16:
8685         case R_MICROMIPS_CALL16:
8686         case R_MICROMIPS_CALL_HI16:
8687         case R_MICROMIPS_CALL_LO16:
8688           call_reloc_p = TRUE;
8689           /* Fall through.  */
8690
8691         case R_MIPS_GOT16:
8692         case R_MIPS_GOT_LO16:
8693         case R_MIPS_GOT_PAGE:
8694         case R_MIPS_GOT_DISP:
8695         case R_MIPS16_GOT16:
8696         case R_MICROMIPS_GOT16:
8697         case R_MICROMIPS_GOT_LO16:
8698         case R_MICROMIPS_GOT_PAGE:
8699         case R_MICROMIPS_GOT_DISP:
8700           /* If we have a symbol that will resolve to zero at static link
8701              time and it is used by a GOT relocation applied to code we
8702              cannot relax to an immediate zero load, then we will be using
8703              the special `__gnu_absolute_zero' symbol whose value is zero
8704              at dynamic load time.  We ignore HI16-type GOT relocations at
8705              this stage, because their handling will depend entirely on
8706              the corresponding LO16-type GOT relocation.  */
8707           if (!call_hi16_reloc_p (r_type)
8708               && h != NULL
8709               && bfd_link_pic (info)
8710               && !htab->use_absolute_zero
8711               && UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
8712             {
8713               bfd_boolean rel_reloc;
8714
8715               if (!mips_elf_get_section_contents (abfd, sec, &contents))
8716                 return FALSE;
8717
8718               rel_reloc = mips_elf_rel_relocation_p (abfd, sec, relocs, rel);
8719               howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, !rel_reloc);
8720
8721               if (!mips_elf_nullify_got_load (abfd, contents, rel, howto,
8722                                               FALSE))
8723                 if (!mips_elf_define_absolute_zero (abfd, info, htab, r_type))
8724                   return FALSE;
8725             }
8726
8727           /* Fall through.  */
8728         case R_MIPS_GOT_HI16:
8729         case R_MIPS_GOT_OFST:
8730         case R_MIPS_TLS_GOTTPREL:
8731         case R_MIPS_TLS_GD:
8732         case R_MIPS_TLS_LDM:
8733         case R_MIPS16_TLS_GOTTPREL:
8734         case R_MIPS16_TLS_GD:
8735         case R_MIPS16_TLS_LDM:
8736         case R_MICROMIPS_GOT_HI16:
8737         case R_MICROMIPS_GOT_OFST:
8738         case R_MICROMIPS_TLS_GOTTPREL:
8739         case R_MICROMIPS_TLS_GD:
8740         case R_MICROMIPS_TLS_LDM:
8741           if (dynobj == NULL)
8742             elf_hash_table (info)->dynobj = dynobj = abfd;
8743           if (!mips_elf_create_got_section (dynobj, info))
8744             return FALSE;
8745           if (htab->is_vxworks && !bfd_link_pic (info))
8746             {
8747               _bfd_error_handler
8748                 /* xgettext:c-format */
8749                 (_("%pB: GOT reloc at %#" PRIx64 " not expected in executables"),
8750                  abfd, (uint64_t) rel->r_offset);
8751               bfd_set_error (bfd_error_bad_value);
8752               return FALSE;
8753             }
8754           can_make_dynamic_p = TRUE;
8755           break;
8756
8757         case R_MIPS_NONE:
8758         case R_MIPS_JALR:
8759         case R_MICROMIPS_JALR:
8760           /* These relocations have empty fields and are purely there to
8761              provide link information.  The symbol value doesn't matter.  */
8762           constrain_symbol_p = FALSE;
8763           break;
8764
8765         case R_MIPS_GPREL16:
8766         case R_MIPS_GPREL32:
8767         case R_MIPS16_GPREL:
8768         case R_MICROMIPS_GPREL16:
8769           /* GP-relative relocations always resolve to a definition in a
8770              regular input file, ignoring the one-definition rule.  This is
8771              important for the GP setup sequence in NewABI code, which
8772              always resolves to a local function even if other relocations
8773              against the symbol wouldn't.  */
8774           constrain_symbol_p = FALSE;
8775           break;
8776
8777         case R_MIPS_32:
8778         case R_MIPS_REL32:
8779         case R_MIPS_64:
8780           /* In VxWorks executables, references to external symbols
8781              must be handled using copy relocs or PLT entries; it is not
8782              possible to convert this relocation into a dynamic one.
8783
8784              For executables that use PLTs and copy-relocs, we have a
8785              choice between converting the relocation into a dynamic
8786              one or using copy relocations or PLT entries.  It is
8787              usually better to do the former, unless the relocation is
8788              against a read-only section.  */
8789           if ((bfd_link_pic (info)
8790                || (h != NULL
8791                    && !htab->is_vxworks
8792                    && strcmp (h->root.root.string, "__gnu_local_gp") != 0
8793                    && !(!info->nocopyreloc
8794                         && !PIC_OBJECT_P (abfd)
8795                         && MIPS_ELF_READONLY_SECTION (sec))))
8796               && (sec->flags & SEC_ALLOC) != 0)
8797             {
8798               can_make_dynamic_p = TRUE;
8799               if (dynobj == NULL)
8800                 elf_hash_table (info)->dynobj = dynobj = abfd;
8801             }
8802           break;
8803
8804         case R_MIPS_26:
8805         case R_MIPS_PC16:
8806         case R_MIPS_PC21_S2:
8807         case R_MIPS_PC26_S2:
8808         case R_MIPS16_26:
8809         case R_MIPS16_PC16_S1:
8810         case R_MICROMIPS_26_S1:
8811         case R_MICROMIPS_PC7_S1:
8812         case R_MICROMIPS_PC10_S1:
8813         case R_MICROMIPS_PC16_S1:
8814         case R_MICROMIPS_PC23_S2:
8815           call_reloc_p = TRUE;
8816           break;
8817         }
8818
8819       if (h)
8820         {
8821           if (constrain_symbol_p)
8822             {
8823               if (!can_make_dynamic_p)
8824                 ((struct mips_elf_link_hash_entry *) h)->has_static_relocs = 1;
8825
8826               if (!call_reloc_p)
8827                 h->pointer_equality_needed = 1;
8828
8829               /* We must not create a stub for a symbol that has
8830                  relocations related to taking the function's address.
8831                  This doesn't apply to VxWorks, where CALL relocs refer
8832                  to a .got.plt entry instead of a normal .got entry.  */
8833               if (!htab->is_vxworks && (!can_make_dynamic_p || !call_reloc_p))
8834                 ((struct mips_elf_link_hash_entry *) h)->no_fn_stub = TRUE;
8835             }
8836
8837           /* Relocations against the special VxWorks __GOTT_BASE__ and
8838              __GOTT_INDEX__ symbols must be left to the loader.  Allocate
8839              room for them in .rela.dyn.  */
8840           if (is_gott_symbol (info, h))
8841             {
8842               if (sreloc == NULL)
8843                 {
8844                   sreloc = mips_elf_rel_dyn_section (info, TRUE);
8845                   if (sreloc == NULL)
8846                     return FALSE;
8847                 }
8848               mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
8849               if (MIPS_ELF_READONLY_SECTION (sec))
8850                 /* We tell the dynamic linker that there are
8851                    relocations against the text segment.  */
8852                 info->flags |= DF_TEXTREL;
8853             }
8854         }
8855       else if (call_lo16_reloc_p (r_type)
8856                || got_lo16_reloc_p (r_type)
8857                || got_disp_reloc_p (r_type)
8858                || (got16_reloc_p (r_type) && htab->is_vxworks))
8859         {
8860           /* We may need a local GOT entry for this relocation.  We
8861              don't count R_MIPS_GOT_PAGE because we can estimate the
8862              maximum number of pages needed by looking at the size of
8863              the segment.  Similar comments apply to R_MIPS*_GOT16 and
8864              R_MIPS*_CALL16, except on VxWorks, where GOT relocations
8865              always evaluate to "G".  We don't count R_MIPS_GOT_HI16, or
8866              R_MIPS_CALL_HI16 because these are always followed by an
8867              R_MIPS_GOT_LO16 or R_MIPS_CALL_LO16.  */
8868           if (!mips_elf_record_local_got_symbol (abfd, r_symndx,
8869                                                  rel->r_addend, info, r_type))
8870             return FALSE;
8871         }
8872
8873       if (h != NULL
8874           && mips_elf_relocation_needs_la25_stub (abfd, r_type,
8875                                                   ELF_ST_IS_MIPS16 (h->other)))
8876         ((struct mips_elf_link_hash_entry *) h)->has_nonpic_branches = TRUE;
8877
8878       switch (r_type)
8879         {
8880         case R_MIPS_CALL16:
8881         case R_MIPS16_CALL16:
8882         case R_MICROMIPS_CALL16:
8883           if (h == NULL)
8884             {
8885               _bfd_error_handler
8886                 /* xgettext:c-format */
8887                 (_("%pB: CALL16 reloc at %#" PRIx64 " not against global symbol"),
8888                  abfd, (uint64_t) rel->r_offset);
8889               bfd_set_error (bfd_error_bad_value);
8890               return FALSE;
8891             }
8892           /* Fall through.  */
8893
8894         case R_MIPS_CALL_HI16:
8895         case R_MIPS_CALL_LO16:
8896         case R_MICROMIPS_CALL_HI16:
8897         case R_MICROMIPS_CALL_LO16:
8898           if (h != NULL)
8899             {
8900               /* Make sure there is room in the regular GOT to hold the
8901                  function's address.  We may eliminate it in favour of
8902                  a .got.plt entry later; see mips_elf_count_got_symbols.  */
8903               if (!mips_elf_record_global_got_symbol (h, abfd, info, TRUE,
8904                                                       r_type))
8905                 return FALSE;
8906
8907               /* We need a stub, not a plt entry for the undefined
8908                  function.  But we record it as if it needs plt.  See
8909                  _bfd_elf_adjust_dynamic_symbol.  */
8910               h->needs_plt = 1;
8911               h->type = STT_FUNC;
8912             }
8913           break;
8914
8915         case R_MIPS_GOT_PAGE:
8916         case R_MICROMIPS_GOT_PAGE:
8917         case R_MIPS16_GOT16:
8918         case R_MIPS_GOT16:
8919         case R_MIPS_GOT_HI16:
8920         case R_MIPS_GOT_LO16:
8921         case R_MICROMIPS_GOT16:
8922         case R_MICROMIPS_GOT_HI16:
8923         case R_MICROMIPS_GOT_LO16:
8924           if (!h || got_page_reloc_p (r_type))
8925             {
8926               /* This relocation needs (or may need, if h != NULL) a
8927                  page entry in the GOT.  For R_MIPS_GOT_PAGE we do not
8928                  know for sure until we know whether the symbol is
8929                  preemptible.  */
8930               if (mips_elf_rel_relocation_p (abfd, sec, relocs, rel))
8931                 {
8932                   if (!mips_elf_get_section_contents (abfd, sec, &contents))
8933                     return FALSE;
8934                   howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, FALSE);
8935                   addend = mips_elf_read_rel_addend (abfd, rel,
8936                                                      howto, contents);
8937                   if (got16_reloc_p (r_type))
8938                     mips_elf_add_lo16_rel_addend (abfd, rel, rel_end,
8939                                                   contents, &addend);
8940                   else
8941                     addend <<= howto->rightshift;
8942                 }
8943               else
8944                 addend = rel->r_addend;
8945               if (!mips_elf_record_got_page_ref (info, abfd, r_symndx,
8946                                                  h, addend))
8947                 return FALSE;
8948
8949               if (h)
8950                 {
8951                   struct mips_elf_link_hash_entry *hmips =
8952                     (struct mips_elf_link_hash_entry *) h;
8953
8954                   /* This symbol is definitely not overridable.  */
8955                   if (hmips->root.def_regular
8956                       && ! (bfd_link_pic (info) && ! info->symbolic
8957                             && ! hmips->root.forced_local))
8958                     h = NULL;
8959                 }
8960             }
8961           /* If this is a global, overridable symbol, GOT_PAGE will
8962              decay to GOT_DISP, so we'll need a GOT entry for it.  */
8963           /* Fall through.  */
8964
8965         case R_MIPS_GOT_DISP:
8966         case R_MICROMIPS_GOT_DISP:
8967           if (h && !mips_elf_record_global_got_symbol (h, abfd, info,
8968                                                        FALSE, r_type))
8969             return FALSE;
8970           break;
8971
8972         case R_MIPS_TLS_GOTTPREL:
8973         case R_MIPS16_TLS_GOTTPREL:
8974         case R_MICROMIPS_TLS_GOTTPREL:
8975           if (bfd_link_pic (info))
8976             info->flags |= DF_STATIC_TLS;
8977           /* Fall through */
8978
8979         case R_MIPS_TLS_LDM:
8980         case R_MIPS16_TLS_LDM:
8981         case R_MICROMIPS_TLS_LDM:
8982           if (tls_ldm_reloc_p (r_type))
8983             {
8984               r_symndx = STN_UNDEF;
8985               h = NULL;
8986             }
8987           /* Fall through */
8988
8989         case R_MIPS_TLS_GD:
8990         case R_MIPS16_TLS_GD:
8991         case R_MICROMIPS_TLS_GD:
8992           /* This symbol requires a global offset table entry, or two
8993              for TLS GD relocations.  */
8994           if (h != NULL)
8995             {
8996               if (!mips_elf_record_global_got_symbol (h, abfd, info,
8997                                                       FALSE, r_type))
8998                 return FALSE;
8999             }
9000           else
9001             {
9002               if (!mips_elf_record_local_got_symbol (abfd, r_symndx,
9003                                                      rel->r_addend,
9004                                                      info, r_type))
9005                 return FALSE;
9006             }
9007           break;
9008
9009         case R_MIPS_32:
9010         case R_MIPS_REL32:
9011         case R_MIPS_64:
9012           /* In VxWorks executables, references to external symbols
9013              are handled using copy relocs or PLT stubs, so there's
9014              no need to add a .rela.dyn entry for this relocation.  */
9015           if (can_make_dynamic_p)
9016             {
9017               if (sreloc == NULL)
9018                 {
9019                   sreloc = mips_elf_rel_dyn_section (info, TRUE);
9020                   if (sreloc == NULL)
9021                     return FALSE;
9022                 }
9023               if (bfd_link_pic (info) && h == NULL)
9024                 {
9025                   /* When creating a shared object, we must copy these
9026                      reloc types into the output file as R_MIPS_REL32
9027                      relocs.  Make room for this reloc in .rel(a).dyn.  */
9028                   mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
9029                   if (MIPS_ELF_READONLY_SECTION (sec))
9030                     /* We tell the dynamic linker that there are
9031                        relocations against the text segment.  */
9032                     info->flags |= DF_TEXTREL;
9033                 }
9034               else
9035                 {
9036                   struct mips_elf_link_hash_entry *hmips;
9037
9038                   /* For a shared object, we must copy this relocation
9039                      unless the symbol turns out to be undefined and
9040                      weak with non-default visibility, in which case
9041                      it will be left as zero.
9042
9043                      We could elide R_MIPS_REL32 for locally binding symbols
9044                      in shared libraries, but do not yet do so.
9045
9046                      For an executable, we only need to copy this
9047                      reloc if the symbol is defined in a dynamic
9048                      object.  */
9049                   hmips = (struct mips_elf_link_hash_entry *) h;
9050                   ++hmips->possibly_dynamic_relocs;
9051                   if (MIPS_ELF_READONLY_SECTION (sec))
9052                     /* We need it to tell the dynamic linker if there
9053                        are relocations against the text segment.  */
9054                     hmips->readonly_reloc = TRUE;
9055                 }
9056             }
9057
9058           if (SGI_COMPAT (abfd))
9059             mips_elf_hash_table (info)->compact_rel_size +=
9060               sizeof (Elf32_External_crinfo);
9061           break;
9062
9063         case R_MIPS_26:
9064         case R_MIPS_GPREL16:
9065         case R_MIPS_LITERAL:
9066         case R_MIPS_GPREL32:
9067         case R_MICROMIPS_26_S1:
9068         case R_MICROMIPS_GPREL16:
9069         case R_MICROMIPS_LITERAL:
9070         case R_MICROMIPS_GPREL7_S2:
9071           if (SGI_COMPAT (abfd))
9072             mips_elf_hash_table (info)->compact_rel_size +=
9073               sizeof (Elf32_External_crinfo);
9074           break;
9075
9076           /* This relocation describes the C++ object vtable hierarchy.
9077              Reconstruct it for later use during GC.  */
9078         case R_MIPS_GNU_VTINHERIT:
9079           if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
9080             return FALSE;
9081           break;
9082
9083           /* This relocation describes which C++ vtable entries are actually
9084              used.  Record for later use during GC.  */
9085         case R_MIPS_GNU_VTENTRY:
9086           if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset))
9087             return FALSE;
9088           break;
9089
9090         default:
9091           break;
9092         }
9093
9094       /* Record the need for a PLT entry.  At this point we don't know
9095          yet if we are going to create a PLT in the first place, but
9096          we only record whether the relocation requires a standard MIPS
9097          or a compressed code entry anyway.  If we don't make a PLT after
9098          all, then we'll just ignore these arrangements.  Likewise if
9099          a PLT entry is not created because the symbol is satisfied
9100          locally.  */
9101       if (h != NULL
9102           && (branch_reloc_p (r_type)
9103               || mips16_branch_reloc_p (r_type)
9104               || micromips_branch_reloc_p (r_type))
9105           && !SYMBOL_CALLS_LOCAL (info, h))
9106         {
9107           if (h->plt.plist == NULL)
9108             h->plt.plist = mips_elf_make_plt_record (abfd);
9109           if (h->plt.plist == NULL)
9110             return FALSE;
9111
9112           if (branch_reloc_p (r_type))
9113             h->plt.plist->need_mips = TRUE;
9114           else
9115             h->plt.plist->need_comp = TRUE;
9116         }
9117
9118       /* See if this reloc would need to refer to a MIPS16 hard-float stub,
9119          if there is one.  We only need to handle global symbols here;
9120          we decide whether to keep or delete stubs for local symbols
9121          when processing the stub's relocations.  */
9122       if (h != NULL
9123           && !mips16_call_reloc_p (r_type)
9124           && !section_allows_mips16_refs_p (sec))
9125         {
9126           struct mips_elf_link_hash_entry *mh;
9127
9128           mh = (struct mips_elf_link_hash_entry *) h;
9129           mh->need_fn_stub = TRUE;
9130         }
9131
9132       /* Refuse some position-dependent relocations when creating a
9133          shared library.  Do not refuse R_MIPS_32 / R_MIPS_64; they're
9134          not PIC, but we can create dynamic relocations and the result
9135          will be fine.  Also do not refuse R_MIPS_LO16, which can be
9136          combined with R_MIPS_GOT16.  */
9137       if (bfd_link_pic (info))
9138         {
9139           switch (r_type)
9140             {
9141             case R_MIPS_TLS_TPREL_HI16:
9142             case R_MIPS16_TLS_TPREL_HI16:
9143             case R_MICROMIPS_TLS_TPREL_HI16:
9144             case R_MIPS_TLS_TPREL_LO16:
9145             case R_MIPS16_TLS_TPREL_LO16:
9146             case R_MICROMIPS_TLS_TPREL_LO16:
9147               /* These are okay in PIE, but not in a shared library.  */
9148               if (bfd_link_executable (info))
9149                 break;
9150
9151               /* FALLTHROUGH */
9152
9153             case R_MIPS16_HI16:
9154             case R_MIPS_HI16:
9155             case R_MIPS_HIGHER:
9156             case R_MIPS_HIGHEST:
9157             case R_MICROMIPS_HI16:
9158             case R_MICROMIPS_HIGHER:
9159             case R_MICROMIPS_HIGHEST:
9160               /* Don't refuse a high part relocation if it's against
9161                  no symbol (e.g. part of a compound relocation).  */
9162               if (r_symndx == STN_UNDEF)
9163                 break;
9164
9165               /* Likewise an absolute symbol.  */
9166               if (h != NULL && bfd_is_abs_symbol (&h->root))
9167                 break;
9168
9169               /* R_MIPS_HI16 against _gp_disp is used for $gp setup,
9170                  and has a special meaning.  */
9171               if (!NEWABI_P (abfd) && h != NULL
9172                   && strcmp (h->root.root.string, "_gp_disp") == 0)
9173                 break;
9174
9175               /* Likewise __GOTT_BASE__ and __GOTT_INDEX__ on VxWorks.  */
9176               if (is_gott_symbol (info, h))
9177                 break;
9178
9179               /* FALLTHROUGH */
9180
9181             case R_MIPS16_26:
9182             case R_MIPS_26:
9183             case R_MICROMIPS_26_S1:
9184               howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, NEWABI_P (abfd));
9185               /* An error for unsupported relocations is raised as part
9186                  of the above search, so we can skip the following.  */
9187               if (howto != NULL)
9188                 info->callbacks->einfo
9189                   /* xgettext:c-format */
9190                   (_("%X%H: relocation %s against `%s' cannot be used"
9191                      " when making a shared object; recompile with -fPIC\n"),
9192                    abfd, sec, rel->r_offset, howto->name,
9193                    (h) ? h->root.root.string : "a local symbol");
9194               break;
9195             default:
9196               break;
9197             }
9198         }
9199     }
9200
9201   return TRUE;
9202 }
9203 \f
9204 /* Allocate space for global sym dynamic relocs.  */
9205
9206 static bfd_boolean
9207 allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
9208 {
9209   struct bfd_link_info *info = inf;
9210   bfd *dynobj;
9211   struct mips_elf_link_hash_entry *hmips;
9212   struct mips_elf_link_hash_table *htab;
9213
9214   htab = mips_elf_hash_table (info);
9215   BFD_ASSERT (htab != NULL);
9216
9217   dynobj = elf_hash_table (info)->dynobj;
9218   hmips = (struct mips_elf_link_hash_entry *) h;
9219
9220   /* VxWorks executables are handled elsewhere; we only need to
9221      allocate relocations in shared objects.  */
9222   if (htab->is_vxworks && !bfd_link_pic (info))
9223     return TRUE;
9224
9225   /* Ignore indirect symbols.  All relocations against such symbols
9226      will be redirected to the target symbol.  */
9227   if (h->root.type == bfd_link_hash_indirect)
9228     return TRUE;
9229
9230   /* If this symbol is defined in a dynamic object, or we are creating
9231      a shared library, we will need to copy any R_MIPS_32 or
9232      R_MIPS_REL32 relocs against it into the output file.  */
9233   if (! bfd_link_relocatable (info)
9234       && hmips->possibly_dynamic_relocs != 0
9235       && (h->root.type == bfd_link_hash_defweak
9236           || (!h->def_regular && !ELF_COMMON_DEF_P (h))
9237           || bfd_link_pic (info)))
9238     {
9239       bfd_boolean do_copy = TRUE;
9240
9241       if (h->root.type == bfd_link_hash_undefweak)
9242         {
9243           /* Do not copy relocations for undefined weak symbols that
9244              we are not going to export.  */
9245           if (UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
9246             do_copy = FALSE;
9247
9248           /* Make sure undefined weak symbols are output as a dynamic
9249              symbol in PIEs.  */
9250           else if (h->dynindx == -1 && !h->forced_local)
9251             {
9252               if (! bfd_elf_link_record_dynamic_symbol (info, h))
9253                 return FALSE;
9254             }
9255         }
9256
9257       if (do_copy)
9258         {
9259           /* Even though we don't directly need a GOT entry for this symbol,
9260              the SVR4 psABI requires it to have a dynamic symbol table
9261              index greater that DT_MIPS_GOTSYM if there are dynamic
9262              relocations against it.
9263
9264              VxWorks does not enforce the same mapping between the GOT
9265              and the symbol table, so the same requirement does not
9266              apply there.  */
9267           if (!htab->is_vxworks)
9268             {
9269               if (hmips->global_got_area > GGA_RELOC_ONLY)
9270                 hmips->global_got_area = GGA_RELOC_ONLY;
9271               hmips->got_only_for_calls = FALSE;
9272             }
9273
9274           mips_elf_allocate_dynamic_relocations
9275             (dynobj, info, hmips->possibly_dynamic_relocs);
9276           if (hmips->readonly_reloc)
9277             /* We tell the dynamic linker that there are relocations
9278                against the text segment.  */
9279             info->flags |= DF_TEXTREL;
9280         }
9281     }
9282
9283   return TRUE;
9284 }
9285
9286 /* Adjust a symbol defined by a dynamic object and referenced by a
9287    regular object.  The current definition is in some section of the
9288    dynamic object, but we're not including those sections.  We have to
9289    change the definition to something the rest of the link can
9290    understand.  */
9291
9292 bfd_boolean
9293 _bfd_mips_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
9294                                      struct elf_link_hash_entry *h)
9295 {
9296   bfd *dynobj;
9297   struct mips_elf_link_hash_entry *hmips;
9298   struct mips_elf_link_hash_table *htab;
9299   asection *s, *srel;
9300
9301   htab = mips_elf_hash_table (info);
9302   BFD_ASSERT (htab != NULL);
9303
9304   dynobj = elf_hash_table (info)->dynobj;
9305   hmips = (struct mips_elf_link_hash_entry *) h;
9306
9307   /* Make sure we know what is going on here.  */
9308   BFD_ASSERT (dynobj != NULL
9309               && (h->needs_plt
9310                   || h->is_weakalias
9311                   || (h->def_dynamic
9312                       && h->ref_regular
9313                       && !h->def_regular)));
9314
9315   hmips = (struct mips_elf_link_hash_entry *) h;
9316
9317   /* If there are call relocations against an externally-defined symbol,
9318      see whether we can create a MIPS lazy-binding stub for it.  We can
9319      only do this if all references to the function are through call
9320      relocations, and in that case, the traditional lazy-binding stubs
9321      are much more efficient than PLT entries.
9322
9323      Traditional stubs are only available on SVR4 psABI-based systems;
9324      VxWorks always uses PLTs instead.  */
9325   if (!htab->is_vxworks && h->needs_plt && !hmips->no_fn_stub)
9326     {
9327       if (! elf_hash_table (info)->dynamic_sections_created)
9328         return TRUE;
9329
9330       /* If this symbol is not defined in a regular file, then set
9331          the symbol to the stub location.  This is required to make
9332          function pointers compare as equal between the normal
9333          executable and the shared library.  */
9334       if (!h->def_regular
9335           && !bfd_is_abs_section (htab->sstubs->output_section))
9336         {
9337           hmips->needs_lazy_stub = TRUE;
9338           htab->lazy_stub_count++;
9339           return TRUE;
9340         }
9341     }
9342   /* As above, VxWorks requires PLT entries for externally-defined
9343      functions that are only accessed through call relocations.
9344
9345      Both VxWorks and non-VxWorks targets also need PLT entries if there
9346      are static-only relocations against an externally-defined function.
9347      This can technically occur for shared libraries if there are
9348      branches to the symbol, although it is unlikely that this will be
9349      used in practice due to the short ranges involved.  It can occur
9350      for any relative or absolute relocation in executables; in that
9351      case, the PLT entry becomes the function's canonical address.  */
9352   else if (((h->needs_plt && !hmips->no_fn_stub)
9353             || (h->type == STT_FUNC && hmips->has_static_relocs))
9354            && htab->use_plts_and_copy_relocs
9355            && !SYMBOL_CALLS_LOCAL (info, h)
9356            && !(ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
9357                 && h->root.type == bfd_link_hash_undefweak))
9358     {
9359       bfd_boolean micromips_p = MICROMIPS_P (info->output_bfd);
9360       bfd_boolean newabi_p = NEWABI_P (info->output_bfd);
9361
9362       /* If this is the first symbol to need a PLT entry, then make some
9363          basic setup.  Also work out PLT entry sizes.  We'll need them
9364          for PLT offset calculations.  */
9365       if (htab->plt_mips_offset + htab->plt_comp_offset == 0)
9366         {
9367           BFD_ASSERT (htab->root.sgotplt->size == 0);
9368           BFD_ASSERT (htab->plt_got_index == 0);
9369
9370           /* If we're using the PLT additions to the psABI, each PLT
9371              entry is 16 bytes and the PLT0 entry is 32 bytes.
9372              Encourage better cache usage by aligning.  We do this
9373              lazily to avoid pessimizing traditional objects.  */
9374           if (!htab->is_vxworks
9375               && !bfd_set_section_alignment (htab->root.splt, 5))
9376             return FALSE;
9377
9378           /* Make sure that .got.plt is word-aligned.  We do this lazily
9379              for the same reason as above.  */
9380           if (!bfd_set_section_alignment (htab->root.sgotplt,
9381                                           MIPS_ELF_LOG_FILE_ALIGN (dynobj)))
9382             return FALSE;
9383
9384           /* On non-VxWorks targets, the first two entries in .got.plt
9385              are reserved.  */
9386           if (!htab->is_vxworks)
9387             htab->plt_got_index
9388               += (get_elf_backend_data (dynobj)->got_header_size
9389                   / MIPS_ELF_GOT_SIZE (dynobj));
9390
9391           /* On VxWorks, also allocate room for the header's
9392              .rela.plt.unloaded entries.  */
9393           if (htab->is_vxworks && !bfd_link_pic (info))
9394             htab->srelplt2->size += 2 * sizeof (Elf32_External_Rela);
9395
9396           /* Now work out the sizes of individual PLT entries.  */
9397           if (htab->is_vxworks && bfd_link_pic (info))
9398             htab->plt_mips_entry_size
9399               = 4 * ARRAY_SIZE (mips_vxworks_shared_plt_entry);
9400           else if (htab->is_vxworks)
9401             htab->plt_mips_entry_size
9402               = 4 * ARRAY_SIZE (mips_vxworks_exec_plt_entry);
9403           else if (newabi_p)
9404             htab->plt_mips_entry_size
9405               = 4 * ARRAY_SIZE (mips_exec_plt_entry);
9406           else if (!micromips_p)
9407             {
9408               htab->plt_mips_entry_size
9409                 = 4 * ARRAY_SIZE (mips_exec_plt_entry);
9410               htab->plt_comp_entry_size
9411                 = 2 * ARRAY_SIZE (mips16_o32_exec_plt_entry);
9412             }
9413           else if (htab->insn32)
9414             {
9415               htab->plt_mips_entry_size
9416                 = 4 * ARRAY_SIZE (mips_exec_plt_entry);
9417               htab->plt_comp_entry_size
9418                 = 2 * ARRAY_SIZE (micromips_insn32_o32_exec_plt_entry);
9419             }
9420           else
9421             {
9422               htab->plt_mips_entry_size
9423                 = 4 * ARRAY_SIZE (mips_exec_plt_entry);
9424               htab->plt_comp_entry_size
9425                 = 2 * ARRAY_SIZE (micromips_o32_exec_plt_entry);
9426             }
9427         }
9428
9429       if (h->plt.plist == NULL)
9430         h->plt.plist = mips_elf_make_plt_record (dynobj);
9431       if (h->plt.plist == NULL)
9432         return FALSE;
9433
9434       /* There are no defined MIPS16 or microMIPS PLT entries for VxWorks,
9435          n32 or n64, so always use a standard entry there.
9436
9437          If the symbol has a MIPS16 call stub and gets a PLT entry, then
9438          all MIPS16 calls will go via that stub, and there is no benefit
9439          to having a MIPS16 entry.  And in the case of call_stub a
9440          standard entry actually has to be used as the stub ends with a J
9441          instruction.  */
9442       if (newabi_p
9443           || htab->is_vxworks
9444           || hmips->call_stub
9445           || hmips->call_fp_stub)
9446         {
9447           h->plt.plist->need_mips = TRUE;
9448           h->plt.plist->need_comp = FALSE;
9449         }
9450
9451       /* Otherwise, if there are no direct calls to the function, we
9452          have a free choice of whether to use standard or compressed
9453          entries.  Prefer microMIPS entries if the object is known to
9454          contain microMIPS code, so that it becomes possible to create
9455          pure microMIPS binaries.  Prefer standard entries otherwise,
9456          because MIPS16 ones are no smaller and are usually slower.  */
9457       if (!h->plt.plist->need_mips && !h->plt.plist->need_comp)
9458         {
9459           if (micromips_p)
9460             h->plt.plist->need_comp = TRUE;
9461           else
9462             h->plt.plist->need_mips = TRUE;
9463         }
9464
9465       if (h->plt.plist->need_mips)
9466         {
9467           h->plt.plist->mips_offset = htab->plt_mips_offset;
9468           htab->plt_mips_offset += htab->plt_mips_entry_size;
9469         }
9470       if (h->plt.plist->need_comp)
9471         {
9472           h->plt.plist->comp_offset = htab->plt_comp_offset;
9473           htab->plt_comp_offset += htab->plt_comp_entry_size;
9474         }
9475
9476       /* Reserve the corresponding .got.plt entry now too.  */
9477       h->plt.plist->gotplt_index = htab->plt_got_index++;
9478
9479       /* If the output file has no definition of the symbol, set the
9480          symbol's value to the address of the stub.  */
9481       if (!bfd_link_pic (info) && !h->def_regular)
9482         hmips->use_plt_entry = TRUE;
9483
9484       /* Make room for the R_MIPS_JUMP_SLOT relocation.  */
9485       htab->root.srelplt->size += (htab->is_vxworks
9486                                    ? MIPS_ELF_RELA_SIZE (dynobj)
9487                                    : MIPS_ELF_REL_SIZE (dynobj));
9488
9489       /* Make room for the .rela.plt.unloaded relocations.  */
9490       if (htab->is_vxworks && !bfd_link_pic (info))
9491         htab->srelplt2->size += 3 * sizeof (Elf32_External_Rela);
9492
9493       /* All relocations against this symbol that could have been made
9494          dynamic will now refer to the PLT entry instead.  */
9495       hmips->possibly_dynamic_relocs = 0;
9496
9497       return TRUE;
9498     }
9499
9500   /* If this is a weak symbol, and there is a real definition, the
9501      processor independent code will have arranged for us to see the
9502      real definition first, and we can just use the same value.  */
9503   if (h->is_weakalias)
9504     {
9505       struct elf_link_hash_entry *def = weakdef (h);
9506       BFD_ASSERT (def->root.type == bfd_link_hash_defined);
9507       h->root.u.def.section = def->root.u.def.section;
9508       h->root.u.def.value = def->root.u.def.value;
9509       return TRUE;
9510     }
9511
9512   /* Otherwise, there is nothing further to do for symbols defined
9513      in regular objects.  */
9514   if (h->def_regular)
9515     return TRUE;
9516
9517   /* There's also nothing more to do if we'll convert all relocations
9518      against this symbol into dynamic relocations.  */
9519   if (!hmips->has_static_relocs)
9520     return TRUE;
9521
9522   /* We're now relying on copy relocations.  Complain if we have
9523      some that we can't convert.  */
9524   if (!htab->use_plts_and_copy_relocs || bfd_link_pic (info))
9525     {
9526       _bfd_error_handler (_("non-dynamic relocations refer to "
9527                             "dynamic symbol %s"),
9528                           h->root.root.string);
9529       bfd_set_error (bfd_error_bad_value);
9530       return FALSE;
9531     }
9532
9533   /* We must allocate the symbol in our .dynbss section, which will
9534      become part of the .bss section of the executable.  There will be
9535      an entry for this symbol in the .dynsym section.  The dynamic
9536      object will contain position independent code, so all references
9537      from the dynamic object to this symbol will go through the global
9538      offset table.  The dynamic linker will use the .dynsym entry to
9539      determine the address it must put in the global offset table, so
9540      both the dynamic object and the regular object will refer to the
9541      same memory location for the variable.  */
9542
9543   if ((h->root.u.def.section->flags & SEC_READONLY) != 0)
9544     {
9545       s = htab->root.sdynrelro;
9546       srel = htab->root.sreldynrelro;
9547     }
9548   else
9549     {
9550       s = htab->root.sdynbss;
9551       srel = htab->root.srelbss;
9552     }
9553   if ((h->root.u.def.section->flags & SEC_ALLOC) != 0)
9554     {
9555       if (htab->is_vxworks)
9556         srel->size += sizeof (Elf32_External_Rela);
9557       else
9558         mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
9559       h->needs_copy = 1;
9560     }
9561
9562   /* All relocations against this symbol that could have been made
9563      dynamic will now refer to the local copy instead.  */
9564   hmips->possibly_dynamic_relocs = 0;
9565
9566   return _bfd_elf_adjust_dynamic_copy (info, h, s);
9567 }
9568 \f
9569 /* This function is called after all the input files have been read,
9570    and the input sections have been assigned to output sections.  We
9571    check for any mips16 stub sections that we can discard.  */
9572
9573 bfd_boolean
9574 _bfd_mips_elf_always_size_sections (bfd *output_bfd,
9575                                     struct bfd_link_info *info)
9576 {
9577   asection *sect;
9578   struct mips_elf_link_hash_table *htab;
9579   struct mips_htab_traverse_info hti;
9580
9581   htab = mips_elf_hash_table (info);
9582   BFD_ASSERT (htab != NULL);
9583
9584   /* The .reginfo section has a fixed size.  */
9585   sect = bfd_get_section_by_name (output_bfd, ".reginfo");
9586   if (sect != NULL)
9587     {
9588       bfd_set_section_size (sect, sizeof (Elf32_External_RegInfo));
9589       sect->flags |= SEC_FIXED_SIZE | SEC_HAS_CONTENTS;
9590     }
9591
9592   /* The .MIPS.abiflags section has a fixed size.  */
9593   sect = bfd_get_section_by_name (output_bfd, ".MIPS.abiflags");
9594   if (sect != NULL)
9595     {
9596       bfd_set_section_size (sect, sizeof (Elf_External_ABIFlags_v0));
9597       sect->flags |= SEC_FIXED_SIZE | SEC_HAS_CONTENTS;
9598     }
9599
9600   hti.info = info;
9601   hti.output_bfd = output_bfd;
9602   hti.error = FALSE;
9603   mips_elf_link_hash_traverse (mips_elf_hash_table (info),
9604                                mips_elf_check_symbols, &hti);
9605   if (hti.error)
9606     return FALSE;
9607
9608   return TRUE;
9609 }
9610
9611 /* If the link uses a GOT, lay it out and work out its size.  */
9612
9613 static bfd_boolean
9614 mips_elf_lay_out_got (bfd *output_bfd, struct bfd_link_info *info)
9615 {
9616   bfd *dynobj;
9617   asection *s;
9618   struct mips_got_info *g;
9619   bfd_size_type loadable_size = 0;
9620   bfd_size_type page_gotno;
9621   bfd *ibfd;
9622   struct mips_elf_traverse_got_arg tga;
9623   struct mips_elf_link_hash_table *htab;
9624
9625   htab = mips_elf_hash_table (info);
9626   BFD_ASSERT (htab != NULL);
9627
9628   s = htab->root.sgot;
9629   if (s == NULL)
9630     return TRUE;
9631
9632   dynobj = elf_hash_table (info)->dynobj;
9633   g = htab->got_info;
9634
9635   /* Allocate room for the reserved entries.  VxWorks always reserves
9636      3 entries; other objects only reserve 2 entries.  */
9637   BFD_ASSERT (g->assigned_low_gotno == 0);
9638   if (htab->is_vxworks)
9639     htab->reserved_gotno = 3;
9640   else
9641     htab->reserved_gotno = 2;
9642   g->local_gotno += htab->reserved_gotno;
9643   g->assigned_low_gotno = htab->reserved_gotno;
9644
9645   /* Decide which symbols need to go in the global part of the GOT and
9646      count the number of reloc-only GOT symbols.  */
9647   mips_elf_link_hash_traverse (htab, mips_elf_count_got_symbols, info);
9648
9649   if (!mips_elf_resolve_final_got_entries (info, g))
9650     return FALSE;
9651
9652   /* Calculate the total loadable size of the output.  That
9653      will give us the maximum number of GOT_PAGE entries
9654      required.  */
9655   for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link.next)
9656     {
9657       asection *subsection;
9658
9659       for (subsection = ibfd->sections;
9660            subsection;
9661            subsection = subsection->next)
9662         {
9663           if ((subsection->flags & SEC_ALLOC) == 0)
9664             continue;
9665           loadable_size += ((subsection->size + 0xf)
9666                             &~ (bfd_size_type) 0xf);
9667         }
9668     }
9669
9670   if (htab->is_vxworks)
9671     /* There's no need to allocate page entries for VxWorks; R_MIPS*_GOT16
9672        relocations against local symbols evaluate to "G", and the EABI does
9673        not include R_MIPS_GOT_PAGE.  */
9674     page_gotno = 0;
9675   else
9676     /* Assume there are two loadable segments consisting of contiguous
9677        sections.  Is 5 enough?  */
9678     page_gotno = (loadable_size >> 16) + 5;
9679
9680   /* Choose the smaller of the two page estimates; both are intended to be
9681      conservative.  */
9682   if (page_gotno > g->page_gotno)
9683     page_gotno = g->page_gotno;
9684
9685   g->local_gotno += page_gotno;
9686   g->assigned_high_gotno = g->local_gotno - 1;
9687
9688   s->size += g->local_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
9689   s->size += g->global_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
9690   s->size += g->tls_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
9691
9692   /* VxWorks does not support multiple GOTs.  It initializes $gp to
9693      __GOTT_BASE__[__GOTT_INDEX__], the value of which is set by the
9694      dynamic loader.  */
9695   if (!htab->is_vxworks && s->size > MIPS_ELF_GOT_MAX_SIZE (info))
9696     {
9697       if (!mips_elf_multi_got (output_bfd, info, s, page_gotno))
9698         return FALSE;
9699     }
9700   else
9701     {
9702       /* Record that all bfds use G.  This also has the effect of freeing
9703          the per-bfd GOTs, which we no longer need.  */
9704       for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link.next)
9705         if (mips_elf_bfd_got (ibfd, FALSE))
9706           mips_elf_replace_bfd_got (ibfd, g);
9707       mips_elf_replace_bfd_got (output_bfd, g);
9708
9709       /* Set up TLS entries.  */
9710       g->tls_assigned_gotno = g->global_gotno + g->local_gotno;
9711       tga.info = info;
9712       tga.g = g;
9713       tga.value = MIPS_ELF_GOT_SIZE (output_bfd);
9714       htab_traverse (g->got_entries, mips_elf_initialize_tls_index, &tga);
9715       if (!tga.g)
9716         return FALSE;
9717       BFD_ASSERT (g->tls_assigned_gotno
9718                   == g->global_gotno + g->local_gotno + g->tls_gotno);
9719
9720       /* Each VxWorks GOT entry needs an explicit relocation.  */
9721       if (htab->is_vxworks && bfd_link_pic (info))
9722         g->relocs += g->global_gotno + g->local_gotno - htab->reserved_gotno;
9723
9724       /* Allocate room for the TLS relocations.  */
9725       if (g->relocs)
9726         mips_elf_allocate_dynamic_relocations (dynobj, info, g->relocs);
9727     }
9728
9729   return TRUE;
9730 }
9731
9732 /* Estimate the size of the .MIPS.stubs section.  */
9733
9734 static void
9735 mips_elf_estimate_stub_size (bfd *output_bfd, struct bfd_link_info *info)
9736 {
9737   struct mips_elf_link_hash_table *htab;
9738   bfd_size_type dynsymcount;
9739
9740   htab = mips_elf_hash_table (info);
9741   BFD_ASSERT (htab != NULL);
9742
9743   if (htab->lazy_stub_count == 0)
9744     return;
9745
9746   /* IRIX rld assumes that a function stub isn't at the end of the .text
9747      section, so add a dummy entry to the end.  */
9748   htab->lazy_stub_count++;
9749
9750   /* Get a worst-case estimate of the number of dynamic symbols needed.
9751      At this point, dynsymcount does not account for section symbols
9752      and count_section_dynsyms may overestimate the number that will
9753      be needed.  */
9754   dynsymcount = (elf_hash_table (info)->dynsymcount
9755                  + count_section_dynsyms (output_bfd, info));
9756
9757   /* Determine the size of one stub entry.  There's no disadvantage
9758      from using microMIPS code here, so for the sake of pure-microMIPS
9759      binaries we prefer it whenever there's any microMIPS code in
9760      output produced at all.  This has a benefit of stubs being
9761      shorter by 4 bytes each too, unless in the insn32 mode.  */
9762   if (!MICROMIPS_P (output_bfd))
9763     htab->function_stub_size = (dynsymcount > 0x10000
9764                                 ? MIPS_FUNCTION_STUB_BIG_SIZE
9765                                 : MIPS_FUNCTION_STUB_NORMAL_SIZE);
9766   else if (htab->insn32)
9767     htab->function_stub_size = (dynsymcount > 0x10000
9768                                 ? MICROMIPS_INSN32_FUNCTION_STUB_BIG_SIZE
9769                                 : MICROMIPS_INSN32_FUNCTION_STUB_NORMAL_SIZE);
9770   else
9771     htab->function_stub_size = (dynsymcount > 0x10000
9772                                 ? MICROMIPS_FUNCTION_STUB_BIG_SIZE
9773                                 : MICROMIPS_FUNCTION_STUB_NORMAL_SIZE);
9774
9775   htab->sstubs->size = htab->lazy_stub_count * htab->function_stub_size;
9776 }
9777
9778 /* A mips_elf_link_hash_traverse callback for which DATA points to a
9779    mips_htab_traverse_info.  If H needs a traditional MIPS lazy-binding
9780    stub, allocate an entry in the stubs section.  */
9781
9782 static bfd_boolean
9783 mips_elf_allocate_lazy_stub (struct mips_elf_link_hash_entry *h, void *data)
9784 {
9785   struct mips_htab_traverse_info *hti = data;
9786   struct mips_elf_link_hash_table *htab;
9787   struct bfd_link_info *info;
9788   bfd *output_bfd;
9789
9790   info = hti->info;
9791   output_bfd = hti->output_bfd;
9792   htab = mips_elf_hash_table (info);
9793   BFD_ASSERT (htab != NULL);
9794
9795   if (h->needs_lazy_stub)
9796     {
9797       bfd_boolean micromips_p = MICROMIPS_P (output_bfd);
9798       unsigned int other = micromips_p ? STO_MICROMIPS : 0;
9799       bfd_vma isa_bit = micromips_p;
9800
9801       BFD_ASSERT (htab->root.dynobj != NULL);
9802       if (h->root.plt.plist == NULL)
9803         h->root.plt.plist = mips_elf_make_plt_record (htab->sstubs->owner);
9804       if (h->root.plt.plist == NULL)
9805         {
9806           hti->error = TRUE;
9807           return FALSE;
9808         }
9809       h->root.root.u.def.section = htab->sstubs;
9810       h->root.root.u.def.value = htab->sstubs->size + isa_bit;
9811       h->root.plt.plist->stub_offset = htab->sstubs->size;
9812       h->root.other = other;
9813       htab->sstubs->size += htab->function_stub_size;
9814     }
9815   return TRUE;
9816 }
9817
9818 /* Allocate offsets in the stubs section to each symbol that needs one.
9819    Set the final size of the .MIPS.stub section.  */
9820
9821 static bfd_boolean
9822 mips_elf_lay_out_lazy_stubs (struct bfd_link_info *info)
9823 {
9824   bfd *output_bfd = info->output_bfd;
9825   bfd_boolean micromips_p = MICROMIPS_P (output_bfd);
9826   unsigned int other = micromips_p ? STO_MICROMIPS : 0;
9827   bfd_vma isa_bit = micromips_p;
9828   struct mips_elf_link_hash_table *htab;
9829   struct mips_htab_traverse_info hti;
9830   struct elf_link_hash_entry *h;
9831   bfd *dynobj;
9832
9833   htab = mips_elf_hash_table (info);
9834   BFD_ASSERT (htab != NULL);
9835
9836   if (htab->lazy_stub_count == 0)
9837     return TRUE;
9838
9839   htab->sstubs->size = 0;
9840   hti.info = info;
9841   hti.output_bfd = output_bfd;
9842   hti.error = FALSE;
9843   mips_elf_link_hash_traverse (htab, mips_elf_allocate_lazy_stub, &hti);
9844   if (hti.error)
9845     return FALSE;
9846   htab->sstubs->size += htab->function_stub_size;
9847   BFD_ASSERT (htab->sstubs->size
9848               == htab->lazy_stub_count * htab->function_stub_size);
9849
9850   dynobj = elf_hash_table (info)->dynobj;
9851   BFD_ASSERT (dynobj != NULL);
9852   h = _bfd_elf_define_linkage_sym (dynobj, info, htab->sstubs, "_MIPS_STUBS_");
9853   if (h == NULL)
9854     return FALSE;
9855   h->root.u.def.value = isa_bit;
9856   h->other = other;
9857   h->type = STT_FUNC;
9858
9859   return TRUE;
9860 }
9861
9862 /* A mips_elf_link_hash_traverse callback for which DATA points to a
9863    bfd_link_info.  If H uses the address of a PLT entry as the value
9864    of the symbol, then set the entry in the symbol table now.  Prefer
9865    a standard MIPS PLT entry.  */
9866
9867 static bfd_boolean
9868 mips_elf_set_plt_sym_value (struct mips_elf_link_hash_entry *h, void *data)
9869 {
9870   struct bfd_link_info *info = data;
9871   bfd_boolean micromips_p = MICROMIPS_P (info->output_bfd);
9872   struct mips_elf_link_hash_table *htab;
9873   unsigned int other;
9874   bfd_vma isa_bit;
9875   bfd_vma val;
9876
9877   htab = mips_elf_hash_table (info);
9878   BFD_ASSERT (htab != NULL);
9879
9880   if (h->use_plt_entry)
9881     {
9882       BFD_ASSERT (h->root.plt.plist != NULL);
9883       BFD_ASSERT (h->root.plt.plist->mips_offset != MINUS_ONE
9884                   || h->root.plt.plist->comp_offset != MINUS_ONE);
9885
9886       val = htab->plt_header_size;
9887       if (h->root.plt.plist->mips_offset != MINUS_ONE)
9888         {
9889           isa_bit = 0;
9890           val += h->root.plt.plist->mips_offset;
9891           other = 0;
9892         }
9893       else
9894         {
9895           isa_bit = 1;
9896           val += htab->plt_mips_offset + h->root.plt.plist->comp_offset;
9897           other = micromips_p ? STO_MICROMIPS : STO_MIPS16;
9898         }
9899       val += isa_bit;
9900       /* For VxWorks, point at the PLT load stub rather than the lazy
9901          resolution stub; this stub will become the canonical function
9902          address.  */
9903       if (htab->is_vxworks)
9904         val += 8;
9905
9906       h->root.root.u.def.section = htab->root.splt;
9907       h->root.root.u.def.value = val;
9908       h->root.other = other;
9909     }
9910
9911   return TRUE;
9912 }
9913
9914 /* Set the sizes of the dynamic sections.  */
9915
9916 bfd_boolean
9917 _bfd_mips_elf_size_dynamic_sections (bfd *output_bfd,
9918                                      struct bfd_link_info *info)
9919 {
9920   bfd *dynobj;
9921   asection *s, *sreldyn;
9922   bfd_boolean reltext;
9923   struct mips_elf_link_hash_table *htab;
9924
9925   htab = mips_elf_hash_table (info);
9926   BFD_ASSERT (htab != NULL);
9927   dynobj = elf_hash_table (info)->dynobj;
9928   BFD_ASSERT (dynobj != NULL);
9929
9930   if (elf_hash_table (info)->dynamic_sections_created)
9931     {
9932       /* Set the contents of the .interp section to the interpreter.  */
9933       if (bfd_link_executable (info) && !info->nointerp)
9934         {
9935           s = bfd_get_linker_section (dynobj, ".interp");
9936           BFD_ASSERT (s != NULL);
9937           s->size
9938             = strlen (ELF_DYNAMIC_INTERPRETER (output_bfd)) + 1;
9939           s->contents
9940             = (bfd_byte *) ELF_DYNAMIC_INTERPRETER (output_bfd);
9941         }
9942
9943       /* Figure out the size of the PLT header if we know that we
9944          are using it.  For the sake of cache alignment always use
9945          a standard header whenever any standard entries are present
9946          even if microMIPS entries are present as well.  This also
9947          lets the microMIPS header rely on the value of $v0 only set
9948          by microMIPS entries, for a small size reduction.
9949
9950          Set symbol table entry values for symbols that use the
9951          address of their PLT entry now that we can calculate it.
9952
9953          Also create the _PROCEDURE_LINKAGE_TABLE_ symbol if we
9954          haven't already in _bfd_elf_create_dynamic_sections.  */
9955       if (htab->root.splt && htab->plt_mips_offset + htab->plt_comp_offset != 0)
9956         {
9957           bfd_boolean micromips_p = (MICROMIPS_P (output_bfd)
9958                                      && !htab->plt_mips_offset);
9959           unsigned int other = micromips_p ? STO_MICROMIPS : 0;
9960           bfd_vma isa_bit = micromips_p;
9961           struct elf_link_hash_entry *h;
9962           bfd_vma size;
9963
9964           BFD_ASSERT (htab->use_plts_and_copy_relocs);
9965           BFD_ASSERT (htab->root.sgotplt->size == 0);
9966           BFD_ASSERT (htab->root.splt->size == 0);
9967
9968           if (htab->is_vxworks && bfd_link_pic (info))
9969             size = 4 * ARRAY_SIZE (mips_vxworks_shared_plt0_entry);
9970           else if (htab->is_vxworks)
9971             size = 4 * ARRAY_SIZE (mips_vxworks_exec_plt0_entry);
9972           else if (ABI_64_P (output_bfd))
9973             size = 4 * ARRAY_SIZE (mips_n64_exec_plt0_entry);
9974           else if (ABI_N32_P (output_bfd))
9975             size = 4 * ARRAY_SIZE (mips_n32_exec_plt0_entry);
9976           else if (!micromips_p)
9977             size = 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry);
9978           else if (htab->insn32)
9979             size = 2 * ARRAY_SIZE (micromips_insn32_o32_exec_plt0_entry);
9980           else
9981             size = 2 * ARRAY_SIZE (micromips_o32_exec_plt0_entry);
9982
9983           htab->plt_header_is_comp = micromips_p;
9984           htab->plt_header_size = size;
9985           htab->root.splt->size = (size
9986                                    + htab->plt_mips_offset
9987                                    + htab->plt_comp_offset);
9988           htab->root.sgotplt->size = (htab->plt_got_index
9989                                       * MIPS_ELF_GOT_SIZE (dynobj));
9990
9991           mips_elf_link_hash_traverse (htab, mips_elf_set_plt_sym_value, info);
9992
9993           if (htab->root.hplt == NULL)
9994             {
9995               h = _bfd_elf_define_linkage_sym (dynobj, info, htab->root.splt,
9996                                                "_PROCEDURE_LINKAGE_TABLE_");
9997               htab->root.hplt = h;
9998               if (h == NULL)
9999                 return FALSE;
10000             }
10001
10002           h = htab->root.hplt;
10003           h->root.u.def.value = isa_bit;
10004           h->other = other;
10005           h->type = STT_FUNC;
10006         }
10007     }
10008
10009   /* Allocate space for global sym dynamic relocs.  */
10010   elf_link_hash_traverse (&htab->root, allocate_dynrelocs, info);
10011
10012   mips_elf_estimate_stub_size (output_bfd, info);
10013
10014   if (!mips_elf_lay_out_got (output_bfd, info))
10015     return FALSE;
10016
10017   mips_elf_lay_out_lazy_stubs (info);
10018
10019   /* The check_relocs and adjust_dynamic_symbol entry points have
10020      determined the sizes of the various dynamic sections.  Allocate
10021      memory for them.  */
10022   reltext = FALSE;
10023   for (s = dynobj->sections; s != NULL; s = s->next)
10024     {
10025       const char *name;
10026
10027       /* It's OK to base decisions on the section name, because none
10028          of the dynobj section names depend upon the input files.  */
10029       name = bfd_section_name (s);
10030
10031       if ((s->flags & SEC_LINKER_CREATED) == 0)
10032         continue;
10033
10034       if (CONST_STRNEQ (name, ".rel"))
10035         {
10036           if (s->size != 0)
10037             {
10038               const char *outname;
10039               asection *target;
10040
10041               /* If this relocation section applies to a read only
10042                  section, then we probably need a DT_TEXTREL entry.
10043                  If the relocation section is .rel(a).dyn, we always
10044                  assert a DT_TEXTREL entry rather than testing whether
10045                  there exists a relocation to a read only section or
10046                  not.  */
10047               outname = bfd_section_name (s->output_section);
10048               target = bfd_get_section_by_name (output_bfd, outname + 4);
10049               if ((target != NULL
10050                    && (target->flags & SEC_READONLY) != 0
10051                    && (target->flags & SEC_ALLOC) != 0)
10052                   || strcmp (outname, MIPS_ELF_REL_DYN_NAME (info)) == 0)
10053                 reltext = TRUE;
10054
10055               /* We use the reloc_count field as a counter if we need
10056                  to copy relocs into the output file.  */
10057               if (strcmp (name, MIPS_ELF_REL_DYN_NAME (info)) != 0)
10058                 s->reloc_count = 0;
10059
10060               /* If combreloc is enabled, elf_link_sort_relocs() will
10061                  sort relocations, but in a different way than we do,
10062                  and before we're done creating relocations.  Also, it
10063                  will move them around between input sections'
10064                  relocation's contents, so our sorting would be
10065                  broken, so don't let it run.  */
10066               info->combreloc = 0;
10067             }
10068         }
10069       else if (bfd_link_executable (info)
10070                && ! mips_elf_hash_table (info)->use_rld_obj_head
10071                && CONST_STRNEQ (name, ".rld_map"))
10072         {
10073           /* We add a room for __rld_map.  It will be filled in by the
10074              rtld to contain a pointer to the _r_debug structure.  */
10075           s->size += MIPS_ELF_RLD_MAP_SIZE (output_bfd);
10076         }
10077       else if (SGI_COMPAT (output_bfd)
10078                && CONST_STRNEQ (name, ".compact_rel"))
10079         s->size += mips_elf_hash_table (info)->compact_rel_size;
10080       else if (s == htab->root.splt)
10081         {
10082           /* If the last PLT entry has a branch delay slot, allocate
10083              room for an extra nop to fill the delay slot.  This is
10084              for CPUs without load interlocking.  */
10085           if (! LOAD_INTERLOCKS_P (output_bfd)
10086               && ! htab->is_vxworks && s->size > 0)
10087             s->size += 4;
10088         }
10089       else if (! CONST_STRNEQ (name, ".init")
10090                && s != htab->root.sgot
10091                && s != htab->root.sgotplt
10092                && s != htab->sstubs
10093                && s != htab->root.sdynbss
10094                && s != htab->root.sdynrelro)
10095         {
10096           /* It's not one of our sections, so don't allocate space.  */
10097           continue;
10098         }
10099
10100       if (s->size == 0)
10101         {
10102           s->flags |= SEC_EXCLUDE;
10103           continue;
10104         }
10105
10106       if ((s->flags & SEC_HAS_CONTENTS) == 0)
10107         continue;
10108
10109       /* Allocate memory for the section contents.  */
10110       s->contents = bfd_zalloc (dynobj, s->size);
10111       if (s->contents == NULL)
10112         {
10113           bfd_set_error (bfd_error_no_memory);
10114           return FALSE;
10115         }
10116     }
10117
10118   if (elf_hash_table (info)->dynamic_sections_created)
10119     {
10120       /* Add some entries to the .dynamic section.  We fill in the
10121          values later, in _bfd_mips_elf_finish_dynamic_sections, but we
10122          must add the entries now so that we get the correct size for
10123          the .dynamic section.  */
10124
10125       /* SGI object has the equivalence of DT_DEBUG in the
10126          DT_MIPS_RLD_MAP entry.  This must come first because glibc
10127          only fills in DT_MIPS_RLD_MAP (not DT_DEBUG) and some tools
10128          may only look at the first one they see.  */
10129       if (!bfd_link_pic (info)
10130           && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_MAP, 0))
10131         return FALSE;
10132
10133       if (bfd_link_executable (info)
10134           && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_MAP_REL, 0))
10135         return FALSE;
10136
10137       /* The DT_DEBUG entry may be filled in by the dynamic linker and
10138          used by the debugger.  */
10139       if (bfd_link_executable (info)
10140           && !SGI_COMPAT (output_bfd)
10141           && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_DEBUG, 0))
10142         return FALSE;
10143
10144       if (reltext && (SGI_COMPAT (output_bfd) || htab->is_vxworks))
10145         info->flags |= DF_TEXTREL;
10146
10147       if ((info->flags & DF_TEXTREL) != 0)
10148         {
10149           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_TEXTREL, 0))
10150             return FALSE;
10151
10152           /* Clear the DF_TEXTREL flag.  It will be set again if we
10153              write out an actual text relocation; we may not, because
10154              at this point we do not know whether e.g. any .eh_frame
10155              absolute relocations have been converted to PC-relative.  */
10156           info->flags &= ~DF_TEXTREL;
10157         }
10158
10159       if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTGOT, 0))
10160         return FALSE;
10161
10162       sreldyn = mips_elf_rel_dyn_section (info, FALSE);
10163       if (htab->is_vxworks)
10164         {
10165           /* VxWorks uses .rela.dyn instead of .rel.dyn.  It does not
10166              use any of the DT_MIPS_* tags.  */
10167           if (sreldyn && sreldyn->size > 0)
10168             {
10169               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELA, 0))
10170                 return FALSE;
10171
10172               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELASZ, 0))
10173                 return FALSE;
10174
10175               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELAENT, 0))
10176                 return FALSE;
10177             }
10178         }
10179       else
10180         {
10181           if (sreldyn && sreldyn->size > 0
10182               && !bfd_is_abs_section (sreldyn->output_section))
10183             {
10184               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_REL, 0))
10185                 return FALSE;
10186
10187               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELSZ, 0))
10188                 return FALSE;
10189
10190               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELENT, 0))
10191                 return FALSE;
10192             }
10193
10194           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_VERSION, 0))
10195             return FALSE;
10196
10197           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_FLAGS, 0))
10198             return FALSE;
10199
10200           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_BASE_ADDRESS, 0))
10201             return FALSE;
10202
10203           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_LOCAL_GOTNO, 0))
10204             return FALSE;
10205
10206           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_SYMTABNO, 0))
10207             return FALSE;
10208
10209           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_UNREFEXTNO, 0))
10210             return FALSE;
10211
10212           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_GOTSYM, 0))
10213             return FALSE;
10214
10215           if (info->emit_gnu_hash
10216               && ! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_XHASH, 0))
10217             return FALSE;
10218
10219           if (IRIX_COMPAT (dynobj) == ict_irix5
10220               && ! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_HIPAGENO, 0))
10221             return FALSE;
10222
10223           if (IRIX_COMPAT (dynobj) == ict_irix6
10224               && (bfd_get_section_by_name
10225                   (output_bfd, MIPS_ELF_OPTIONS_SECTION_NAME (dynobj)))
10226               && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_OPTIONS, 0))
10227             return FALSE;
10228         }
10229       if (htab->root.splt->size > 0)
10230         {
10231           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTREL, 0))
10232             return FALSE;
10233
10234           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_JMPREL, 0))
10235             return FALSE;
10236
10237           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTRELSZ, 0))
10238             return FALSE;
10239
10240           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_PLTGOT, 0))
10241             return FALSE;
10242         }
10243       if (htab->is_vxworks
10244           && !elf_vxworks_add_dynamic_entries (output_bfd, info))
10245         return FALSE;
10246     }
10247
10248   return TRUE;
10249 }
10250 \f
10251 /* REL is a relocation in INPUT_BFD that is being copied to OUTPUT_BFD.
10252    Adjust its R_ADDEND field so that it is correct for the output file.
10253    LOCAL_SYMS and LOCAL_SECTIONS are arrays of INPUT_BFD's local symbols
10254    and sections respectively; both use symbol indexes.  */
10255
10256 static void
10257 mips_elf_adjust_addend (bfd *output_bfd, struct bfd_link_info *info,
10258                         bfd *input_bfd, Elf_Internal_Sym *local_syms,
10259                         asection **local_sections, Elf_Internal_Rela *rel)
10260 {
10261   unsigned int r_type, r_symndx;
10262   Elf_Internal_Sym *sym;
10263   asection *sec;
10264
10265   if (mips_elf_local_relocation_p (input_bfd, rel, local_sections))
10266     {
10267       r_type = ELF_R_TYPE (output_bfd, rel->r_info);
10268       if (gprel16_reloc_p (r_type)
10269           || r_type == R_MIPS_GPREL32
10270           || literal_reloc_p (r_type))
10271         {
10272           rel->r_addend += _bfd_get_gp_value (input_bfd);
10273           rel->r_addend -= _bfd_get_gp_value (output_bfd);
10274         }
10275
10276       r_symndx = ELF_R_SYM (output_bfd, rel->r_info);
10277       sym = local_syms + r_symndx;
10278
10279       /* Adjust REL's addend to account for section merging.  */
10280       if (!bfd_link_relocatable (info))
10281         {
10282           sec = local_sections[r_symndx];
10283           _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
10284         }
10285
10286       /* This would normally be done by the rela_normal code in elflink.c.  */
10287       if (ELF_ST_TYPE (sym->st_info) == STT_SECTION)
10288         rel->r_addend += local_sections[r_symndx]->output_offset;
10289     }
10290 }
10291
10292 /* Handle relocations against symbols from removed linkonce sections,
10293    or sections discarded by a linker script.  We use this wrapper around
10294    RELOC_AGAINST_DISCARDED_SECTION to handle triplets of compound relocs
10295    on 64-bit ELF targets.  In this case for any relocation handled, which
10296    always be the first in a triplet, the remaining two have to be processed
10297    together with the first, even if they are R_MIPS_NONE.  It is the symbol
10298    index referred by the first reloc that applies to all the three and the
10299    remaining two never refer to an object symbol.  And it is the final
10300    relocation (the last non-null one) that determines the output field of
10301    the whole relocation so retrieve the corresponding howto structure for
10302    the relocatable field to be cleared by RELOC_AGAINST_DISCARDED_SECTION.
10303
10304    Note that RELOC_AGAINST_DISCARDED_SECTION is a macro that uses "continue"
10305    and therefore requires to be pasted in a loop.  It also defines a block
10306    and does not protect any of its arguments, hence the extra brackets.  */
10307
10308 static void
10309 mips_reloc_against_discarded_section (bfd *output_bfd,
10310                                       struct bfd_link_info *info,
10311                                       bfd *input_bfd, asection *input_section,
10312                                       Elf_Internal_Rela **rel,
10313                                       const Elf_Internal_Rela **relend,
10314                                       bfd_boolean rel_reloc,
10315                                       reloc_howto_type *howto,
10316                                       bfd_byte *contents)
10317 {
10318   const struct elf_backend_data *bed = get_elf_backend_data (output_bfd);
10319   int count = bed->s->int_rels_per_ext_rel;
10320   unsigned int r_type;
10321   int i;
10322
10323   for (i = count - 1; i > 0; i--)
10324     {
10325       r_type = ELF_R_TYPE (output_bfd, (*rel)[i].r_info);
10326       if (r_type != R_MIPS_NONE)
10327         {
10328           howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, r_type, !rel_reloc);
10329           break;
10330         }
10331     }
10332   do
10333     {
10334        RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
10335                                         (*rel), count, (*relend),
10336                                         howto, i, contents);
10337     }
10338   while (0);
10339 }
10340
10341 /* Relocate a MIPS ELF section.  */
10342
10343 bfd_boolean
10344 _bfd_mips_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
10345                                 bfd *input_bfd, asection *input_section,
10346                                 bfd_byte *contents, Elf_Internal_Rela *relocs,
10347                                 Elf_Internal_Sym *local_syms,
10348                                 asection **local_sections)
10349 {
10350   Elf_Internal_Rela *rel;
10351   const Elf_Internal_Rela *relend;
10352   bfd_vma addend = 0;
10353   bfd_boolean use_saved_addend_p = FALSE;
10354
10355   relend = relocs + input_section->reloc_count;
10356   for (rel = relocs; rel < relend; ++rel)
10357     {
10358       const char *name;
10359       bfd_vma value = 0;
10360       reloc_howto_type *howto;
10361       bfd_boolean cross_mode_jump_p = FALSE;
10362       /* TRUE if the relocation is a RELA relocation, rather than a
10363          REL relocation.  */
10364       bfd_boolean rela_relocation_p = TRUE;
10365       unsigned int r_type = ELF_R_TYPE (output_bfd, rel->r_info);
10366       const char *msg;
10367       unsigned long r_symndx;
10368       asection *sec;
10369       Elf_Internal_Shdr *symtab_hdr;
10370       struct elf_link_hash_entry *h;
10371       bfd_boolean rel_reloc;
10372
10373       rel_reloc = (NEWABI_P (input_bfd)
10374                    && mips_elf_rel_relocation_p (input_bfd, input_section,
10375                                                  relocs, rel));
10376       /* Find the relocation howto for this relocation.  */
10377       howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, r_type, !rel_reloc);
10378
10379       r_symndx = ELF_R_SYM (input_bfd, rel->r_info);
10380       symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
10381       if (mips_elf_local_relocation_p (input_bfd, rel, local_sections))
10382         {
10383           sec = local_sections[r_symndx];
10384           h = NULL;
10385         }
10386       else
10387         {
10388           unsigned long extsymoff;
10389
10390           extsymoff = 0;
10391           if (!elf_bad_symtab (input_bfd))
10392             extsymoff = symtab_hdr->sh_info;
10393           h = elf_sym_hashes (input_bfd) [r_symndx - extsymoff];
10394           while (h->root.type == bfd_link_hash_indirect
10395                  || h->root.type == bfd_link_hash_warning)
10396             h = (struct elf_link_hash_entry *) h->root.u.i.link;
10397
10398           sec = NULL;
10399           if (h->root.type == bfd_link_hash_defined
10400               || h->root.type == bfd_link_hash_defweak)
10401             sec = h->root.u.def.section;
10402         }
10403
10404       if (sec != NULL && discarded_section (sec))
10405         {
10406           mips_reloc_against_discarded_section (output_bfd, info, input_bfd,
10407                                                 input_section, &rel, &relend,
10408                                                 rel_reloc, howto, contents);
10409           continue;
10410         }
10411
10412       if (r_type == R_MIPS_64 && ! NEWABI_P (input_bfd))
10413         {
10414           /* Some 32-bit code uses R_MIPS_64.  In particular, people use
10415              64-bit code, but make sure all their addresses are in the
10416              lowermost or uppermost 32-bit section of the 64-bit address
10417              space.  Thus, when they use an R_MIPS_64 they mean what is
10418              usually meant by R_MIPS_32, with the exception that the
10419              stored value is sign-extended to 64 bits.  */
10420           howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, R_MIPS_32, FALSE);
10421
10422           /* On big-endian systems, we need to lie about the position
10423              of the reloc.  */
10424           if (bfd_big_endian (input_bfd))
10425             rel->r_offset += 4;
10426         }
10427
10428       if (!use_saved_addend_p)
10429         {
10430           /* If these relocations were originally of the REL variety,
10431              we must pull the addend out of the field that will be
10432              relocated.  Otherwise, we simply use the contents of the
10433              RELA relocation.  */
10434           if (mips_elf_rel_relocation_p (input_bfd, input_section,
10435                                          relocs, rel))
10436             {
10437               rela_relocation_p = FALSE;
10438               addend = mips_elf_read_rel_addend (input_bfd, rel,
10439                                                  howto, contents);
10440               if (hi16_reloc_p (r_type)
10441                   || (got16_reloc_p (r_type)
10442                       && mips_elf_local_relocation_p (input_bfd, rel,
10443                                                       local_sections)))
10444                 {
10445                   if (!mips_elf_add_lo16_rel_addend (input_bfd, rel, relend,
10446                                                      contents, &addend))
10447                     {
10448                       if (h)
10449                         name = h->root.root.string;
10450                       else
10451                         name = bfd_elf_sym_name (input_bfd, symtab_hdr,
10452                                                  local_syms + r_symndx,
10453                                                  sec);
10454                       _bfd_error_handler
10455                         /* xgettext:c-format */
10456                         (_("%pB: can't find matching LO16 reloc against `%s'"
10457                            " for %s at %#" PRIx64 " in section `%pA'"),
10458                          input_bfd, name,
10459                          howto->name, (uint64_t) rel->r_offset, input_section);
10460                     }
10461                 }
10462               else
10463                 addend <<= howto->rightshift;
10464             }
10465           else
10466             addend = rel->r_addend;
10467           mips_elf_adjust_addend (output_bfd, info, input_bfd,
10468                                   local_syms, local_sections, rel);
10469         }
10470
10471       if (bfd_link_relocatable (info))
10472         {
10473           if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd)
10474               && bfd_big_endian (input_bfd))
10475             rel->r_offset -= 4;
10476
10477           if (!rela_relocation_p && rel->r_addend)
10478             {
10479               addend += rel->r_addend;
10480               if (hi16_reloc_p (r_type) || got16_reloc_p (r_type))
10481                 addend = mips_elf_high (addend);
10482               else if (r_type == R_MIPS_HIGHER)
10483                 addend = mips_elf_higher (addend);
10484               else if (r_type == R_MIPS_HIGHEST)
10485                 addend = mips_elf_highest (addend);
10486               else
10487                 addend >>= howto->rightshift;
10488
10489               /* We use the source mask, rather than the destination
10490                  mask because the place to which we are writing will be
10491                  source of the addend in the final link.  */
10492               addend &= howto->src_mask;
10493
10494               if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd))
10495                 /* See the comment above about using R_MIPS_64 in the 32-bit
10496                    ABI.  Here, we need to update the addend.  It would be
10497                    possible to get away with just using the R_MIPS_32 reloc
10498                    but for endianness.  */
10499                 {
10500                   bfd_vma sign_bits;
10501                   bfd_vma low_bits;
10502                   bfd_vma high_bits;
10503
10504                   if (addend & ((bfd_vma) 1 << 31))
10505 #ifdef BFD64
10506                     sign_bits = ((bfd_vma) 1 << 32) - 1;
10507 #else
10508                     sign_bits = -1;
10509 #endif
10510                   else
10511                     sign_bits = 0;
10512
10513                   /* If we don't know that we have a 64-bit type,
10514                      do two separate stores.  */
10515                   if (bfd_big_endian (input_bfd))
10516                     {
10517                       /* Store the sign-bits (which are most significant)
10518                          first.  */
10519                       low_bits = sign_bits;
10520                       high_bits = addend;
10521                     }
10522                   else
10523                     {
10524                       low_bits = addend;
10525                       high_bits = sign_bits;
10526                     }
10527                   bfd_put_32 (input_bfd, low_bits,
10528                               contents + rel->r_offset);
10529                   bfd_put_32 (input_bfd, high_bits,
10530                               contents + rel->r_offset + 4);
10531                   continue;
10532                 }
10533
10534               if (! mips_elf_perform_relocation (info, howto, rel, addend,
10535                                                  input_bfd, input_section,
10536                                                  contents, FALSE))
10537                 return FALSE;
10538             }
10539
10540           /* Go on to the next relocation.  */
10541           continue;
10542         }
10543
10544       /* In the N32 and 64-bit ABIs there may be multiple consecutive
10545          relocations for the same offset.  In that case we are
10546          supposed to treat the output of each relocation as the addend
10547          for the next.  */
10548       if (rel + 1 < relend
10549           && rel->r_offset == rel[1].r_offset
10550           && ELF_R_TYPE (input_bfd, rel[1].r_info) != R_MIPS_NONE)
10551         use_saved_addend_p = TRUE;
10552       else
10553         use_saved_addend_p = FALSE;
10554
10555       /* Figure out what value we are supposed to relocate.  */
10556       switch (mips_elf_calculate_relocation (output_bfd, input_bfd,
10557                                              input_section, contents,
10558                                              info, rel, addend, howto,
10559                                              local_syms, local_sections,
10560                                              &value, &name, &cross_mode_jump_p,
10561                                              use_saved_addend_p))
10562         {
10563         case bfd_reloc_continue:
10564           /* There's nothing to do.  */
10565           continue;
10566
10567         case bfd_reloc_undefined:
10568           /* mips_elf_calculate_relocation already called the
10569              undefined_symbol callback.  There's no real point in
10570              trying to perform the relocation at this point, so we
10571              just skip ahead to the next relocation.  */
10572           continue;
10573
10574         case bfd_reloc_notsupported:
10575           msg = _("internal error: unsupported relocation error");
10576           info->callbacks->warning
10577             (info, msg, name, input_bfd, input_section, rel->r_offset);
10578           return FALSE;
10579
10580         case bfd_reloc_overflow:
10581           if (use_saved_addend_p)
10582             /* Ignore overflow until we reach the last relocation for
10583                a given location.  */
10584             ;
10585           else
10586             {
10587               struct mips_elf_link_hash_table *htab;
10588
10589               htab = mips_elf_hash_table (info);
10590               BFD_ASSERT (htab != NULL);
10591               BFD_ASSERT (name != NULL);
10592               if (!htab->small_data_overflow_reported
10593                   && (gprel16_reloc_p (howto->type)
10594                       || literal_reloc_p (howto->type)))
10595                 {
10596                   msg = _("small-data section exceeds 64KB;"
10597                           " lower small-data size limit (see option -G)");
10598
10599                   htab->small_data_overflow_reported = TRUE;
10600                   (*info->callbacks->einfo) ("%P: %s\n", msg);
10601                 }
10602               (*info->callbacks->reloc_overflow)
10603                 (info, NULL, name, howto->name, (bfd_vma) 0,
10604                  input_bfd, input_section, rel->r_offset);
10605             }
10606           break;
10607
10608         case bfd_reloc_ok:
10609           break;
10610
10611         case bfd_reloc_outofrange:
10612           msg = NULL;
10613           if (jal_reloc_p (howto->type))
10614             msg = (cross_mode_jump_p
10615                    ? _("cannot convert a jump to JALX "
10616                        "for a non-word-aligned address")
10617                    : (howto->type == R_MIPS16_26
10618                       ? _("jump to a non-word-aligned address")
10619                       : _("jump to a non-instruction-aligned address")));
10620           else if (b_reloc_p (howto->type))
10621             msg = (cross_mode_jump_p
10622                    ? _("cannot convert a branch to JALX "
10623                        "for a non-word-aligned address")
10624                    : _("branch to a non-instruction-aligned address"));
10625           else if (aligned_pcrel_reloc_p (howto->type))
10626             msg = _("PC-relative load from unaligned address");
10627           if (msg)
10628             {
10629               info->callbacks->einfo
10630                 ("%X%H: %s\n", input_bfd, input_section, rel->r_offset, msg);
10631               break;
10632             }
10633           /* Fall through.  */
10634
10635         default:
10636           abort ();
10637           break;
10638         }
10639
10640       /* If we've got another relocation for the address, keep going
10641          until we reach the last one.  */
10642       if (use_saved_addend_p)
10643         {
10644           addend = value;
10645           continue;
10646         }
10647
10648       if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd))
10649         /* See the comment above about using R_MIPS_64 in the 32-bit
10650            ABI.  Until now, we've been using the HOWTO for R_MIPS_32;
10651            that calculated the right value.  Now, however, we
10652            sign-extend the 32-bit result to 64-bits, and store it as a
10653            64-bit value.  We are especially generous here in that we
10654            go to extreme lengths to support this usage on systems with
10655            only a 32-bit VMA.  */
10656         {
10657           bfd_vma sign_bits;
10658           bfd_vma low_bits;
10659           bfd_vma high_bits;
10660
10661           if (value & ((bfd_vma) 1 << 31))
10662 #ifdef BFD64
10663             sign_bits = ((bfd_vma) 1 << 32) - 1;
10664 #else
10665             sign_bits = -1;
10666 #endif
10667           else
10668             sign_bits = 0;
10669
10670           /* If we don't know that we have a 64-bit type,
10671              do two separate stores.  */
10672           if (bfd_big_endian (input_bfd))
10673             {
10674               /* Undo what we did above.  */
10675               rel->r_offset -= 4;
10676               /* Store the sign-bits (which are most significant)
10677                  first.  */
10678               low_bits = sign_bits;
10679               high_bits = value;
10680             }
10681           else
10682             {
10683               low_bits = value;
10684               high_bits = sign_bits;
10685             }
10686           bfd_put_32 (input_bfd, low_bits,
10687                       contents + rel->r_offset);
10688           bfd_put_32 (input_bfd, high_bits,
10689                       contents + rel->r_offset + 4);
10690           continue;
10691         }
10692
10693       /* Actually perform the relocation.  */
10694       if (! mips_elf_perform_relocation (info, howto, rel, value,
10695                                          input_bfd, input_section,
10696                                          contents, cross_mode_jump_p))
10697         return FALSE;
10698     }
10699
10700   return TRUE;
10701 }
10702 \f
10703 /* A function that iterates over each entry in la25_stubs and fills
10704    in the code for each one.  DATA points to a mips_htab_traverse_info.  */
10705
10706 static int
10707 mips_elf_create_la25_stub (void **slot, void *data)
10708 {
10709   struct mips_htab_traverse_info *hti;
10710   struct mips_elf_link_hash_table *htab;
10711   struct mips_elf_la25_stub *stub;
10712   asection *s;
10713   bfd_byte *loc;
10714   bfd_vma offset, target, target_high, target_low;
10715   bfd_vma branch_pc;
10716   bfd_signed_vma pcrel_offset = 0;
10717
10718   stub = (struct mips_elf_la25_stub *) *slot;
10719   hti = (struct mips_htab_traverse_info *) data;
10720   htab = mips_elf_hash_table (hti->info);
10721   BFD_ASSERT (htab != NULL);
10722
10723   /* Create the section contents, if we haven't already.  */
10724   s = stub->stub_section;
10725   loc = s->contents;
10726   if (loc == NULL)
10727     {
10728       loc = bfd_malloc (s->size);
10729       if (loc == NULL)
10730         {
10731           hti->error = TRUE;
10732           return FALSE;
10733         }
10734       s->contents = loc;
10735     }
10736
10737   /* Work out where in the section this stub should go.  */
10738   offset = stub->offset;
10739
10740   /* We add 8 here to account for the LUI/ADDIU instructions
10741      before the branch instruction.  This cannot be moved down to
10742      where pcrel_offset is calculated as 's' is updated in
10743      mips_elf_get_la25_target.  */
10744   branch_pc = s->output_section->vma + s->output_offset + offset + 8;
10745
10746   /* Work out the target address.  */
10747   target = mips_elf_get_la25_target (stub, &s);
10748   target += s->output_section->vma + s->output_offset;
10749
10750   target_high = ((target + 0x8000) >> 16) & 0xffff;
10751   target_low = (target & 0xffff);
10752
10753   /* Calculate the PC of the compact branch instruction (for the case where
10754      compact branches are used for either microMIPSR6 or MIPSR6 with
10755      compact branches.  Add 4-bytes to account for BC using the PC of the
10756      next instruction as the base.  */
10757   pcrel_offset = target - (branch_pc + 4);
10758
10759   if (stub->stub_section != htab->strampoline)
10760     {
10761       /* This is a simple LUI/ADDIU stub.  Zero out the beginning
10762          of the section and write the two instructions at the end.  */
10763       memset (loc, 0, offset);
10764       loc += offset;
10765       if (ELF_ST_IS_MICROMIPS (stub->h->root.other))
10766         {
10767           bfd_put_micromips_32 (hti->output_bfd,
10768                                 LA25_LUI_MICROMIPS (target_high),
10769                                 loc);
10770           bfd_put_micromips_32 (hti->output_bfd,
10771                                 LA25_ADDIU_MICROMIPS (target_low),
10772                                 loc + 4);
10773         }
10774       else
10775         {
10776           bfd_put_32 (hti->output_bfd, LA25_LUI (target_high), loc);
10777           bfd_put_32 (hti->output_bfd, LA25_ADDIU (target_low), loc + 4);
10778         }
10779     }
10780   else
10781     {
10782       /* This is trampoline.  */
10783       loc += offset;
10784       if (ELF_ST_IS_MICROMIPS (stub->h->root.other))
10785         {
10786           bfd_put_micromips_32 (hti->output_bfd,
10787                                 LA25_LUI_MICROMIPS (target_high), loc);
10788           bfd_put_micromips_32 (hti->output_bfd,
10789                                 LA25_J_MICROMIPS (target), loc + 4);
10790           bfd_put_micromips_32 (hti->output_bfd,
10791                                 LA25_ADDIU_MICROMIPS (target_low), loc + 8);
10792           bfd_put_32 (hti->output_bfd, 0, loc + 12);
10793         }
10794       else
10795         {
10796           bfd_put_32 (hti->output_bfd, LA25_LUI (target_high), loc);
10797           if (MIPSR6_P (hti->output_bfd) && htab->compact_branches)
10798             {
10799               bfd_put_32 (hti->output_bfd, LA25_ADDIU (target_low), loc + 4);
10800               bfd_put_32 (hti->output_bfd, LA25_BC (pcrel_offset), loc + 8);
10801             }
10802           else
10803             {
10804               bfd_put_32 (hti->output_bfd, LA25_J (target), loc + 4);
10805               bfd_put_32 (hti->output_bfd, LA25_ADDIU (target_low), loc + 8);
10806             }
10807           bfd_put_32 (hti->output_bfd, 0, loc + 12);
10808         }
10809     }
10810   return TRUE;
10811 }
10812
10813 /* If NAME is one of the special IRIX6 symbols defined by the linker,
10814    adjust it appropriately now.  */
10815
10816 static void
10817 mips_elf_irix6_finish_dynamic_symbol (bfd *abfd ATTRIBUTE_UNUSED,
10818                                       const char *name, Elf_Internal_Sym *sym)
10819 {
10820   /* The linker script takes care of providing names and values for
10821      these, but we must place them into the right sections.  */
10822   static const char* const text_section_symbols[] = {
10823     "_ftext",
10824     "_etext",
10825     "__dso_displacement",
10826     "__elf_header",
10827     "__program_header_table",
10828     NULL
10829   };
10830
10831   static const char* const data_section_symbols[] = {
10832     "_fdata",
10833     "_edata",
10834     "_end",
10835     "_fbss",
10836     NULL
10837   };
10838
10839   const char* const *p;
10840   int i;
10841
10842   for (i = 0; i < 2; ++i)
10843     for (p = (i == 0) ? text_section_symbols : data_section_symbols;
10844          *p;
10845          ++p)
10846       if (strcmp (*p, name) == 0)
10847         {
10848           /* All of these symbols are given type STT_SECTION by the
10849              IRIX6 linker.  */
10850           sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10851           sym->st_other = STO_PROTECTED;
10852
10853           /* The IRIX linker puts these symbols in special sections.  */
10854           if (i == 0)
10855             sym->st_shndx = SHN_MIPS_TEXT;
10856           else
10857             sym->st_shndx = SHN_MIPS_DATA;
10858
10859           break;
10860         }
10861 }
10862
10863 /* Finish up dynamic symbol handling.  We set the contents of various
10864    dynamic sections here.  */
10865
10866 bfd_boolean
10867 _bfd_mips_elf_finish_dynamic_symbol (bfd *output_bfd,
10868                                      struct bfd_link_info *info,
10869                                      struct elf_link_hash_entry *h,
10870                                      Elf_Internal_Sym *sym)
10871 {
10872   bfd *dynobj;
10873   asection *sgot;
10874   struct mips_got_info *g, *gg;
10875   const char *name;
10876   int idx;
10877   struct mips_elf_link_hash_table *htab;
10878   struct mips_elf_link_hash_entry *hmips;
10879
10880   htab = mips_elf_hash_table (info);
10881   BFD_ASSERT (htab != NULL);
10882   dynobj = elf_hash_table (info)->dynobj;
10883   hmips = (struct mips_elf_link_hash_entry *) h;
10884
10885   BFD_ASSERT (!htab->is_vxworks);
10886
10887   if (h->plt.plist != NULL
10888       && (h->plt.plist->mips_offset != MINUS_ONE
10889           || h->plt.plist->comp_offset != MINUS_ONE))
10890     {
10891       /* We've decided to create a PLT entry for this symbol.  */
10892       bfd_byte *loc;
10893       bfd_vma header_address, got_address;
10894       bfd_vma got_address_high, got_address_low, load;
10895       bfd_vma got_index;
10896       bfd_vma isa_bit;
10897
10898       got_index = h->plt.plist->gotplt_index;
10899
10900       BFD_ASSERT (htab->use_plts_and_copy_relocs);
10901       BFD_ASSERT (h->dynindx != -1);
10902       BFD_ASSERT (htab->root.splt != NULL);
10903       BFD_ASSERT (got_index != MINUS_ONE);
10904       BFD_ASSERT (!h->def_regular);
10905
10906       /* Calculate the address of the PLT header.  */
10907       isa_bit = htab->plt_header_is_comp;
10908       header_address = (htab->root.splt->output_section->vma
10909                         + htab->root.splt->output_offset + isa_bit);
10910
10911       /* Calculate the address of the .got.plt entry.  */
10912       got_address = (htab->root.sgotplt->output_section->vma
10913                      + htab->root.sgotplt->output_offset
10914                      + got_index * MIPS_ELF_GOT_SIZE (dynobj));
10915
10916       got_address_high = ((got_address + 0x8000) >> 16) & 0xffff;
10917       got_address_low = got_address & 0xffff;
10918
10919       /* The PLT sequence is not safe for N64 if .got.plt entry's address
10920          cannot be loaded in two instructions.  */
10921       if (ABI_64_P (output_bfd)
10922           && ((got_address + 0x80008000) & ~(bfd_vma) 0xffffffff) != 0)
10923         {
10924           _bfd_error_handler
10925             /* xgettext:c-format */
10926             (_("%pB: `%pA' entry VMA of %#" PRIx64 " outside the 32-bit range "
10927                "supported; consider using `-Ttext-segment=...'"),
10928              output_bfd,
10929              htab->root.sgotplt->output_section,
10930              (int64_t) got_address);
10931           bfd_set_error (bfd_error_no_error);
10932           return FALSE;
10933         }
10934
10935       /* Initially point the .got.plt entry at the PLT header.  */
10936       loc = (htab->root.sgotplt->contents
10937              + got_index * MIPS_ELF_GOT_SIZE (dynobj));
10938       if (ABI_64_P (output_bfd))
10939         bfd_put_64 (output_bfd, header_address, loc);
10940       else
10941         bfd_put_32 (output_bfd, header_address, loc);
10942
10943       /* Now handle the PLT itself.  First the standard entry (the order
10944          does not matter, we just have to pick one).  */
10945       if (h->plt.plist->mips_offset != MINUS_ONE)
10946         {
10947           const bfd_vma *plt_entry;
10948           bfd_vma plt_offset;
10949
10950           plt_offset = htab->plt_header_size + h->plt.plist->mips_offset;
10951
10952           BFD_ASSERT (plt_offset <= htab->root.splt->size);
10953
10954           /* Find out where the .plt entry should go.  */
10955           loc = htab->root.splt->contents + plt_offset;
10956
10957           /* Pick the load opcode.  */
10958           load = MIPS_ELF_LOAD_WORD (output_bfd);
10959
10960           /* Fill in the PLT entry itself.  */
10961
10962           if (MIPSR6_P (output_bfd))
10963             plt_entry = htab->compact_branches ? mipsr6_exec_plt_entry_compact
10964                                                : mipsr6_exec_plt_entry;
10965           else
10966             plt_entry = mips_exec_plt_entry;
10967           bfd_put_32 (output_bfd, plt_entry[0] | got_address_high, loc);
10968           bfd_put_32 (output_bfd, plt_entry[1] | got_address_low | load,
10969                       loc + 4);
10970
10971           if (! LOAD_INTERLOCKS_P (output_bfd)
10972               || (MIPSR6_P (output_bfd) && htab->compact_branches))
10973             {
10974               bfd_put_32 (output_bfd, plt_entry[2] | got_address_low, loc + 8);
10975               bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
10976             }
10977           else
10978             {
10979               bfd_put_32 (output_bfd, plt_entry[3], loc + 8);
10980               bfd_put_32 (output_bfd, plt_entry[2] | got_address_low,
10981                           loc + 12);
10982             }
10983         }
10984
10985       /* Now the compressed entry.  They come after any standard ones.  */
10986       if (h->plt.plist->comp_offset != MINUS_ONE)
10987         {
10988           bfd_vma plt_offset;
10989
10990           plt_offset = (htab->plt_header_size + htab->plt_mips_offset
10991                         + h->plt.plist->comp_offset);
10992
10993           BFD_ASSERT (plt_offset <= htab->root.splt->size);
10994
10995           /* Find out where the .plt entry should go.  */
10996           loc = htab->root.splt->contents + plt_offset;
10997
10998           /* Fill in the PLT entry itself.  */
10999           if (!MICROMIPS_P (output_bfd))
11000             {
11001               const bfd_vma *plt_entry = mips16_o32_exec_plt_entry;
11002
11003               bfd_put_16 (output_bfd, plt_entry[0], loc);
11004               bfd_put_16 (output_bfd, plt_entry[1], loc + 2);
11005               bfd_put_16 (output_bfd, plt_entry[2], loc + 4);
11006               bfd_put_16 (output_bfd, plt_entry[3], loc + 6);
11007               bfd_put_16 (output_bfd, plt_entry[4], loc + 8);
11008               bfd_put_16 (output_bfd, plt_entry[5], loc + 10);
11009               bfd_put_32 (output_bfd, got_address, loc + 12);
11010             }
11011           else if (htab->insn32)
11012             {
11013               const bfd_vma *plt_entry = micromips_insn32_o32_exec_plt_entry;
11014
11015               bfd_put_16 (output_bfd, plt_entry[0], loc);
11016               bfd_put_16 (output_bfd, got_address_high, loc + 2);
11017               bfd_put_16 (output_bfd, plt_entry[2], loc + 4);
11018               bfd_put_16 (output_bfd, got_address_low, loc + 6);
11019               bfd_put_16 (output_bfd, plt_entry[4], loc + 8);
11020               bfd_put_16 (output_bfd, plt_entry[5], loc + 10);
11021               bfd_put_16 (output_bfd, plt_entry[6], loc + 12);
11022               bfd_put_16 (output_bfd, got_address_low, loc + 14);
11023             }
11024           else
11025             {
11026               const bfd_vma *plt_entry = micromips_o32_exec_plt_entry;
11027               bfd_signed_vma gotpc_offset;
11028               bfd_vma loc_address;
11029
11030               BFD_ASSERT (got_address % 4 == 0);
11031
11032               loc_address = (htab->root.splt->output_section->vma
11033                              + htab->root.splt->output_offset + plt_offset);
11034               gotpc_offset = got_address - ((loc_address | 3) ^ 3);
11035
11036               /* ADDIUPC has a span of +/-16MB, check we're in range.  */
11037               if (gotpc_offset + 0x1000000 >= 0x2000000)
11038                 {
11039                   _bfd_error_handler
11040                     /* xgettext:c-format */
11041                     (_("%pB: `%pA' offset of %" PRId64 " from `%pA' "
11042                        "beyond the range of ADDIUPC"),
11043                      output_bfd,
11044                      htab->root.sgotplt->output_section,
11045                      (int64_t) gotpc_offset,
11046                      htab->root.splt->output_section);
11047                   bfd_set_error (bfd_error_no_error);
11048                   return FALSE;
11049                 }
11050               bfd_put_16 (output_bfd,
11051                           plt_entry[0] | ((gotpc_offset >> 18) & 0x7f), loc);
11052               bfd_put_16 (output_bfd, (gotpc_offset >> 2) & 0xffff, loc + 2);
11053               bfd_put_16 (output_bfd, plt_entry[2], loc + 4);
11054               bfd_put_16 (output_bfd, plt_entry[3], loc + 6);
11055               bfd_put_16 (output_bfd, plt_entry[4], loc + 8);
11056               bfd_put_16 (output_bfd, plt_entry[5], loc + 10);
11057             }
11058         }
11059
11060       /* Emit an R_MIPS_JUMP_SLOT relocation against the .got.plt entry.  */
11061       mips_elf_output_dynamic_relocation (output_bfd, htab->root.srelplt,
11062                                           got_index - 2, h->dynindx,
11063                                           R_MIPS_JUMP_SLOT, got_address);
11064
11065       /* We distinguish between PLT entries and lazy-binding stubs by
11066          giving the former an st_other value of STO_MIPS_PLT.  Set the
11067          flag and leave the value if there are any relocations in the
11068          binary where pointer equality matters.  */
11069       sym->st_shndx = SHN_UNDEF;
11070       if (h->pointer_equality_needed)
11071         sym->st_other = ELF_ST_SET_MIPS_PLT (sym->st_other);
11072       else
11073         {
11074           sym->st_value = 0;
11075           sym->st_other = 0;
11076         }
11077     }
11078
11079   if (h->plt.plist != NULL && h->plt.plist->stub_offset != MINUS_ONE)
11080     {
11081       /* We've decided to create a lazy-binding stub.  */
11082       bfd_boolean micromips_p = MICROMIPS_P (output_bfd);
11083       unsigned int other = micromips_p ? STO_MICROMIPS : 0;
11084       bfd_vma stub_size = htab->function_stub_size;
11085       bfd_byte stub[MIPS_FUNCTION_STUB_BIG_SIZE];
11086       bfd_vma isa_bit = micromips_p;
11087       bfd_vma stub_big_size;
11088
11089       if (!micromips_p)
11090         stub_big_size = MIPS_FUNCTION_STUB_BIG_SIZE;
11091       else if (htab->insn32)
11092         stub_big_size = MICROMIPS_INSN32_FUNCTION_STUB_BIG_SIZE;
11093       else
11094         stub_big_size = MICROMIPS_FUNCTION_STUB_BIG_SIZE;
11095
11096       /* This symbol has a stub.  Set it up.  */
11097
11098       BFD_ASSERT (h->dynindx != -1);
11099
11100       BFD_ASSERT (stub_size == stub_big_size || h->dynindx <= 0xffff);
11101
11102       /* Values up to 2^31 - 1 are allowed.  Larger values would cause
11103          sign extension at runtime in the stub, resulting in a negative
11104          index value.  */
11105       if (h->dynindx & ~0x7fffffff)
11106         return FALSE;
11107
11108       /* Fill the stub.  */
11109       if (micromips_p)
11110         {
11111           idx = 0;
11112           bfd_put_micromips_32 (output_bfd, STUB_LW_MICROMIPS (output_bfd),
11113                                 stub + idx);
11114           idx += 4;
11115           if (htab->insn32)
11116             {
11117               bfd_put_micromips_32 (output_bfd,
11118                                     STUB_MOVE32_MICROMIPS, stub + idx);
11119               idx += 4;
11120             }
11121           else
11122             {
11123               bfd_put_16 (output_bfd, STUB_MOVE_MICROMIPS, stub + idx);
11124               idx += 2;
11125             }
11126           if (stub_size == stub_big_size)
11127             {
11128               long dynindx_hi = (h->dynindx >> 16) & 0x7fff;
11129
11130               bfd_put_micromips_32 (output_bfd,
11131                                     STUB_LUI_MICROMIPS (dynindx_hi),
11132                                     stub + idx);
11133               idx += 4;
11134             }
11135           if (htab->insn32)
11136             {
11137               bfd_put_micromips_32 (output_bfd, STUB_JALR32_MICROMIPS,
11138                                     stub + idx);
11139               idx += 4;
11140             }
11141           else
11142             {
11143               bfd_put_16 (output_bfd, STUB_JALR_MICROMIPS, stub + idx);
11144               idx += 2;
11145             }
11146
11147           /* If a large stub is not required and sign extension is not a
11148              problem, then use legacy code in the stub.  */
11149           if (stub_size == stub_big_size)
11150             bfd_put_micromips_32 (output_bfd,
11151                                   STUB_ORI_MICROMIPS (h->dynindx & 0xffff),
11152                                   stub + idx);
11153           else if (h->dynindx & ~0x7fff)
11154             bfd_put_micromips_32 (output_bfd,
11155                                   STUB_LI16U_MICROMIPS (h->dynindx & 0xffff),
11156                                   stub + idx);
11157           else
11158             bfd_put_micromips_32 (output_bfd,
11159                                   STUB_LI16S_MICROMIPS (output_bfd,
11160                                                         h->dynindx),
11161                                   stub + idx);
11162         }
11163       else
11164         {
11165           idx = 0;
11166           bfd_put_32 (output_bfd, STUB_LW (output_bfd), stub + idx);
11167           idx += 4;
11168           bfd_put_32 (output_bfd, STUB_MOVE, stub + idx);
11169           idx += 4;
11170           if (stub_size == stub_big_size)
11171             {
11172               bfd_put_32 (output_bfd, STUB_LUI ((h->dynindx >> 16) & 0x7fff),
11173                           stub + idx);
11174               idx += 4;
11175             }
11176
11177           if (!(MIPSR6_P (output_bfd) && htab->compact_branches))
11178             {
11179               bfd_put_32 (output_bfd, STUB_JALR, stub + idx);
11180               idx += 4;
11181             }
11182
11183           /* If a large stub is not required and sign extension is not a
11184              problem, then use legacy code in the stub.  */
11185           if (stub_size == stub_big_size)
11186             bfd_put_32 (output_bfd, STUB_ORI (h->dynindx & 0xffff),
11187                         stub + idx);
11188           else if (h->dynindx & ~0x7fff)
11189             bfd_put_32 (output_bfd, STUB_LI16U (h->dynindx & 0xffff),
11190                         stub + idx);
11191           else
11192             bfd_put_32 (output_bfd, STUB_LI16S (output_bfd, h->dynindx),
11193                         stub + idx);
11194           idx += 4;
11195
11196           if (MIPSR6_P (output_bfd) && htab->compact_branches)
11197             bfd_put_32 (output_bfd, STUB_JALRC, stub + idx);
11198         }
11199
11200       BFD_ASSERT (h->plt.plist->stub_offset <= htab->sstubs->size);
11201       memcpy (htab->sstubs->contents + h->plt.plist->stub_offset,
11202               stub, stub_size);
11203
11204       /* Mark the symbol as undefined.  stub_offset != -1 occurs
11205          only for the referenced symbol.  */
11206       sym->st_shndx = SHN_UNDEF;
11207
11208       /* The run-time linker uses the st_value field of the symbol
11209          to reset the global offset table entry for this external
11210          to its stub address when unlinking a shared object.  */
11211       sym->st_value = (htab->sstubs->output_section->vma
11212                        + htab->sstubs->output_offset
11213                        + h->plt.plist->stub_offset
11214                        + isa_bit);
11215       sym->st_other = other;
11216     }
11217
11218   /* If we have a MIPS16 function with a stub, the dynamic symbol must
11219      refer to the stub, since only the stub uses the standard calling
11220      conventions.  */
11221   if (h->dynindx != -1 && hmips->fn_stub != NULL)
11222     {
11223       BFD_ASSERT (hmips->need_fn_stub);
11224       sym->st_value = (hmips->fn_stub->output_section->vma
11225                        + hmips->fn_stub->output_offset);
11226       sym->st_size = hmips->fn_stub->size;
11227       sym->st_other = ELF_ST_VISIBILITY (sym->st_other);
11228     }
11229
11230   BFD_ASSERT (h->dynindx != -1
11231               || h->forced_local);
11232
11233   sgot = htab->root.sgot;
11234   g = htab->got_info;
11235   BFD_ASSERT (g != NULL);
11236
11237   /* Run through the global symbol table, creating GOT entries for all
11238      the symbols that need them.  */
11239   if (hmips->global_got_area != GGA_NONE)
11240     {
11241       bfd_vma offset;
11242       bfd_vma value;
11243
11244       value = sym->st_value;
11245       offset = mips_elf_primary_global_got_index (output_bfd, info, h);
11246       MIPS_ELF_PUT_WORD (output_bfd, value, sgot->contents + offset);
11247     }
11248
11249   if (hmips->global_got_area != GGA_NONE && g->next)
11250     {
11251       struct mips_got_entry e, *p;
11252       bfd_vma entry;
11253       bfd_vma offset;
11254
11255       gg = g;
11256
11257       e.abfd = output_bfd;
11258       e.symndx = -1;
11259       e.d.h = hmips;
11260       e.tls_type = GOT_TLS_NONE;
11261
11262       for (g = g->next; g->next != gg; g = g->next)
11263         {
11264           if (g->got_entries
11265               && (p = (struct mips_got_entry *) htab_find (g->got_entries,
11266                                                            &e)))
11267             {
11268               offset = p->gotidx;
11269               BFD_ASSERT (offset > 0 && offset < htab->root.sgot->size);
11270               if (bfd_link_pic (info)
11271                   || (elf_hash_table (info)->dynamic_sections_created
11272                       && p->d.h != NULL
11273                       && p->d.h->root.def_dynamic
11274                       && !p->d.h->root.def_regular))
11275                 {
11276                   /* Create an R_MIPS_REL32 relocation for this entry.  Due to
11277                      the various compatibility problems, it's easier to mock
11278                      up an R_MIPS_32 or R_MIPS_64 relocation and leave
11279                      mips_elf_create_dynamic_relocation to calculate the
11280                      appropriate addend.  */
11281                   Elf_Internal_Rela rel[3];
11282
11283                   memset (rel, 0, sizeof (rel));
11284                   if (ABI_64_P (output_bfd))
11285                     rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_64);
11286                   else
11287                     rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_32);
11288                   rel[0].r_offset = rel[1].r_offset = rel[2].r_offset = offset;
11289
11290                   entry = 0;
11291                   if (! (mips_elf_create_dynamic_relocation
11292                          (output_bfd, info, rel,
11293                           e.d.h, NULL, sym->st_value, &entry, sgot)))
11294                     return FALSE;
11295                 }
11296               else
11297                 entry = sym->st_value;
11298               MIPS_ELF_PUT_WORD (output_bfd, entry, sgot->contents + offset);
11299             }
11300         }
11301     }
11302
11303   /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute.  */
11304   name = h->root.root.string;
11305   if (h == elf_hash_table (info)->hdynamic
11306       || h == elf_hash_table (info)->hgot)
11307     sym->st_shndx = SHN_ABS;
11308   else if (strcmp (name, "_DYNAMIC_LINK") == 0
11309            || strcmp (name, "_DYNAMIC_LINKING") == 0)
11310     {
11311       sym->st_shndx = SHN_ABS;
11312       sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
11313       sym->st_value = 1;
11314     }
11315   else if (SGI_COMPAT (output_bfd))
11316     {
11317       if (strcmp (name, mips_elf_dynsym_rtproc_names[0]) == 0
11318           || strcmp (name, mips_elf_dynsym_rtproc_names[1]) == 0)
11319         {
11320           sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
11321           sym->st_other = STO_PROTECTED;
11322           sym->st_value = 0;
11323           sym->st_shndx = SHN_MIPS_DATA;
11324         }
11325       else if (strcmp (name, mips_elf_dynsym_rtproc_names[2]) == 0)
11326         {
11327           sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
11328           sym->st_other = STO_PROTECTED;
11329           sym->st_value = mips_elf_hash_table (info)->procedure_count;
11330           sym->st_shndx = SHN_ABS;
11331         }
11332       else if (sym->st_shndx != SHN_UNDEF && sym->st_shndx != SHN_ABS)
11333         {
11334           if (h->type == STT_FUNC)
11335             sym->st_shndx = SHN_MIPS_TEXT;
11336           else if (h->type == STT_OBJECT)
11337             sym->st_shndx = SHN_MIPS_DATA;
11338         }
11339     }
11340
11341   /* Emit a copy reloc, if needed.  */
11342   if (h->needs_copy)
11343     {
11344       asection *s;
11345       bfd_vma symval;
11346
11347       BFD_ASSERT (h->dynindx != -1);
11348       BFD_ASSERT (htab->use_plts_and_copy_relocs);
11349
11350       s = mips_elf_rel_dyn_section (info, FALSE);
11351       symval = (h->root.u.def.section->output_section->vma
11352                 + h->root.u.def.section->output_offset
11353                 + h->root.u.def.value);
11354       mips_elf_output_dynamic_relocation (output_bfd, s, s->reloc_count++,
11355                                           h->dynindx, R_MIPS_COPY, symval);
11356     }
11357
11358   /* Handle the IRIX6-specific symbols.  */
11359   if (IRIX_COMPAT (output_bfd) == ict_irix6)
11360     mips_elf_irix6_finish_dynamic_symbol (output_bfd, name, sym);
11361
11362   /* Keep dynamic compressed symbols odd.  This allows the dynamic linker
11363      to treat compressed symbols like any other.  */
11364   if (ELF_ST_IS_MIPS16 (sym->st_other))
11365     {
11366       BFD_ASSERT (sym->st_value & 1);
11367       sym->st_other -= STO_MIPS16;
11368     }
11369   else if (ELF_ST_IS_MICROMIPS (sym->st_other))
11370     {
11371       BFD_ASSERT (sym->st_value & 1);
11372       sym->st_other -= STO_MICROMIPS;
11373     }
11374
11375   return TRUE;
11376 }
11377
11378 /* Likewise, for VxWorks.  */
11379
11380 bfd_boolean
11381 _bfd_mips_vxworks_finish_dynamic_symbol (bfd *output_bfd,
11382                                          struct bfd_link_info *info,
11383                                          struct elf_link_hash_entry *h,
11384                                          Elf_Internal_Sym *sym)
11385 {
11386   bfd *dynobj;
11387   asection *sgot;
11388   struct mips_got_info *g;
11389   struct mips_elf_link_hash_table *htab;
11390   struct mips_elf_link_hash_entry *hmips;
11391
11392   htab = mips_elf_hash_table (info);
11393   BFD_ASSERT (htab != NULL);
11394   dynobj = elf_hash_table (info)->dynobj;
11395   hmips = (struct mips_elf_link_hash_entry *) h;
11396
11397   if (h->plt.plist != NULL && h->plt.plist->mips_offset != MINUS_ONE)
11398     {
11399       bfd_byte *loc;
11400       bfd_vma plt_address, got_address, got_offset, branch_offset;
11401       Elf_Internal_Rela rel;
11402       static const bfd_vma *plt_entry;
11403       bfd_vma gotplt_index;
11404       bfd_vma plt_offset;
11405
11406       plt_offset = htab->plt_header_size + h->plt.plist->mips_offset;
11407       gotplt_index = h->plt.plist->gotplt_index;
11408
11409       BFD_ASSERT (h->dynindx != -1);
11410       BFD_ASSERT (htab->root.splt != NULL);
11411       BFD_ASSERT (gotplt_index != MINUS_ONE);
11412       BFD_ASSERT (plt_offset <= htab->root.splt->size);
11413
11414       /* Calculate the address of the .plt entry.  */
11415       plt_address = (htab->root.splt->output_section->vma
11416                      + htab->root.splt->output_offset
11417                      + plt_offset);
11418
11419       /* Calculate the address of the .got.plt entry.  */
11420       got_address = (htab->root.sgotplt->output_section->vma
11421                      + htab->root.sgotplt->output_offset
11422                      + gotplt_index * MIPS_ELF_GOT_SIZE (output_bfd));
11423
11424       /* Calculate the offset of the .got.plt entry from
11425          _GLOBAL_OFFSET_TABLE_.  */
11426       got_offset = mips_elf_gotplt_index (info, h);
11427
11428       /* Calculate the offset for the branch at the start of the PLT
11429          entry.  The branch jumps to the beginning of .plt.  */
11430       branch_offset = -(plt_offset / 4 + 1) & 0xffff;
11431
11432       /* Fill in the initial value of the .got.plt entry.  */
11433       bfd_put_32 (output_bfd, plt_address,
11434                   (htab->root.sgotplt->contents
11435                    + gotplt_index * MIPS_ELF_GOT_SIZE (output_bfd)));
11436
11437       /* Find out where the .plt entry should go.  */
11438       loc = htab->root.splt->contents + plt_offset;
11439
11440       if (bfd_link_pic (info))
11441         {
11442           plt_entry = mips_vxworks_shared_plt_entry;
11443           bfd_put_32 (output_bfd, plt_entry[0] | branch_offset, loc);
11444           bfd_put_32 (output_bfd, plt_entry[1] | gotplt_index, loc + 4);
11445         }
11446       else
11447         {
11448           bfd_vma got_address_high, got_address_low;
11449
11450           plt_entry = mips_vxworks_exec_plt_entry;
11451           got_address_high = ((got_address + 0x8000) >> 16) & 0xffff;
11452           got_address_low = got_address & 0xffff;
11453
11454           bfd_put_32 (output_bfd, plt_entry[0] | branch_offset, loc);
11455           bfd_put_32 (output_bfd, plt_entry[1] | gotplt_index, loc + 4);
11456           bfd_put_32 (output_bfd, plt_entry[2] | got_address_high, loc + 8);
11457           bfd_put_32 (output_bfd, plt_entry[3] | got_address_low, loc + 12);
11458           bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
11459           bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
11460           bfd_put_32 (output_bfd, plt_entry[6], loc + 24);
11461           bfd_put_32 (output_bfd, plt_entry[7], loc + 28);
11462
11463           loc = (htab->srelplt2->contents
11464                  + (gotplt_index * 3 + 2) * sizeof (Elf32_External_Rela));
11465
11466           /* Emit a relocation for the .got.plt entry.  */
11467           rel.r_offset = got_address;
11468           rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_MIPS_32);
11469           rel.r_addend = plt_offset;
11470           bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11471
11472           /* Emit a relocation for the lui of %hi(<.got.plt slot>).  */
11473           loc += sizeof (Elf32_External_Rela);
11474           rel.r_offset = plt_address + 8;
11475           rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
11476           rel.r_addend = got_offset;
11477           bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11478
11479           /* Emit a relocation for the addiu of %lo(<.got.plt slot>).  */
11480           loc += sizeof (Elf32_External_Rela);
11481           rel.r_offset += 4;
11482           rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
11483           bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11484         }
11485
11486       /* Emit an R_MIPS_JUMP_SLOT relocation against the .got.plt entry.  */
11487       loc = (htab->root.srelplt->contents
11488              + gotplt_index * sizeof (Elf32_External_Rela));
11489       rel.r_offset = got_address;
11490       rel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_JUMP_SLOT);
11491       rel.r_addend = 0;
11492       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11493
11494       if (!h->def_regular)
11495         sym->st_shndx = SHN_UNDEF;
11496     }
11497
11498   BFD_ASSERT (h->dynindx != -1 || h->forced_local);
11499
11500   sgot = htab->root.sgot;
11501   g = htab->got_info;
11502   BFD_ASSERT (g != NULL);
11503
11504   /* See if this symbol has an entry in the GOT.  */
11505   if (hmips->global_got_area != GGA_NONE)
11506     {
11507       bfd_vma offset;
11508       Elf_Internal_Rela outrel;
11509       bfd_byte *loc;
11510       asection *s;
11511
11512       /* Install the symbol value in the GOT.   */
11513       offset = mips_elf_primary_global_got_index (output_bfd, info, h);
11514       MIPS_ELF_PUT_WORD (output_bfd, sym->st_value, sgot->contents + offset);
11515
11516       /* Add a dynamic relocation for it.  */
11517       s = mips_elf_rel_dyn_section (info, FALSE);
11518       loc = s->contents + (s->reloc_count++ * sizeof (Elf32_External_Rela));
11519       outrel.r_offset = (sgot->output_section->vma
11520                          + sgot->output_offset
11521                          + offset);
11522       outrel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_32);
11523       outrel.r_addend = 0;
11524       bfd_elf32_swap_reloca_out (dynobj, &outrel, loc);
11525     }
11526
11527   /* Emit a copy reloc, if needed.  */
11528   if (h->needs_copy)
11529     {
11530       Elf_Internal_Rela rel;
11531       asection *srel;
11532       bfd_byte *loc;
11533
11534       BFD_ASSERT (h->dynindx != -1);
11535
11536       rel.r_offset = (h->root.u.def.section->output_section->vma
11537                       + h->root.u.def.section->output_offset
11538                       + h->root.u.def.value);
11539       rel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_COPY);
11540       rel.r_addend = 0;
11541       if (h->root.u.def.section == htab->root.sdynrelro)
11542         srel = htab->root.sreldynrelro;
11543       else
11544         srel = htab->root.srelbss;
11545       loc = srel->contents + srel->reloc_count * sizeof (Elf32_External_Rela);
11546       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11547       ++srel->reloc_count;
11548     }
11549
11550   /* If this is a mips16/microMIPS symbol, force the value to be even.  */
11551   if (ELF_ST_IS_COMPRESSED (sym->st_other))
11552     sym->st_value &= ~1;
11553
11554   return TRUE;
11555 }
11556
11557 /* Write out a plt0 entry to the beginning of .plt.  */
11558
11559 static bfd_boolean
11560 mips_finish_exec_plt (bfd *output_bfd, struct bfd_link_info *info)
11561 {
11562   bfd_byte *loc;
11563   bfd_vma gotplt_value, gotplt_value_high, gotplt_value_low;
11564   static const bfd_vma *plt_entry;
11565   struct mips_elf_link_hash_table *htab;
11566
11567   htab = mips_elf_hash_table (info);
11568   BFD_ASSERT (htab != NULL);
11569
11570   if (ABI_64_P (output_bfd))
11571     plt_entry = (htab->compact_branches
11572                  ? mipsr6_n64_exec_plt0_entry_compact
11573                  : mips_n64_exec_plt0_entry);
11574   else if (ABI_N32_P (output_bfd))
11575     plt_entry = (htab->compact_branches
11576                  ? mipsr6_n32_exec_plt0_entry_compact
11577                  : mips_n32_exec_plt0_entry);
11578   else if (!htab->plt_header_is_comp)
11579     plt_entry = (htab->compact_branches
11580                  ? mipsr6_o32_exec_plt0_entry_compact
11581                  : mips_o32_exec_plt0_entry);
11582   else if (htab->insn32)
11583     plt_entry = micromips_insn32_o32_exec_plt0_entry;
11584   else
11585     plt_entry = micromips_o32_exec_plt0_entry;
11586
11587   /* Calculate the value of .got.plt.  */
11588   gotplt_value = (htab->root.sgotplt->output_section->vma
11589                   + htab->root.sgotplt->output_offset);
11590   gotplt_value_high = ((gotplt_value + 0x8000) >> 16) & 0xffff;
11591   gotplt_value_low = gotplt_value & 0xffff;
11592
11593   /* The PLT sequence is not safe for N64 if .got.plt's address can
11594      not be loaded in two instructions.  */
11595   if (ABI_64_P (output_bfd)
11596       && ((gotplt_value + 0x80008000) & ~(bfd_vma) 0xffffffff) != 0)
11597     {
11598       _bfd_error_handler
11599         /* xgettext:c-format */
11600         (_("%pB: `%pA' start VMA of %#" PRIx64 " outside the 32-bit range "
11601            "supported; consider using `-Ttext-segment=...'"),
11602          output_bfd,
11603          htab->root.sgotplt->output_section,
11604          (int64_t) gotplt_value);
11605       bfd_set_error (bfd_error_no_error);
11606       return FALSE;
11607     }
11608
11609   /* Install the PLT header.  */
11610   loc = htab->root.splt->contents;
11611   if (plt_entry == micromips_o32_exec_plt0_entry)
11612     {
11613       bfd_vma gotpc_offset;
11614       bfd_vma loc_address;
11615       size_t i;
11616
11617       BFD_ASSERT (gotplt_value % 4 == 0);
11618
11619       loc_address = (htab->root.splt->output_section->vma
11620                      + htab->root.splt->output_offset);
11621       gotpc_offset = gotplt_value - ((loc_address | 3) ^ 3);
11622
11623       /* ADDIUPC has a span of +/-16MB, check we're in range.  */
11624       if (gotpc_offset + 0x1000000 >= 0x2000000)
11625         {
11626           _bfd_error_handler
11627             /* xgettext:c-format */
11628             (_("%pB: `%pA' offset of %" PRId64 " from `%pA' "
11629                "beyond the range of ADDIUPC"),
11630              output_bfd,
11631              htab->root.sgotplt->output_section,
11632              (int64_t) gotpc_offset,
11633              htab->root.splt->output_section);
11634           bfd_set_error (bfd_error_no_error);
11635           return FALSE;
11636         }
11637       bfd_put_16 (output_bfd,
11638                   plt_entry[0] | ((gotpc_offset >> 18) & 0x7f), loc);
11639       bfd_put_16 (output_bfd, (gotpc_offset >> 2) & 0xffff, loc + 2);
11640       for (i = 2; i < ARRAY_SIZE (micromips_o32_exec_plt0_entry); i++)
11641         bfd_put_16 (output_bfd, plt_entry[i], loc + (i * 2));
11642     }
11643   else if (plt_entry == micromips_insn32_o32_exec_plt0_entry)
11644     {
11645       size_t i;
11646
11647       bfd_put_16 (output_bfd, plt_entry[0], loc);
11648       bfd_put_16 (output_bfd, gotplt_value_high, loc + 2);
11649       bfd_put_16 (output_bfd, plt_entry[2], loc + 4);
11650       bfd_put_16 (output_bfd, gotplt_value_low, loc + 6);
11651       bfd_put_16 (output_bfd, plt_entry[4], loc + 8);
11652       bfd_put_16 (output_bfd, gotplt_value_low, loc + 10);
11653       for (i = 6; i < ARRAY_SIZE (micromips_insn32_o32_exec_plt0_entry); i++)
11654         bfd_put_16 (output_bfd, plt_entry[i], loc + (i * 2));
11655     }
11656   else
11657     {
11658       bfd_put_32 (output_bfd, plt_entry[0] | gotplt_value_high, loc);
11659       bfd_put_32 (output_bfd, plt_entry[1] | gotplt_value_low, loc + 4);
11660       bfd_put_32 (output_bfd, plt_entry[2] | gotplt_value_low, loc + 8);
11661       bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
11662       bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
11663       bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
11664       bfd_put_32 (output_bfd, plt_entry[6], loc + 24);
11665       bfd_put_32 (output_bfd, plt_entry[7], loc + 28);
11666     }
11667
11668   return TRUE;
11669 }
11670
11671 /* Install the PLT header for a VxWorks executable and finalize the
11672    contents of .rela.plt.unloaded.  */
11673
11674 static void
11675 mips_vxworks_finish_exec_plt (bfd *output_bfd, struct bfd_link_info *info)
11676 {
11677   Elf_Internal_Rela rela;
11678   bfd_byte *loc;
11679   bfd_vma got_value, got_value_high, got_value_low, plt_address;
11680   static const bfd_vma *plt_entry;
11681   struct mips_elf_link_hash_table *htab;
11682
11683   htab = mips_elf_hash_table (info);
11684   BFD_ASSERT (htab != NULL);
11685
11686   plt_entry = mips_vxworks_exec_plt0_entry;
11687
11688   /* Calculate the value of _GLOBAL_OFFSET_TABLE_.  */
11689   got_value = (htab->root.hgot->root.u.def.section->output_section->vma
11690                + htab->root.hgot->root.u.def.section->output_offset
11691                + htab->root.hgot->root.u.def.value);
11692
11693   got_value_high = ((got_value + 0x8000) >> 16) & 0xffff;
11694   got_value_low = got_value & 0xffff;
11695
11696   /* Calculate the address of the PLT header.  */
11697   plt_address = (htab->root.splt->output_section->vma
11698                  + htab->root.splt->output_offset);
11699
11700   /* Install the PLT header.  */
11701   loc = htab->root.splt->contents;
11702   bfd_put_32 (output_bfd, plt_entry[0] | got_value_high, loc);
11703   bfd_put_32 (output_bfd, plt_entry[1] | got_value_low, loc + 4);
11704   bfd_put_32 (output_bfd, plt_entry[2], loc + 8);
11705   bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
11706   bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
11707   bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
11708
11709   /* Output the relocation for the lui of %hi(_GLOBAL_OFFSET_TABLE_).  */
11710   loc = htab->srelplt2->contents;
11711   rela.r_offset = plt_address;
11712   rela.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
11713   rela.r_addend = 0;
11714   bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
11715   loc += sizeof (Elf32_External_Rela);
11716
11717   /* Output the relocation for the following addiu of
11718      %lo(_GLOBAL_OFFSET_TABLE_).  */
11719   rela.r_offset += 4;
11720   rela.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
11721   bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
11722   loc += sizeof (Elf32_External_Rela);
11723
11724   /* Fix up the remaining relocations.  They may have the wrong
11725      symbol index for _G_O_T_ or _P_L_T_ depending on the order
11726      in which symbols were output.  */
11727   while (loc < htab->srelplt2->contents + htab->srelplt2->size)
11728     {
11729       Elf_Internal_Rela rel;
11730
11731       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
11732       rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_MIPS_32);
11733       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11734       loc += sizeof (Elf32_External_Rela);
11735
11736       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
11737       rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
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_LO16);
11743       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11744       loc += sizeof (Elf32_External_Rela);
11745     }
11746 }
11747
11748 /* Install the PLT header for a VxWorks shared library.  */
11749
11750 static void
11751 mips_vxworks_finish_shared_plt (bfd *output_bfd, struct bfd_link_info *info)
11752 {
11753   unsigned int i;
11754   struct mips_elf_link_hash_table *htab;
11755
11756   htab = mips_elf_hash_table (info);
11757   BFD_ASSERT (htab != NULL);
11758
11759   /* We just need to copy the entry byte-by-byte.  */
11760   for (i = 0; i < ARRAY_SIZE (mips_vxworks_shared_plt0_entry); i++)
11761     bfd_put_32 (output_bfd, mips_vxworks_shared_plt0_entry[i],
11762                 htab->root.splt->contents + i * 4);
11763 }
11764
11765 /* Finish up the dynamic sections.  */
11766
11767 bfd_boolean
11768 _bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd,
11769                                        struct bfd_link_info *info)
11770 {
11771   bfd *dynobj;
11772   asection *sdyn;
11773   asection *sgot;
11774   struct mips_got_info *gg, *g;
11775   struct mips_elf_link_hash_table *htab;
11776
11777   htab = mips_elf_hash_table (info);
11778   BFD_ASSERT (htab != NULL);
11779
11780   dynobj = elf_hash_table (info)->dynobj;
11781
11782   sdyn = bfd_get_linker_section (dynobj, ".dynamic");
11783
11784   sgot = htab->root.sgot;
11785   gg = htab->got_info;
11786
11787   if (elf_hash_table (info)->dynamic_sections_created)
11788     {
11789       bfd_byte *b;
11790       int dyn_to_skip = 0, dyn_skipped = 0;
11791
11792       BFD_ASSERT (sdyn != NULL);
11793       BFD_ASSERT (gg != NULL);
11794
11795       g = mips_elf_bfd_got (output_bfd, FALSE);
11796       BFD_ASSERT (g != NULL);
11797
11798       for (b = sdyn->contents;
11799            b < sdyn->contents + sdyn->size;
11800            b += MIPS_ELF_DYN_SIZE (dynobj))
11801         {
11802           Elf_Internal_Dyn dyn;
11803           const char *name;
11804           size_t elemsize;
11805           asection *s;
11806           bfd_boolean swap_out_p;
11807
11808           /* Read in the current dynamic entry.  */
11809           (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
11810
11811           /* Assume that we're going to modify it and write it out.  */
11812           swap_out_p = TRUE;
11813
11814           switch (dyn.d_tag)
11815             {
11816             case DT_RELENT:
11817               dyn.d_un.d_val = MIPS_ELF_REL_SIZE (dynobj);
11818               break;
11819
11820             case DT_RELAENT:
11821               BFD_ASSERT (htab->is_vxworks);
11822               dyn.d_un.d_val = MIPS_ELF_RELA_SIZE (dynobj);
11823               break;
11824
11825             case DT_STRSZ:
11826               /* Rewrite DT_STRSZ.  */
11827               dyn.d_un.d_val =
11828                 _bfd_elf_strtab_size (elf_hash_table (info)->dynstr);
11829               break;
11830
11831             case DT_PLTGOT:
11832               s = htab->root.sgot;
11833               dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
11834               break;
11835
11836             case DT_MIPS_PLTGOT:
11837               s = htab->root.sgotplt;
11838               dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
11839               break;
11840
11841             case DT_MIPS_RLD_VERSION:
11842               dyn.d_un.d_val = 1; /* XXX */
11843               break;
11844
11845             case DT_MIPS_FLAGS:
11846               dyn.d_un.d_val = RHF_NOTPOT; /* XXX */
11847               break;
11848
11849             case DT_MIPS_TIME_STAMP:
11850               {
11851                 time_t t;
11852                 time (&t);
11853                 dyn.d_un.d_val = t;
11854               }
11855               break;
11856
11857             case DT_MIPS_ICHECKSUM:
11858               /* XXX FIXME: */
11859               swap_out_p = FALSE;
11860               break;
11861
11862             case DT_MIPS_IVERSION:
11863               /* XXX FIXME: */
11864               swap_out_p = FALSE;
11865               break;
11866
11867             case DT_MIPS_BASE_ADDRESS:
11868               s = output_bfd->sections;
11869               BFD_ASSERT (s != NULL);
11870               dyn.d_un.d_ptr = s->vma & ~(bfd_vma) 0xffff;
11871               break;
11872
11873             case DT_MIPS_LOCAL_GOTNO:
11874               dyn.d_un.d_val = g->local_gotno;
11875               break;
11876
11877             case DT_MIPS_UNREFEXTNO:
11878               /* The index into the dynamic symbol table which is the
11879                  entry of the first external symbol that is not
11880                  referenced within the same object.  */
11881               dyn.d_un.d_val = bfd_count_sections (output_bfd) + 1;
11882               break;
11883
11884             case DT_MIPS_GOTSYM:
11885               if (htab->global_gotsym)
11886                 {
11887                   dyn.d_un.d_val = htab->global_gotsym->dynindx;
11888                   break;
11889                 }
11890               /* In case if we don't have global got symbols we default
11891                  to setting DT_MIPS_GOTSYM to the same value as
11892                  DT_MIPS_SYMTABNO.  */
11893               /* Fall through.  */
11894
11895             case DT_MIPS_SYMTABNO:
11896               name = ".dynsym";
11897               elemsize = MIPS_ELF_SYM_SIZE (output_bfd);
11898               s = bfd_get_linker_section (dynobj, name);
11899
11900               if (s != NULL)
11901                 dyn.d_un.d_val = s->size / elemsize;
11902               else
11903                 dyn.d_un.d_val = 0;
11904               break;
11905
11906             case DT_MIPS_HIPAGENO:
11907               dyn.d_un.d_val = g->local_gotno - htab->reserved_gotno;
11908               break;
11909
11910             case DT_MIPS_RLD_MAP:
11911               {
11912                 struct elf_link_hash_entry *h;
11913                 h = mips_elf_hash_table (info)->rld_symbol;
11914                 if (!h)
11915                   {
11916                     dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
11917                     swap_out_p = FALSE;
11918                     break;
11919                   }
11920                 s = h->root.u.def.section;
11921
11922                 /* The MIPS_RLD_MAP tag stores the absolute address of the
11923                    debug pointer.  */
11924                 dyn.d_un.d_ptr = (s->output_section->vma + s->output_offset
11925                                   + h->root.u.def.value);
11926               }
11927               break;
11928
11929             case DT_MIPS_RLD_MAP_REL:
11930               {
11931                 struct elf_link_hash_entry *h;
11932                 bfd_vma dt_addr, rld_addr;
11933                 h = mips_elf_hash_table (info)->rld_symbol;
11934                 if (!h)
11935                   {
11936                     dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
11937                     swap_out_p = FALSE;
11938                     break;
11939                   }
11940                 s = h->root.u.def.section;
11941
11942                 /* The MIPS_RLD_MAP_REL tag stores the offset to the debug
11943                    pointer, relative to the address of the tag.  */
11944                 dt_addr = (sdyn->output_section->vma + sdyn->output_offset
11945                            + (b - sdyn->contents));
11946                 rld_addr = (s->output_section->vma + s->output_offset
11947                             + h->root.u.def.value);
11948                 dyn.d_un.d_ptr = rld_addr - dt_addr;
11949               }
11950               break;
11951
11952             case DT_MIPS_OPTIONS:
11953               s = (bfd_get_section_by_name
11954                    (output_bfd, MIPS_ELF_OPTIONS_SECTION_NAME (output_bfd)));
11955               dyn.d_un.d_ptr = s->vma;
11956               break;
11957
11958             case DT_PLTREL:
11959               BFD_ASSERT (htab->use_plts_and_copy_relocs);
11960               if (htab->is_vxworks)
11961                 dyn.d_un.d_val = DT_RELA;
11962               else
11963                 dyn.d_un.d_val = DT_REL;
11964               break;
11965
11966             case DT_PLTRELSZ:
11967               BFD_ASSERT (htab->use_plts_and_copy_relocs);
11968               dyn.d_un.d_val = htab->root.srelplt->size;
11969               break;
11970
11971             case DT_JMPREL:
11972               BFD_ASSERT (htab->use_plts_and_copy_relocs);
11973               dyn.d_un.d_ptr = (htab->root.srelplt->output_section->vma
11974                                 + htab->root.srelplt->output_offset);
11975               break;
11976
11977             case DT_TEXTREL:
11978               /* If we didn't need any text relocations after all, delete
11979                  the dynamic tag.  */
11980               if (!(info->flags & DF_TEXTREL))
11981                 {
11982                   dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
11983                   swap_out_p = FALSE;
11984                 }
11985               break;
11986
11987             case DT_FLAGS:
11988               /* If we didn't need any text relocations after all, clear
11989                  DF_TEXTREL from DT_FLAGS.  */
11990               if (!(info->flags & DF_TEXTREL))
11991                 dyn.d_un.d_val &= ~DF_TEXTREL;
11992               else
11993                 swap_out_p = FALSE;
11994               break;
11995
11996             case DT_MIPS_XHASH:
11997               name = ".MIPS.xhash";
11998               s = bfd_get_linker_section (dynobj, name);
11999               dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
12000               break;
12001
12002             default:
12003               swap_out_p = FALSE;
12004               if (htab->is_vxworks
12005                   && elf_vxworks_finish_dynamic_entry (output_bfd, &dyn))
12006                 swap_out_p = TRUE;
12007               break;
12008             }
12009
12010           if (swap_out_p || dyn_skipped)
12011             (*get_elf_backend_data (dynobj)->s->swap_dyn_out)
12012               (dynobj, &dyn, b - dyn_skipped);
12013
12014           if (dyn_to_skip)
12015             {
12016               dyn_skipped += dyn_to_skip;
12017               dyn_to_skip = 0;
12018             }
12019         }
12020
12021       /* Wipe out any trailing entries if we shifted down a dynamic tag.  */
12022       if (dyn_skipped > 0)
12023         memset (b - dyn_skipped, 0, dyn_skipped);
12024     }
12025
12026   if (sgot != NULL && sgot->size > 0
12027       && !bfd_is_abs_section (sgot->output_section))
12028     {
12029       if (htab->is_vxworks)
12030         {
12031           /* The first entry of the global offset table points to the
12032              ".dynamic" section.  The second is initialized by the
12033              loader and contains the shared library identifier.
12034              The third is also initialized by the loader and points
12035              to the lazy resolution stub.  */
12036           MIPS_ELF_PUT_WORD (output_bfd,
12037                              sdyn->output_offset + sdyn->output_section->vma,
12038                              sgot->contents);
12039           MIPS_ELF_PUT_WORD (output_bfd, 0,
12040                              sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd));
12041           MIPS_ELF_PUT_WORD (output_bfd, 0,
12042                              sgot->contents
12043                              + 2 * MIPS_ELF_GOT_SIZE (output_bfd));
12044         }
12045       else
12046         {
12047           /* The first entry of the global offset table will be filled at
12048              runtime. The second entry will be used by some runtime loaders.
12049              This isn't the case of IRIX rld.  */
12050           MIPS_ELF_PUT_WORD (output_bfd, (bfd_vma) 0, sgot->contents);
12051           MIPS_ELF_PUT_WORD (output_bfd, MIPS_ELF_GNU_GOT1_MASK (output_bfd),
12052                              sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd));
12053         }
12054
12055       elf_section_data (sgot->output_section)->this_hdr.sh_entsize
12056          = MIPS_ELF_GOT_SIZE (output_bfd);
12057     }
12058
12059   /* Generate dynamic relocations for the non-primary gots.  */
12060   if (gg != NULL && gg->next)
12061     {
12062       Elf_Internal_Rela rel[3];
12063       bfd_vma addend = 0;
12064
12065       memset (rel, 0, sizeof (rel));
12066       rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_REL32);
12067
12068       for (g = gg->next; g->next != gg; g = g->next)
12069         {
12070           bfd_vma got_index = g->next->local_gotno + g->next->global_gotno
12071             + g->next->tls_gotno;
12072
12073           MIPS_ELF_PUT_WORD (output_bfd, 0, sgot->contents
12074                              + got_index++ * MIPS_ELF_GOT_SIZE (output_bfd));
12075           MIPS_ELF_PUT_WORD (output_bfd, MIPS_ELF_GNU_GOT1_MASK (output_bfd),
12076                              sgot->contents
12077                              + got_index++ * MIPS_ELF_GOT_SIZE (output_bfd));
12078
12079           if (! bfd_link_pic (info))
12080             continue;
12081
12082           for (; got_index < g->local_gotno; got_index++)
12083             {
12084               if (got_index >= g->assigned_low_gotno
12085                   && got_index <= g->assigned_high_gotno)
12086                 continue;
12087
12088               rel[0].r_offset = rel[1].r_offset = rel[2].r_offset
12089                 = got_index * MIPS_ELF_GOT_SIZE (output_bfd);
12090               if (!(mips_elf_create_dynamic_relocation
12091                     (output_bfd, info, rel, NULL,
12092                      bfd_abs_section_ptr,
12093                      0, &addend, sgot)))
12094                 return FALSE;
12095               BFD_ASSERT (addend == 0);
12096             }
12097         }
12098     }
12099
12100   /* The generation of dynamic relocations for the non-primary gots
12101      adds more dynamic relocations.  We cannot count them until
12102      here.  */
12103
12104   if (elf_hash_table (info)->dynamic_sections_created)
12105     {
12106       bfd_byte *b;
12107       bfd_boolean swap_out_p;
12108
12109       BFD_ASSERT (sdyn != NULL);
12110
12111       for (b = sdyn->contents;
12112            b < sdyn->contents + sdyn->size;
12113            b += MIPS_ELF_DYN_SIZE (dynobj))
12114         {
12115           Elf_Internal_Dyn dyn;
12116           asection *s;
12117
12118           /* Read in the current dynamic entry.  */
12119           (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
12120
12121           /* Assume that we're going to modify it and write it out.  */
12122           swap_out_p = TRUE;
12123
12124           switch (dyn.d_tag)
12125             {
12126             case DT_RELSZ:
12127               /* Reduce DT_RELSZ to account for any relocations we
12128                  decided not to make.  This is for the n64 irix rld,
12129                  which doesn't seem to apply any relocations if there
12130                  are trailing null entries.  */
12131               s = mips_elf_rel_dyn_section (info, FALSE);
12132               dyn.d_un.d_val = (s->reloc_count
12133                                 * (ABI_64_P (output_bfd)
12134                                    ? sizeof (Elf64_Mips_External_Rel)
12135                                    : sizeof (Elf32_External_Rel)));
12136               /* Adjust the section size too.  Tools like the prelinker
12137                  can reasonably expect the values to the same.  */
12138               BFD_ASSERT (!bfd_is_abs_section (s->output_section));
12139               elf_section_data (s->output_section)->this_hdr.sh_size
12140                 = dyn.d_un.d_val;
12141               break;
12142
12143             default:
12144               swap_out_p = FALSE;
12145               break;
12146             }
12147
12148           if (swap_out_p)
12149             (*get_elf_backend_data (dynobj)->s->swap_dyn_out)
12150               (dynobj, &dyn, b);
12151         }
12152     }
12153
12154   {
12155     asection *s;
12156     Elf32_compact_rel cpt;
12157
12158     if (SGI_COMPAT (output_bfd))
12159       {
12160         /* Write .compact_rel section out.  */
12161         s = bfd_get_linker_section (dynobj, ".compact_rel");
12162         if (s != NULL)
12163           {
12164             cpt.id1 = 1;
12165             cpt.num = s->reloc_count;
12166             cpt.id2 = 2;
12167             cpt.offset = (s->output_section->filepos
12168                           + sizeof (Elf32_External_compact_rel));
12169             cpt.reserved0 = 0;
12170             cpt.reserved1 = 0;
12171             bfd_elf32_swap_compact_rel_out (output_bfd, &cpt,
12172                                             ((Elf32_External_compact_rel *)
12173                                              s->contents));
12174
12175             /* Clean up a dummy stub function entry in .text.  */
12176             if (htab->sstubs != NULL)
12177               {
12178                 file_ptr dummy_offset;
12179
12180                 BFD_ASSERT (htab->sstubs->size >= htab->function_stub_size);
12181                 dummy_offset = htab->sstubs->size - htab->function_stub_size;
12182                 memset (htab->sstubs->contents + dummy_offset, 0,
12183                         htab->function_stub_size);
12184               }
12185           }
12186       }
12187
12188     /* The psABI says that the dynamic relocations must be sorted in
12189        increasing order of r_symndx.  The VxWorks EABI doesn't require
12190        this, and because the code below handles REL rather than RELA
12191        relocations, using it for VxWorks would be outright harmful.  */
12192     if (!htab->is_vxworks)
12193       {
12194         s = mips_elf_rel_dyn_section (info, FALSE);
12195         if (s != NULL
12196             && s->size > (bfd_vma)2 * MIPS_ELF_REL_SIZE (output_bfd))
12197           {
12198             reldyn_sorting_bfd = output_bfd;
12199
12200             if (ABI_64_P (output_bfd))
12201               qsort ((Elf64_External_Rel *) s->contents + 1,
12202                      s->reloc_count - 1, sizeof (Elf64_Mips_External_Rel),
12203                      sort_dynamic_relocs_64);
12204             else
12205               qsort ((Elf32_External_Rel *) s->contents + 1,
12206                      s->reloc_count - 1, sizeof (Elf32_External_Rel),
12207                      sort_dynamic_relocs);
12208           }
12209       }
12210   }
12211
12212   if (htab->root.splt && htab->root.splt->size > 0)
12213     {
12214       if (htab->is_vxworks)
12215         {
12216           if (bfd_link_pic (info))
12217             mips_vxworks_finish_shared_plt (output_bfd, info);
12218           else
12219             mips_vxworks_finish_exec_plt (output_bfd, info);
12220         }
12221       else
12222         {
12223           BFD_ASSERT (!bfd_link_pic (info));
12224           if (!mips_finish_exec_plt (output_bfd, info))
12225             return FALSE;
12226         }
12227     }
12228   return TRUE;
12229 }
12230
12231
12232 /* Set ABFD's EF_MIPS_ARCH and EF_MIPS_MACH flags.  */
12233
12234 static void
12235 mips_set_isa_flags (bfd *abfd)
12236 {
12237   flagword val;
12238
12239   switch (bfd_get_mach (abfd))
12240     {
12241     default:
12242       if (ABI_N32_P (abfd) || ABI_64_P (abfd))
12243         val = E_MIPS_ARCH_3;
12244       else
12245         val = E_MIPS_ARCH_1;
12246       break;
12247
12248     case bfd_mach_mips3000:
12249       val = E_MIPS_ARCH_1;
12250       break;
12251
12252     case bfd_mach_mips3900:
12253       val = E_MIPS_ARCH_1 | E_MIPS_MACH_3900;
12254       break;
12255
12256     case bfd_mach_mips6000:
12257       val = E_MIPS_ARCH_2;
12258       break;
12259
12260     case bfd_mach_mips4010:
12261       val = E_MIPS_ARCH_2 | E_MIPS_MACH_4010;
12262       break;
12263
12264     case bfd_mach_mips4000:
12265     case bfd_mach_mips4300:
12266     case bfd_mach_mips4400:
12267     case bfd_mach_mips4600:
12268       val = E_MIPS_ARCH_3;
12269       break;
12270
12271     case bfd_mach_mips4100:
12272       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4100;
12273       break;
12274
12275     case bfd_mach_mips4111:
12276       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4111;
12277       break;
12278
12279     case bfd_mach_mips4120:
12280       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4120;
12281       break;
12282
12283     case bfd_mach_mips4650:
12284       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4650;
12285       break;
12286
12287     case bfd_mach_mips5400:
12288       val = E_MIPS_ARCH_4 | E_MIPS_MACH_5400;
12289       break;
12290
12291     case bfd_mach_mips5500:
12292       val = E_MIPS_ARCH_4 | E_MIPS_MACH_5500;
12293       break;
12294
12295     case bfd_mach_mips5900:
12296       val = E_MIPS_ARCH_3 | E_MIPS_MACH_5900;
12297       break;
12298
12299     case bfd_mach_mips9000:
12300       val = E_MIPS_ARCH_4 | E_MIPS_MACH_9000;
12301       break;
12302
12303     case bfd_mach_mips5000:
12304     case bfd_mach_mips7000:
12305     case bfd_mach_mips8000:
12306     case bfd_mach_mips10000:
12307     case bfd_mach_mips12000:
12308     case bfd_mach_mips14000:
12309     case bfd_mach_mips16000:
12310       val = E_MIPS_ARCH_4;
12311       break;
12312
12313     case bfd_mach_mips5:
12314       val = E_MIPS_ARCH_5;
12315       break;
12316
12317     case bfd_mach_mips_loongson_2e:
12318       val = E_MIPS_ARCH_3 | E_MIPS_MACH_LS2E;
12319       break;
12320
12321     case bfd_mach_mips_loongson_2f:
12322       val = E_MIPS_ARCH_3 | E_MIPS_MACH_LS2F;
12323       break;
12324
12325     case bfd_mach_mips_sb1:
12326       val = E_MIPS_ARCH_64 | E_MIPS_MACH_SB1;
12327       break;
12328
12329     case bfd_mach_mips_gs464:
12330       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_GS464;
12331       break;
12332
12333     case bfd_mach_mips_gs464e:
12334       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_GS464E;
12335       break;
12336
12337     case bfd_mach_mips_gs264e:
12338       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_GS264E;
12339       break;
12340
12341     case bfd_mach_mips_octeon:
12342     case bfd_mach_mips_octeonp:
12343       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON;
12344       break;
12345
12346     case bfd_mach_mips_octeon3:
12347       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON3;
12348       break;
12349
12350     case bfd_mach_mips_xlr:
12351       val = E_MIPS_ARCH_64 | E_MIPS_MACH_XLR;
12352       break;
12353
12354     case bfd_mach_mips_octeon2:
12355       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON2;
12356       break;
12357
12358     case bfd_mach_mipsisa32:
12359       val = E_MIPS_ARCH_32;
12360       break;
12361
12362     case bfd_mach_mipsisa64:
12363       val = E_MIPS_ARCH_64;
12364       break;
12365
12366     case bfd_mach_mipsisa32r2:
12367     case bfd_mach_mipsisa32r3:
12368     case bfd_mach_mipsisa32r5:
12369       val = E_MIPS_ARCH_32R2;
12370       break;
12371
12372     case bfd_mach_mips_interaptiv_mr2:
12373       val = E_MIPS_ARCH_32R2 | E_MIPS_MACH_IAMR2;
12374       break;
12375
12376     case bfd_mach_mipsisa64r2:
12377     case bfd_mach_mipsisa64r3:
12378     case bfd_mach_mipsisa64r5:
12379       val = E_MIPS_ARCH_64R2;
12380       break;
12381
12382     case bfd_mach_mipsisa32r6:
12383       val = E_MIPS_ARCH_32R6;
12384       break;
12385
12386     case bfd_mach_mipsisa64r6:
12387       val = E_MIPS_ARCH_64R6;
12388       break;
12389     }
12390   elf_elfheader (abfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH);
12391   elf_elfheader (abfd)->e_flags |= val;
12392
12393 }
12394
12395
12396 /* Whether to sort relocs output by ld -r or ld --emit-relocs, by r_offset.
12397    Don't do so for code sections.  We want to keep ordering of HI16/LO16
12398    as is.  On the other hand, elf-eh-frame.c processing requires .eh_frame
12399    relocs to be sorted.  */
12400
12401 bfd_boolean
12402 _bfd_mips_elf_sort_relocs_p (asection *sec)
12403 {
12404   return (sec->flags & SEC_CODE) == 0;
12405 }
12406
12407
12408 /* The final processing done just before writing out a MIPS ELF object
12409    file.  This gets the MIPS architecture right based on the machine
12410    number.  This is used by both the 32-bit and the 64-bit ABI.  */
12411
12412 void
12413 _bfd_mips_final_write_processing (bfd *abfd)
12414 {
12415   unsigned int i;
12416   Elf_Internal_Shdr **hdrpp;
12417   const char *name;
12418   asection *sec;
12419
12420   /* Keep the existing EF_MIPS_MACH and EF_MIPS_ARCH flags if the former
12421      is nonzero.  This is for compatibility with old objects, which used
12422      a combination of a 32-bit EF_MIPS_ARCH and a 64-bit EF_MIPS_MACH.  */
12423   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == 0)
12424     mips_set_isa_flags (abfd);
12425
12426   /* Set the sh_info field for .gptab sections and other appropriate
12427      info for each special section.  */
12428   for (i = 1, hdrpp = elf_elfsections (abfd) + 1;
12429        i < elf_numsections (abfd);
12430        i++, hdrpp++)
12431     {
12432       switch ((*hdrpp)->sh_type)
12433         {
12434         case SHT_MIPS_MSYM:
12435         case SHT_MIPS_LIBLIST:
12436           sec = bfd_get_section_by_name (abfd, ".dynstr");
12437           if (sec != NULL)
12438             (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
12439           break;
12440
12441         case SHT_MIPS_GPTAB:
12442           BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
12443           name = bfd_section_name ((*hdrpp)->bfd_section);
12444           BFD_ASSERT (name != NULL
12445                       && CONST_STRNEQ (name, ".gptab."));
12446           sec = bfd_get_section_by_name (abfd, name + sizeof ".gptab" - 1);
12447           BFD_ASSERT (sec != NULL);
12448           (*hdrpp)->sh_info = elf_section_data (sec)->this_idx;
12449           break;
12450
12451         case SHT_MIPS_CONTENT:
12452           BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
12453           name = bfd_section_name ((*hdrpp)->bfd_section);
12454           BFD_ASSERT (name != NULL
12455                       && CONST_STRNEQ (name, ".MIPS.content"));
12456           sec = bfd_get_section_by_name (abfd,
12457                                          name + sizeof ".MIPS.content" - 1);
12458           BFD_ASSERT (sec != NULL);
12459           (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
12460           break;
12461
12462         case SHT_MIPS_SYMBOL_LIB:
12463           sec = bfd_get_section_by_name (abfd, ".dynsym");
12464           if (sec != NULL)
12465             (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
12466           sec = bfd_get_section_by_name (abfd, ".liblist");
12467           if (sec != NULL)
12468             (*hdrpp)->sh_info = elf_section_data (sec)->this_idx;
12469           break;
12470
12471         case SHT_MIPS_EVENTS:
12472           BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
12473           name = bfd_section_name ((*hdrpp)->bfd_section);
12474           BFD_ASSERT (name != NULL);
12475           if (CONST_STRNEQ (name, ".MIPS.events"))
12476             sec = bfd_get_section_by_name (abfd,
12477                                            name + sizeof ".MIPS.events" - 1);
12478           else
12479             {
12480               BFD_ASSERT (CONST_STRNEQ (name, ".MIPS.post_rel"));
12481               sec = bfd_get_section_by_name (abfd,
12482                                              (name
12483                                               + sizeof ".MIPS.post_rel" - 1));
12484             }
12485           BFD_ASSERT (sec != NULL);
12486           (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
12487           break;
12488
12489         case SHT_MIPS_XHASH:
12490           sec = bfd_get_section_by_name (abfd, ".dynsym");
12491           if (sec != NULL)
12492             (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
12493         }
12494     }
12495 }
12496
12497 bfd_boolean
12498 _bfd_mips_elf_final_write_processing (bfd *abfd)
12499 {
12500   _bfd_mips_final_write_processing (abfd);
12501   return _bfd_elf_final_write_processing (abfd);
12502 }
12503 \f
12504 /* When creating an IRIX5 executable, we need REGINFO and RTPROC
12505    segments.  */
12506
12507 int
12508 _bfd_mips_elf_additional_program_headers (bfd *abfd,
12509                                           struct bfd_link_info *info ATTRIBUTE_UNUSED)
12510 {
12511   asection *s;
12512   int ret = 0;
12513
12514   /* See if we need a PT_MIPS_REGINFO segment.  */
12515   s = bfd_get_section_by_name (abfd, ".reginfo");
12516   if (s && (s->flags & SEC_LOAD))
12517     ++ret;
12518
12519   /* See if we need a PT_MIPS_ABIFLAGS segment.  */
12520   if (bfd_get_section_by_name (abfd, ".MIPS.abiflags"))
12521     ++ret;
12522
12523   /* See if we need a PT_MIPS_OPTIONS segment.  */
12524   if (IRIX_COMPAT (abfd) == ict_irix6
12525       && bfd_get_section_by_name (abfd,
12526                                   MIPS_ELF_OPTIONS_SECTION_NAME (abfd)))
12527     ++ret;
12528
12529   /* See if we need a PT_MIPS_RTPROC segment.  */
12530   if (IRIX_COMPAT (abfd) == ict_irix5
12531       && bfd_get_section_by_name (abfd, ".dynamic")
12532       && bfd_get_section_by_name (abfd, ".mdebug"))
12533     ++ret;
12534
12535   /* Allocate a PT_NULL header in dynamic objects.  See
12536      _bfd_mips_elf_modify_segment_map for details.  */
12537   if (!SGI_COMPAT (abfd)
12538       && bfd_get_section_by_name (abfd, ".dynamic"))
12539     ++ret;
12540
12541   return ret;
12542 }
12543
12544 /* Modify the segment map for an IRIX5 executable.  */
12545
12546 bfd_boolean
12547 _bfd_mips_elf_modify_segment_map (bfd *abfd,
12548                                   struct bfd_link_info *info)
12549 {
12550   asection *s;
12551   struct elf_segment_map *m, **pm;
12552   bfd_size_type amt;
12553
12554   /* If there is a .reginfo section, we need a PT_MIPS_REGINFO
12555      segment.  */
12556   s = bfd_get_section_by_name (abfd, ".reginfo");
12557   if (s != NULL && (s->flags & SEC_LOAD) != 0)
12558     {
12559       for (m = elf_seg_map (abfd); m != NULL; m = m->next)
12560         if (m->p_type == PT_MIPS_REGINFO)
12561           break;
12562       if (m == NULL)
12563         {
12564           amt = sizeof *m;
12565           m = bfd_zalloc (abfd, amt);
12566           if (m == NULL)
12567             return FALSE;
12568
12569           m->p_type = PT_MIPS_REGINFO;
12570           m->count = 1;
12571           m->sections[0] = s;
12572
12573           /* We want to put it after the PHDR and INTERP segments.  */
12574           pm = &elf_seg_map (abfd);
12575           while (*pm != NULL
12576                  && ((*pm)->p_type == PT_PHDR
12577                      || (*pm)->p_type == PT_INTERP))
12578             pm = &(*pm)->next;
12579
12580           m->next = *pm;
12581           *pm = m;
12582         }
12583     }
12584
12585   /* If there is a .MIPS.abiflags section, we need a PT_MIPS_ABIFLAGS
12586      segment.  */
12587   s = bfd_get_section_by_name (abfd, ".MIPS.abiflags");
12588   if (s != NULL && (s->flags & SEC_LOAD) != 0)
12589     {
12590       for (m = elf_seg_map (abfd); m != NULL; m = m->next)
12591         if (m->p_type == PT_MIPS_ABIFLAGS)
12592           break;
12593       if (m == NULL)
12594         {
12595           amt = sizeof *m;
12596           m = bfd_zalloc (abfd, amt);
12597           if (m == NULL)
12598             return FALSE;
12599
12600           m->p_type = PT_MIPS_ABIFLAGS;
12601           m->count = 1;
12602           m->sections[0] = s;
12603
12604           /* We want to put it after the PHDR and INTERP segments.  */
12605           pm = &elf_seg_map (abfd);
12606           while (*pm != NULL
12607                  && ((*pm)->p_type == PT_PHDR
12608                      || (*pm)->p_type == PT_INTERP))
12609             pm = &(*pm)->next;
12610
12611           m->next = *pm;
12612           *pm = m;
12613         }
12614     }
12615
12616   /* For IRIX 6, we don't have .mdebug sections, nor does anything but
12617      .dynamic end up in PT_DYNAMIC.  However, we do have to insert a
12618      PT_MIPS_OPTIONS segment immediately following the program header
12619      table.  */
12620   if (NEWABI_P (abfd)
12621       /* On non-IRIX6 new abi, we'll have already created a segment
12622          for this section, so don't create another.  I'm not sure this
12623          is not also the case for IRIX 6, but I can't test it right
12624          now.  */
12625       && IRIX_COMPAT (abfd) == ict_irix6)
12626     {
12627       for (s = abfd->sections; s; s = s->next)
12628         if (elf_section_data (s)->this_hdr.sh_type == SHT_MIPS_OPTIONS)
12629           break;
12630
12631       if (s)
12632         {
12633           struct elf_segment_map *options_segment;
12634
12635           pm = &elf_seg_map (abfd);
12636           while (*pm != NULL
12637                  && ((*pm)->p_type == PT_PHDR
12638                      || (*pm)->p_type == PT_INTERP))
12639             pm = &(*pm)->next;
12640
12641           if (*pm == NULL || (*pm)->p_type != PT_MIPS_OPTIONS)
12642             {
12643               amt = sizeof (struct elf_segment_map);
12644               options_segment = bfd_zalloc (abfd, amt);
12645               options_segment->next = *pm;
12646               options_segment->p_type = PT_MIPS_OPTIONS;
12647               options_segment->p_flags = PF_R;
12648               options_segment->p_flags_valid = TRUE;
12649               options_segment->count = 1;
12650               options_segment->sections[0] = s;
12651               *pm = options_segment;
12652             }
12653         }
12654     }
12655   else
12656     {
12657       if (IRIX_COMPAT (abfd) == ict_irix5)
12658         {
12659           /* If there are .dynamic and .mdebug sections, we make a room
12660              for the RTPROC header.  FIXME: Rewrite without section names.  */
12661           if (bfd_get_section_by_name (abfd, ".interp") == NULL
12662               && bfd_get_section_by_name (abfd, ".dynamic") != NULL
12663               && bfd_get_section_by_name (abfd, ".mdebug") != NULL)
12664             {
12665               for (m = elf_seg_map (abfd); m != NULL; m = m->next)
12666                 if (m->p_type == PT_MIPS_RTPROC)
12667                   break;
12668               if (m == NULL)
12669                 {
12670                   amt = sizeof *m;
12671                   m = bfd_zalloc (abfd, amt);
12672                   if (m == NULL)
12673                     return FALSE;
12674
12675                   m->p_type = PT_MIPS_RTPROC;
12676
12677                   s = bfd_get_section_by_name (abfd, ".rtproc");
12678                   if (s == NULL)
12679                     {
12680                       m->count = 0;
12681                       m->p_flags = 0;
12682                       m->p_flags_valid = 1;
12683                     }
12684                   else
12685                     {
12686                       m->count = 1;
12687                       m->sections[0] = s;
12688                     }
12689
12690                   /* We want to put it after the DYNAMIC segment.  */
12691                   pm = &elf_seg_map (abfd);
12692                   while (*pm != NULL && (*pm)->p_type != PT_DYNAMIC)
12693                     pm = &(*pm)->next;
12694                   if (*pm != NULL)
12695                     pm = &(*pm)->next;
12696
12697                   m->next = *pm;
12698                   *pm = m;
12699                 }
12700             }
12701         }
12702       /* On IRIX5, the PT_DYNAMIC segment includes the .dynamic,
12703          .dynstr, .dynsym, and .hash sections, and everything in
12704          between.  */
12705       for (pm = &elf_seg_map (abfd); *pm != NULL;
12706            pm = &(*pm)->next)
12707         if ((*pm)->p_type == PT_DYNAMIC)
12708           break;
12709       m = *pm;
12710       /* GNU/Linux binaries do not need the extended PT_DYNAMIC section.
12711          glibc's dynamic linker has traditionally derived the number of
12712          tags from the p_filesz field, and sometimes allocates stack
12713          arrays of that size.  An overly-big PT_DYNAMIC segment can
12714          be actively harmful in such cases.  Making PT_DYNAMIC contain
12715          other sections can also make life hard for the prelinker,
12716          which might move one of the other sections to a different
12717          PT_LOAD segment.  */
12718       if (SGI_COMPAT (abfd)
12719           && m != NULL
12720           && m->count == 1
12721           && strcmp (m->sections[0]->name, ".dynamic") == 0)
12722         {
12723           static const char *sec_names[] =
12724           {
12725             ".dynamic", ".dynstr", ".dynsym", ".hash"
12726           };
12727           bfd_vma low, high;
12728           unsigned int i, c;
12729           struct elf_segment_map *n;
12730
12731           low = ~(bfd_vma) 0;
12732           high = 0;
12733           for (i = 0; i < sizeof sec_names / sizeof sec_names[0]; i++)
12734             {
12735               s = bfd_get_section_by_name (abfd, sec_names[i]);
12736               if (s != NULL && (s->flags & SEC_LOAD) != 0)
12737                 {
12738                   bfd_size_type sz;
12739
12740                   if (low > s->vma)
12741                     low = s->vma;
12742                   sz = s->size;
12743                   if (high < s->vma + sz)
12744                     high = s->vma + sz;
12745                 }
12746             }
12747
12748           c = 0;
12749           for (s = abfd->sections; s != NULL; s = s->next)
12750             if ((s->flags & SEC_LOAD) != 0
12751                 && s->vma >= low
12752                 && s->vma + s->size <= high)
12753               ++c;
12754
12755           amt = sizeof *n + (bfd_size_type) (c - 1) * sizeof (asection *);
12756           n = bfd_zalloc (abfd, amt);
12757           if (n == NULL)
12758             return FALSE;
12759           *n = *m;
12760           n->count = c;
12761
12762           i = 0;
12763           for (s = abfd->sections; s != NULL; s = s->next)
12764             {
12765               if ((s->flags & SEC_LOAD) != 0
12766                   && s->vma >= low
12767                   && s->vma + s->size <= high)
12768                 {
12769                   n->sections[i] = s;
12770                   ++i;
12771                 }
12772             }
12773
12774           *pm = n;
12775         }
12776     }
12777
12778   /* Allocate a spare program header in dynamic objects so that tools
12779      like the prelinker can add an extra PT_LOAD entry.
12780
12781      If the prelinker needs to make room for a new PT_LOAD entry, its
12782      standard procedure is to move the first (read-only) sections into
12783      the new (writable) segment.  However, the MIPS ABI requires
12784      .dynamic to be in a read-only segment, and the section will often
12785      start within sizeof (ElfNN_Phdr) bytes of the last program header.
12786
12787      Although the prelinker could in principle move .dynamic to a
12788      writable segment, it seems better to allocate a spare program
12789      header instead, and avoid the need to move any sections.
12790      There is a long tradition of allocating spare dynamic tags,
12791      so allocating a spare program header seems like a natural
12792      extension.
12793
12794      If INFO is NULL, we may be copying an already prelinked binary
12795      with objcopy or strip, so do not add this header.  */
12796   if (info != NULL
12797       && !SGI_COMPAT (abfd)
12798       && bfd_get_section_by_name (abfd, ".dynamic"))
12799     {
12800       for (pm = &elf_seg_map (abfd); *pm != NULL; pm = &(*pm)->next)
12801         if ((*pm)->p_type == PT_NULL)
12802           break;
12803       if (*pm == NULL)
12804         {
12805           m = bfd_zalloc (abfd, sizeof (*m));
12806           if (m == NULL)
12807             return FALSE;
12808
12809           m->p_type = PT_NULL;
12810           *pm = m;
12811         }
12812     }
12813
12814   return TRUE;
12815 }
12816 \f
12817 /* Return the section that should be marked against GC for a given
12818    relocation.  */
12819
12820 asection *
12821 _bfd_mips_elf_gc_mark_hook (asection *sec,
12822                             struct bfd_link_info *info,
12823                             Elf_Internal_Rela *rel,
12824                             struct elf_link_hash_entry *h,
12825                             Elf_Internal_Sym *sym)
12826 {
12827   /* ??? Do mips16 stub sections need to be handled special?  */
12828
12829   if (h != NULL)
12830     switch (ELF_R_TYPE (sec->owner, rel->r_info))
12831       {
12832       case R_MIPS_GNU_VTINHERIT:
12833       case R_MIPS_GNU_VTENTRY:
12834         return NULL;
12835       }
12836
12837   return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
12838 }
12839
12840 /* Prevent .MIPS.abiflags from being discarded with --gc-sections.  */
12841
12842 bfd_boolean
12843 _bfd_mips_elf_gc_mark_extra_sections (struct bfd_link_info *info,
12844                                       elf_gc_mark_hook_fn gc_mark_hook)
12845 {
12846   bfd *sub;
12847
12848   _bfd_elf_gc_mark_extra_sections (info, gc_mark_hook);
12849
12850   for (sub = info->input_bfds; sub != NULL; sub = sub->link.next)
12851     {
12852       asection *o;
12853
12854       if (! is_mips_elf (sub))
12855         continue;
12856
12857       for (o = sub->sections; o != NULL; o = o->next)
12858         if (!o->gc_mark
12859             && MIPS_ELF_ABIFLAGS_SECTION_NAME_P (bfd_section_name (o)))
12860           {
12861             if (!_bfd_elf_gc_mark (info, o, gc_mark_hook))
12862               return FALSE;
12863           }
12864     }
12865
12866   return TRUE;
12867 }
12868 \f
12869 /* Copy data from a MIPS ELF indirect symbol to its direct symbol,
12870    hiding the old indirect symbol.  Process additional relocation
12871    information.  Also called for weakdefs, in which case we just let
12872    _bfd_elf_link_hash_copy_indirect copy the flags for us.  */
12873
12874 void
12875 _bfd_mips_elf_copy_indirect_symbol (struct bfd_link_info *info,
12876                                     struct elf_link_hash_entry *dir,
12877                                     struct elf_link_hash_entry *ind)
12878 {
12879   struct mips_elf_link_hash_entry *dirmips, *indmips;
12880
12881   _bfd_elf_link_hash_copy_indirect (info, dir, ind);
12882
12883   dirmips = (struct mips_elf_link_hash_entry *) dir;
12884   indmips = (struct mips_elf_link_hash_entry *) ind;
12885   /* Any absolute non-dynamic relocations against an indirect or weak
12886      definition will be against the target symbol.  */
12887   if (indmips->has_static_relocs)
12888     dirmips->has_static_relocs = TRUE;
12889
12890   if (ind->root.type != bfd_link_hash_indirect)
12891     return;
12892
12893   dirmips->possibly_dynamic_relocs += indmips->possibly_dynamic_relocs;
12894   if (indmips->readonly_reloc)
12895     dirmips->readonly_reloc = TRUE;
12896   if (indmips->no_fn_stub)
12897     dirmips->no_fn_stub = TRUE;
12898   if (indmips->fn_stub)
12899     {
12900       dirmips->fn_stub = indmips->fn_stub;
12901       indmips->fn_stub = NULL;
12902     }
12903   if (indmips->need_fn_stub)
12904     {
12905       dirmips->need_fn_stub = TRUE;
12906       indmips->need_fn_stub = FALSE;
12907     }
12908   if (indmips->call_stub)
12909     {
12910       dirmips->call_stub = indmips->call_stub;
12911       indmips->call_stub = NULL;
12912     }
12913   if (indmips->call_fp_stub)
12914     {
12915       dirmips->call_fp_stub = indmips->call_fp_stub;
12916       indmips->call_fp_stub = NULL;
12917     }
12918   if (indmips->global_got_area < dirmips->global_got_area)
12919     dirmips->global_got_area = indmips->global_got_area;
12920   if (indmips->global_got_area < GGA_NONE)
12921     indmips->global_got_area = GGA_NONE;
12922   if (indmips->has_nonpic_branches)
12923     dirmips->has_nonpic_branches = TRUE;
12924 }
12925
12926 /* Take care of the special `__gnu_absolute_zero' symbol and ignore attempts
12927    to hide it.  It has to remain global (it will also be protected) so as to
12928    be assigned a global GOT entry, which will then remain unchanged at load
12929    time.  */
12930
12931 void
12932 _bfd_mips_elf_hide_symbol (struct bfd_link_info *info,
12933                            struct elf_link_hash_entry *entry,
12934                            bfd_boolean force_local)
12935 {
12936   struct mips_elf_link_hash_table *htab;
12937
12938   htab = mips_elf_hash_table (info);
12939   BFD_ASSERT (htab != NULL);
12940   if (htab->use_absolute_zero
12941       && strcmp (entry->root.root.string, "__gnu_absolute_zero") == 0)
12942     return;
12943
12944   _bfd_elf_link_hash_hide_symbol (info, entry, force_local);
12945 }
12946 \f
12947 #define PDR_SIZE 32
12948
12949 bfd_boolean
12950 _bfd_mips_elf_discard_info (bfd *abfd, struct elf_reloc_cookie *cookie,
12951                             struct bfd_link_info *info)
12952 {
12953   asection *o;
12954   bfd_boolean ret = FALSE;
12955   unsigned char *tdata;
12956   size_t i, skip;
12957
12958   o = bfd_get_section_by_name (abfd, ".pdr");
12959   if (! o)
12960     return FALSE;
12961   if (o->size == 0)
12962     return FALSE;
12963   if (o->size % PDR_SIZE != 0)
12964     return FALSE;
12965   if (o->output_section != NULL
12966       && bfd_is_abs_section (o->output_section))
12967     return FALSE;
12968
12969   tdata = bfd_zmalloc (o->size / PDR_SIZE);
12970   if (! tdata)
12971     return FALSE;
12972
12973   cookie->rels = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
12974                                             info->keep_memory);
12975   if (!cookie->rels)
12976     {
12977       free (tdata);
12978       return FALSE;
12979     }
12980
12981   cookie->rel = cookie->rels;
12982   cookie->relend = cookie->rels + o->reloc_count;
12983
12984   for (i = 0, skip = 0; i < o->size / PDR_SIZE; i ++)
12985     {
12986       if (bfd_elf_reloc_symbol_deleted_p (i * PDR_SIZE, cookie))
12987         {
12988           tdata[i] = 1;
12989           skip ++;
12990         }
12991     }
12992
12993   if (skip != 0)
12994     {
12995       mips_elf_section_data (o)->u.tdata = tdata;
12996       if (o->rawsize == 0)
12997         o->rawsize = o->size;
12998       o->size -= skip * PDR_SIZE;
12999       ret = TRUE;
13000     }
13001   else
13002     free (tdata);
13003
13004   if (! info->keep_memory)
13005     free (cookie->rels);
13006
13007   return ret;
13008 }
13009
13010 bfd_boolean
13011 _bfd_mips_elf_ignore_discarded_relocs (asection *sec)
13012 {
13013   if (strcmp (sec->name, ".pdr") == 0)
13014     return TRUE;
13015   return FALSE;
13016 }
13017
13018 bfd_boolean
13019 _bfd_mips_elf_write_section (bfd *output_bfd,
13020                              struct bfd_link_info *link_info ATTRIBUTE_UNUSED,
13021                              asection *sec, bfd_byte *contents)
13022 {
13023   bfd_byte *to, *from, *end;
13024   int i;
13025
13026   if (strcmp (sec->name, ".pdr") != 0)
13027     return FALSE;
13028
13029   if (mips_elf_section_data (sec)->u.tdata == NULL)
13030     return FALSE;
13031
13032   to = contents;
13033   end = contents + sec->size;
13034   for (from = contents, i = 0;
13035        from < end;
13036        from += PDR_SIZE, i++)
13037     {
13038       if ((mips_elf_section_data (sec)->u.tdata)[i] == 1)
13039         continue;
13040       if (to != from)
13041         memcpy (to, from, PDR_SIZE);
13042       to += PDR_SIZE;
13043     }
13044   bfd_set_section_contents (output_bfd, sec->output_section, contents,
13045                             sec->output_offset, sec->size);
13046   return TRUE;
13047 }
13048 \f
13049 /* microMIPS code retains local labels for linker relaxation.  Omit them
13050    from output by default for clarity.  */
13051
13052 bfd_boolean
13053 _bfd_mips_elf_is_target_special_symbol (bfd *abfd, asymbol *sym)
13054 {
13055   return _bfd_elf_is_local_label_name (abfd, sym->name);
13056 }
13057
13058 /* MIPS ELF uses a special find_nearest_line routine in order the
13059    handle the ECOFF debugging information.  */
13060
13061 struct mips_elf_find_line
13062 {
13063   struct ecoff_debug_info d;
13064   struct ecoff_find_line i;
13065 };
13066
13067 bfd_boolean
13068 _bfd_mips_elf_find_nearest_line (bfd *abfd, asymbol **symbols,
13069                                  asection *section, bfd_vma offset,
13070                                  const char **filename_ptr,
13071                                  const char **functionname_ptr,
13072                                  unsigned int *line_ptr,
13073                                  unsigned int *discriminator_ptr)
13074 {
13075   asection *msec;
13076
13077   if (_bfd_dwarf2_find_nearest_line (abfd, symbols, NULL, section, offset,
13078                                      filename_ptr, functionname_ptr,
13079                                      line_ptr, discriminator_ptr,
13080                                      dwarf_debug_sections,
13081                                      &elf_tdata (abfd)->dwarf2_find_line_info)
13082       || _bfd_dwarf1_find_nearest_line (abfd, symbols, section, offset,
13083                                         filename_ptr, functionname_ptr,
13084                                         line_ptr))
13085     {
13086       /* PR 22789: If the function name or filename was not found through
13087          the debug information, then try an ordinary lookup instead.  */
13088       if ((functionname_ptr != NULL && *functionname_ptr == NULL)
13089           || (filename_ptr != NULL && *filename_ptr == NULL))
13090         {
13091           /* Do not override already discovered names.  */
13092           if (functionname_ptr != NULL && *functionname_ptr != NULL)
13093             functionname_ptr = NULL;
13094
13095           if (filename_ptr != NULL && *filename_ptr != NULL)
13096             filename_ptr = NULL;
13097
13098           _bfd_elf_find_function (abfd, symbols, section, offset,
13099                                   filename_ptr, functionname_ptr);
13100         }
13101
13102       return TRUE;
13103     }
13104
13105   msec = bfd_get_section_by_name (abfd, ".mdebug");
13106   if (msec != NULL)
13107     {
13108       flagword origflags;
13109       struct mips_elf_find_line *fi;
13110       const struct ecoff_debug_swap * const swap =
13111         get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
13112
13113       /* If we are called during a link, mips_elf_final_link may have
13114          cleared the SEC_HAS_CONTENTS field.  We force it back on here
13115          if appropriate (which it normally will be).  */
13116       origflags = msec->flags;
13117       if (elf_section_data (msec)->this_hdr.sh_type != SHT_NOBITS)
13118         msec->flags |= SEC_HAS_CONTENTS;
13119
13120       fi = mips_elf_tdata (abfd)->find_line_info;
13121       if (fi == NULL)
13122         {
13123           bfd_size_type external_fdr_size;
13124           char *fraw_src;
13125           char *fraw_end;
13126           struct fdr *fdr_ptr;
13127           bfd_size_type amt = sizeof (struct mips_elf_find_line);
13128
13129           fi = bfd_zalloc (abfd, amt);
13130           if (fi == NULL)
13131             {
13132               msec->flags = origflags;
13133               return FALSE;
13134             }
13135
13136           if (! _bfd_mips_elf_read_ecoff_info (abfd, msec, &fi->d))
13137             {
13138               msec->flags = origflags;
13139               return FALSE;
13140             }
13141
13142           /* Swap in the FDR information.  */
13143           amt = fi->d.symbolic_header.ifdMax * sizeof (struct fdr);
13144           fi->d.fdr = bfd_alloc (abfd, amt);
13145           if (fi->d.fdr == NULL)
13146             {
13147               msec->flags = origflags;
13148               return FALSE;
13149             }
13150           external_fdr_size = swap->external_fdr_size;
13151           fdr_ptr = fi->d.fdr;
13152           fraw_src = (char *) fi->d.external_fdr;
13153           fraw_end = (fraw_src
13154                       + fi->d.symbolic_header.ifdMax * external_fdr_size);
13155           for (; fraw_src < fraw_end; fraw_src += external_fdr_size, fdr_ptr++)
13156             (*swap->swap_fdr_in) (abfd, fraw_src, fdr_ptr);
13157
13158           mips_elf_tdata (abfd)->find_line_info = fi;
13159
13160           /* Note that we don't bother to ever free this information.
13161              find_nearest_line is either called all the time, as in
13162              objdump -l, so the information should be saved, or it is
13163              rarely called, as in ld error messages, so the memory
13164              wasted is unimportant.  Still, it would probably be a
13165              good idea for free_cached_info to throw it away.  */
13166         }
13167
13168       if (_bfd_ecoff_locate_line (abfd, section, offset, &fi->d, swap,
13169                                   &fi->i, filename_ptr, functionname_ptr,
13170                                   line_ptr))
13171         {
13172           msec->flags = origflags;
13173           return TRUE;
13174         }
13175
13176       msec->flags = origflags;
13177     }
13178
13179   /* Fall back on the generic ELF find_nearest_line routine.  */
13180
13181   return _bfd_elf_find_nearest_line (abfd, symbols, section, offset,
13182                                      filename_ptr, functionname_ptr,
13183                                      line_ptr, discriminator_ptr);
13184 }
13185
13186 bfd_boolean
13187 _bfd_mips_elf_find_inliner_info (bfd *abfd,
13188                                  const char **filename_ptr,
13189                                  const char **functionname_ptr,
13190                                  unsigned int *line_ptr)
13191 {
13192   bfd_boolean found;
13193   found = _bfd_dwarf2_find_inliner_info (abfd, filename_ptr,
13194                                          functionname_ptr, line_ptr,
13195                                          & elf_tdata (abfd)->dwarf2_find_line_info);
13196   return found;
13197 }
13198
13199 \f
13200 /* When are writing out the .options or .MIPS.options section,
13201    remember the bytes we are writing out, so that we can install the
13202    GP value in the section_processing routine.  */
13203
13204 bfd_boolean
13205 _bfd_mips_elf_set_section_contents (bfd *abfd, sec_ptr section,
13206                                     const void *location,
13207                                     file_ptr offset, bfd_size_type count)
13208 {
13209   if (MIPS_ELF_OPTIONS_SECTION_NAME_P (section->name))
13210     {
13211       bfd_byte *c;
13212
13213       if (elf_section_data (section) == NULL)
13214         {
13215           bfd_size_type amt = sizeof (struct bfd_elf_section_data);
13216           section->used_by_bfd = bfd_zalloc (abfd, amt);
13217           if (elf_section_data (section) == NULL)
13218             return FALSE;
13219         }
13220       c = mips_elf_section_data (section)->u.tdata;
13221       if (c == NULL)
13222         {
13223           c = bfd_zalloc (abfd, section->size);
13224           if (c == NULL)
13225             return FALSE;
13226           mips_elf_section_data (section)->u.tdata = c;
13227         }
13228
13229       memcpy (c + offset, location, count);
13230     }
13231
13232   return _bfd_elf_set_section_contents (abfd, section, location, offset,
13233                                         count);
13234 }
13235
13236 /* This is almost identical to bfd_generic_get_... except that some
13237    MIPS relocations need to be handled specially.  Sigh.  */
13238
13239 bfd_byte *
13240 _bfd_elf_mips_get_relocated_section_contents
13241   (bfd *abfd,
13242    struct bfd_link_info *link_info,
13243    struct bfd_link_order *link_order,
13244    bfd_byte *data,
13245    bfd_boolean relocatable,
13246    asymbol **symbols)
13247 {
13248   /* Get enough memory to hold the stuff */
13249   bfd *input_bfd = link_order->u.indirect.section->owner;
13250   asection *input_section = link_order->u.indirect.section;
13251   bfd_size_type sz;
13252
13253   long reloc_size = bfd_get_reloc_upper_bound (input_bfd, input_section);
13254   arelent **reloc_vector = NULL;
13255   long reloc_count;
13256
13257   if (reloc_size < 0)
13258     goto error_return;
13259
13260   reloc_vector = bfd_malloc (reloc_size);
13261   if (reloc_vector == NULL && reloc_size != 0)
13262     goto error_return;
13263
13264   /* read in the section */
13265   sz = input_section->rawsize ? input_section->rawsize : input_section->size;
13266   if (!bfd_get_section_contents (input_bfd, input_section, data, 0, sz))
13267     goto error_return;
13268
13269   reloc_count = bfd_canonicalize_reloc (input_bfd,
13270                                         input_section,
13271                                         reloc_vector,
13272                                         symbols);
13273   if (reloc_count < 0)
13274     goto error_return;
13275
13276   if (reloc_count > 0)
13277     {
13278       arelent **parent;
13279       /* for mips */
13280       int gp_found;
13281       bfd_vma gp = 0x12345678;  /* initialize just to shut gcc up */
13282
13283       {
13284         struct bfd_hash_entry *h;
13285         struct bfd_link_hash_entry *lh;
13286         /* Skip all this stuff if we aren't mixing formats.  */
13287         if (abfd && input_bfd
13288             && abfd->xvec == input_bfd->xvec)
13289           lh = 0;
13290         else
13291           {
13292             h = bfd_hash_lookup (&link_info->hash->table, "_gp", FALSE, FALSE);
13293             lh = (struct bfd_link_hash_entry *) h;
13294           }
13295       lookup:
13296         if (lh)
13297           {
13298             switch (lh->type)
13299               {
13300               case bfd_link_hash_undefined:
13301               case bfd_link_hash_undefweak:
13302               case bfd_link_hash_common:
13303                 gp_found = 0;
13304                 break;
13305               case bfd_link_hash_defined:
13306               case bfd_link_hash_defweak:
13307                 gp_found = 1;
13308                 gp = lh->u.def.value;
13309                 break;
13310               case bfd_link_hash_indirect:
13311               case bfd_link_hash_warning:
13312                 lh = lh->u.i.link;
13313                 /* @@FIXME  ignoring warning for now */
13314                 goto lookup;
13315               case bfd_link_hash_new:
13316               default:
13317                 abort ();
13318               }
13319           }
13320         else
13321           gp_found = 0;
13322       }
13323       /* end mips */
13324       for (parent = reloc_vector; *parent != NULL; parent++)
13325         {
13326           char *error_message = NULL;
13327           bfd_reloc_status_type r;
13328
13329           /* Specific to MIPS: Deal with relocation types that require
13330              knowing the gp of the output bfd.  */
13331           asymbol *sym = *(*parent)->sym_ptr_ptr;
13332
13333           /* If we've managed to find the gp and have a special
13334              function for the relocation then go ahead, else default
13335              to the generic handling.  */
13336           if (gp_found
13337               && (*parent)->howto->special_function
13338               == _bfd_mips_elf32_gprel16_reloc)
13339             r = _bfd_mips_elf_gprel16_with_gp (input_bfd, sym, *parent,
13340                                                input_section, relocatable,
13341                                                data, gp);
13342           else
13343             r = bfd_perform_relocation (input_bfd, *parent, data,
13344                                         input_section,
13345                                         relocatable ? abfd : NULL,
13346                                         &error_message);
13347
13348           if (relocatable)
13349             {
13350               asection *os = input_section->output_section;
13351
13352               /* A partial link, so keep the relocs */
13353               os->orelocation[os->reloc_count] = *parent;
13354               os->reloc_count++;
13355             }
13356
13357           if (r != bfd_reloc_ok)
13358             {
13359               switch (r)
13360                 {
13361                 case bfd_reloc_undefined:
13362                   (*link_info->callbacks->undefined_symbol)
13363                     (link_info, bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
13364                      input_bfd, input_section, (*parent)->address, TRUE);
13365                   break;
13366                 case bfd_reloc_dangerous:
13367                   BFD_ASSERT (error_message != NULL);
13368                   (*link_info->callbacks->reloc_dangerous)
13369                     (link_info, error_message,
13370                      input_bfd, input_section, (*parent)->address);
13371                   break;
13372                 case bfd_reloc_overflow:
13373                   (*link_info->callbacks->reloc_overflow)
13374                     (link_info, NULL,
13375                      bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
13376                      (*parent)->howto->name, (*parent)->addend,
13377                      input_bfd, input_section, (*parent)->address);
13378                   break;
13379                 case bfd_reloc_outofrange:
13380                 default:
13381                   abort ();
13382                   break;
13383                 }
13384
13385             }
13386         }
13387     }
13388   if (reloc_vector != NULL)
13389     free (reloc_vector);
13390   return data;
13391
13392 error_return:
13393   if (reloc_vector != NULL)
13394     free (reloc_vector);
13395   return NULL;
13396 }
13397 \f
13398 static bfd_boolean
13399 mips_elf_relax_delete_bytes (bfd *abfd,
13400                              asection *sec, bfd_vma addr, int count)
13401 {
13402   Elf_Internal_Shdr *symtab_hdr;
13403   unsigned int sec_shndx;
13404   bfd_byte *contents;
13405   Elf_Internal_Rela *irel, *irelend;
13406   Elf_Internal_Sym *isym;
13407   Elf_Internal_Sym *isymend;
13408   struct elf_link_hash_entry **sym_hashes;
13409   struct elf_link_hash_entry **end_hashes;
13410   struct elf_link_hash_entry **start_hashes;
13411   unsigned int symcount;
13412
13413   sec_shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
13414   contents = elf_section_data (sec)->this_hdr.contents;
13415
13416   irel = elf_section_data (sec)->relocs;
13417   irelend = irel + sec->reloc_count;
13418
13419   /* Actually delete the bytes.  */
13420   memmove (contents + addr, contents + addr + count,
13421            (size_t) (sec->size - addr - count));
13422   sec->size -= count;
13423
13424   /* Adjust all the relocs.  */
13425   for (irel = elf_section_data (sec)->relocs; irel < irelend; irel++)
13426     {
13427       /* Get the new reloc address.  */
13428       if (irel->r_offset > addr)
13429         irel->r_offset -= count;
13430     }
13431
13432   BFD_ASSERT (addr % 2 == 0);
13433   BFD_ASSERT (count % 2 == 0);
13434
13435   /* Adjust the local symbols defined in this section.  */
13436   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
13437   isym = (Elf_Internal_Sym *) symtab_hdr->contents;
13438   for (isymend = isym + symtab_hdr->sh_info; isym < isymend; isym++)
13439     if (isym->st_shndx == sec_shndx && isym->st_value > addr)
13440       isym->st_value -= count;
13441
13442   /* Now adjust the global symbols defined in this section.  */
13443   symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym)
13444               - symtab_hdr->sh_info);
13445   sym_hashes = start_hashes = elf_sym_hashes (abfd);
13446   end_hashes = sym_hashes + symcount;
13447
13448   for (; sym_hashes < end_hashes; sym_hashes++)
13449     {
13450       struct elf_link_hash_entry *sym_hash = *sym_hashes;
13451
13452       if ((sym_hash->root.type == bfd_link_hash_defined
13453            || sym_hash->root.type == bfd_link_hash_defweak)
13454           && sym_hash->root.u.def.section == sec)
13455         {
13456           bfd_vma value = sym_hash->root.u.def.value;
13457
13458           if (ELF_ST_IS_MICROMIPS (sym_hash->other))
13459             value &= MINUS_TWO;
13460           if (value > addr)
13461             sym_hash->root.u.def.value -= count;
13462         }
13463     }
13464
13465   return TRUE;
13466 }
13467
13468
13469 /* Opcodes needed for microMIPS relaxation as found in
13470    opcodes/micromips-opc.c.  */
13471
13472 struct opcode_descriptor {
13473   unsigned long match;
13474   unsigned long mask;
13475 };
13476
13477 /* The $ra register aka $31.  */
13478
13479 #define RA 31
13480
13481 /* 32-bit instruction format register fields.  */
13482
13483 #define OP32_SREG(opcode) (((opcode) >> 16) & 0x1f)
13484 #define OP32_TREG(opcode) (((opcode) >> 21) & 0x1f)
13485
13486 /* Check if a 5-bit register index can be abbreviated to 3 bits.  */
13487
13488 #define OP16_VALID_REG(r) \
13489   ((2 <= (r) && (r) <= 7) || (16 <= (r) && (r) <= 17))
13490
13491
13492 /* 32-bit and 16-bit branches.  */
13493
13494 static const struct opcode_descriptor b_insns_32[] = {
13495   { /* "b",     "p",            */ 0x40400000, 0xffff0000 }, /* bgez 0 */
13496   { /* "b",     "p",            */ 0x94000000, 0xffff0000 }, /* beq 0, 0 */
13497   { 0, 0 }  /* End marker for find_match().  */
13498 };
13499
13500 static const struct opcode_descriptor bc_insn_32 =
13501   { /* "bc(1|2)(ft)", "N,p",    */ 0x42800000, 0xfec30000 };
13502
13503 static const struct opcode_descriptor bz_insn_32 =
13504   { /* "b(g|l)(e|t)z", "s,p",   */ 0x40000000, 0xff200000 };
13505
13506 static const struct opcode_descriptor bzal_insn_32 =
13507   { /* "b(ge|lt)zal", "s,p",    */ 0x40200000, 0xffa00000 };
13508
13509 static const struct opcode_descriptor beq_insn_32 =
13510   { /* "b(eq|ne)", "s,t,p",     */ 0x94000000, 0xdc000000 };
13511
13512 static const struct opcode_descriptor b_insn_16 =
13513   { /* "b",     "mD",           */ 0xcc00,     0xfc00 };
13514
13515 static const struct opcode_descriptor bz_insn_16 =
13516   { /* "b(eq|ne)z", "md,mE",    */ 0x8c00,     0xdc00 };
13517
13518
13519 /* 32-bit and 16-bit branch EQ and NE zero.  */
13520
13521 /* NOTE: All opcode tables have BEQ/BNE in the same order: first the
13522    eq and second the ne.  This convention is used when replacing a
13523    32-bit BEQ/BNE with the 16-bit version.  */
13524
13525 #define BZC32_REG_FIELD(r) (((r) & 0x1f) << 16)
13526
13527 static const struct opcode_descriptor bz_rs_insns_32[] = {
13528   { /* "beqz",  "s,p",          */ 0x94000000, 0xffe00000 },
13529   { /* "bnez",  "s,p",          */ 0xb4000000, 0xffe00000 },
13530   { 0, 0 }  /* End marker for find_match().  */
13531 };
13532
13533 static const struct opcode_descriptor bz_rt_insns_32[] = {
13534   { /* "beqz",  "t,p",          */ 0x94000000, 0xfc01f000 },
13535   { /* "bnez",  "t,p",          */ 0xb4000000, 0xfc01f000 },
13536   { 0, 0 }  /* End marker for find_match().  */
13537 };
13538
13539 static const struct opcode_descriptor bzc_insns_32[] = {
13540   { /* "beqzc", "s,p",          */ 0x40e00000, 0xffe00000 },
13541   { /* "bnezc", "s,p",          */ 0x40a00000, 0xffe00000 },
13542   { 0, 0 }  /* End marker for find_match().  */
13543 };
13544
13545 static const struct opcode_descriptor bz_insns_16[] = {
13546   { /* "beqz",  "md,mE",        */ 0x8c00,     0xfc00 },
13547   { /* "bnez",  "md,mE",        */ 0xac00,     0xfc00 },
13548   { 0, 0 }  /* End marker for find_match().  */
13549 };
13550
13551 /* Switch between a 5-bit register index and its 3-bit shorthand.  */
13552
13553 #define BZ16_REG(opcode) ((((((opcode) >> 7) & 7) + 0x1e) & 0xf) + 2)
13554 #define BZ16_REG_FIELD(r) (((r) & 7) << 7)
13555
13556
13557 /* 32-bit instructions with a delay slot.  */
13558
13559 static const struct opcode_descriptor jal_insn_32_bd16 =
13560   { /* "jals",  "a",            */ 0x74000000, 0xfc000000 };
13561
13562 static const struct opcode_descriptor jal_insn_32_bd32 =
13563   { /* "jal",   "a",            */ 0xf4000000, 0xfc000000 };
13564
13565 static const struct opcode_descriptor jal_x_insn_32_bd32 =
13566   { /* "jal[x]", "a",           */ 0xf0000000, 0xf8000000 };
13567
13568 static const struct opcode_descriptor j_insn_32 =
13569   { /* "j",     "a",            */ 0xd4000000, 0xfc000000 };
13570
13571 static const struct opcode_descriptor jalr_insn_32 =
13572   { /* "jalr[.hb]", "t,s",      */ 0x00000f3c, 0xfc00efff };
13573
13574 /* This table can be compacted, because no opcode replacement is made.  */
13575
13576 static const struct opcode_descriptor ds_insns_32_bd16[] = {
13577   { /* "jals",  "a",            */ 0x74000000, 0xfc000000 },
13578
13579   { /* "jalrs[.hb]", "t,s",     */ 0x00004f3c, 0xfc00efff },
13580   { /* "b(ge|lt)zals", "s,p",   */ 0x42200000, 0xffa00000 },
13581
13582   { /* "b(g|l)(e|t)z", "s,p",   */ 0x40000000, 0xff200000 },
13583   { /* "b(eq|ne)", "s,t,p",     */ 0x94000000, 0xdc000000 },
13584   { /* "j",     "a",            */ 0xd4000000, 0xfc000000 },
13585   { 0, 0 }  /* End marker for find_match().  */
13586 };
13587
13588 /* This table can be compacted, because no opcode replacement is made.  */
13589
13590 static const struct opcode_descriptor ds_insns_32_bd32[] = {
13591   { /* "jal[x]", "a",           */ 0xf0000000, 0xf8000000 },
13592
13593   { /* "jalr[.hb]", "t,s",      */ 0x00000f3c, 0xfc00efff },
13594   { /* "b(ge|lt)zal", "s,p",    */ 0x40200000, 0xffa00000 },
13595   { 0, 0 }  /* End marker for find_match().  */
13596 };
13597
13598
13599 /* 16-bit instructions with a delay slot.  */
13600
13601 static const struct opcode_descriptor jalr_insn_16_bd16 =
13602   { /* "jalrs", "my,mj",        */ 0x45e0,     0xffe0 };
13603
13604 static const struct opcode_descriptor jalr_insn_16_bd32 =
13605   { /* "jalr",  "my,mj",        */ 0x45c0,     0xffe0 };
13606
13607 static const struct opcode_descriptor jr_insn_16 =
13608   { /* "jr",    "mj",           */ 0x4580,     0xffe0 };
13609
13610 #define JR16_REG(opcode) ((opcode) & 0x1f)
13611
13612 /* This table can be compacted, because no opcode replacement is made.  */
13613
13614 static const struct opcode_descriptor ds_insns_16_bd16[] = {
13615   { /* "jalrs", "my,mj",        */ 0x45e0,     0xffe0 },
13616
13617   { /* "b",     "mD",           */ 0xcc00,     0xfc00 },
13618   { /* "b(eq|ne)z", "md,mE",    */ 0x8c00,     0xdc00 },
13619   { /* "jr",    "mj",           */ 0x4580,     0xffe0 },
13620   { 0, 0 }  /* End marker for find_match().  */
13621 };
13622
13623
13624 /* LUI instruction.  */
13625
13626 static const struct opcode_descriptor lui_insn =
13627  { /* "lui",    "s,u",          */ 0x41a00000, 0xffe00000 };
13628
13629
13630 /* ADDIU instruction.  */
13631
13632 static const struct opcode_descriptor addiu_insn =
13633   { /* "addiu", "t,r,j",        */ 0x30000000, 0xfc000000 };
13634
13635 static const struct opcode_descriptor addiupc_insn =
13636   { /* "addiu", "mb,$pc,mQ",    */ 0x78000000, 0xfc000000 };
13637
13638 #define ADDIUPC_REG_FIELD(r) \
13639   (((2 <= (r) && (r) <= 7) ? (r) : ((r) - 16)) << 23)
13640
13641
13642 /* Relaxable instructions in a JAL delay slot: MOVE.  */
13643
13644 /* The 16-bit move has rd in 9:5 and rs in 4:0.  The 32-bit moves
13645    (ADDU, OR) have rd in 15:11 and rs in 10:16.  */
13646 #define MOVE32_RD(opcode) (((opcode) >> 11) & 0x1f)
13647 #define MOVE32_RS(opcode) (((opcode) >> 16) & 0x1f)
13648
13649 #define MOVE16_RD_FIELD(r) (((r) & 0x1f) << 5)
13650 #define MOVE16_RS_FIELD(r) (((r) & 0x1f)     )
13651
13652 static const struct opcode_descriptor move_insns_32[] = {
13653   { /* "move",  "d,s",          */ 0x00000290, 0xffe007ff }, /* or   d,s,$0 */
13654   { /* "move",  "d,s",          */ 0x00000150, 0xffe007ff }, /* addu d,s,$0 */
13655   { 0, 0 }  /* End marker for find_match().  */
13656 };
13657
13658 static const struct opcode_descriptor move_insn_16 =
13659   { /* "move",  "mp,mj",        */ 0x0c00,     0xfc00 };
13660
13661
13662 /* NOP instructions.  */
13663
13664 static const struct opcode_descriptor nop_insn_32 =
13665   { /* "nop",   "",             */ 0x00000000, 0xffffffff };
13666
13667 static const struct opcode_descriptor nop_insn_16 =
13668   { /* "nop",   "",             */ 0x0c00,     0xffff };
13669
13670
13671 /* Instruction match support.  */
13672
13673 #define MATCH(opcode, insn) ((opcode & insn.mask) == insn.match)
13674
13675 static int
13676 find_match (unsigned long opcode, const struct opcode_descriptor insn[])
13677 {
13678   unsigned long indx;
13679
13680   for (indx = 0; insn[indx].mask != 0; indx++)
13681     if (MATCH (opcode, insn[indx]))
13682       return indx;
13683
13684   return -1;
13685 }
13686
13687
13688 /* Branch and delay slot decoding support.  */
13689
13690 /* If PTR points to what *might* be a 16-bit branch or jump, then
13691    return the minimum length of its delay slot, otherwise return 0.
13692    Non-zero results are not definitive as we might be checking against
13693    the second half of another instruction.  */
13694
13695 static int
13696 check_br16_dslot (bfd *abfd, bfd_byte *ptr)
13697 {
13698   unsigned long opcode;
13699   int bdsize;
13700
13701   opcode = bfd_get_16 (abfd, ptr);
13702   if (MATCH (opcode, jalr_insn_16_bd32) != 0)
13703     /* 16-bit branch/jump with a 32-bit delay slot.  */
13704     bdsize = 4;
13705   else if (MATCH (opcode, jalr_insn_16_bd16) != 0
13706            || find_match (opcode, ds_insns_16_bd16) >= 0)
13707     /* 16-bit branch/jump with a 16-bit delay slot.  */
13708     bdsize = 2;
13709   else
13710     /* No delay slot.  */
13711     bdsize = 0;
13712
13713   return bdsize;
13714 }
13715
13716 /* If PTR points to what *might* be a 32-bit branch or jump, then
13717    return the minimum length of its delay slot, otherwise return 0.
13718    Non-zero results are not definitive as we might be checking against
13719    the second half of another instruction.  */
13720
13721 static int
13722 check_br32_dslot (bfd *abfd, bfd_byte *ptr)
13723 {
13724   unsigned long opcode;
13725   int bdsize;
13726
13727   opcode = bfd_get_micromips_32 (abfd, ptr);
13728   if (find_match (opcode, ds_insns_32_bd32) >= 0)
13729     /* 32-bit branch/jump with a 32-bit delay slot.  */
13730     bdsize = 4;
13731   else if (find_match (opcode, ds_insns_32_bd16) >= 0)
13732     /* 32-bit branch/jump with a 16-bit delay slot.  */
13733     bdsize = 2;
13734   else
13735     /* No delay slot.  */
13736     bdsize = 0;
13737
13738   return bdsize;
13739 }
13740
13741 /* If PTR points to a 16-bit branch or jump with a 32-bit delay slot
13742    that doesn't fiddle with REG, then return TRUE, otherwise FALSE.  */
13743
13744 static bfd_boolean
13745 check_br16 (bfd *abfd, bfd_byte *ptr, unsigned long reg)
13746 {
13747   unsigned long opcode;
13748
13749   opcode = bfd_get_16 (abfd, ptr);
13750   if (MATCH (opcode, b_insn_16)
13751                                                 /* B16  */
13752       || (MATCH (opcode, jr_insn_16) && reg != JR16_REG (opcode))
13753                                                 /* JR16  */
13754       || (MATCH (opcode, bz_insn_16) && reg != BZ16_REG (opcode))
13755                                                 /* BEQZ16, BNEZ16  */
13756       || (MATCH (opcode, jalr_insn_16_bd32)
13757                                                 /* JALR16  */
13758           && reg != JR16_REG (opcode) && reg != RA))
13759     return TRUE;
13760
13761   return FALSE;
13762 }
13763
13764 /* If PTR points to a 32-bit branch or jump that doesn't fiddle with REG,
13765    then return TRUE, otherwise FALSE.  */
13766
13767 static bfd_boolean
13768 check_br32 (bfd *abfd, bfd_byte *ptr, unsigned long reg)
13769 {
13770   unsigned long opcode;
13771
13772   opcode = bfd_get_micromips_32 (abfd, ptr);
13773   if (MATCH (opcode, j_insn_32)
13774                                                 /* J  */
13775       || MATCH (opcode, bc_insn_32)
13776                                                 /* BC1F, BC1T, BC2F, BC2T  */
13777       || (MATCH (opcode, jal_x_insn_32_bd32) && reg != RA)
13778                                                 /* JAL, JALX  */
13779       || (MATCH (opcode, bz_insn_32) && reg != OP32_SREG (opcode))
13780                                                 /* BGEZ, BGTZ, BLEZ, BLTZ  */
13781       || (MATCH (opcode, bzal_insn_32)
13782                                                 /* BGEZAL, BLTZAL  */
13783           && reg != OP32_SREG (opcode) && reg != RA)
13784       || ((MATCH (opcode, jalr_insn_32) || MATCH (opcode, beq_insn_32))
13785                                                 /* JALR, JALR.HB, BEQ, BNE  */
13786           && reg != OP32_SREG (opcode) && reg != OP32_TREG (opcode)))
13787     return TRUE;
13788
13789   return FALSE;
13790 }
13791
13792 /* If the instruction encoding at PTR and relocations [INTERNAL_RELOCS,
13793    IRELEND) at OFFSET indicate that there must be a compact branch there,
13794    then return TRUE, otherwise FALSE.  */
13795
13796 static bfd_boolean
13797 check_relocated_bzc (bfd *abfd, const bfd_byte *ptr, bfd_vma offset,
13798                      const Elf_Internal_Rela *internal_relocs,
13799                      const Elf_Internal_Rela *irelend)
13800 {
13801   const Elf_Internal_Rela *irel;
13802   unsigned long opcode;
13803
13804   opcode = bfd_get_micromips_32 (abfd, ptr);
13805   if (find_match (opcode, bzc_insns_32) < 0)
13806     return FALSE;
13807
13808   for (irel = internal_relocs; irel < irelend; irel++)
13809     if (irel->r_offset == offset
13810         && ELF32_R_TYPE (irel->r_info) == R_MICROMIPS_PC16_S1)
13811       return TRUE;
13812
13813   return FALSE;
13814 }
13815
13816 /* Bitsize checking.  */
13817 #define IS_BITSIZE(val, N)                                              \
13818   (((((val) & ((1ULL << (N)) - 1)) ^ (1ULL << ((N) - 1)))               \
13819     - (1ULL << ((N) - 1))) == (val))
13820
13821 \f
13822 bfd_boolean
13823 _bfd_mips_elf_relax_section (bfd *abfd, asection *sec,
13824                              struct bfd_link_info *link_info,
13825                              bfd_boolean *again)
13826 {
13827   bfd_boolean insn32 = mips_elf_hash_table (link_info)->insn32;
13828   Elf_Internal_Shdr *symtab_hdr;
13829   Elf_Internal_Rela *internal_relocs;
13830   Elf_Internal_Rela *irel, *irelend;
13831   bfd_byte *contents = NULL;
13832   Elf_Internal_Sym *isymbuf = NULL;
13833
13834   /* Assume nothing changes.  */
13835   *again = FALSE;
13836
13837   /* We don't have to do anything for a relocatable link, if
13838      this section does not have relocs, or if this is not a
13839      code section.  */
13840
13841   if (bfd_link_relocatable (link_info)
13842       || (sec->flags & SEC_RELOC) == 0
13843       || sec->reloc_count == 0
13844       || (sec->flags & SEC_CODE) == 0)
13845     return TRUE;
13846
13847   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
13848
13849   /* Get a copy of the native relocations.  */
13850   internal_relocs = (_bfd_elf_link_read_relocs
13851                      (abfd, sec, NULL, (Elf_Internal_Rela *) NULL,
13852                       link_info->keep_memory));
13853   if (internal_relocs == NULL)
13854     goto error_return;
13855
13856   /* Walk through them looking for relaxing opportunities.  */
13857   irelend = internal_relocs + sec->reloc_count;
13858   for (irel = internal_relocs; irel < irelend; irel++)
13859     {
13860       unsigned long r_symndx = ELF32_R_SYM (irel->r_info);
13861       unsigned int r_type = ELF32_R_TYPE (irel->r_info);
13862       bfd_boolean target_is_micromips_code_p;
13863       unsigned long opcode;
13864       bfd_vma symval;
13865       bfd_vma pcrval;
13866       bfd_byte *ptr;
13867       int fndopc;
13868
13869       /* The number of bytes to delete for relaxation and from where
13870          to delete these bytes starting at irel->r_offset.  */
13871       int delcnt = 0;
13872       int deloff = 0;
13873
13874       /* If this isn't something that can be relaxed, then ignore
13875          this reloc.  */
13876       if (r_type != R_MICROMIPS_HI16
13877           && r_type != R_MICROMIPS_PC16_S1
13878           && r_type != R_MICROMIPS_26_S1)
13879         continue;
13880
13881       /* Get the section contents if we haven't done so already.  */
13882       if (contents == NULL)
13883         {
13884           /* Get cached copy if it exists.  */
13885           if (elf_section_data (sec)->this_hdr.contents != NULL)
13886             contents = elf_section_data (sec)->this_hdr.contents;
13887           /* Go get them off disk.  */
13888           else if (!bfd_malloc_and_get_section (abfd, sec, &contents))
13889             goto error_return;
13890         }
13891       ptr = contents + irel->r_offset;
13892
13893       /* Read this BFD's local symbols if we haven't done so already.  */
13894       if (isymbuf == NULL && symtab_hdr->sh_info != 0)
13895         {
13896           isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
13897           if (isymbuf == NULL)
13898             isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
13899                                             symtab_hdr->sh_info, 0,
13900                                             NULL, NULL, NULL);
13901           if (isymbuf == NULL)
13902             goto error_return;
13903         }
13904
13905       /* Get the value of the symbol referred to by the reloc.  */
13906       if (r_symndx < symtab_hdr->sh_info)
13907         {
13908           /* A local symbol.  */
13909           Elf_Internal_Sym *isym;
13910           asection *sym_sec;
13911
13912           isym = isymbuf + r_symndx;
13913           if (isym->st_shndx == SHN_UNDEF)
13914             sym_sec = bfd_und_section_ptr;
13915           else if (isym->st_shndx == SHN_ABS)
13916             sym_sec = bfd_abs_section_ptr;
13917           else if (isym->st_shndx == SHN_COMMON)
13918             sym_sec = bfd_com_section_ptr;
13919           else
13920             sym_sec = bfd_section_from_elf_index (abfd, isym->st_shndx);
13921           symval = (isym->st_value
13922                     + sym_sec->output_section->vma
13923                     + sym_sec->output_offset);
13924           target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (isym->st_other);
13925         }
13926       else
13927         {
13928           unsigned long indx;
13929           struct elf_link_hash_entry *h;
13930
13931           /* An external symbol.  */
13932           indx = r_symndx - symtab_hdr->sh_info;
13933           h = elf_sym_hashes (abfd)[indx];
13934           BFD_ASSERT (h != NULL);
13935
13936           if (h->root.type != bfd_link_hash_defined
13937               && h->root.type != bfd_link_hash_defweak)
13938             /* This appears to be a reference to an undefined
13939                symbol.  Just ignore it -- it will be caught by the
13940                regular reloc processing.  */
13941             continue;
13942
13943           symval = (h->root.u.def.value
13944                     + h->root.u.def.section->output_section->vma
13945                     + h->root.u.def.section->output_offset);
13946           target_is_micromips_code_p = (!h->needs_plt
13947                                         && ELF_ST_IS_MICROMIPS (h->other));
13948         }
13949
13950
13951       /* For simplicity of coding, we are going to modify the
13952          section contents, the section relocs, and the BFD symbol
13953          table.  We must tell the rest of the code not to free up this
13954          information.  It would be possible to instead create a table
13955          of changes which have to be made, as is done in coff-mips.c;
13956          that would be more work, but would require less memory when
13957          the linker is run.  */
13958
13959       /* Only 32-bit instructions relaxed.  */
13960       if (irel->r_offset + 4 > sec->size)
13961         continue;
13962
13963       opcode = bfd_get_micromips_32 (abfd, ptr);
13964
13965       /* This is the pc-relative distance from the instruction the
13966          relocation is applied to, to the symbol referred.  */
13967       pcrval = (symval
13968                 - (sec->output_section->vma + sec->output_offset)
13969                 - irel->r_offset);
13970
13971       /* R_MICROMIPS_HI16 / LUI relaxation to nil, performing relaxation
13972          of corresponding R_MICROMIPS_LO16 to R_MICROMIPS_HI0_LO16 or
13973          R_MICROMIPS_PC23_S2.  The R_MICROMIPS_PC23_S2 condition is
13974
13975            (symval % 4 == 0 && IS_BITSIZE (pcrval, 25))
13976
13977          where pcrval has first to be adjusted to apply against the LO16
13978          location (we make the adjustment later on, when we have figured
13979          out the offset).  */
13980       if (r_type == R_MICROMIPS_HI16 && MATCH (opcode, lui_insn))
13981         {
13982           bfd_boolean bzc = FALSE;
13983           unsigned long nextopc;
13984           unsigned long reg;
13985           bfd_vma offset;
13986
13987           /* Give up if the previous reloc was a HI16 against this symbol
13988              too.  */
13989           if (irel > internal_relocs
13990               && ELF32_R_TYPE (irel[-1].r_info) == R_MICROMIPS_HI16
13991               && ELF32_R_SYM (irel[-1].r_info) == r_symndx)
13992             continue;
13993
13994           /* Or if the next reloc is not a LO16 against this symbol.  */
13995           if (irel + 1 >= irelend
13996               || ELF32_R_TYPE (irel[1].r_info) != R_MICROMIPS_LO16
13997               || ELF32_R_SYM (irel[1].r_info) != r_symndx)
13998             continue;
13999
14000           /* Or if the second next reloc is a LO16 against this symbol too.  */
14001           if (irel + 2 >= irelend
14002               && ELF32_R_TYPE (irel[2].r_info) == R_MICROMIPS_LO16
14003               && ELF32_R_SYM (irel[2].r_info) == r_symndx)
14004             continue;
14005
14006           /* See if the LUI instruction *might* be in a branch delay slot.
14007              We check whether what looks like a 16-bit branch or jump is
14008              actually an immediate argument to a compact branch, and let
14009              it through if so.  */
14010           if (irel->r_offset >= 2
14011               && check_br16_dslot (abfd, ptr - 2)
14012               && !(irel->r_offset >= 4
14013                    && (bzc = check_relocated_bzc (abfd,
14014                                                   ptr - 4, irel->r_offset - 4,
14015                                                   internal_relocs, irelend))))
14016             continue;
14017           if (irel->r_offset >= 4
14018               && !bzc
14019               && check_br32_dslot (abfd, ptr - 4))
14020             continue;
14021
14022           reg = OP32_SREG (opcode);
14023
14024           /* We only relax adjacent instructions or ones separated with
14025              a branch or jump that has a delay slot.  The branch or jump
14026              must not fiddle with the register used to hold the address.
14027              Subtract 4 for the LUI itself.  */
14028           offset = irel[1].r_offset - irel[0].r_offset;
14029           switch (offset - 4)
14030             {
14031             case 0:
14032               break;
14033             case 2:
14034               if (check_br16 (abfd, ptr + 4, reg))
14035                 break;
14036               continue;
14037             case 4:
14038               if (check_br32 (abfd, ptr + 4, reg))
14039                 break;
14040               continue;
14041             default:
14042               continue;
14043             }
14044
14045           nextopc = bfd_get_micromips_32 (abfd, contents + irel[1].r_offset);
14046
14047           /* Give up unless the same register is used with both
14048              relocations.  */
14049           if (OP32_SREG (nextopc) != reg)
14050             continue;
14051
14052           /* Now adjust pcrval, subtracting the offset to the LO16 reloc
14053              and rounding up to take masking of the two LSBs into account.  */
14054           pcrval = ((pcrval - offset + 3) | 3) ^ 3;
14055
14056           /* R_MICROMIPS_LO16 relaxation to R_MICROMIPS_HI0_LO16.  */
14057           if (IS_BITSIZE (symval, 16))
14058             {
14059               /* Fix the relocation's type.  */
14060               irel[1].r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_HI0_LO16);
14061
14062               /* Instructions using R_MICROMIPS_LO16 have the base or
14063                  source register in bits 20:16.  This register becomes $0
14064                  (zero) as the result of the R_MICROMIPS_HI16 being 0.  */
14065               nextopc &= ~0x001f0000;
14066               bfd_put_16 (abfd, (nextopc >> 16) & 0xffff,
14067                           contents + irel[1].r_offset);
14068             }
14069
14070           /* R_MICROMIPS_LO16 / ADDIU relaxation to R_MICROMIPS_PC23_S2.
14071              We add 4 to take LUI deletion into account while checking
14072              the PC-relative distance.  */
14073           else if (symval % 4 == 0
14074                    && IS_BITSIZE (pcrval + 4, 25)
14075                    && MATCH (nextopc, addiu_insn)
14076                    && OP32_TREG (nextopc) == OP32_SREG (nextopc)
14077                    && OP16_VALID_REG (OP32_TREG (nextopc)))
14078             {
14079               /* Fix the relocation's type.  */
14080               irel[1].r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC23_S2);
14081
14082               /* Replace ADDIU with the ADDIUPC version.  */
14083               nextopc = (addiupc_insn.match
14084                          | ADDIUPC_REG_FIELD (OP32_TREG (nextopc)));
14085
14086               bfd_put_micromips_32 (abfd, nextopc,
14087                                     contents + irel[1].r_offset);
14088             }
14089
14090           /* Can't do anything, give up, sigh...  */
14091           else
14092             continue;
14093
14094           /* Fix the relocation's type.  */
14095           irel->r_info = ELF32_R_INFO (r_symndx, R_MIPS_NONE);
14096
14097           /* Delete the LUI instruction: 4 bytes at irel->r_offset.  */
14098           delcnt = 4;
14099           deloff = 0;
14100         }
14101
14102       /* Compact branch relaxation -- due to the multitude of macros
14103          employed by the compiler/assembler, compact branches are not
14104          always generated.  Obviously, this can/will be fixed elsewhere,
14105          but there is no drawback in double checking it here.  */
14106       else if (r_type == R_MICROMIPS_PC16_S1
14107                && irel->r_offset + 5 < sec->size
14108                && ((fndopc = find_match (opcode, bz_rs_insns_32)) >= 0
14109                    || (fndopc = find_match (opcode, bz_rt_insns_32)) >= 0)
14110                && ((!insn32
14111                     && (delcnt = MATCH (bfd_get_16 (abfd, ptr + 4),
14112                                         nop_insn_16) ? 2 : 0))
14113                    || (irel->r_offset + 7 < sec->size
14114                        && (delcnt = MATCH (bfd_get_micromips_32 (abfd,
14115                                                                  ptr + 4),
14116                                            nop_insn_32) ? 4 : 0))))
14117         {
14118           unsigned long reg;
14119
14120           reg = OP32_SREG (opcode) ? OP32_SREG (opcode) : OP32_TREG (opcode);
14121
14122           /* Replace BEQZ/BNEZ with the compact version.  */
14123           opcode = (bzc_insns_32[fndopc].match
14124                     | BZC32_REG_FIELD (reg)
14125                     | (opcode & 0xffff));               /* Addend value.  */
14126
14127           bfd_put_micromips_32 (abfd, opcode, ptr);
14128
14129           /* Delete the delay slot NOP: two or four bytes from
14130              irel->offset + 4; delcnt has already been set above.  */
14131           deloff = 4;
14132         }
14133
14134       /* R_MICROMIPS_PC16_S1 relaxation to R_MICROMIPS_PC10_S1.  We need
14135          to check the distance from the next instruction, so subtract 2.  */
14136       else if (!insn32
14137                && r_type == R_MICROMIPS_PC16_S1
14138                && IS_BITSIZE (pcrval - 2, 11)
14139                && find_match (opcode, b_insns_32) >= 0)
14140         {
14141           /* Fix the relocation's type.  */
14142           irel->r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC10_S1);
14143
14144           /* Replace the 32-bit opcode with a 16-bit opcode.  */
14145           bfd_put_16 (abfd,
14146                       (b_insn_16.match
14147                        | (opcode & 0x3ff)),             /* Addend value.  */
14148                       ptr);
14149
14150           /* Delete 2 bytes from irel->r_offset + 2.  */
14151           delcnt = 2;
14152           deloff = 2;
14153         }
14154
14155       /* R_MICROMIPS_PC16_S1 relaxation to R_MICROMIPS_PC7_S1.  We need
14156          to check the distance from the next instruction, so subtract 2.  */
14157       else if (!insn32
14158                && r_type == R_MICROMIPS_PC16_S1
14159                && IS_BITSIZE (pcrval - 2, 8)
14160                && (((fndopc = find_match (opcode, bz_rs_insns_32)) >= 0
14161                     && OP16_VALID_REG (OP32_SREG (opcode)))
14162                    || ((fndopc = find_match (opcode, bz_rt_insns_32)) >= 0
14163                        && OP16_VALID_REG (OP32_TREG (opcode)))))
14164         {
14165           unsigned long reg;
14166
14167           reg = OP32_SREG (opcode) ? OP32_SREG (opcode) : OP32_TREG (opcode);
14168
14169           /* Fix the relocation's type.  */
14170           irel->r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC7_S1);
14171
14172           /* Replace the 32-bit opcode with a 16-bit opcode.  */
14173           bfd_put_16 (abfd,
14174                       (bz_insns_16[fndopc].match
14175                        | BZ16_REG_FIELD (reg)
14176                        | (opcode & 0x7f)),              /* Addend value.  */
14177                       ptr);
14178
14179           /* Delete 2 bytes from irel->r_offset + 2.  */
14180           delcnt = 2;
14181           deloff = 2;
14182         }
14183
14184       /* R_MICROMIPS_26_S1 -- JAL to JALS relaxation for microMIPS targets.  */
14185       else if (!insn32
14186                && r_type == R_MICROMIPS_26_S1
14187                && target_is_micromips_code_p
14188                && irel->r_offset + 7 < sec->size
14189                && MATCH (opcode, jal_insn_32_bd32))
14190         {
14191           unsigned long n32opc;
14192           bfd_boolean relaxed = FALSE;
14193
14194           n32opc = bfd_get_micromips_32 (abfd, ptr + 4);
14195
14196           if (MATCH (n32opc, nop_insn_32))
14197             {
14198               /* Replace delay slot 32-bit NOP with a 16-bit NOP.  */
14199               bfd_put_16 (abfd, nop_insn_16.match, ptr + 4);
14200
14201               relaxed = TRUE;
14202             }
14203           else if (find_match (n32opc, move_insns_32) >= 0)
14204             {
14205               /* Replace delay slot 32-bit MOVE with 16-bit MOVE.  */
14206               bfd_put_16 (abfd,
14207                           (move_insn_16.match
14208                            | MOVE16_RD_FIELD (MOVE32_RD (n32opc))
14209                            | MOVE16_RS_FIELD (MOVE32_RS (n32opc))),
14210                           ptr + 4);
14211
14212               relaxed = TRUE;
14213             }
14214           /* Other 32-bit instructions relaxable to 16-bit
14215              instructions will be handled here later.  */
14216
14217           if (relaxed)
14218             {
14219               /* JAL with 32-bit delay slot that is changed to a JALS
14220                  with 16-bit delay slot.  */
14221               bfd_put_micromips_32 (abfd, jal_insn_32_bd16.match, ptr);
14222
14223               /* Delete 2 bytes from irel->r_offset + 6.  */
14224               delcnt = 2;
14225               deloff = 6;
14226             }
14227         }
14228
14229       if (delcnt != 0)
14230         {
14231           /* Note that we've changed the relocs, section contents, etc.  */
14232           elf_section_data (sec)->relocs = internal_relocs;
14233           elf_section_data (sec)->this_hdr.contents = contents;
14234           symtab_hdr->contents = (unsigned char *) isymbuf;
14235
14236           /* Delete bytes depending on the delcnt and deloff.  */
14237           if (!mips_elf_relax_delete_bytes (abfd, sec,
14238                                             irel->r_offset + deloff, delcnt))
14239             goto error_return;
14240
14241           /* That will change things, so we should relax again.
14242              Note that this is not required, and it may be slow.  */
14243           *again = TRUE;
14244         }
14245     }
14246
14247   if (isymbuf != NULL
14248       && symtab_hdr->contents != (unsigned char *) isymbuf)
14249     {
14250       if (! link_info->keep_memory)
14251         free (isymbuf);
14252       else
14253         {
14254           /* Cache the symbols for elf_link_input_bfd.  */
14255           symtab_hdr->contents = (unsigned char *) isymbuf;
14256         }
14257     }
14258
14259   if (contents != NULL
14260       && elf_section_data (sec)->this_hdr.contents != contents)
14261     {
14262       if (! link_info->keep_memory)
14263         free (contents);
14264       else
14265         {
14266           /* Cache the section contents for elf_link_input_bfd.  */
14267           elf_section_data (sec)->this_hdr.contents = contents;
14268         }
14269     }
14270
14271   if (internal_relocs != NULL
14272       && elf_section_data (sec)->relocs != internal_relocs)
14273     free (internal_relocs);
14274
14275   return TRUE;
14276
14277  error_return:
14278   if (isymbuf != NULL
14279       && symtab_hdr->contents != (unsigned char *) isymbuf)
14280     free (isymbuf);
14281   if (contents != NULL
14282       && elf_section_data (sec)->this_hdr.contents != contents)
14283     free (contents);
14284   if (internal_relocs != NULL
14285       && elf_section_data (sec)->relocs != internal_relocs)
14286     free (internal_relocs);
14287
14288   return FALSE;
14289 }
14290 \f
14291 /* Create a MIPS ELF linker hash table.  */
14292
14293 struct bfd_link_hash_table *
14294 _bfd_mips_elf_link_hash_table_create (bfd *abfd)
14295 {
14296   struct mips_elf_link_hash_table *ret;
14297   bfd_size_type amt = sizeof (struct mips_elf_link_hash_table);
14298
14299   ret = bfd_zmalloc (amt);
14300   if (ret == NULL)
14301     return NULL;
14302
14303   if (!_bfd_elf_link_hash_table_init (&ret->root, abfd,
14304                                       mips_elf_link_hash_newfunc,
14305                                       sizeof (struct mips_elf_link_hash_entry),
14306                                       MIPS_ELF_DATA))
14307     {
14308       free (ret);
14309       return NULL;
14310     }
14311   ret->root.init_plt_refcount.plist = NULL;
14312   ret->root.init_plt_offset.plist = NULL;
14313
14314   return &ret->root.root;
14315 }
14316
14317 /* Likewise, but indicate that the target is VxWorks.  */
14318
14319 struct bfd_link_hash_table *
14320 _bfd_mips_vxworks_link_hash_table_create (bfd *abfd)
14321 {
14322   struct bfd_link_hash_table *ret;
14323
14324   ret = _bfd_mips_elf_link_hash_table_create (abfd);
14325   if (ret)
14326     {
14327       struct mips_elf_link_hash_table *htab;
14328
14329       htab = (struct mips_elf_link_hash_table *) ret;
14330       htab->use_plts_and_copy_relocs = TRUE;
14331       htab->is_vxworks = TRUE;
14332     }
14333   return ret;
14334 }
14335
14336 /* A function that the linker calls if we are allowed to use PLTs
14337    and copy relocs.  */
14338
14339 void
14340 _bfd_mips_elf_use_plts_and_copy_relocs (struct bfd_link_info *info)
14341 {
14342   mips_elf_hash_table (info)->use_plts_and_copy_relocs = TRUE;
14343 }
14344
14345 /* A function that the linker calls to select between all or only
14346    32-bit microMIPS instructions, and between making or ignoring
14347    branch relocation checks for invalid transitions between ISA modes.
14348    Also record whether we have been configured for a GNU target.  */
14349
14350 void
14351 _bfd_mips_elf_linker_flags (struct bfd_link_info *info, bfd_boolean insn32,
14352                             bfd_boolean ignore_branch_isa,
14353                             bfd_boolean gnu_target)
14354 {
14355   mips_elf_hash_table (info)->insn32 = insn32;
14356   mips_elf_hash_table (info)->ignore_branch_isa = ignore_branch_isa;
14357   mips_elf_hash_table (info)->gnu_target = gnu_target;
14358 }
14359
14360 /* A function that the linker calls to enable use of compact branches in
14361    linker generated code for MIPSR6.  */
14362
14363 void
14364 _bfd_mips_elf_compact_branches (struct bfd_link_info *info, bfd_boolean on)
14365 {
14366   mips_elf_hash_table (info)->compact_branches = on;
14367 }
14368
14369 \f
14370 /* Structure for saying that BFD machine EXTENSION extends BASE.  */
14371
14372 struct mips_mach_extension
14373 {
14374   unsigned long extension, base;
14375 };
14376
14377
14378 /* An array describing how BFD machines relate to one another.  The entries
14379    are ordered topologically with MIPS I extensions listed last.  */
14380
14381 static const struct mips_mach_extension mips_mach_extensions[] =
14382 {
14383   /* MIPS64r2 extensions.  */
14384   { bfd_mach_mips_octeon3, bfd_mach_mips_octeon2 },
14385   { bfd_mach_mips_octeon2, bfd_mach_mips_octeonp },
14386   { bfd_mach_mips_octeonp, bfd_mach_mips_octeon },
14387   { bfd_mach_mips_octeon, bfd_mach_mipsisa64r2 },
14388   { bfd_mach_mips_gs264e, bfd_mach_mips_gs464e },
14389   { bfd_mach_mips_gs464e, bfd_mach_mips_gs464 },
14390   { bfd_mach_mips_gs464, bfd_mach_mipsisa64r2 },
14391
14392   /* MIPS64 extensions.  */
14393   { bfd_mach_mipsisa64r2, bfd_mach_mipsisa64 },
14394   { bfd_mach_mips_sb1, bfd_mach_mipsisa64 },
14395   { bfd_mach_mips_xlr, bfd_mach_mipsisa64 },
14396
14397   /* MIPS V extensions.  */
14398   { bfd_mach_mipsisa64, bfd_mach_mips5 },
14399
14400   /* R10000 extensions.  */
14401   { bfd_mach_mips12000, bfd_mach_mips10000 },
14402   { bfd_mach_mips14000, bfd_mach_mips10000 },
14403   { bfd_mach_mips16000, bfd_mach_mips10000 },
14404
14405   /* R5000 extensions.  Note: the vr5500 ISA is an extension of the core
14406      vr5400 ISA, but doesn't include the multimedia stuff.  It seems
14407      better to allow vr5400 and vr5500 code to be merged anyway, since
14408      many libraries will just use the core ISA.  Perhaps we could add
14409      some sort of ASE flag if this ever proves a problem.  */
14410   { bfd_mach_mips5500, bfd_mach_mips5400 },
14411   { bfd_mach_mips5400, bfd_mach_mips5000 },
14412
14413   /* MIPS IV extensions.  */
14414   { bfd_mach_mips5, bfd_mach_mips8000 },
14415   { bfd_mach_mips10000, bfd_mach_mips8000 },
14416   { bfd_mach_mips5000, bfd_mach_mips8000 },
14417   { bfd_mach_mips7000, bfd_mach_mips8000 },
14418   { bfd_mach_mips9000, bfd_mach_mips8000 },
14419
14420   /* VR4100 extensions.  */
14421   { bfd_mach_mips4120, bfd_mach_mips4100 },
14422   { bfd_mach_mips4111, bfd_mach_mips4100 },
14423
14424   /* MIPS III extensions.  */
14425   { bfd_mach_mips_loongson_2e, bfd_mach_mips4000 },
14426   { bfd_mach_mips_loongson_2f, bfd_mach_mips4000 },
14427   { bfd_mach_mips8000, bfd_mach_mips4000 },
14428   { bfd_mach_mips4650, bfd_mach_mips4000 },
14429   { bfd_mach_mips4600, bfd_mach_mips4000 },
14430   { bfd_mach_mips4400, bfd_mach_mips4000 },
14431   { bfd_mach_mips4300, bfd_mach_mips4000 },
14432   { bfd_mach_mips4100, bfd_mach_mips4000 },
14433   { bfd_mach_mips5900, bfd_mach_mips4000 },
14434
14435   /* MIPS32r3 extensions.  */
14436   { bfd_mach_mips_interaptiv_mr2, bfd_mach_mipsisa32r3 },
14437
14438   /* MIPS32r2 extensions.  */
14439   { bfd_mach_mipsisa32r3, bfd_mach_mipsisa32r2 },
14440
14441   /* MIPS32 extensions.  */
14442   { bfd_mach_mipsisa32r2, bfd_mach_mipsisa32 },
14443
14444   /* MIPS II extensions.  */
14445   { bfd_mach_mips4000, bfd_mach_mips6000 },
14446   { bfd_mach_mipsisa32, bfd_mach_mips6000 },
14447   { bfd_mach_mips4010, bfd_mach_mips6000 },
14448
14449   /* MIPS I extensions.  */
14450   { bfd_mach_mips6000, bfd_mach_mips3000 },
14451   { bfd_mach_mips3900, bfd_mach_mips3000 }
14452 };
14453
14454 /* Return true if bfd machine EXTENSION is an extension of machine BASE.  */
14455
14456 static bfd_boolean
14457 mips_mach_extends_p (unsigned long base, unsigned long extension)
14458 {
14459   size_t i;
14460
14461   if (extension == base)
14462     return TRUE;
14463
14464   if (base == bfd_mach_mipsisa32
14465       && mips_mach_extends_p (bfd_mach_mipsisa64, extension))
14466     return TRUE;
14467
14468   if (base == bfd_mach_mipsisa32r2
14469       && mips_mach_extends_p (bfd_mach_mipsisa64r2, extension))
14470     return TRUE;
14471
14472   for (i = 0; i < ARRAY_SIZE (mips_mach_extensions); i++)
14473     if (extension == mips_mach_extensions[i].extension)
14474       {
14475         extension = mips_mach_extensions[i].base;
14476         if (extension == base)
14477           return TRUE;
14478       }
14479
14480   return FALSE;
14481 }
14482
14483 /* Return the BFD mach for each .MIPS.abiflags ISA Extension.  */
14484
14485 static unsigned long
14486 bfd_mips_isa_ext_mach (unsigned int isa_ext)
14487 {
14488   switch (isa_ext)
14489     {
14490     case AFL_EXT_3900:        return bfd_mach_mips3900;
14491     case AFL_EXT_4010:        return bfd_mach_mips4010;
14492     case AFL_EXT_4100:        return bfd_mach_mips4100;
14493     case AFL_EXT_4111:        return bfd_mach_mips4111;
14494     case AFL_EXT_4120:        return bfd_mach_mips4120;
14495     case AFL_EXT_4650:        return bfd_mach_mips4650;
14496     case AFL_EXT_5400:        return bfd_mach_mips5400;
14497     case AFL_EXT_5500:        return bfd_mach_mips5500;
14498     case AFL_EXT_5900:        return bfd_mach_mips5900;
14499     case AFL_EXT_10000:       return bfd_mach_mips10000;
14500     case AFL_EXT_LOONGSON_2E: return bfd_mach_mips_loongson_2e;
14501     case AFL_EXT_LOONGSON_2F: return bfd_mach_mips_loongson_2f;
14502     case AFL_EXT_SB1:         return bfd_mach_mips_sb1;
14503     case AFL_EXT_OCTEON:      return bfd_mach_mips_octeon;
14504     case AFL_EXT_OCTEONP:     return bfd_mach_mips_octeonp;
14505     case AFL_EXT_OCTEON2:     return bfd_mach_mips_octeon2;
14506     case AFL_EXT_XLR:         return bfd_mach_mips_xlr;
14507     default:                  return bfd_mach_mips3000;
14508     }
14509 }
14510
14511 /* Return the .MIPS.abiflags value representing each ISA Extension.  */
14512
14513 unsigned int
14514 bfd_mips_isa_ext (bfd *abfd)
14515 {
14516   switch (bfd_get_mach (abfd))
14517     {
14518     case bfd_mach_mips3900:         return AFL_EXT_3900;
14519     case bfd_mach_mips4010:         return AFL_EXT_4010;
14520     case bfd_mach_mips4100:         return AFL_EXT_4100;
14521     case bfd_mach_mips4111:         return AFL_EXT_4111;
14522     case bfd_mach_mips4120:         return AFL_EXT_4120;
14523     case bfd_mach_mips4650:         return AFL_EXT_4650;
14524     case bfd_mach_mips5400:         return AFL_EXT_5400;
14525     case bfd_mach_mips5500:         return AFL_EXT_5500;
14526     case bfd_mach_mips5900:         return AFL_EXT_5900;
14527     case bfd_mach_mips10000:        return AFL_EXT_10000;
14528     case bfd_mach_mips_loongson_2e: return AFL_EXT_LOONGSON_2E;
14529     case bfd_mach_mips_loongson_2f: return AFL_EXT_LOONGSON_2F;
14530     case bfd_mach_mips_sb1:         return AFL_EXT_SB1;
14531     case bfd_mach_mips_octeon:      return AFL_EXT_OCTEON;
14532     case bfd_mach_mips_octeonp:     return AFL_EXT_OCTEONP;
14533     case bfd_mach_mips_octeon3:     return AFL_EXT_OCTEON3;
14534     case bfd_mach_mips_octeon2:     return AFL_EXT_OCTEON2;
14535     case bfd_mach_mips_xlr:         return AFL_EXT_XLR;
14536     case bfd_mach_mips_interaptiv_mr2:
14537       return AFL_EXT_INTERAPTIV_MR2;
14538     default:                        return 0;
14539     }
14540 }
14541
14542 /* Encode ISA level and revision as a single value.  */
14543 #define LEVEL_REV(LEV,REV) ((LEV) << 3 | (REV))
14544
14545 /* Decode a single value into level and revision.  */
14546 #define ISA_LEVEL(LEVREV)  ((LEVREV) >> 3)
14547 #define ISA_REV(LEVREV)    ((LEVREV) & 0x7)
14548
14549 /* Update the isa_level, isa_rev, isa_ext fields of abiflags.  */
14550
14551 static void
14552 update_mips_abiflags_isa (bfd *abfd, Elf_Internal_ABIFlags_v0 *abiflags)
14553 {
14554   int new_isa = 0;
14555   switch (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH)
14556     {
14557     case E_MIPS_ARCH_1:    new_isa = LEVEL_REV (1, 0); break;
14558     case E_MIPS_ARCH_2:    new_isa = LEVEL_REV (2, 0); break;
14559     case E_MIPS_ARCH_3:    new_isa = LEVEL_REV (3, 0); break;
14560     case E_MIPS_ARCH_4:    new_isa = LEVEL_REV (4, 0); break;
14561     case E_MIPS_ARCH_5:    new_isa = LEVEL_REV (5, 0); break;
14562     case E_MIPS_ARCH_32:   new_isa = LEVEL_REV (32, 1); break;
14563     case E_MIPS_ARCH_32R2: new_isa = LEVEL_REV (32, 2); break;
14564     case E_MIPS_ARCH_32R6: new_isa = LEVEL_REV (32, 6); break;
14565     case E_MIPS_ARCH_64:   new_isa = LEVEL_REV (64, 1); break;
14566     case E_MIPS_ARCH_64R2: new_isa = LEVEL_REV (64, 2); break;
14567     case E_MIPS_ARCH_64R6: new_isa = LEVEL_REV (64, 6); break;
14568     default:
14569       _bfd_error_handler
14570         /* xgettext:c-format */
14571         (_("%pB: unknown architecture %s"),
14572          abfd, bfd_printable_name (abfd));
14573     }
14574
14575   if (new_isa > LEVEL_REV (abiflags->isa_level, abiflags->isa_rev))
14576     {
14577       abiflags->isa_level = ISA_LEVEL (new_isa);
14578       abiflags->isa_rev = ISA_REV (new_isa);
14579     }
14580
14581   /* Update the isa_ext if ABFD describes a further extension.  */
14582   if (mips_mach_extends_p (bfd_mips_isa_ext_mach (abiflags->isa_ext),
14583                            bfd_get_mach (abfd)))
14584     abiflags->isa_ext = bfd_mips_isa_ext (abfd);
14585 }
14586
14587 /* Return true if the given ELF header flags describe a 32-bit binary.  */
14588
14589 static bfd_boolean
14590 mips_32bit_flags_p (flagword flags)
14591 {
14592   return ((flags & EF_MIPS_32BITMODE) != 0
14593           || (flags & EF_MIPS_ABI) == E_MIPS_ABI_O32
14594           || (flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32
14595           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1
14596           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2
14597           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32
14598           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2
14599           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R6);
14600 }
14601
14602 /* Infer the content of the ABI flags based on the elf header.  */
14603
14604 static void
14605 infer_mips_abiflags (bfd *abfd, Elf_Internal_ABIFlags_v0* abiflags)
14606 {
14607   obj_attribute *in_attr;
14608
14609   memset (abiflags, 0, sizeof (Elf_Internal_ABIFlags_v0));
14610   update_mips_abiflags_isa (abfd, abiflags);
14611
14612   if (mips_32bit_flags_p (elf_elfheader (abfd)->e_flags))
14613     abiflags->gpr_size = AFL_REG_32;
14614   else
14615     abiflags->gpr_size = AFL_REG_64;
14616
14617   abiflags->cpr1_size = AFL_REG_NONE;
14618
14619   in_attr = elf_known_obj_attributes (abfd)[OBJ_ATTR_GNU];
14620   abiflags->fp_abi = in_attr[Tag_GNU_MIPS_ABI_FP].i;
14621
14622   if (abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_SINGLE
14623       || abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_XX
14624       || (abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_DOUBLE
14625           && abiflags->gpr_size == AFL_REG_32))
14626     abiflags->cpr1_size = AFL_REG_32;
14627   else if (abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_DOUBLE
14628            || abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_64
14629            || abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_64A)
14630     abiflags->cpr1_size = AFL_REG_64;
14631
14632   abiflags->cpr2_size = AFL_REG_NONE;
14633
14634   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MDMX)
14635     abiflags->ases |= AFL_ASE_MDMX;
14636   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_M16)
14637     abiflags->ases |= AFL_ASE_MIPS16;
14638   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MICROMIPS)
14639     abiflags->ases |= AFL_ASE_MICROMIPS;
14640
14641   if (abiflags->fp_abi != Val_GNU_MIPS_ABI_FP_ANY
14642       && abiflags->fp_abi != Val_GNU_MIPS_ABI_FP_SOFT
14643       && abiflags->fp_abi != Val_GNU_MIPS_ABI_FP_64A
14644       && abiflags->isa_level >= 32
14645       && abiflags->ases != AFL_ASE_LOONGSON_EXT)
14646     abiflags->flags1 |= AFL_FLAGS1_ODDSPREG;
14647 }
14648
14649 /* We need to use a special link routine to handle the .reginfo and
14650    the .mdebug sections.  We need to merge all instances of these
14651    sections together, not write them all out sequentially.  */
14652
14653 bfd_boolean
14654 _bfd_mips_elf_final_link (bfd *abfd, struct bfd_link_info *info)
14655 {
14656   asection *o;
14657   struct bfd_link_order *p;
14658   asection *reginfo_sec, *mdebug_sec, *gptab_data_sec, *gptab_bss_sec;
14659   asection *rtproc_sec, *abiflags_sec;
14660   Elf32_RegInfo reginfo;
14661   struct ecoff_debug_info debug;
14662   struct mips_htab_traverse_info hti;
14663   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
14664   const struct ecoff_debug_swap *swap = bed->elf_backend_ecoff_debug_swap;
14665   HDRR *symhdr = &debug.symbolic_header;
14666   void *mdebug_handle = NULL;
14667   asection *s;
14668   EXTR esym;
14669   unsigned int i;
14670   bfd_size_type amt;
14671   struct mips_elf_link_hash_table *htab;
14672
14673   static const char * const secname[] =
14674   {
14675     ".text", ".init", ".fini", ".data",
14676     ".rodata", ".sdata", ".sbss", ".bss"
14677   };
14678   static const int sc[] =
14679   {
14680     scText, scInit, scFini, scData,
14681     scRData, scSData, scSBss, scBss
14682   };
14683
14684   htab = mips_elf_hash_table (info);
14685   BFD_ASSERT (htab != NULL);
14686
14687   /* Sort the dynamic symbols so that those with GOT entries come after
14688      those without.  */
14689   if (!mips_elf_sort_hash_table (abfd, info))
14690     return FALSE;
14691
14692   /* Create any scheduled LA25 stubs.  */
14693   hti.info = info;
14694   hti.output_bfd = abfd;
14695   hti.error = FALSE;
14696   htab_traverse (htab->la25_stubs, mips_elf_create_la25_stub, &hti);
14697   if (hti.error)
14698     return FALSE;
14699
14700   /* Get a value for the GP register.  */
14701   if (elf_gp (abfd) == 0)
14702     {
14703       struct bfd_link_hash_entry *h;
14704
14705       h = bfd_link_hash_lookup (info->hash, "_gp", FALSE, FALSE, TRUE);
14706       if (h != NULL && h->type == bfd_link_hash_defined)
14707         elf_gp (abfd) = (h->u.def.value
14708                          + h->u.def.section->output_section->vma
14709                          + h->u.def.section->output_offset);
14710       else if (htab->is_vxworks
14711                && (h = bfd_link_hash_lookup (info->hash,
14712                                              "_GLOBAL_OFFSET_TABLE_",
14713                                              FALSE, FALSE, TRUE))
14714                && h->type == bfd_link_hash_defined)
14715         elf_gp (abfd) = (h->u.def.section->output_section->vma
14716                          + h->u.def.section->output_offset
14717                          + h->u.def.value);
14718       else if (bfd_link_relocatable (info))
14719         {
14720           bfd_vma lo = MINUS_ONE;
14721
14722           /* Find the GP-relative section with the lowest offset.  */
14723           for (o = abfd->sections; o != NULL; o = o->next)
14724             if (o->vma < lo
14725                 && (elf_section_data (o)->this_hdr.sh_flags & SHF_MIPS_GPREL))
14726               lo = o->vma;
14727
14728           /* And calculate GP relative to that.  */
14729           elf_gp (abfd) = lo + ELF_MIPS_GP_OFFSET (info);
14730         }
14731       else
14732         {
14733           /* If the relocate_section function needs to do a reloc
14734              involving the GP value, it should make a reloc_dangerous
14735              callback to warn that GP is not defined.  */
14736         }
14737     }
14738
14739   /* Go through the sections and collect the .reginfo and .mdebug
14740      information.  */
14741   abiflags_sec = NULL;
14742   reginfo_sec = NULL;
14743   mdebug_sec = NULL;
14744   gptab_data_sec = NULL;
14745   gptab_bss_sec = NULL;
14746   for (o = abfd->sections; o != NULL; o = o->next)
14747     {
14748       if (strcmp (o->name, ".MIPS.abiflags") == 0)
14749         {
14750           /* We have found the .MIPS.abiflags section in the output file.
14751              Look through all the link_orders comprising it and remove them.
14752              The data is merged in _bfd_mips_elf_merge_private_bfd_data.  */
14753           for (p = o->map_head.link_order; p != NULL; p = p->next)
14754             {
14755               asection *input_section;
14756
14757               if (p->type != bfd_indirect_link_order)
14758                 {
14759                   if (p->type == bfd_data_link_order)
14760                     continue;
14761                   abort ();
14762                 }
14763
14764               input_section = p->u.indirect.section;
14765
14766               /* Hack: reset the SEC_HAS_CONTENTS flag so that
14767                  elf_link_input_bfd ignores this section.  */
14768               input_section->flags &= ~SEC_HAS_CONTENTS;
14769             }
14770
14771           /* Size has been set in _bfd_mips_elf_always_size_sections.  */
14772           BFD_ASSERT(o->size == sizeof (Elf_External_ABIFlags_v0));
14773
14774           /* Skip this section later on (I don't think this currently
14775              matters, but someday it might).  */
14776           o->map_head.link_order = NULL;
14777
14778           abiflags_sec = o;
14779         }
14780
14781       if (strcmp (o->name, ".reginfo") == 0)
14782         {
14783           memset (&reginfo, 0, sizeof reginfo);
14784
14785           /* We have found the .reginfo section in the output file.
14786              Look through all the link_orders comprising it and merge
14787              the information together.  */
14788           for (p = o->map_head.link_order; p != NULL; p = p->next)
14789             {
14790               asection *input_section;
14791               bfd *input_bfd;
14792               Elf32_External_RegInfo ext;
14793               Elf32_RegInfo sub;
14794               bfd_size_type sz;
14795
14796               if (p->type != bfd_indirect_link_order)
14797                 {
14798                   if (p->type == bfd_data_link_order)
14799                     continue;
14800                   abort ();
14801                 }
14802
14803               input_section = p->u.indirect.section;
14804               input_bfd = input_section->owner;
14805
14806               sz = (input_section->size < sizeof (ext)
14807                     ? input_section->size : sizeof (ext));
14808               memset (&ext, 0, sizeof (ext));
14809               if (! bfd_get_section_contents (input_bfd, input_section,
14810                                               &ext, 0, sz))
14811                 return FALSE;
14812
14813               bfd_mips_elf32_swap_reginfo_in (input_bfd, &ext, &sub);
14814
14815               reginfo.ri_gprmask |= sub.ri_gprmask;
14816               reginfo.ri_cprmask[0] |= sub.ri_cprmask[0];
14817               reginfo.ri_cprmask[1] |= sub.ri_cprmask[1];
14818               reginfo.ri_cprmask[2] |= sub.ri_cprmask[2];
14819               reginfo.ri_cprmask[3] |= sub.ri_cprmask[3];
14820
14821               /* ri_gp_value is set by the function
14822                  `_bfd_mips_elf_section_processing' when the section is
14823                  finally written out.  */
14824
14825               /* Hack: reset the SEC_HAS_CONTENTS flag so that
14826                  elf_link_input_bfd ignores this section.  */
14827               input_section->flags &= ~SEC_HAS_CONTENTS;
14828             }
14829
14830           /* Size has been set in _bfd_mips_elf_always_size_sections.  */
14831           BFD_ASSERT(o->size == sizeof (Elf32_External_RegInfo));
14832
14833           /* Skip this section later on (I don't think this currently
14834              matters, but someday it might).  */
14835           o->map_head.link_order = NULL;
14836
14837           reginfo_sec = o;
14838         }
14839
14840       if (strcmp (o->name, ".mdebug") == 0)
14841         {
14842           struct extsym_info einfo;
14843           bfd_vma last;
14844
14845           /* We have found the .mdebug section in the output file.
14846              Look through all the link_orders comprising it and merge
14847              the information together.  */
14848           symhdr->magic = swap->sym_magic;
14849           /* FIXME: What should the version stamp be?  */
14850           symhdr->vstamp = 0;
14851           symhdr->ilineMax = 0;
14852           symhdr->cbLine = 0;
14853           symhdr->idnMax = 0;
14854           symhdr->ipdMax = 0;
14855           symhdr->isymMax = 0;
14856           symhdr->ioptMax = 0;
14857           symhdr->iauxMax = 0;
14858           symhdr->issMax = 0;
14859           symhdr->issExtMax = 0;
14860           symhdr->ifdMax = 0;
14861           symhdr->crfd = 0;
14862           symhdr->iextMax = 0;
14863
14864           /* We accumulate the debugging information itself in the
14865              debug_info structure.  */
14866           debug.line = NULL;
14867           debug.external_dnr = NULL;
14868           debug.external_pdr = NULL;
14869           debug.external_sym = NULL;
14870           debug.external_opt = NULL;
14871           debug.external_aux = NULL;
14872           debug.ss = NULL;
14873           debug.ssext = debug.ssext_end = NULL;
14874           debug.external_fdr = NULL;
14875           debug.external_rfd = NULL;
14876           debug.external_ext = debug.external_ext_end = NULL;
14877
14878           mdebug_handle = bfd_ecoff_debug_init (abfd, &debug, swap, info);
14879           if (mdebug_handle == NULL)
14880             return FALSE;
14881
14882           esym.jmptbl = 0;
14883           esym.cobol_main = 0;
14884           esym.weakext = 0;
14885           esym.reserved = 0;
14886           esym.ifd = ifdNil;
14887           esym.asym.iss = issNil;
14888           esym.asym.st = stLocal;
14889           esym.asym.reserved = 0;
14890           esym.asym.index = indexNil;
14891           last = 0;
14892           for (i = 0; i < sizeof (secname) / sizeof (secname[0]); i++)
14893             {
14894               esym.asym.sc = sc[i];
14895               s = bfd_get_section_by_name (abfd, secname[i]);
14896               if (s != NULL)
14897                 {
14898                   esym.asym.value = s->vma;
14899                   last = s->vma + s->size;
14900                 }
14901               else
14902                 esym.asym.value = last;
14903               if (!bfd_ecoff_debug_one_external (abfd, &debug, swap,
14904                                                  secname[i], &esym))
14905                 return FALSE;
14906             }
14907
14908           for (p = o->map_head.link_order; p != NULL; p = p->next)
14909             {
14910               asection *input_section;
14911               bfd *input_bfd;
14912               const struct ecoff_debug_swap *input_swap;
14913               struct ecoff_debug_info input_debug;
14914               char *eraw_src;
14915               char *eraw_end;
14916
14917               if (p->type != bfd_indirect_link_order)
14918                 {
14919                   if (p->type == bfd_data_link_order)
14920                     continue;
14921                   abort ();
14922                 }
14923
14924               input_section = p->u.indirect.section;
14925               input_bfd = input_section->owner;
14926
14927               if (!is_mips_elf (input_bfd))
14928                 {
14929                   /* I don't know what a non MIPS ELF bfd would be
14930                      doing with a .mdebug section, but I don't really
14931                      want to deal with it.  */
14932                   continue;
14933                 }
14934
14935               input_swap = (get_elf_backend_data (input_bfd)
14936                             ->elf_backend_ecoff_debug_swap);
14937
14938               BFD_ASSERT (p->size == input_section->size);
14939
14940               /* The ECOFF linking code expects that we have already
14941                  read in the debugging information and set up an
14942                  ecoff_debug_info structure, so we do that now.  */
14943               if (! _bfd_mips_elf_read_ecoff_info (input_bfd, input_section,
14944                                                    &input_debug))
14945                 return FALSE;
14946
14947               if (! (bfd_ecoff_debug_accumulate
14948                      (mdebug_handle, abfd, &debug, swap, input_bfd,
14949                       &input_debug, input_swap, info)))
14950                 return FALSE;
14951
14952               /* Loop through the external symbols.  For each one with
14953                  interesting information, try to find the symbol in
14954                  the linker global hash table and save the information
14955                  for the output external symbols.  */
14956               eraw_src = input_debug.external_ext;
14957               eraw_end = (eraw_src
14958                           + (input_debug.symbolic_header.iextMax
14959                              * input_swap->external_ext_size));
14960               for (;
14961                    eraw_src < eraw_end;
14962                    eraw_src += input_swap->external_ext_size)
14963                 {
14964                   EXTR ext;
14965                   const char *name;
14966                   struct mips_elf_link_hash_entry *h;
14967
14968                   (*input_swap->swap_ext_in) (input_bfd, eraw_src, &ext);
14969                   if (ext.asym.sc == scNil
14970                       || ext.asym.sc == scUndefined
14971                       || ext.asym.sc == scSUndefined)
14972                     continue;
14973
14974                   name = input_debug.ssext + ext.asym.iss;
14975                   h = mips_elf_link_hash_lookup (mips_elf_hash_table (info),
14976                                                  name, FALSE, FALSE, TRUE);
14977                   if (h == NULL || h->esym.ifd != -2)
14978                     continue;
14979
14980                   if (ext.ifd != -1)
14981                     {
14982                       BFD_ASSERT (ext.ifd
14983                                   < input_debug.symbolic_header.ifdMax);
14984                       ext.ifd = input_debug.ifdmap[ext.ifd];
14985                     }
14986
14987                   h->esym = ext;
14988                 }
14989
14990               /* Free up the information we just read.  */
14991               free (input_debug.line);
14992               free (input_debug.external_dnr);
14993               free (input_debug.external_pdr);
14994               free (input_debug.external_sym);
14995               free (input_debug.external_opt);
14996               free (input_debug.external_aux);
14997               free (input_debug.ss);
14998               free (input_debug.ssext);
14999               free (input_debug.external_fdr);
15000               free (input_debug.external_rfd);
15001               free (input_debug.external_ext);
15002
15003               /* Hack: reset the SEC_HAS_CONTENTS flag so that
15004                  elf_link_input_bfd ignores this section.  */
15005               input_section->flags &= ~SEC_HAS_CONTENTS;
15006             }
15007
15008           if (SGI_COMPAT (abfd) && bfd_link_pic (info))
15009             {
15010               /* Create .rtproc section.  */
15011               rtproc_sec = bfd_get_linker_section (abfd, ".rtproc");
15012               if (rtproc_sec == NULL)
15013                 {
15014                   flagword flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY
15015                                     | SEC_LINKER_CREATED | SEC_READONLY);
15016
15017                   rtproc_sec = bfd_make_section_anyway_with_flags (abfd,
15018                                                                    ".rtproc",
15019                                                                    flags);
15020                   if (rtproc_sec == NULL
15021                       || !bfd_set_section_alignment (rtproc_sec, 4))
15022                     return FALSE;
15023                 }
15024
15025               if (! mips_elf_create_procedure_table (mdebug_handle, abfd,
15026                                                      info, rtproc_sec,
15027                                                      &debug))
15028                 return FALSE;
15029             }
15030
15031           /* Build the external symbol information.  */
15032           einfo.abfd = abfd;
15033           einfo.info = info;
15034           einfo.debug = &debug;
15035           einfo.swap = swap;
15036           einfo.failed = FALSE;
15037           mips_elf_link_hash_traverse (mips_elf_hash_table (info),
15038                                        mips_elf_output_extsym, &einfo);
15039           if (einfo.failed)
15040             return FALSE;
15041
15042           /* Set the size of the .mdebug section.  */
15043           o->size = bfd_ecoff_debug_size (abfd, &debug, swap);
15044
15045           /* Skip this section later on (I don't think this currently
15046              matters, but someday it might).  */
15047           o->map_head.link_order = NULL;
15048
15049           mdebug_sec = o;
15050         }
15051
15052       if (CONST_STRNEQ (o->name, ".gptab."))
15053         {
15054           const char *subname;
15055           unsigned int c;
15056           Elf32_gptab *tab;
15057           Elf32_External_gptab *ext_tab;
15058           unsigned int j;
15059
15060           /* The .gptab.sdata and .gptab.sbss sections hold
15061              information describing how the small data area would
15062              change depending upon the -G switch.  These sections
15063              not used in executables files.  */
15064           if (! bfd_link_relocatable (info))
15065             {
15066               for (p = o->map_head.link_order; p != NULL; p = p->next)
15067                 {
15068                   asection *input_section;
15069
15070                   if (p->type != bfd_indirect_link_order)
15071                     {
15072                       if (p->type == bfd_data_link_order)
15073                         continue;
15074                       abort ();
15075                     }
15076
15077                   input_section = p->u.indirect.section;
15078
15079                   /* Hack: reset the SEC_HAS_CONTENTS flag so that
15080                      elf_link_input_bfd ignores this section.  */
15081                   input_section->flags &= ~SEC_HAS_CONTENTS;
15082                 }
15083
15084               /* Skip this section later on (I don't think this
15085                  currently matters, but someday it might).  */
15086               o->map_head.link_order = NULL;
15087
15088               /* Really remove the section.  */
15089               bfd_section_list_remove (abfd, o);
15090               --abfd->section_count;
15091
15092               continue;
15093             }
15094
15095           /* There is one gptab for initialized data, and one for
15096              uninitialized data.  */
15097           if (strcmp (o->name, ".gptab.sdata") == 0)
15098             gptab_data_sec = o;
15099           else if (strcmp (o->name, ".gptab.sbss") == 0)
15100             gptab_bss_sec = o;
15101           else
15102             {
15103               _bfd_error_handler
15104                 /* xgettext:c-format */
15105                 (_("%pB: illegal section name `%pA'"), abfd, o);
15106               bfd_set_error (bfd_error_nonrepresentable_section);
15107               return FALSE;
15108             }
15109
15110           /* The linker script always combines .gptab.data and
15111              .gptab.sdata into .gptab.sdata, and likewise for
15112              .gptab.bss and .gptab.sbss.  It is possible that there is
15113              no .sdata or .sbss section in the output file, in which
15114              case we must change the name of the output section.  */
15115           subname = o->name + sizeof ".gptab" - 1;
15116           if (bfd_get_section_by_name (abfd, subname) == NULL)
15117             {
15118               if (o == gptab_data_sec)
15119                 o->name = ".gptab.data";
15120               else
15121                 o->name = ".gptab.bss";
15122               subname = o->name + sizeof ".gptab" - 1;
15123               BFD_ASSERT (bfd_get_section_by_name (abfd, subname) != NULL);
15124             }
15125
15126           /* Set up the first entry.  */
15127           c = 1;
15128           amt = c * sizeof (Elf32_gptab);
15129           tab = bfd_malloc (amt);
15130           if (tab == NULL)
15131             return FALSE;
15132           tab[0].gt_header.gt_current_g_value = elf_gp_size (abfd);
15133           tab[0].gt_header.gt_unused = 0;
15134
15135           /* Combine the input sections.  */
15136           for (p = o->map_head.link_order; p != NULL; p = p->next)
15137             {
15138               asection *input_section;
15139               bfd *input_bfd;
15140               bfd_size_type size;
15141               unsigned long last;
15142               bfd_size_type gpentry;
15143
15144               if (p->type != bfd_indirect_link_order)
15145                 {
15146                   if (p->type == bfd_data_link_order)
15147                     continue;
15148                   abort ();
15149                 }
15150
15151               input_section = p->u.indirect.section;
15152               input_bfd = input_section->owner;
15153
15154               /* Combine the gptab entries for this input section one
15155                  by one.  We know that the input gptab entries are
15156                  sorted by ascending -G value.  */
15157               size = input_section->size;
15158               last = 0;
15159               for (gpentry = sizeof (Elf32_External_gptab);
15160                    gpentry < size;
15161                    gpentry += sizeof (Elf32_External_gptab))
15162                 {
15163                   Elf32_External_gptab ext_gptab;
15164                   Elf32_gptab int_gptab;
15165                   unsigned long val;
15166                   unsigned long add;
15167                   bfd_boolean exact;
15168                   unsigned int look;
15169
15170                   if (! (bfd_get_section_contents
15171                          (input_bfd, input_section, &ext_gptab, gpentry,
15172                           sizeof (Elf32_External_gptab))))
15173                     {
15174                       free (tab);
15175                       return FALSE;
15176                     }
15177
15178                   bfd_mips_elf32_swap_gptab_in (input_bfd, &ext_gptab,
15179                                                 &int_gptab);
15180                   val = int_gptab.gt_entry.gt_g_value;
15181                   add = int_gptab.gt_entry.gt_bytes - last;
15182
15183                   exact = FALSE;
15184                   for (look = 1; look < c; look++)
15185                     {
15186                       if (tab[look].gt_entry.gt_g_value >= val)
15187                         tab[look].gt_entry.gt_bytes += add;
15188
15189                       if (tab[look].gt_entry.gt_g_value == val)
15190                         exact = TRUE;
15191                     }
15192
15193                   if (! exact)
15194                     {
15195                       Elf32_gptab *new_tab;
15196                       unsigned int max;
15197
15198                       /* We need a new table entry.  */
15199                       amt = (bfd_size_type) (c + 1) * sizeof (Elf32_gptab);
15200                       new_tab = bfd_realloc (tab, amt);
15201                       if (new_tab == NULL)
15202                         {
15203                           free (tab);
15204                           return FALSE;
15205                         }
15206                       tab = new_tab;
15207                       tab[c].gt_entry.gt_g_value = val;
15208                       tab[c].gt_entry.gt_bytes = add;
15209
15210                       /* Merge in the size for the next smallest -G
15211                          value, since that will be implied by this new
15212                          value.  */
15213                       max = 0;
15214                       for (look = 1; look < c; look++)
15215                         {
15216                           if (tab[look].gt_entry.gt_g_value < val
15217                               && (max == 0
15218                                   || (tab[look].gt_entry.gt_g_value
15219                                       > tab[max].gt_entry.gt_g_value)))
15220                             max = look;
15221                         }
15222                       if (max != 0)
15223                         tab[c].gt_entry.gt_bytes +=
15224                           tab[max].gt_entry.gt_bytes;
15225
15226                       ++c;
15227                     }
15228
15229                   last = int_gptab.gt_entry.gt_bytes;
15230                 }
15231
15232               /* Hack: reset the SEC_HAS_CONTENTS flag so that
15233                  elf_link_input_bfd ignores this section.  */
15234               input_section->flags &= ~SEC_HAS_CONTENTS;
15235             }
15236
15237           /* The table must be sorted by -G value.  */
15238           if (c > 2)
15239             qsort (tab + 1, c - 1, sizeof (tab[0]), gptab_compare);
15240
15241           /* Swap out the table.  */
15242           amt = (bfd_size_type) c * sizeof (Elf32_External_gptab);
15243           ext_tab = bfd_alloc (abfd, amt);
15244           if (ext_tab == NULL)
15245             {
15246               free (tab);
15247               return FALSE;
15248             }
15249
15250           for (j = 0; j < c; j++)
15251             bfd_mips_elf32_swap_gptab_out (abfd, tab + j, ext_tab + j);
15252           free (tab);
15253
15254           o->size = c * sizeof (Elf32_External_gptab);
15255           o->contents = (bfd_byte *) ext_tab;
15256
15257           /* Skip this section later on (I don't think this currently
15258              matters, but someday it might).  */
15259           o->map_head.link_order = NULL;
15260         }
15261     }
15262
15263   /* Invoke the regular ELF backend linker to do all the work.  */
15264   if (!bfd_elf_final_link (abfd, info))
15265     return FALSE;
15266
15267   /* Now write out the computed sections.  */
15268
15269   if (abiflags_sec != NULL)
15270     {
15271       Elf_External_ABIFlags_v0 ext;
15272       Elf_Internal_ABIFlags_v0 *abiflags;
15273
15274       abiflags = &mips_elf_tdata (abfd)->abiflags;
15275
15276       /* Set up the abiflags if no valid input sections were found.  */
15277       if (!mips_elf_tdata (abfd)->abiflags_valid)
15278         {
15279           infer_mips_abiflags (abfd, abiflags);
15280           mips_elf_tdata (abfd)->abiflags_valid = TRUE;
15281         }
15282       bfd_mips_elf_swap_abiflags_v0_out (abfd, abiflags, &ext);
15283       if (! bfd_set_section_contents (abfd, abiflags_sec, &ext, 0, sizeof ext))
15284         return FALSE;
15285     }
15286
15287   if (reginfo_sec != NULL)
15288     {
15289       Elf32_External_RegInfo ext;
15290
15291       bfd_mips_elf32_swap_reginfo_out (abfd, &reginfo, &ext);
15292       if (! bfd_set_section_contents (abfd, reginfo_sec, &ext, 0, sizeof ext))
15293         return FALSE;
15294     }
15295
15296   if (mdebug_sec != NULL)
15297     {
15298       BFD_ASSERT (abfd->output_has_begun);
15299       if (! bfd_ecoff_write_accumulated_debug (mdebug_handle, abfd, &debug,
15300                                                swap, info,
15301                                                mdebug_sec->filepos))
15302         return FALSE;
15303
15304       bfd_ecoff_debug_free (mdebug_handle, abfd, &debug, swap, info);
15305     }
15306
15307   if (gptab_data_sec != NULL)
15308     {
15309       if (! bfd_set_section_contents (abfd, gptab_data_sec,
15310                                       gptab_data_sec->contents,
15311                                       0, gptab_data_sec->size))
15312         return FALSE;
15313     }
15314
15315   if (gptab_bss_sec != NULL)
15316     {
15317       if (! bfd_set_section_contents (abfd, gptab_bss_sec,
15318                                       gptab_bss_sec->contents,
15319                                       0, gptab_bss_sec->size))
15320         return FALSE;
15321     }
15322
15323   if (SGI_COMPAT (abfd))
15324     {
15325       rtproc_sec = bfd_get_section_by_name (abfd, ".rtproc");
15326       if (rtproc_sec != NULL)
15327         {
15328           if (! bfd_set_section_contents (abfd, rtproc_sec,
15329                                           rtproc_sec->contents,
15330                                           0, rtproc_sec->size))
15331             return FALSE;
15332         }
15333     }
15334
15335   return TRUE;
15336 }
15337 \f
15338 /* Merge object file header flags from IBFD into OBFD.  Raise an error
15339    if there are conflicting settings.  */
15340
15341 static bfd_boolean
15342 mips_elf_merge_obj_e_flags (bfd *ibfd, struct bfd_link_info *info)
15343 {
15344   bfd *obfd = info->output_bfd;
15345   struct mips_elf_obj_tdata *out_tdata = mips_elf_tdata (obfd);
15346   flagword old_flags;
15347   flagword new_flags;
15348   bfd_boolean ok;
15349
15350   new_flags = elf_elfheader (ibfd)->e_flags;
15351   elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_NOREORDER;
15352   old_flags = elf_elfheader (obfd)->e_flags;
15353
15354   /* Check flag compatibility.  */
15355
15356   new_flags &= ~EF_MIPS_NOREORDER;
15357   old_flags &= ~EF_MIPS_NOREORDER;
15358
15359   /* Some IRIX 6 BSD-compatibility objects have this bit set.  It
15360      doesn't seem to matter.  */
15361   new_flags &= ~EF_MIPS_XGOT;
15362   old_flags &= ~EF_MIPS_XGOT;
15363
15364   /* MIPSpro generates ucode info in n64 objects.  Again, we should
15365      just be able to ignore this.  */
15366   new_flags &= ~EF_MIPS_UCODE;
15367   old_flags &= ~EF_MIPS_UCODE;
15368
15369   /* DSOs should only be linked with CPIC code.  */
15370   if ((ibfd->flags & DYNAMIC) != 0)
15371     new_flags |= EF_MIPS_PIC | EF_MIPS_CPIC;
15372
15373   if (new_flags == old_flags)
15374     return TRUE;
15375
15376   ok = TRUE;
15377
15378   if (((new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0)
15379       != ((old_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0))
15380     {
15381       _bfd_error_handler
15382         (_("%pB: warning: linking abicalls files with non-abicalls files"),
15383          ibfd);
15384       ok = TRUE;
15385     }
15386
15387   if (new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC))
15388     elf_elfheader (obfd)->e_flags |= EF_MIPS_CPIC;
15389   if (! (new_flags & EF_MIPS_PIC))
15390     elf_elfheader (obfd)->e_flags &= ~EF_MIPS_PIC;
15391
15392   new_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC);
15393   old_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC);
15394
15395   /* Compare the ISAs.  */
15396   if (mips_32bit_flags_p (old_flags) != mips_32bit_flags_p (new_flags))
15397     {
15398       _bfd_error_handler
15399         (_("%pB: linking 32-bit code with 64-bit code"),
15400          ibfd);
15401       ok = FALSE;
15402     }
15403   else if (!mips_mach_extends_p (bfd_get_mach (ibfd), bfd_get_mach (obfd)))
15404     {
15405       /* OBFD's ISA isn't the same as, or an extension of, IBFD's.  */
15406       if (mips_mach_extends_p (bfd_get_mach (obfd), bfd_get_mach (ibfd)))
15407         {
15408           /* Copy the architecture info from IBFD to OBFD.  Also copy
15409              the 32-bit flag (if set) so that we continue to recognise
15410              OBFD as a 32-bit binary.  */
15411           bfd_set_arch_info (obfd, bfd_get_arch_info (ibfd));
15412           elf_elfheader (obfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH);
15413           elf_elfheader (obfd)->e_flags
15414             |= new_flags & (EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
15415
15416           /* Update the ABI flags isa_level, isa_rev, isa_ext fields.  */
15417           update_mips_abiflags_isa (obfd, &out_tdata->abiflags);
15418
15419           /* Copy across the ABI flags if OBFD doesn't use them
15420              and if that was what caused us to treat IBFD as 32-bit.  */
15421           if ((old_flags & EF_MIPS_ABI) == 0
15422               && mips_32bit_flags_p (new_flags)
15423               && !mips_32bit_flags_p (new_flags & ~EF_MIPS_ABI))
15424             elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ABI;
15425         }
15426       else
15427         {
15428           /* The ISAs aren't compatible.  */
15429           _bfd_error_handler
15430             /* xgettext:c-format */
15431             (_("%pB: linking %s module with previous %s modules"),
15432              ibfd,
15433              bfd_printable_name (ibfd),
15434              bfd_printable_name (obfd));
15435           ok = FALSE;
15436         }
15437     }
15438
15439   new_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
15440   old_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
15441
15442   /* Compare ABIs.  The 64-bit ABI does not use EF_MIPS_ABI.  But, it
15443      does set EI_CLASS differently from any 32-bit ABI.  */
15444   if ((new_flags & EF_MIPS_ABI) != (old_flags & EF_MIPS_ABI)
15445       || (elf_elfheader (ibfd)->e_ident[EI_CLASS]
15446           != elf_elfheader (obfd)->e_ident[EI_CLASS]))
15447     {
15448       /* Only error if both are set (to different values).  */
15449       if (((new_flags & EF_MIPS_ABI) && (old_flags & EF_MIPS_ABI))
15450           || (elf_elfheader (ibfd)->e_ident[EI_CLASS]
15451               != elf_elfheader (obfd)->e_ident[EI_CLASS]))
15452         {
15453           _bfd_error_handler
15454             /* xgettext:c-format */
15455             (_("%pB: ABI mismatch: linking %s module with previous %s modules"),
15456              ibfd,
15457              elf_mips_abi_name (ibfd),
15458              elf_mips_abi_name (obfd));
15459           ok = FALSE;
15460         }
15461       new_flags &= ~EF_MIPS_ABI;
15462       old_flags &= ~EF_MIPS_ABI;
15463     }
15464
15465   /* Compare ASEs.  Forbid linking MIPS16 and microMIPS ASE modules together
15466      and allow arbitrary mixing of the remaining ASEs (retain the union).  */
15467   if ((new_flags & EF_MIPS_ARCH_ASE) != (old_flags & EF_MIPS_ARCH_ASE))
15468     {
15469       int old_micro = old_flags & EF_MIPS_ARCH_ASE_MICROMIPS;
15470       int new_micro = new_flags & EF_MIPS_ARCH_ASE_MICROMIPS;
15471       int old_m16 = old_flags & EF_MIPS_ARCH_ASE_M16;
15472       int new_m16 = new_flags & EF_MIPS_ARCH_ASE_M16;
15473       int micro_mis = old_m16 && new_micro;
15474       int m16_mis = old_micro && new_m16;
15475
15476       if (m16_mis || micro_mis)
15477         {
15478           _bfd_error_handler
15479             /* xgettext:c-format */
15480             (_("%pB: ASE mismatch: linking %s module with previous %s modules"),
15481              ibfd,
15482              m16_mis ? "MIPS16" : "microMIPS",
15483              m16_mis ? "microMIPS" : "MIPS16");
15484           ok = FALSE;
15485         }
15486
15487       elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ARCH_ASE;
15488
15489       new_flags &= ~ EF_MIPS_ARCH_ASE;
15490       old_flags &= ~ EF_MIPS_ARCH_ASE;
15491     }
15492
15493   /* Compare NaN encodings.  */
15494   if ((new_flags & EF_MIPS_NAN2008) != (old_flags & EF_MIPS_NAN2008))
15495     {
15496       /* xgettext:c-format */
15497       _bfd_error_handler (_("%pB: linking %s module with previous %s modules"),
15498                           ibfd,
15499                           (new_flags & EF_MIPS_NAN2008
15500                            ? "-mnan=2008" : "-mnan=legacy"),
15501                           (old_flags & EF_MIPS_NAN2008
15502                            ? "-mnan=2008" : "-mnan=legacy"));
15503       ok = FALSE;
15504       new_flags &= ~EF_MIPS_NAN2008;
15505       old_flags &= ~EF_MIPS_NAN2008;
15506     }
15507
15508   /* Compare FP64 state.  */
15509   if ((new_flags & EF_MIPS_FP64) != (old_flags & EF_MIPS_FP64))
15510     {
15511       /* xgettext:c-format */
15512       _bfd_error_handler (_("%pB: linking %s module with previous %s modules"),
15513                           ibfd,
15514                           (new_flags & EF_MIPS_FP64
15515                            ? "-mfp64" : "-mfp32"),
15516                           (old_flags & EF_MIPS_FP64
15517                            ? "-mfp64" : "-mfp32"));
15518       ok = FALSE;
15519       new_flags &= ~EF_MIPS_FP64;
15520       old_flags &= ~EF_MIPS_FP64;
15521     }
15522
15523   /* Warn about any other mismatches */
15524   if (new_flags != old_flags)
15525     {
15526       /* xgettext:c-format */
15527       _bfd_error_handler
15528         (_("%pB: uses different e_flags (%#x) fields than previous modules "
15529            "(%#x)"),
15530          ibfd, new_flags, old_flags);
15531       ok = FALSE;
15532     }
15533
15534   return ok;
15535 }
15536
15537 /* Merge object attributes from IBFD into OBFD.  Raise an error if
15538    there are conflicting attributes.  */
15539 static bfd_boolean
15540 mips_elf_merge_obj_attributes (bfd *ibfd, struct bfd_link_info *info)
15541 {
15542   bfd *obfd = info->output_bfd;
15543   obj_attribute *in_attr;
15544   obj_attribute *out_attr;
15545   bfd *abi_fp_bfd;
15546   bfd *abi_msa_bfd;
15547
15548   abi_fp_bfd = mips_elf_tdata (obfd)->abi_fp_bfd;
15549   in_attr = elf_known_obj_attributes (ibfd)[OBJ_ATTR_GNU];
15550   if (!abi_fp_bfd && in_attr[Tag_GNU_MIPS_ABI_FP].i != Val_GNU_MIPS_ABI_FP_ANY)
15551     mips_elf_tdata (obfd)->abi_fp_bfd = ibfd;
15552
15553   abi_msa_bfd = mips_elf_tdata (obfd)->abi_msa_bfd;
15554   if (!abi_msa_bfd
15555       && in_attr[Tag_GNU_MIPS_ABI_MSA].i != Val_GNU_MIPS_ABI_MSA_ANY)
15556     mips_elf_tdata (obfd)->abi_msa_bfd = ibfd;
15557
15558   if (!elf_known_obj_attributes_proc (obfd)[0].i)
15559     {
15560       /* This is the first object.  Copy the attributes.  */
15561       _bfd_elf_copy_obj_attributes (ibfd, obfd);
15562
15563       /* Use the Tag_null value to indicate the attributes have been
15564          initialized.  */
15565       elf_known_obj_attributes_proc (obfd)[0].i = 1;
15566
15567       return TRUE;
15568     }
15569
15570   /* Check for conflicting Tag_GNU_MIPS_ABI_FP attributes and merge
15571      non-conflicting ones.  */
15572   out_attr = elf_known_obj_attributes (obfd)[OBJ_ATTR_GNU];
15573   if (in_attr[Tag_GNU_MIPS_ABI_FP].i != out_attr[Tag_GNU_MIPS_ABI_FP].i)
15574     {
15575       int out_fp, in_fp;
15576
15577       out_fp = out_attr[Tag_GNU_MIPS_ABI_FP].i;
15578       in_fp = in_attr[Tag_GNU_MIPS_ABI_FP].i;
15579       out_attr[Tag_GNU_MIPS_ABI_FP].type = 1;
15580       if (out_fp == Val_GNU_MIPS_ABI_FP_ANY)
15581         out_attr[Tag_GNU_MIPS_ABI_FP].i = in_fp;
15582       else if (out_fp == Val_GNU_MIPS_ABI_FP_XX
15583                && (in_fp == Val_GNU_MIPS_ABI_FP_DOUBLE
15584                    || in_fp == Val_GNU_MIPS_ABI_FP_64
15585                    || in_fp == Val_GNU_MIPS_ABI_FP_64A))
15586         {
15587           mips_elf_tdata (obfd)->abi_fp_bfd = ibfd;
15588           out_attr[Tag_GNU_MIPS_ABI_FP].i = in_attr[Tag_GNU_MIPS_ABI_FP].i;
15589         }
15590       else if (in_fp == Val_GNU_MIPS_ABI_FP_XX
15591                && (out_fp == Val_GNU_MIPS_ABI_FP_DOUBLE
15592                    || out_fp == Val_GNU_MIPS_ABI_FP_64
15593                    || out_fp == Val_GNU_MIPS_ABI_FP_64A))
15594         /* Keep the current setting.  */;
15595       else if (out_fp == Val_GNU_MIPS_ABI_FP_64A
15596                && in_fp == Val_GNU_MIPS_ABI_FP_64)
15597         {
15598           mips_elf_tdata (obfd)->abi_fp_bfd = ibfd;
15599           out_attr[Tag_GNU_MIPS_ABI_FP].i = in_attr[Tag_GNU_MIPS_ABI_FP].i;
15600         }
15601       else if (in_fp == Val_GNU_MIPS_ABI_FP_64A
15602                && out_fp == Val_GNU_MIPS_ABI_FP_64)
15603         /* Keep the current setting.  */;
15604       else if (in_fp != Val_GNU_MIPS_ABI_FP_ANY)
15605         {
15606           const char *out_string, *in_string;
15607
15608           out_string = _bfd_mips_fp_abi_string (out_fp);
15609           in_string = _bfd_mips_fp_abi_string (in_fp);
15610           /* First warn about cases involving unrecognised ABIs.  */
15611           if (!out_string && !in_string)
15612             /* xgettext:c-format */
15613             _bfd_error_handler
15614               (_("warning: %pB uses unknown floating point ABI %d "
15615                  "(set by %pB), %pB uses unknown floating point ABI %d"),
15616                obfd, out_fp, abi_fp_bfd, ibfd, in_fp);
15617           else if (!out_string)
15618             _bfd_error_handler
15619               /* xgettext:c-format */
15620               (_("warning: %pB uses unknown floating point ABI %d "
15621                  "(set by %pB), %pB uses %s"),
15622                obfd, out_fp, abi_fp_bfd, ibfd, in_string);
15623           else if (!in_string)
15624             _bfd_error_handler
15625               /* xgettext:c-format */
15626               (_("warning: %pB uses %s (set by %pB), "
15627                  "%pB uses unknown floating point ABI %d"),
15628                obfd, out_string, abi_fp_bfd, ibfd, in_fp);
15629           else
15630             {
15631               /* If one of the bfds is soft-float, the other must be
15632                  hard-float.  The exact choice of hard-float ABI isn't
15633                  really relevant to the error message.  */
15634               if (in_fp == Val_GNU_MIPS_ABI_FP_SOFT)
15635                 out_string = "-mhard-float";
15636               else if (out_fp == Val_GNU_MIPS_ABI_FP_SOFT)
15637                 in_string = "-mhard-float";
15638               _bfd_error_handler
15639                 /* xgettext:c-format */
15640                 (_("warning: %pB uses %s (set by %pB), %pB uses %s"),
15641                  obfd, out_string, abi_fp_bfd, ibfd, in_string);
15642             }
15643         }
15644     }
15645
15646   /* Check for conflicting Tag_GNU_MIPS_ABI_MSA attributes and merge
15647      non-conflicting ones.  */
15648   if (in_attr[Tag_GNU_MIPS_ABI_MSA].i != out_attr[Tag_GNU_MIPS_ABI_MSA].i)
15649     {
15650       out_attr[Tag_GNU_MIPS_ABI_MSA].type = 1;
15651       if (out_attr[Tag_GNU_MIPS_ABI_MSA].i == Val_GNU_MIPS_ABI_MSA_ANY)
15652         out_attr[Tag_GNU_MIPS_ABI_MSA].i = in_attr[Tag_GNU_MIPS_ABI_MSA].i;
15653       else if (in_attr[Tag_GNU_MIPS_ABI_MSA].i != Val_GNU_MIPS_ABI_MSA_ANY)
15654         switch (out_attr[Tag_GNU_MIPS_ABI_MSA].i)
15655           {
15656           case Val_GNU_MIPS_ABI_MSA_128:
15657             _bfd_error_handler
15658               /* xgettext:c-format */
15659               (_("warning: %pB uses %s (set by %pB), "
15660                  "%pB uses unknown MSA ABI %d"),
15661                obfd, "-mmsa", abi_msa_bfd,
15662                ibfd, in_attr[Tag_GNU_MIPS_ABI_MSA].i);
15663             break;
15664
15665           default:
15666             switch (in_attr[Tag_GNU_MIPS_ABI_MSA].i)
15667               {
15668               case Val_GNU_MIPS_ABI_MSA_128:
15669                 _bfd_error_handler
15670                   /* xgettext:c-format */
15671                   (_("warning: %pB uses unknown MSA ABI %d "
15672                      "(set by %pB), %pB uses %s"),
15673                      obfd, out_attr[Tag_GNU_MIPS_ABI_MSA].i,
15674                    abi_msa_bfd, ibfd, "-mmsa");
15675                   break;
15676
15677               default:
15678                 _bfd_error_handler
15679                   /* xgettext:c-format */
15680                   (_("warning: %pB uses unknown MSA ABI %d "
15681                      "(set by %pB), %pB uses unknown MSA ABI %d"),
15682                    obfd, out_attr[Tag_GNU_MIPS_ABI_MSA].i,
15683                    abi_msa_bfd, ibfd, in_attr[Tag_GNU_MIPS_ABI_MSA].i);
15684                 break;
15685               }
15686           }
15687     }
15688
15689   /* Merge Tag_compatibility attributes and any common GNU ones.  */
15690   return _bfd_elf_merge_object_attributes (ibfd, info);
15691 }
15692
15693 /* Merge object ABI flags from IBFD into OBFD.  Raise an error if
15694    there are conflicting settings.  */
15695
15696 static bfd_boolean
15697 mips_elf_merge_obj_abiflags (bfd *ibfd, bfd *obfd)
15698 {
15699   obj_attribute *out_attr = elf_known_obj_attributes (obfd)[OBJ_ATTR_GNU];
15700   struct mips_elf_obj_tdata *out_tdata = mips_elf_tdata (obfd);
15701   struct mips_elf_obj_tdata *in_tdata = mips_elf_tdata (ibfd);
15702
15703   /* Update the output abiflags fp_abi using the computed fp_abi.  */
15704   out_tdata->abiflags.fp_abi = out_attr[Tag_GNU_MIPS_ABI_FP].i;
15705
15706 #define max(a, b) ((a) > (b) ? (a) : (b))
15707   /* Merge abiflags.  */
15708   out_tdata->abiflags.isa_level = max (out_tdata->abiflags.isa_level,
15709                                        in_tdata->abiflags.isa_level);
15710   out_tdata->abiflags.isa_rev = max (out_tdata->abiflags.isa_rev,
15711                                      in_tdata->abiflags.isa_rev);
15712   out_tdata->abiflags.gpr_size = max (out_tdata->abiflags.gpr_size,
15713                                       in_tdata->abiflags.gpr_size);
15714   out_tdata->abiflags.cpr1_size = max (out_tdata->abiflags.cpr1_size,
15715                                        in_tdata->abiflags.cpr1_size);
15716   out_tdata->abiflags.cpr2_size = max (out_tdata->abiflags.cpr2_size,
15717                                        in_tdata->abiflags.cpr2_size);
15718 #undef max
15719   out_tdata->abiflags.ases |= in_tdata->abiflags.ases;
15720   out_tdata->abiflags.flags1 |= in_tdata->abiflags.flags1;
15721
15722   return TRUE;
15723 }
15724
15725 /* Merge backend specific data from an object file to the output
15726    object file when linking.  */
15727
15728 bfd_boolean
15729 _bfd_mips_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
15730 {
15731   bfd *obfd = info->output_bfd;
15732   struct mips_elf_obj_tdata *out_tdata;
15733   struct mips_elf_obj_tdata *in_tdata;
15734   bfd_boolean null_input_bfd = TRUE;
15735   asection *sec;
15736   bfd_boolean ok;
15737
15738   /* Check if we have the same endianness.  */
15739   if (! _bfd_generic_verify_endian_match (ibfd, info))
15740     {
15741       _bfd_error_handler
15742         (_("%pB: endianness incompatible with that of the selected emulation"),
15743          ibfd);
15744       return FALSE;
15745     }
15746
15747   if (!is_mips_elf (ibfd) || !is_mips_elf (obfd))
15748     return TRUE;
15749
15750   in_tdata = mips_elf_tdata (ibfd);
15751   out_tdata = mips_elf_tdata (obfd);
15752
15753   if (strcmp (bfd_get_target (ibfd), bfd_get_target (obfd)) != 0)
15754     {
15755       _bfd_error_handler
15756         (_("%pB: ABI is incompatible with that of the selected emulation"),
15757          ibfd);
15758       return FALSE;
15759     }
15760
15761   /* Check to see if the input BFD actually contains any sections.  If not,
15762      then it has no attributes, and its flags may not have been initialized
15763      either, but it cannot actually cause any incompatibility.  */
15764   for (sec = ibfd->sections; sec != NULL; sec = sec->next)
15765     {
15766       /* Ignore synthetic sections and empty .text, .data and .bss sections
15767          which are automatically generated by gas.  Also ignore fake
15768          (s)common sections, since merely defining a common symbol does
15769          not affect compatibility.  */
15770       if ((sec->flags & SEC_IS_COMMON) == 0
15771           && strcmp (sec->name, ".reginfo")
15772           && strcmp (sec->name, ".mdebug")
15773           && (sec->size != 0
15774               || (strcmp (sec->name, ".text")
15775                   && strcmp (sec->name, ".data")
15776                   && strcmp (sec->name, ".bss"))))
15777         {
15778           null_input_bfd = FALSE;
15779           break;
15780         }
15781     }
15782   if (null_input_bfd)
15783     return TRUE;
15784
15785   /* Populate abiflags using existing information.  */
15786   if (in_tdata->abiflags_valid)
15787     {
15788       obj_attribute *in_attr = elf_known_obj_attributes (ibfd)[OBJ_ATTR_GNU];
15789       Elf_Internal_ABIFlags_v0 in_abiflags;
15790       Elf_Internal_ABIFlags_v0 abiflags;
15791
15792       /* Set up the FP ABI attribute from the abiflags if it is not already
15793          set.  */
15794       if (in_attr[Tag_GNU_MIPS_ABI_FP].i == Val_GNU_MIPS_ABI_FP_ANY)
15795         in_attr[Tag_GNU_MIPS_ABI_FP].i = in_tdata->abiflags.fp_abi;
15796
15797       infer_mips_abiflags (ibfd, &abiflags);
15798       in_abiflags = in_tdata->abiflags;
15799
15800       /* It is not possible to infer the correct ISA revision
15801          for R3 or R5 so drop down to R2 for the checks.  */
15802       if (in_abiflags.isa_rev == 3 || in_abiflags.isa_rev == 5)
15803         in_abiflags.isa_rev = 2;
15804
15805       if (LEVEL_REV (in_abiflags.isa_level, in_abiflags.isa_rev)
15806           < LEVEL_REV (abiflags.isa_level, abiflags.isa_rev))
15807         _bfd_error_handler
15808           (_("%pB: warning: inconsistent ISA between e_flags and "
15809              ".MIPS.abiflags"), ibfd);
15810       if (abiflags.fp_abi != Val_GNU_MIPS_ABI_FP_ANY
15811           && in_abiflags.fp_abi != abiflags.fp_abi)
15812         _bfd_error_handler
15813           (_("%pB: warning: inconsistent FP ABI between .gnu.attributes and "
15814              ".MIPS.abiflags"), ibfd);
15815       if ((in_abiflags.ases & abiflags.ases) != abiflags.ases)
15816         _bfd_error_handler
15817           (_("%pB: warning: inconsistent ASEs between e_flags and "
15818              ".MIPS.abiflags"), ibfd);
15819       /* The isa_ext is allowed to be an extension of what can be inferred
15820          from e_flags.  */
15821       if (!mips_mach_extends_p (bfd_mips_isa_ext_mach (abiflags.isa_ext),
15822                                 bfd_mips_isa_ext_mach (in_abiflags.isa_ext)))
15823         _bfd_error_handler
15824           (_("%pB: warning: inconsistent ISA extensions between e_flags and "
15825              ".MIPS.abiflags"), ibfd);
15826       if (in_abiflags.flags2 != 0)
15827         _bfd_error_handler
15828           (_("%pB: warning: unexpected flag in the flags2 field of "
15829              ".MIPS.abiflags (0x%lx)"), ibfd,
15830            in_abiflags.flags2);
15831     }
15832   else
15833     {
15834       infer_mips_abiflags (ibfd, &in_tdata->abiflags);
15835       in_tdata->abiflags_valid = TRUE;
15836     }
15837
15838   if (!out_tdata->abiflags_valid)
15839     {
15840       /* Copy input abiflags if output abiflags are not already valid.  */
15841       out_tdata->abiflags = in_tdata->abiflags;
15842       out_tdata->abiflags_valid = TRUE;
15843     }
15844
15845   if (! elf_flags_init (obfd))
15846     {
15847       elf_flags_init (obfd) = TRUE;
15848       elf_elfheader (obfd)->e_flags = elf_elfheader (ibfd)->e_flags;
15849       elf_elfheader (obfd)->e_ident[EI_CLASS]
15850         = elf_elfheader (ibfd)->e_ident[EI_CLASS];
15851
15852       if (bfd_get_arch (obfd) == bfd_get_arch (ibfd)
15853           && (bfd_get_arch_info (obfd)->the_default
15854               || mips_mach_extends_p (bfd_get_mach (obfd),
15855                                       bfd_get_mach (ibfd))))
15856         {
15857           if (! bfd_set_arch_mach (obfd, bfd_get_arch (ibfd),
15858                                    bfd_get_mach (ibfd)))
15859             return FALSE;
15860
15861           /* Update the ABI flags isa_level, isa_rev and isa_ext fields.  */
15862           update_mips_abiflags_isa (obfd, &out_tdata->abiflags);
15863         }
15864
15865       ok = TRUE;
15866     }
15867   else
15868     ok = mips_elf_merge_obj_e_flags (ibfd, info);
15869
15870   ok = mips_elf_merge_obj_attributes (ibfd, info) && ok;
15871
15872   ok = mips_elf_merge_obj_abiflags (ibfd, obfd) && ok;
15873
15874   if (!ok)
15875     {
15876       bfd_set_error (bfd_error_bad_value);
15877       return FALSE;
15878     }
15879
15880   return TRUE;
15881 }
15882
15883 /* Function to keep MIPS specific file flags like as EF_MIPS_PIC.  */
15884
15885 bfd_boolean
15886 _bfd_mips_elf_set_private_flags (bfd *abfd, flagword flags)
15887 {
15888   BFD_ASSERT (!elf_flags_init (abfd)
15889               || elf_elfheader (abfd)->e_flags == flags);
15890
15891   elf_elfheader (abfd)->e_flags = flags;
15892   elf_flags_init (abfd) = TRUE;
15893   return TRUE;
15894 }
15895
15896 char *
15897 _bfd_mips_elf_get_target_dtag (bfd_vma dtag)
15898 {
15899   switch (dtag)
15900     {
15901     default: return "";
15902     case DT_MIPS_RLD_VERSION:
15903       return "MIPS_RLD_VERSION";
15904     case DT_MIPS_TIME_STAMP:
15905       return "MIPS_TIME_STAMP";
15906     case DT_MIPS_ICHECKSUM:
15907       return "MIPS_ICHECKSUM";
15908     case DT_MIPS_IVERSION:
15909       return "MIPS_IVERSION";
15910     case DT_MIPS_FLAGS:
15911       return "MIPS_FLAGS";
15912     case DT_MIPS_BASE_ADDRESS:
15913       return "MIPS_BASE_ADDRESS";
15914     case DT_MIPS_MSYM:
15915       return "MIPS_MSYM";
15916     case DT_MIPS_CONFLICT:
15917       return "MIPS_CONFLICT";
15918     case DT_MIPS_LIBLIST:
15919       return "MIPS_LIBLIST";
15920     case DT_MIPS_LOCAL_GOTNO:
15921       return "MIPS_LOCAL_GOTNO";
15922     case DT_MIPS_CONFLICTNO:
15923       return "MIPS_CONFLICTNO";
15924     case DT_MIPS_LIBLISTNO:
15925       return "MIPS_LIBLISTNO";
15926     case DT_MIPS_SYMTABNO:
15927       return "MIPS_SYMTABNO";
15928     case DT_MIPS_UNREFEXTNO:
15929       return "MIPS_UNREFEXTNO";
15930     case DT_MIPS_GOTSYM:
15931       return "MIPS_GOTSYM";
15932     case DT_MIPS_HIPAGENO:
15933       return "MIPS_HIPAGENO";
15934     case DT_MIPS_RLD_MAP:
15935       return "MIPS_RLD_MAP";
15936     case DT_MIPS_RLD_MAP_REL:
15937       return "MIPS_RLD_MAP_REL";
15938     case DT_MIPS_DELTA_CLASS:
15939       return "MIPS_DELTA_CLASS";
15940     case DT_MIPS_DELTA_CLASS_NO:
15941       return "MIPS_DELTA_CLASS_NO";
15942     case DT_MIPS_DELTA_INSTANCE:
15943       return "MIPS_DELTA_INSTANCE";
15944     case DT_MIPS_DELTA_INSTANCE_NO:
15945       return "MIPS_DELTA_INSTANCE_NO";
15946     case DT_MIPS_DELTA_RELOC:
15947       return "MIPS_DELTA_RELOC";
15948     case DT_MIPS_DELTA_RELOC_NO:
15949       return "MIPS_DELTA_RELOC_NO";
15950     case DT_MIPS_DELTA_SYM:
15951       return "MIPS_DELTA_SYM";
15952     case DT_MIPS_DELTA_SYM_NO:
15953       return "MIPS_DELTA_SYM_NO";
15954     case DT_MIPS_DELTA_CLASSSYM:
15955       return "MIPS_DELTA_CLASSSYM";
15956     case DT_MIPS_DELTA_CLASSSYM_NO:
15957       return "MIPS_DELTA_CLASSSYM_NO";
15958     case DT_MIPS_CXX_FLAGS:
15959       return "MIPS_CXX_FLAGS";
15960     case DT_MIPS_PIXIE_INIT:
15961       return "MIPS_PIXIE_INIT";
15962     case DT_MIPS_SYMBOL_LIB:
15963       return "MIPS_SYMBOL_LIB";
15964     case DT_MIPS_LOCALPAGE_GOTIDX:
15965       return "MIPS_LOCALPAGE_GOTIDX";
15966     case DT_MIPS_LOCAL_GOTIDX:
15967       return "MIPS_LOCAL_GOTIDX";
15968     case DT_MIPS_HIDDEN_GOTIDX:
15969       return "MIPS_HIDDEN_GOTIDX";
15970     case DT_MIPS_PROTECTED_GOTIDX:
15971       return "MIPS_PROTECTED_GOT_IDX";
15972     case DT_MIPS_OPTIONS:
15973       return "MIPS_OPTIONS";
15974     case DT_MIPS_INTERFACE:
15975       return "MIPS_INTERFACE";
15976     case DT_MIPS_DYNSTR_ALIGN:
15977       return "DT_MIPS_DYNSTR_ALIGN";
15978     case DT_MIPS_INTERFACE_SIZE:
15979       return "DT_MIPS_INTERFACE_SIZE";
15980     case DT_MIPS_RLD_TEXT_RESOLVE_ADDR:
15981       return "DT_MIPS_RLD_TEXT_RESOLVE_ADDR";
15982     case DT_MIPS_PERF_SUFFIX:
15983       return "DT_MIPS_PERF_SUFFIX";
15984     case DT_MIPS_COMPACT_SIZE:
15985       return "DT_MIPS_COMPACT_SIZE";
15986     case DT_MIPS_GP_VALUE:
15987       return "DT_MIPS_GP_VALUE";
15988     case DT_MIPS_AUX_DYNAMIC:
15989       return "DT_MIPS_AUX_DYNAMIC";
15990     case DT_MIPS_PLTGOT:
15991       return "DT_MIPS_PLTGOT";
15992     case DT_MIPS_RWPLT:
15993       return "DT_MIPS_RWPLT";
15994     case DT_MIPS_XHASH:
15995       return "DT_MIPS_XHASH";
15996     }
15997 }
15998
15999 /* Return the meaning of Tag_GNU_MIPS_ABI_FP value FP, or null if
16000    not known.  */
16001
16002 const char *
16003 _bfd_mips_fp_abi_string (int fp)
16004 {
16005   switch (fp)
16006     {
16007       /* These strings aren't translated because they're simply
16008          option lists.  */
16009     case Val_GNU_MIPS_ABI_FP_DOUBLE:
16010       return "-mdouble-float";
16011
16012     case Val_GNU_MIPS_ABI_FP_SINGLE:
16013       return "-msingle-float";
16014
16015     case Val_GNU_MIPS_ABI_FP_SOFT:
16016       return "-msoft-float";
16017
16018     case Val_GNU_MIPS_ABI_FP_OLD_64:
16019       return _("-mips32r2 -mfp64 (12 callee-saved)");
16020
16021     case Val_GNU_MIPS_ABI_FP_XX:
16022       return "-mfpxx";
16023
16024     case Val_GNU_MIPS_ABI_FP_64:
16025       return "-mgp32 -mfp64";
16026
16027     case Val_GNU_MIPS_ABI_FP_64A:
16028       return "-mgp32 -mfp64 -mno-odd-spreg";
16029
16030     default:
16031       return 0;
16032     }
16033 }
16034
16035 static void
16036 print_mips_ases (FILE *file, unsigned int mask)
16037 {
16038   if (mask & AFL_ASE_DSP)
16039     fputs ("\n\tDSP ASE", file);
16040   if (mask & AFL_ASE_DSPR2)
16041     fputs ("\n\tDSP R2 ASE", file);
16042   if (mask & AFL_ASE_DSPR3)
16043     fputs ("\n\tDSP R3 ASE", file);
16044   if (mask & AFL_ASE_EVA)
16045     fputs ("\n\tEnhanced VA Scheme", file);
16046   if (mask & AFL_ASE_MCU)
16047     fputs ("\n\tMCU (MicroController) ASE", file);
16048   if (mask & AFL_ASE_MDMX)
16049     fputs ("\n\tMDMX ASE", file);
16050   if (mask & AFL_ASE_MIPS3D)
16051     fputs ("\n\tMIPS-3D ASE", file);
16052   if (mask & AFL_ASE_MT)
16053     fputs ("\n\tMT ASE", file);
16054   if (mask & AFL_ASE_SMARTMIPS)
16055     fputs ("\n\tSmartMIPS ASE", file);
16056   if (mask & AFL_ASE_VIRT)
16057     fputs ("\n\tVZ ASE", file);
16058   if (mask & AFL_ASE_MSA)
16059     fputs ("\n\tMSA ASE", file);
16060   if (mask & AFL_ASE_MIPS16)
16061     fputs ("\n\tMIPS16 ASE", file);
16062   if (mask & AFL_ASE_MICROMIPS)
16063     fputs ("\n\tMICROMIPS ASE", file);
16064   if (mask & AFL_ASE_XPA)
16065     fputs ("\n\tXPA ASE", file);
16066   if (mask & AFL_ASE_MIPS16E2)
16067     fputs ("\n\tMIPS16e2 ASE", file);
16068   if (mask & AFL_ASE_CRC)
16069     fputs ("\n\tCRC ASE", file);
16070   if (mask & AFL_ASE_GINV)
16071     fputs ("\n\tGINV ASE", file);
16072   if (mask & AFL_ASE_LOONGSON_MMI)
16073     fputs ("\n\tLoongson MMI ASE", file);
16074   if (mask & AFL_ASE_LOONGSON_CAM)
16075     fputs ("\n\tLoongson CAM ASE", file);
16076   if (mask & AFL_ASE_LOONGSON_EXT)
16077     fputs ("\n\tLoongson EXT ASE", file);
16078   if (mask & AFL_ASE_LOONGSON_EXT2)
16079     fputs ("\n\tLoongson EXT2 ASE", file);
16080   if (mask == 0)
16081     fprintf (file, "\n\t%s", _("None"));
16082   else if ((mask & ~AFL_ASE_MASK) != 0)
16083     fprintf (stdout, "\n\t%s (%x)", _("Unknown"), mask & ~AFL_ASE_MASK);
16084 }
16085
16086 static void
16087 print_mips_isa_ext (FILE *file, unsigned int isa_ext)
16088 {
16089   switch (isa_ext)
16090     {
16091     case 0:
16092       fputs (_("None"), file);
16093       break;
16094     case AFL_EXT_XLR:
16095       fputs ("RMI XLR", file);
16096       break;
16097     case AFL_EXT_OCTEON3:
16098       fputs ("Cavium Networks Octeon3", file);
16099       break;
16100     case AFL_EXT_OCTEON2:
16101       fputs ("Cavium Networks Octeon2", file);
16102       break;
16103     case AFL_EXT_OCTEONP:
16104       fputs ("Cavium Networks OcteonP", file);
16105       break;
16106     case AFL_EXT_OCTEON:
16107       fputs ("Cavium Networks Octeon", file);
16108       break;
16109     case AFL_EXT_5900:
16110       fputs ("Toshiba R5900", file);
16111       break;
16112     case AFL_EXT_4650:
16113       fputs ("MIPS R4650", file);
16114       break;
16115     case AFL_EXT_4010:
16116       fputs ("LSI R4010", file);
16117       break;
16118     case AFL_EXT_4100:
16119       fputs ("NEC VR4100", file);
16120       break;
16121     case AFL_EXT_3900:
16122       fputs ("Toshiba R3900", file);
16123       break;
16124     case AFL_EXT_10000:
16125       fputs ("MIPS R10000", file);
16126       break;
16127     case AFL_EXT_SB1:
16128       fputs ("Broadcom SB-1", file);
16129       break;
16130     case AFL_EXT_4111:
16131       fputs ("NEC VR4111/VR4181", file);
16132       break;
16133     case AFL_EXT_4120:
16134       fputs ("NEC VR4120", file);
16135       break;
16136     case AFL_EXT_5400:
16137       fputs ("NEC VR5400", file);
16138       break;
16139     case AFL_EXT_5500:
16140       fputs ("NEC VR5500", file);
16141       break;
16142     case AFL_EXT_LOONGSON_2E:
16143       fputs ("ST Microelectronics Loongson 2E", file);
16144       break;
16145     case AFL_EXT_LOONGSON_2F:
16146       fputs ("ST Microelectronics Loongson 2F", file);
16147       break;
16148     case AFL_EXT_INTERAPTIV_MR2:
16149       fputs ("Imagination interAptiv MR2", file);
16150       break;
16151     default:
16152       fprintf (file, "%s (%d)", _("Unknown"), isa_ext);
16153       break;
16154     }
16155 }
16156
16157 static void
16158 print_mips_fp_abi_value (FILE *file, int val)
16159 {
16160   switch (val)
16161     {
16162     case Val_GNU_MIPS_ABI_FP_ANY:
16163       fprintf (file, _("Hard or soft float\n"));
16164       break;
16165     case Val_GNU_MIPS_ABI_FP_DOUBLE:
16166       fprintf (file, _("Hard float (double precision)\n"));
16167       break;
16168     case Val_GNU_MIPS_ABI_FP_SINGLE:
16169       fprintf (file, _("Hard float (single precision)\n"));
16170       break;
16171     case Val_GNU_MIPS_ABI_FP_SOFT:
16172       fprintf (file, _("Soft float\n"));
16173       break;
16174     case Val_GNU_MIPS_ABI_FP_OLD_64:
16175       fprintf (file, _("Hard float (MIPS32r2 64-bit FPU 12 callee-saved)\n"));
16176       break;
16177     case Val_GNU_MIPS_ABI_FP_XX:
16178       fprintf (file, _("Hard float (32-bit CPU, Any FPU)\n"));
16179       break;
16180     case Val_GNU_MIPS_ABI_FP_64:
16181       fprintf (file, _("Hard float (32-bit CPU, 64-bit FPU)\n"));
16182       break;
16183     case Val_GNU_MIPS_ABI_FP_64A:
16184       fprintf (file, _("Hard float compat (32-bit CPU, 64-bit FPU)\n"));
16185       break;
16186     default:
16187       fprintf (file, "??? (%d)\n", val);
16188       break;
16189     }
16190 }
16191
16192 static int
16193 get_mips_reg_size (int reg_size)
16194 {
16195   return (reg_size == AFL_REG_NONE) ? 0
16196          : (reg_size == AFL_REG_32) ? 32
16197          : (reg_size == AFL_REG_64) ? 64
16198          : (reg_size == AFL_REG_128) ? 128
16199          : -1;
16200 }
16201
16202 bfd_boolean
16203 _bfd_mips_elf_print_private_bfd_data (bfd *abfd, void *ptr)
16204 {
16205   FILE *file = ptr;
16206
16207   BFD_ASSERT (abfd != NULL && ptr != NULL);
16208
16209   /* Print normal ELF private data.  */
16210   _bfd_elf_print_private_bfd_data (abfd, ptr);
16211
16212   /* xgettext:c-format */
16213   fprintf (file, _("private flags = %lx:"), elf_elfheader (abfd)->e_flags);
16214
16215   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O32)
16216     fprintf (file, _(" [abi=O32]"));
16217   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O64)
16218     fprintf (file, _(" [abi=O64]"));
16219   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32)
16220     fprintf (file, _(" [abi=EABI32]"));
16221   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI64)
16222     fprintf (file, _(" [abi=EABI64]"));
16223   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI))
16224     fprintf (file, _(" [abi unknown]"));
16225   else if (ABI_N32_P (abfd))
16226     fprintf (file, _(" [abi=N32]"));
16227   else if (ABI_64_P (abfd))
16228     fprintf (file, _(" [abi=64]"));
16229   else
16230     fprintf (file, _(" [no abi set]"));
16231
16232   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1)
16233     fprintf (file, " [mips1]");
16234   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2)
16235     fprintf (file, " [mips2]");
16236   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_3)
16237     fprintf (file, " [mips3]");
16238   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_4)
16239     fprintf (file, " [mips4]");
16240   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_5)
16241     fprintf (file, " [mips5]");
16242   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32)
16243     fprintf (file, " [mips32]");
16244   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64)
16245     fprintf (file, " [mips64]");
16246   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2)
16247     fprintf (file, " [mips32r2]");
16248   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64R2)
16249     fprintf (file, " [mips64r2]");
16250   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R6)
16251     fprintf (file, " [mips32r6]");
16252   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64R6)
16253     fprintf (file, " [mips64r6]");
16254   else
16255     fprintf (file, _(" [unknown ISA]"));
16256
16257   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MDMX)
16258     fprintf (file, " [mdmx]");
16259
16260   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_M16)
16261     fprintf (file, " [mips16]");
16262
16263   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MICROMIPS)
16264     fprintf (file, " [micromips]");
16265
16266   if (elf_elfheader (abfd)->e_flags & EF_MIPS_NAN2008)
16267     fprintf (file, " [nan2008]");
16268
16269   if (elf_elfheader (abfd)->e_flags & EF_MIPS_FP64)
16270     fprintf (file, " [old fp64]");
16271
16272   if (elf_elfheader (abfd)->e_flags & EF_MIPS_32BITMODE)
16273     fprintf (file, " [32bitmode]");
16274   else
16275     fprintf (file, _(" [not 32bitmode]"));
16276
16277   if (elf_elfheader (abfd)->e_flags & EF_MIPS_NOREORDER)
16278     fprintf (file, " [noreorder]");
16279
16280   if (elf_elfheader (abfd)->e_flags & EF_MIPS_PIC)
16281     fprintf (file, " [PIC]");
16282
16283   if (elf_elfheader (abfd)->e_flags & EF_MIPS_CPIC)
16284     fprintf (file, " [CPIC]");
16285
16286   if (elf_elfheader (abfd)->e_flags & EF_MIPS_XGOT)
16287     fprintf (file, " [XGOT]");
16288
16289   if (elf_elfheader (abfd)->e_flags & EF_MIPS_UCODE)
16290     fprintf (file, " [UCODE]");
16291
16292   fputc ('\n', file);
16293
16294   if (mips_elf_tdata (abfd)->abiflags_valid)
16295     {
16296       Elf_Internal_ABIFlags_v0 *abiflags = &mips_elf_tdata (abfd)->abiflags;
16297       fprintf (file, "\nMIPS ABI Flags Version: %d\n", abiflags->version);
16298       fprintf (file, "\nISA: MIPS%d", abiflags->isa_level);
16299       if (abiflags->isa_rev > 1)
16300         fprintf (file, "r%d", abiflags->isa_rev);
16301       fprintf (file, "\nGPR size: %d",
16302                get_mips_reg_size (abiflags->gpr_size));
16303       fprintf (file, "\nCPR1 size: %d",
16304                get_mips_reg_size (abiflags->cpr1_size));
16305       fprintf (file, "\nCPR2 size: %d",
16306                get_mips_reg_size (abiflags->cpr2_size));
16307       fputs ("\nFP ABI: ", file);
16308       print_mips_fp_abi_value (file, abiflags->fp_abi);
16309       fputs ("ISA Extension: ", file);
16310       print_mips_isa_ext (file, abiflags->isa_ext);
16311       fputs ("\nASEs:", file);
16312       print_mips_ases (file, abiflags->ases);
16313       fprintf (file, "\nFLAGS 1: %8.8lx", abiflags->flags1);
16314       fprintf (file, "\nFLAGS 2: %8.8lx", abiflags->flags2);
16315       fputc ('\n', file);
16316     }
16317
16318   return TRUE;
16319 }
16320
16321 const struct bfd_elf_special_section _bfd_mips_elf_special_sections[] =
16322 {
16323   { STRING_COMMA_LEN (".lit4"),   0, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
16324   { STRING_COMMA_LEN (".lit8"),   0, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
16325   { STRING_COMMA_LEN (".mdebug"), 0, SHT_MIPS_DEBUG, 0 },
16326   { STRING_COMMA_LEN (".sbss"),  -2, SHT_NOBITS,     SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
16327   { STRING_COMMA_LEN (".sdata"), -2, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
16328   { STRING_COMMA_LEN (".ucode"),  0, SHT_MIPS_UCODE, 0 },
16329   { STRING_COMMA_LEN (".MIPS.xhash"),  0, SHT_MIPS_XHASH,   SHF_ALLOC },
16330   { NULL,                     0,  0, 0,              0 }
16331 };
16332
16333 /* Merge non visibility st_other attributes.  Ensure that the
16334    STO_OPTIONAL flag is copied into h->other, even if this is not a
16335    definiton of the symbol.  */
16336 void
16337 _bfd_mips_elf_merge_symbol_attribute (struct elf_link_hash_entry *h,
16338                                       const Elf_Internal_Sym *isym,
16339                                       bfd_boolean definition,
16340                                       bfd_boolean dynamic ATTRIBUTE_UNUSED)
16341 {
16342   if ((isym->st_other & ~ELF_ST_VISIBILITY (-1)) != 0)
16343     {
16344       unsigned char other;
16345
16346       other = (definition ? isym->st_other : h->other);
16347       other &= ~ELF_ST_VISIBILITY (-1);
16348       h->other = other | ELF_ST_VISIBILITY (h->other);
16349     }
16350
16351   if (!definition
16352       && ELF_MIPS_IS_OPTIONAL (isym->st_other))
16353     h->other |= STO_OPTIONAL;
16354 }
16355
16356 /* Decide whether an undefined symbol is special and can be ignored.
16357    This is the case for OPTIONAL symbols on IRIX.  */
16358 bfd_boolean
16359 _bfd_mips_elf_ignore_undef_symbol (struct elf_link_hash_entry *h)
16360 {
16361   return ELF_MIPS_IS_OPTIONAL (h->other) ? TRUE : FALSE;
16362 }
16363
16364 bfd_boolean
16365 _bfd_mips_elf_common_definition (Elf_Internal_Sym *sym)
16366 {
16367   return (sym->st_shndx == SHN_COMMON
16368           || sym->st_shndx == SHN_MIPS_ACOMMON
16369           || sym->st_shndx == SHN_MIPS_SCOMMON);
16370 }
16371
16372 /* Return address for Ith PLT stub in section PLT, for relocation REL
16373    or (bfd_vma) -1 if it should not be included.  */
16374
16375 bfd_vma
16376 _bfd_mips_elf_plt_sym_val (bfd_vma i, const asection *plt,
16377                            const arelent *rel ATTRIBUTE_UNUSED)
16378 {
16379   return (plt->vma
16380           + 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry)
16381           + i * 4 * ARRAY_SIZE (mips_exec_plt_entry));
16382 }
16383
16384 /* Build a table of synthetic symbols to represent the PLT.  As with MIPS16
16385    and microMIPS PLT slots we may have a many-to-one mapping between .plt
16386    and .got.plt and also the slots may be of a different size each we walk
16387    the PLT manually fetching instructions and matching them against known
16388    patterns.  To make things easier standard MIPS slots, if any, always come
16389    first.  As we don't create proper ELF symbols we use the UDATA.I member
16390    of ASYMBOL to carry ISA annotation.  The encoding used is the same as
16391    with the ST_OTHER member of the ELF symbol.  */
16392
16393 long
16394 _bfd_mips_elf_get_synthetic_symtab (bfd *abfd,
16395                                     long symcount ATTRIBUTE_UNUSED,
16396                                     asymbol **syms ATTRIBUTE_UNUSED,
16397                                     long dynsymcount, asymbol **dynsyms,
16398                                     asymbol **ret)
16399 {
16400   static const char pltname[] = "_PROCEDURE_LINKAGE_TABLE_";
16401   static const char microsuffix[] = "@micromipsplt";
16402   static const char m16suffix[] = "@mips16plt";
16403   static const char mipssuffix[] = "@plt";
16404
16405   bfd_boolean (*slurp_relocs) (bfd *, asection *, asymbol **, bfd_boolean);
16406   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
16407   bfd_boolean micromips_p = MICROMIPS_P (abfd);
16408   Elf_Internal_Shdr *hdr;
16409   bfd_byte *plt_data;
16410   bfd_vma plt_offset;
16411   unsigned int other;
16412   bfd_vma entry_size;
16413   bfd_vma plt0_size;
16414   asection *relplt;
16415   bfd_vma opcode;
16416   asection *plt;
16417   asymbol *send;
16418   size_t size;
16419   char *names;
16420   long counti;
16421   arelent *p;
16422   asymbol *s;
16423   char *nend;
16424   long count;
16425   long pi;
16426   long i;
16427   long n;
16428
16429   *ret = NULL;
16430
16431   if ((abfd->flags & (DYNAMIC | EXEC_P)) == 0 || dynsymcount <= 0)
16432     return 0;
16433
16434   relplt = bfd_get_section_by_name (abfd, ".rel.plt");
16435   if (relplt == NULL)
16436     return 0;
16437
16438   hdr = &elf_section_data (relplt)->this_hdr;
16439   if (hdr->sh_link != elf_dynsymtab (abfd) || hdr->sh_type != SHT_REL)
16440     return 0;
16441
16442   plt = bfd_get_section_by_name (abfd, ".plt");
16443   if (plt == NULL)
16444     return 0;
16445
16446   slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
16447   if (!(*slurp_relocs) (abfd, relplt, dynsyms, TRUE))
16448     return -1;
16449   p = relplt->relocation;
16450
16451   /* Calculating the exact amount of space required for symbols would
16452      require two passes over the PLT, so just pessimise assuming two
16453      PLT slots per relocation.  */
16454   count = relplt->size / hdr->sh_entsize;
16455   counti = count * bed->s->int_rels_per_ext_rel;
16456   size = 2 * count * sizeof (asymbol);
16457   size += count * (sizeof (mipssuffix) +
16458                    (micromips_p ? sizeof (microsuffix) : sizeof (m16suffix)));
16459   for (pi = 0; pi < counti; pi += bed->s->int_rels_per_ext_rel)
16460     size += 2 * strlen ((*p[pi].sym_ptr_ptr)->name);
16461
16462   /* Add the size of "_PROCEDURE_LINKAGE_TABLE_" too.  */
16463   size += sizeof (asymbol) + sizeof (pltname);
16464
16465   if (!bfd_malloc_and_get_section (abfd, plt, &plt_data))
16466     return -1;
16467
16468   if (plt->size < 16)
16469     return -1;
16470
16471   s = *ret = bfd_malloc (size);
16472   if (s == NULL)
16473     return -1;
16474   send = s + 2 * count + 1;
16475
16476   names = (char *) send;
16477   nend = (char *) s + size;
16478   n = 0;
16479
16480   opcode = bfd_get_micromips_32 (abfd, plt_data + 12);
16481   if (opcode == 0x3302fffe)
16482     {
16483       if (!micromips_p)
16484         return -1;
16485       plt0_size = 2 * ARRAY_SIZE (micromips_o32_exec_plt0_entry);
16486       other = STO_MICROMIPS;
16487     }
16488   else if (opcode == 0x0398c1d0)
16489     {
16490       if (!micromips_p)
16491         return -1;
16492       plt0_size = 2 * ARRAY_SIZE (micromips_insn32_o32_exec_plt0_entry);
16493       other = STO_MICROMIPS;
16494     }
16495   else
16496     {
16497       plt0_size = 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry);
16498       other = 0;
16499     }
16500
16501   s->the_bfd = abfd;
16502   s->flags = BSF_SYNTHETIC | BSF_FUNCTION | BSF_LOCAL;
16503   s->section = plt;
16504   s->value = 0;
16505   s->name = names;
16506   s->udata.i = other;
16507   memcpy (names, pltname, sizeof (pltname));
16508   names += sizeof (pltname);
16509   ++s, ++n;
16510
16511   pi = 0;
16512   for (plt_offset = plt0_size;
16513        plt_offset + 8 <= plt->size && s < send;
16514        plt_offset += entry_size)
16515     {
16516       bfd_vma gotplt_addr;
16517       const char *suffix;
16518       bfd_vma gotplt_hi;
16519       bfd_vma gotplt_lo;
16520       size_t suffixlen;
16521
16522       opcode = bfd_get_micromips_32 (abfd, plt_data + plt_offset + 4);
16523
16524       /* Check if the second word matches the expected MIPS16 instruction.  */
16525       if (opcode == 0x651aeb00)
16526         {
16527           if (micromips_p)
16528             return -1;
16529           /* Truncated table???  */
16530           if (plt_offset + 16 > plt->size)
16531             break;
16532           gotplt_addr = bfd_get_32 (abfd, plt_data + plt_offset + 12);
16533           entry_size = 2 * ARRAY_SIZE (mips16_o32_exec_plt_entry);
16534           suffixlen = sizeof (m16suffix);
16535           suffix = m16suffix;
16536           other = STO_MIPS16;
16537         }
16538       /* Likewise the expected microMIPS instruction (no insn32 mode).  */
16539       else if (opcode == 0xff220000)
16540         {
16541           if (!micromips_p)
16542             return -1;
16543           gotplt_hi = bfd_get_16 (abfd, plt_data + plt_offset) & 0x7f;
16544           gotplt_lo = bfd_get_16 (abfd, plt_data + plt_offset + 2) & 0xffff;
16545           gotplt_hi = ((gotplt_hi ^ 0x40) - 0x40) << 18;
16546           gotplt_lo <<= 2;
16547           gotplt_addr = gotplt_hi + gotplt_lo;
16548           gotplt_addr += ((plt->vma + plt_offset) | 3) ^ 3;
16549           entry_size = 2 * ARRAY_SIZE (micromips_o32_exec_plt_entry);
16550           suffixlen = sizeof (microsuffix);
16551           suffix = microsuffix;
16552           other = STO_MICROMIPS;
16553         }
16554       /* Likewise the expected microMIPS instruction (insn32 mode).  */
16555       else if ((opcode & 0xffff0000) == 0xff2f0000)
16556         {
16557           gotplt_hi = bfd_get_16 (abfd, plt_data + plt_offset + 2) & 0xffff;
16558           gotplt_lo = bfd_get_16 (abfd, plt_data + plt_offset + 6) & 0xffff;
16559           gotplt_hi = ((gotplt_hi ^ 0x8000) - 0x8000) << 16;
16560           gotplt_lo = (gotplt_lo ^ 0x8000) - 0x8000;
16561           gotplt_addr = gotplt_hi + gotplt_lo;
16562           entry_size = 2 * ARRAY_SIZE (micromips_insn32_o32_exec_plt_entry);
16563           suffixlen = sizeof (microsuffix);
16564           suffix = microsuffix;
16565           other = STO_MICROMIPS;
16566         }
16567       /* Otherwise assume standard MIPS code.  */
16568       else
16569         {
16570           gotplt_hi = bfd_get_32 (abfd, plt_data + plt_offset) & 0xffff;
16571           gotplt_lo = bfd_get_32 (abfd, plt_data + plt_offset + 4) & 0xffff;
16572           gotplt_hi = ((gotplt_hi ^ 0x8000) - 0x8000) << 16;
16573           gotplt_lo = (gotplt_lo ^ 0x8000) - 0x8000;
16574           gotplt_addr = gotplt_hi + gotplt_lo;
16575           entry_size = 4 * ARRAY_SIZE (mips_exec_plt_entry);
16576           suffixlen = sizeof (mipssuffix);
16577           suffix = mipssuffix;
16578           other = 0;
16579         }
16580       /* Truncated table???  */
16581       if (plt_offset + entry_size > plt->size)
16582         break;
16583
16584       for (i = 0;
16585            i < count && p[pi].address != gotplt_addr;
16586            i++, pi = (pi + bed->s->int_rels_per_ext_rel) % counti);
16587
16588       if (i < count)
16589         {
16590           size_t namelen;
16591           size_t len;
16592
16593           *s = **p[pi].sym_ptr_ptr;
16594           /* Undefined syms won't have BSF_LOCAL or BSF_GLOBAL set.  Since
16595              we are defining a symbol, ensure one of them is set.  */
16596           if ((s->flags & BSF_LOCAL) == 0)
16597             s->flags |= BSF_GLOBAL;
16598           s->flags |= BSF_SYNTHETIC;
16599           s->section = plt;
16600           s->value = plt_offset;
16601           s->name = names;
16602           s->udata.i = other;
16603
16604           len = strlen ((*p[pi].sym_ptr_ptr)->name);
16605           namelen = len + suffixlen;
16606           if (names + namelen > nend)
16607             break;
16608
16609           memcpy (names, (*p[pi].sym_ptr_ptr)->name, len);
16610           names += len;
16611           memcpy (names, suffix, suffixlen);
16612           names += suffixlen;
16613
16614           ++s, ++n;
16615           pi = (pi + bed->s->int_rels_per_ext_rel) % counti;
16616         }
16617     }
16618
16619   free (plt_data);
16620
16621   return n;
16622 }
16623
16624 /* Return the ABI flags associated with ABFD if available.  */
16625
16626 Elf_Internal_ABIFlags_v0 *
16627 bfd_mips_elf_get_abiflags (bfd *abfd)
16628 {
16629   struct mips_elf_obj_tdata *tdata = mips_elf_tdata (abfd);
16630
16631   return tdata->abiflags_valid ? &tdata->abiflags : NULL;
16632 }
16633
16634 /* MIPS libc ABI versions, used with the EI_ABIVERSION ELF file header
16635    field.  Taken from `libc-abis.h' generated at GNU libc build time.
16636    Using a MIPS_ prefix as other libc targets use different values.  */
16637 enum
16638 {
16639   MIPS_LIBC_ABI_DEFAULT = 0,
16640   MIPS_LIBC_ABI_MIPS_PLT,
16641   MIPS_LIBC_ABI_UNIQUE,
16642   MIPS_LIBC_ABI_MIPS_O32_FP64,
16643   MIPS_LIBC_ABI_ABSOLUTE,
16644   MIPS_LIBC_ABI_XHASH,
16645   MIPS_LIBC_ABI_MAX
16646 };
16647
16648 bfd_boolean
16649 _bfd_mips_init_file_header (bfd *abfd, struct bfd_link_info *link_info)
16650 {
16651   struct mips_elf_link_hash_table *htab = NULL;
16652   Elf_Internal_Ehdr *i_ehdrp;
16653
16654   if (!_bfd_elf_init_file_header (abfd, link_info))
16655     return FALSE;
16656
16657   i_ehdrp = elf_elfheader (abfd);
16658   if (link_info)
16659     {
16660       htab = mips_elf_hash_table (link_info);
16661       BFD_ASSERT (htab != NULL);
16662     }
16663
16664   if (htab != NULL && htab->use_plts_and_copy_relocs && !htab->is_vxworks)
16665     i_ehdrp->e_ident[EI_ABIVERSION] = MIPS_LIBC_ABI_MIPS_PLT;
16666
16667   if (mips_elf_tdata (abfd)->abiflags.fp_abi == Val_GNU_MIPS_ABI_FP_64
16668       || mips_elf_tdata (abfd)->abiflags.fp_abi == Val_GNU_MIPS_ABI_FP_64A)
16669     i_ehdrp->e_ident[EI_ABIVERSION] = MIPS_LIBC_ABI_MIPS_O32_FP64;
16670
16671   /* Mark that we need support for absolute symbols in the dynamic loader.  */
16672   if (htab != NULL && htab->use_absolute_zero && htab->gnu_target)
16673     i_ehdrp->e_ident[EI_ABIVERSION] = MIPS_LIBC_ABI_ABSOLUTE;
16674
16675   /* Mark that we need support for .MIPS.xhash in the dynamic linker,
16676      if it is the only hash section that will be created.  */
16677   if (link_info && link_info->emit_gnu_hash && !link_info->emit_hash)
16678     i_ehdrp->e_ident[EI_ABIVERSION] = MIPS_LIBC_ABI_XHASH;
16679   return TRUE;
16680 }
16681
16682 int
16683 _bfd_mips_elf_compact_eh_encoding
16684   (struct bfd_link_info *link_info ATTRIBUTE_UNUSED)
16685 {
16686   return DW_EH_PE_pcrel | DW_EH_PE_sdata4;
16687 }
16688
16689 /* Return the opcode for can't unwind.  */
16690
16691 int
16692 _bfd_mips_elf_cant_unwind_opcode
16693   (struct bfd_link_info *link_info ATTRIBUTE_UNUSED)
16694 {
16695   return COMPACT_EH_CANT_UNWIND_OPCODE;
16696 }
16697
16698 /* Record a position XLAT_LOC in the xlat translation table, associated with
16699    the hash entry H.  The entry in the translation table will later be
16700    populated with the real symbol dynindx.  */
16701
16702 void
16703 _bfd_mips_elf_record_xhash_symbol (struct elf_link_hash_entry *h,
16704                                    bfd_vma xlat_loc)
16705 {
16706   struct mips_elf_link_hash_entry *hmips;
16707
16708   hmips = (struct mips_elf_link_hash_entry *) h;
16709   hmips->mipsxhash_loc = xlat_loc;
16710 }
This page took 0.992895 seconds and 4 git commands to generate.