1/* MIPS-specific support for ELF
2   Copyright (C) 1993-2017 Free Software Foundation, Inc.
3
4   Most of the information added by Ian Lance Taylor, Cygnus Support,
5   <ian@cygnus.com>.
6   N32/64 ABI support added by Mark Mitchell, CodeSourcery, LLC.
7   <mark@codesourcery.com>
8   Traditional MIPS targets support added by Koundinya.K, Dansk Data
9   Elektronik & Operations Research Group. <kk@ddeorg.soft.net>
10
11   This file is part of BFD, the Binary File Descriptor library.
12
13   This program is free software; you can redistribute it and/or modify
14   it under the terms of the GNU General Public License as published by
15   the Free Software Foundation; either version 3 of the License, or
16   (at your option) any later version.
17
18   This program is distributed in the hope that it will be useful,
19   but WITHOUT ANY WARRANTY; without even the implied warranty of
20   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21   GNU General Public License for more details.
22
23   You should have received a copy of the GNU General Public License
24   along with this program; if not, write to the Free Software
25   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
26   MA 02110-1301, USA.  */
27
28
29/* This file handles functionality common to the different MIPS ABI's.  */
30
31#include "sysdep.h"
32#include "bfd.h"
33#include "libbfd.h"
34#include "libiberty.h"
35#include "elf-bfd.h"
36#include "elfxx-mips.h"
37#include "elf/mips.h"
38#include "elf-vxworks.h"
39#include "dwarf2.h"
40
41/* Get the ECOFF swapping routines.  */
42#include "coff/sym.h"
43#include "coff/symconst.h"
44#include "coff/ecoff.h"
45#include "coff/mips.h"
46
47#include "hashtab.h"
48
49/* Types of TLS GOT entry.  */
50enum mips_got_tls_type {
51  GOT_TLS_NONE,
52  GOT_TLS_GD,
53  GOT_TLS_LDM,
54  GOT_TLS_IE
55};
56
57/* This structure is used to hold information about one GOT entry.
58   There are four types of entry:
59
60      (1) an absolute address
61	    requires: abfd == NULL
62	    fields: d.address
63
64      (2) a SYMBOL + OFFSET address, where SYMBOL is local to an input bfd
65	    requires: abfd != NULL, symndx >= 0, tls_type != GOT_TLS_LDM
66	    fields: abfd, symndx, d.addend, tls_type
67
68      (3) a SYMBOL address, where SYMBOL is not local to an input bfd
69	    requires: abfd != NULL, symndx == -1
70	    fields: d.h, tls_type
71
72      (4) a TLS LDM slot
73	    requires: abfd != NULL, symndx == 0, tls_type == GOT_TLS_LDM
74	    fields: none; there's only one of these per GOT.  */
75struct mips_got_entry
76{
77  /* One input bfd that needs the GOT entry.  */
78  bfd *abfd;
79  /* The index of the symbol, as stored in the relocation r_info, if
80     we have a local symbol; -1 otherwise.  */
81  long symndx;
82  union
83  {
84    /* If abfd == NULL, an address that must be stored in the got.  */
85    bfd_vma address;
86    /* If abfd != NULL && symndx != -1, the addend of the relocation
87       that should be added to the symbol value.  */
88    bfd_vma addend;
89    /* If abfd != NULL && symndx == -1, the hash table entry
90       corresponding to a symbol in the GOT.  The symbol's entry
91       is in the local area if h->global_got_area is GGA_NONE,
92       otherwise it is in the global area.  */
93    struct mips_elf_link_hash_entry *h;
94  } d;
95
96  /* The TLS type of this GOT entry.  An LDM GOT entry will be a local
97     symbol entry with r_symndx == 0.  */
98  unsigned char tls_type;
99
100  /* True if we have filled in the GOT contents for a TLS entry,
101     and created the associated relocations.  */
102  unsigned char tls_initialized;
103
104  /* The offset from the beginning of the .got section to the entry
105     corresponding to this symbol+addend.  If it's a global symbol
106     whose offset is yet to be decided, it's going to be -1.  */
107  long gotidx;
108};
109
110/* This structure represents a GOT page reference from an input bfd.
111   Each instance represents a symbol + ADDEND, where the representation
112   of the symbol depends on whether it is local to the input bfd.
113   If it is, then SYMNDX >= 0, and the symbol has index SYMNDX in U.ABFD.
114   Otherwise, SYMNDX < 0 and U.H points to the symbol's hash table entry.
115
116   Page references with SYMNDX >= 0 always become page references
117   in the output.  Page references with SYMNDX < 0 only become page
118   references if the symbol binds locally; in other cases, the page
119   reference decays to a global GOT reference.  */
120struct mips_got_page_ref
121{
122  long symndx;
123  union
124  {
125    struct mips_elf_link_hash_entry *h;
126    bfd *abfd;
127  } u;
128  bfd_vma addend;
129};
130
131/* This structure describes a range of addends: [MIN_ADDEND, MAX_ADDEND].
132   The structures form a non-overlapping list that is sorted by increasing
133   MIN_ADDEND.  */
134struct mips_got_page_range
135{
136  struct mips_got_page_range *next;
137  bfd_signed_vma min_addend;
138  bfd_signed_vma max_addend;
139};
140
141/* This structure describes the range of addends that are applied to page
142   relocations against a given section.  */
143struct mips_got_page_entry
144{
145  /* The section that these entries are based on.  */
146  asection *sec;
147  /* The ranges for this page entry.  */
148  struct mips_got_page_range *ranges;
149  /* The maximum number of page entries needed for RANGES.  */
150  bfd_vma num_pages;
151};
152
153/* This structure is used to hold .got information when linking.  */
154
155struct mips_got_info
156{
157  /* The number of global .got entries.  */
158  unsigned int global_gotno;
159  /* The number of global .got entries that are in the GGA_RELOC_ONLY area.  */
160  unsigned int reloc_only_gotno;
161  /* The number of .got slots used for TLS.  */
162  unsigned int tls_gotno;
163  /* The first unused TLS .got entry.  Used only during
164     mips_elf_initialize_tls_index.  */
165  unsigned int tls_assigned_gotno;
166  /* The number of local .got entries, eventually including page entries.  */
167  unsigned int local_gotno;
168  /* The maximum number of page entries needed.  */
169  unsigned int page_gotno;
170  /* The number of relocations needed for the GOT entries.  */
171  unsigned int relocs;
172  /* The first unused local .got entry.  */
173  unsigned int assigned_low_gotno;
174  /* The last unused local .got entry.  */
175  unsigned int assigned_high_gotno;
176  /* A hash table holding members of the got.  */
177  struct htab *got_entries;
178  /* A hash table holding mips_got_page_ref structures.  */
179  struct htab *got_page_refs;
180  /* A hash table of mips_got_page_entry structures.  */
181  struct htab *got_page_entries;
182  /* In multi-got links, a pointer to the next got (err, rather, most
183     of the time, it points to the previous got).  */
184  struct mips_got_info *next;
185};
186
187/* Structure passed when merging bfds' gots.  */
188
189struct mips_elf_got_per_bfd_arg
190{
191  /* The output bfd.  */
192  bfd *obfd;
193  /* The link information.  */
194  struct bfd_link_info *info;
195  /* A pointer to the primary got, i.e., the one that's going to get
196     the implicit relocations from DT_MIPS_LOCAL_GOTNO and
197     DT_MIPS_GOTSYM.  */
198  struct mips_got_info *primary;
199  /* A non-primary got we're trying to merge with other input bfd's
200     gots.  */
201  struct mips_got_info *current;
202  /* The maximum number of got entries that can be addressed with a
203     16-bit offset.  */
204  unsigned int max_count;
205  /* The maximum number of page entries needed by each got.  */
206  unsigned int max_pages;
207  /* The total number of global entries which will live in the
208     primary got and be automatically relocated.  This includes
209     those not referenced by the primary GOT but included in
210     the "master" GOT.  */
211  unsigned int global_count;
212};
213
214/* A structure used to pass information to htab_traverse callbacks
215   when laying out the GOT.  */
216
217struct mips_elf_traverse_got_arg
218{
219  struct bfd_link_info *info;
220  struct mips_got_info *g;
221  int value;
222};
223
224struct _mips_elf_section_data
225{
226  struct bfd_elf_section_data elf;
227  union
228  {
229    bfd_byte *tdata;
230  } u;
231};
232
233#define mips_elf_section_data(sec) \
234  ((struct _mips_elf_section_data *) elf_section_data (sec))
235
236#define is_mips_elf(bfd)				\
237  (bfd_get_flavour (bfd) == bfd_target_elf_flavour	\
238   && elf_tdata (bfd) != NULL				\
239   && elf_object_id (bfd) == MIPS_ELF_DATA)
240
241/* The ABI says that every symbol used by dynamic relocations must have
242   a global GOT entry.  Among other things, this provides the dynamic
243   linker with a free, directly-indexed cache.  The GOT can therefore
244   contain symbols that are not referenced by GOT relocations themselves
245   (in other words, it may have symbols that are not referenced by things
246   like R_MIPS_GOT16 and R_MIPS_GOT_PAGE).
247
248   GOT relocations are less likely to overflow if we put the associated
249   GOT entries towards the beginning.  We therefore divide the global
250   GOT entries into two areas: "normal" and "reloc-only".  Entries in
251   the first area can be used for both dynamic relocations and GP-relative
252   accesses, while those in the "reloc-only" area are for dynamic
253   relocations only.
254
255   These GGA_* ("Global GOT Area") values are organised so that lower
256   values are more general than higher values.  Also, non-GGA_NONE
257   values are ordered by the position of the area in the GOT.  */
258#define GGA_NORMAL 0
259#define GGA_RELOC_ONLY 1
260#define GGA_NONE 2
261
262/* Information about a non-PIC interface to a PIC function.  There are
263   two ways of creating these interfaces.  The first is to add:
264
265	lui	$25,%hi(func)
266	addiu	$25,$25,%lo(func)
267
268   immediately before a PIC function "func".  The second is to add:
269
270	lui	$25,%hi(func)
271	j	func
272	addiu	$25,$25,%lo(func)
273
274   to a separate trampoline section.
275
276   Stubs of the first kind go in a new section immediately before the
277   target function.  Stubs of the second kind go in a single section
278   pointed to by the hash table's "strampoline" field.  */
279struct mips_elf_la25_stub {
280  /* The generated section that contains this stub.  */
281  asection *stub_section;
282
283  /* The offset of the stub from the start of STUB_SECTION.  */
284  bfd_vma offset;
285
286  /* One symbol for the original function.  Its location is available
287     in H->root.root.u.def.  */
288  struct mips_elf_link_hash_entry *h;
289};
290
291/* Macros for populating a mips_elf_la25_stub.  */
292
293#define LA25_LUI(VAL) (0x3c190000 | (VAL))	/* lui t9,VAL */
294#define LA25_J(VAL) (0x08000000 | (((VAL) >> 2) & 0x3ffffff)) /* j VAL */
295#define LA25_ADDIU(VAL) (0x27390000 | (VAL))	/* addiu t9,t9,VAL */
296#define LA25_LUI_MICROMIPS(VAL)						\
297  (0x41b90000 | (VAL))				/* lui t9,VAL */
298#define LA25_J_MICROMIPS(VAL)						\
299  (0xd4000000 | (((VAL) >> 1) & 0x3ffffff))	/* j VAL */
300#define LA25_ADDIU_MICROMIPS(VAL)					\
301  (0x33390000 | (VAL))				/* addiu t9,t9,VAL */
302
303/* This structure is passed to mips_elf_sort_hash_table_f when sorting
304   the dynamic symbols.  */
305
306struct mips_elf_hash_sort_data
307{
308  /* The symbol in the global GOT with the lowest dynamic symbol table
309     index.  */
310  struct elf_link_hash_entry *low;
311  /* The least dynamic symbol table index corresponding to a non-TLS
312     symbol with a GOT entry.  */
313  bfd_size_type min_got_dynindx;
314  /* The greatest dynamic symbol table index corresponding to a symbol
315     with a GOT entry that is not referenced (e.g., a dynamic symbol
316     with dynamic relocations pointing to it from non-primary GOTs).  */
317  bfd_size_type max_unref_got_dynindx;
318  /* The greatest dynamic symbol table index corresponding to a local
319     symbol.  */
320  bfd_size_type max_local_dynindx;
321  /* The greatest dynamic symbol table index corresponding to an external
322     symbol without a GOT entry.  */
323  bfd_size_type max_non_got_dynindx;
324};
325
326/* We make up to two PLT entries if needed, one for standard MIPS code
327   and one for compressed code, either a MIPS16 or microMIPS one.  We
328   keep a separate record of traditional lazy-binding stubs, for easier
329   processing.  */
330
331struct plt_entry
332{
333  /* Traditional SVR4 stub offset, or -1 if none.  */
334  bfd_vma stub_offset;
335
336  /* Standard PLT entry offset, or -1 if none.  */
337  bfd_vma mips_offset;
338
339  /* Compressed PLT entry offset, or -1 if none.  */
340  bfd_vma comp_offset;
341
342  /* The corresponding .got.plt index, or -1 if none.  */
343  bfd_vma gotplt_index;
344
345  /* Whether we need a standard PLT entry.  */
346  unsigned int need_mips : 1;
347
348  /* Whether we need a compressed PLT entry.  */
349  unsigned int need_comp : 1;
350};
351
352/* The MIPS ELF linker needs additional information for each symbol in
353   the global hash table.  */
354
355struct mips_elf_link_hash_entry
356{
357  struct elf_link_hash_entry root;
358
359  /* External symbol information.  */
360  EXTR esym;
361
362  /* The la25 stub we have created for ths symbol, if any.  */
363  struct mips_elf_la25_stub *la25_stub;
364
365  /* Number of R_MIPS_32, R_MIPS_REL32, or R_MIPS_64 relocs against
366     this symbol.  */
367  unsigned int possibly_dynamic_relocs;
368
369  /* If there is a stub that 32 bit functions should use to call this
370     16 bit function, this points to the section containing the stub.  */
371  asection *fn_stub;
372
373  /* If there is a stub that 16 bit functions should use to call this
374     32 bit function, this points to the section containing the stub.  */
375  asection *call_stub;
376
377  /* This is like the call_stub field, but it is used if the function
378     being called returns a floating point value.  */
379  asection *call_fp_stub;
380
381  /* The highest GGA_* value that satisfies all references to this symbol.  */
382  unsigned int global_got_area : 2;
383
384  /* True if all GOT relocations against this symbol are for calls.  This is
385     a looser condition than no_fn_stub below, because there may be other
386     non-call non-GOT relocations against the symbol.  */
387  unsigned int got_only_for_calls : 1;
388
389  /* True if one of the relocations described by possibly_dynamic_relocs
390     is against a readonly section.  */
391  unsigned int readonly_reloc : 1;
392
393  /* True if there is a relocation against this symbol that must be
394     resolved by the static linker (in other words, if the relocation
395     cannot possibly be made dynamic).  */
396  unsigned int has_static_relocs : 1;
397
398  /* True if we must not create a .MIPS.stubs entry for this symbol.
399     This is set, for example, if there are relocations related to
400     taking the function's address, i.e. any but R_MIPS_CALL*16 ones.
401     See "MIPS ABI Supplement, 3rd Edition", p. 4-20.  */
402  unsigned int no_fn_stub : 1;
403
404  /* Whether we need the fn_stub; this is true if this symbol appears
405     in any relocs other than a 16 bit call.  */
406  unsigned int need_fn_stub : 1;
407
408  /* True if this symbol is referenced by branch relocations from
409     any non-PIC input file.  This is used to determine whether an
410     la25 stub is required.  */
411  unsigned int has_nonpic_branches : 1;
412
413  /* Does this symbol need a traditional MIPS lazy-binding stub
414     (as opposed to a PLT entry)?  */
415  unsigned int needs_lazy_stub : 1;
416
417  /* Does this symbol resolve to a PLT entry?  */
418  unsigned int use_plt_entry : 1;
419};
420
421/* MIPS ELF linker hash table.  */
422
423struct mips_elf_link_hash_table
424{
425  struct elf_link_hash_table root;
426
427  /* The number of .rtproc entries.  */
428  bfd_size_type procedure_count;
429
430  /* The size of the .compact_rel section (if SGI_COMPAT).  */
431  bfd_size_type compact_rel_size;
432
433  /* This flag indicates that the value of DT_MIPS_RLD_MAP dynamic entry
434     is set to the address of __rld_obj_head as in IRIX5 and IRIX6.  */
435  bfd_boolean use_rld_obj_head;
436
437  /* The  __rld_map or __rld_obj_head symbol. */
438  struct elf_link_hash_entry *rld_symbol;
439
440  /* This is set if we see any mips16 stub sections.  */
441  bfd_boolean mips16_stubs_seen;
442
443  /* True if we can generate copy relocs and PLTs.  */
444  bfd_boolean use_plts_and_copy_relocs;
445
446  /* True if we can only use 32-bit microMIPS instructions.  */
447  bfd_boolean insn32;
448
449  /* True if we suppress checks for invalid branches between ISA modes.  */
450  bfd_boolean ignore_branch_isa;
451
452  /* True if we're generating code for VxWorks.  */
453  bfd_boolean is_vxworks;
454
455  /* True if we already reported the small-data section overflow.  */
456  bfd_boolean small_data_overflow_reported;
457
458  /* Shortcuts to some dynamic sections, or NULL if they are not
459     being used.  */
460  asection *srelplt2;
461  asection *sstubs;
462
463  /* The master GOT information.  */
464  struct mips_got_info *got_info;
465
466  /* The global symbol in the GOT with the lowest index in the dynamic
467     symbol table.  */
468  struct elf_link_hash_entry *global_gotsym;
469
470  /* The size of the PLT header in bytes.  */
471  bfd_vma plt_header_size;
472
473  /* The size of a standard PLT entry in bytes.  */
474  bfd_vma plt_mips_entry_size;
475
476  /* The size of a compressed PLT entry in bytes.  */
477  bfd_vma plt_comp_entry_size;
478
479  /* The offset of the next standard PLT entry to create.  */
480  bfd_vma plt_mips_offset;
481
482  /* The offset of the next compressed PLT entry to create.  */
483  bfd_vma plt_comp_offset;
484
485  /* The index of the next .got.plt entry to create.  */
486  bfd_vma plt_got_index;
487
488  /* The number of functions that need a lazy-binding stub.  */
489  bfd_vma lazy_stub_count;
490
491  /* The size of a function stub entry in bytes.  */
492  bfd_vma function_stub_size;
493
494  /* The number of reserved entries at the beginning of the GOT.  */
495  unsigned int reserved_gotno;
496
497  /* The section used for mips_elf_la25_stub trampolines.
498     See the comment above that structure for details.  */
499  asection *strampoline;
500
501  /* A table of mips_elf_la25_stubs, indexed by (input_section, offset)
502     pairs.  */
503  htab_t la25_stubs;
504
505  /* A function FN (NAME, IS, OS) that creates a new input section
506     called NAME and links it to output section OS.  If IS is nonnull,
507     the new section should go immediately before it, otherwise it
508     should go at the (current) beginning of OS.
509
510     The function returns the new section on success, otherwise it
511     returns null.  */
512  asection *(*add_stub_section) (const char *, asection *, asection *);
513
514  /* Small local sym cache.  */
515  struct sym_cache sym_cache;
516
517  /* Is the PLT header compressed?  */
518  unsigned int plt_header_is_comp : 1;
519};
520
521/* Get the MIPS ELF linker hash table from a link_info structure.  */
522
523#define mips_elf_hash_table(p) \
524  (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
525  == MIPS_ELF_DATA ? ((struct mips_elf_link_hash_table *) ((p)->hash)) : NULL)
526
527/* A structure used to communicate with htab_traverse callbacks.  */
528struct mips_htab_traverse_info
529{
530  /* The usual link-wide information.  */
531  struct bfd_link_info *info;
532  bfd *output_bfd;
533
534  /* Starts off FALSE and is set to TRUE if the link should be aborted.  */
535  bfd_boolean error;
536};
537
538/* MIPS ELF private object data.  */
539
540struct mips_elf_obj_tdata
541{
542  /* Generic ELF private object data.  */
543  struct elf_obj_tdata root;
544
545  /* Input BFD providing Tag_GNU_MIPS_ABI_FP attribute for output.  */
546  bfd *abi_fp_bfd;
547
548  /* Input BFD providing Tag_GNU_MIPS_ABI_MSA attribute for output.  */
549  bfd *abi_msa_bfd;
550
551  /* The abiflags for this object.  */
552  Elf_Internal_ABIFlags_v0 abiflags;
553  bfd_boolean abiflags_valid;
554
555  /* The GOT requirements of input bfds.  */
556  struct mips_got_info *got;
557
558  /* Used by _bfd_mips_elf_find_nearest_line.  The structure could be
559     included directly in this one, but there's no point to wasting
560     the memory just for the infrequently called find_nearest_line.  */
561  struct mips_elf_find_line *find_line_info;
562
563  /* An array of stub sections indexed by symbol number.  */
564  asection **local_stubs;
565  asection **local_call_stubs;
566
567  /* The Irix 5 support uses two virtual sections, which represent
568     text/data symbols defined in dynamic objects.  */
569  asymbol *elf_data_symbol;
570  asymbol *elf_text_symbol;
571  asection *elf_data_section;
572  asection *elf_text_section;
573};
574
575/* Get MIPS ELF private object data from BFD's tdata.  */
576
577#define mips_elf_tdata(bfd) \
578  ((struct mips_elf_obj_tdata *) (bfd)->tdata.any)
579
580#define TLS_RELOC_P(r_type) \
581  (r_type == R_MIPS_TLS_DTPMOD32		\
582   || r_type == R_MIPS_TLS_DTPMOD64		\
583   || r_type == R_MIPS_TLS_DTPREL32		\
584   || r_type == R_MIPS_TLS_DTPREL64		\
585   || r_type == R_MIPS_TLS_GD			\
586   || r_type == R_MIPS_TLS_LDM			\
587   || r_type == R_MIPS_TLS_DTPREL_HI16		\
588   || r_type == R_MIPS_TLS_DTPREL_LO16		\
589   || r_type == R_MIPS_TLS_GOTTPREL		\
590   || r_type == R_MIPS_TLS_TPREL32		\
591   || r_type == R_MIPS_TLS_TPREL64		\
592   || r_type == R_MIPS_TLS_TPREL_HI16		\
593   || r_type == R_MIPS_TLS_TPREL_LO16		\
594   || r_type == R_MIPS16_TLS_GD			\
595   || r_type == R_MIPS16_TLS_LDM		\
596   || r_type == R_MIPS16_TLS_DTPREL_HI16	\
597   || r_type == R_MIPS16_TLS_DTPREL_LO16	\
598   || r_type == R_MIPS16_TLS_GOTTPREL		\
599   || r_type == R_MIPS16_TLS_TPREL_HI16		\
600   || r_type == R_MIPS16_TLS_TPREL_LO16		\
601   || r_type == R_MICROMIPS_TLS_GD		\
602   || r_type == R_MICROMIPS_TLS_LDM		\
603   || r_type == R_MICROMIPS_TLS_DTPREL_HI16	\
604   || r_type == R_MICROMIPS_TLS_DTPREL_LO16	\
605   || r_type == R_MICROMIPS_TLS_GOTTPREL	\
606   || r_type == R_MICROMIPS_TLS_TPREL_HI16	\
607   || r_type == R_MICROMIPS_TLS_TPREL_LO16)
608
609/* Structure used to pass information to mips_elf_output_extsym.  */
610
611struct extsym_info
612{
613  bfd *abfd;
614  struct bfd_link_info *info;
615  struct ecoff_debug_info *debug;
616  const struct ecoff_debug_swap *swap;
617  bfd_boolean failed;
618};
619
620/* The names of the runtime procedure table symbols used on IRIX5.  */
621
622static const char * const mips_elf_dynsym_rtproc_names[] =
623{
624  "_procedure_table",
625  "_procedure_string_table",
626  "_procedure_table_size",
627  NULL
628};
629
630/* These structures are used to generate the .compact_rel section on
631   IRIX5.  */
632
633typedef struct
634{
635  unsigned long id1;		/* Always one?  */
636  unsigned long num;		/* Number of compact relocation entries.  */
637  unsigned long id2;		/* Always two?  */
638  unsigned long offset;		/* The file offset of the first relocation.  */
639  unsigned long reserved0;	/* Zero?  */
640  unsigned long reserved1;	/* Zero?  */
641} Elf32_compact_rel;
642
643typedef struct
644{
645  bfd_byte id1[4];
646  bfd_byte num[4];
647  bfd_byte id2[4];
648  bfd_byte offset[4];
649  bfd_byte reserved0[4];
650  bfd_byte reserved1[4];
651} Elf32_External_compact_rel;
652
653typedef struct
654{
655  unsigned int ctype : 1;	/* 1: long 0: short format. See below.  */
656  unsigned int rtype : 4;	/* Relocation types. See below.  */
657  unsigned int dist2to : 8;
658  unsigned int relvaddr : 19;	/* (VADDR - vaddr of the previous entry)/ 4 */
659  unsigned long konst;		/* KONST field. See below.  */
660  unsigned long vaddr;		/* VADDR to be relocated.  */
661} Elf32_crinfo;
662
663typedef struct
664{
665  unsigned int ctype : 1;	/* 1: long 0: short format. See below.  */
666  unsigned int rtype : 4;	/* Relocation types. See below.  */
667  unsigned int dist2to : 8;
668  unsigned int relvaddr : 19;	/* (VADDR - vaddr of the previous entry)/ 4 */
669  unsigned long konst;		/* KONST field. See below.  */
670} Elf32_crinfo2;
671
672typedef struct
673{
674  bfd_byte info[4];
675  bfd_byte konst[4];
676  bfd_byte vaddr[4];
677} Elf32_External_crinfo;
678
679typedef struct
680{
681  bfd_byte info[4];
682  bfd_byte konst[4];
683} Elf32_External_crinfo2;
684
685/* These are the constants used to swap the bitfields in a crinfo.  */
686
687#define CRINFO_CTYPE (0x1)
688#define CRINFO_CTYPE_SH (31)
689#define CRINFO_RTYPE (0xf)
690#define CRINFO_RTYPE_SH (27)
691#define CRINFO_DIST2TO (0xff)
692#define CRINFO_DIST2TO_SH (19)
693#define CRINFO_RELVADDR (0x7ffff)
694#define CRINFO_RELVADDR_SH (0)
695
696/* A compact relocation info has long (3 words) or short (2 words)
697   formats.  A short format doesn't have VADDR field and relvaddr
698   fields contains ((VADDR - vaddr of the previous entry) >> 2).  */
699#define CRF_MIPS_LONG			1
700#define CRF_MIPS_SHORT			0
701
702/* There are 4 types of compact relocation at least. The value KONST
703   has different meaning for each type:
704
705   (type)		(konst)
706   CT_MIPS_REL32	Address in data
707   CT_MIPS_WORD		Address in word (XXX)
708   CT_MIPS_GPHI_LO	GP - vaddr
709   CT_MIPS_JMPAD	Address to jump
710   */
711
712#define CRT_MIPS_REL32			0xa
713#define CRT_MIPS_WORD			0xb
714#define CRT_MIPS_GPHI_LO		0xc
715#define CRT_MIPS_JMPAD			0xd
716
717#define mips_elf_set_cr_format(x,format)	((x).ctype = (format))
718#define mips_elf_set_cr_type(x,type)		((x).rtype = (type))
719#define mips_elf_set_cr_dist2to(x,v)		((x).dist2to = (v))
720#define mips_elf_set_cr_relvaddr(x,d)		((x).relvaddr = (d)<<2)
721
722/* The structure of the runtime procedure descriptor created by the
723   loader for use by the static exception system.  */
724
725typedef struct runtime_pdr {
726	bfd_vma	adr;		/* Memory address of start of procedure.  */
727	long	regmask;	/* Save register mask.  */
728	long	regoffset;	/* Save register offset.  */
729	long	fregmask;	/* Save floating point register mask.  */
730	long	fregoffset;	/* Save floating point register offset.  */
731	long	frameoffset;	/* Frame size.  */
732	short	framereg;	/* Frame pointer register.  */
733	short	pcreg;		/* Offset or reg of return pc.  */
734	long	irpss;		/* Index into the runtime string table.  */
735	long	reserved;
736	struct exception_info *exception_info;/* Pointer to exception array.  */
737} RPDR, *pRPDR;
738#define cbRPDR sizeof (RPDR)
739#define rpdNil ((pRPDR) 0)
740
741static struct mips_got_entry *mips_elf_create_local_got_entry
742  (bfd *, struct bfd_link_info *, bfd *, bfd_vma, unsigned long,
743   struct mips_elf_link_hash_entry *, int);
744static bfd_boolean mips_elf_sort_hash_table_f
745  (struct mips_elf_link_hash_entry *, void *);
746static bfd_vma mips_elf_high
747  (bfd_vma);
748static bfd_boolean mips_elf_create_dynamic_relocation
749  (bfd *, struct bfd_link_info *, const Elf_Internal_Rela *,
750   struct mips_elf_link_hash_entry *, asection *, bfd_vma,
751   bfd_vma *, asection *);
752static bfd_vma mips_elf_adjust_gp
753  (bfd *, struct mips_got_info *, bfd *);
754
755/* This will be used when we sort the dynamic relocation records.  */
756static bfd *reldyn_sorting_bfd;
757
758/* True if ABFD is for CPUs with load interlocking that include
759   non-MIPS1 CPUs and R3900.  */
760#define LOAD_INTERLOCKS_P(abfd) \
761  (   ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) != E_MIPS_ARCH_1) \
762   || ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == E_MIPS_MACH_3900))
763
764/* True if ABFD is for CPUs that are faster if JAL is converted to BAL.
765   This should be safe for all architectures.  We enable this predicate
766   for RM9000 for now.  */
767#define JAL_TO_BAL_P(abfd) \
768  ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == E_MIPS_MACH_9000)
769
770/* True if ABFD is for CPUs that are faster if JALR is converted to BAL.
771   This should be safe for all architectures.  We enable this predicate for
772   all CPUs.  */
773#define JALR_TO_BAL_P(abfd) 1
774
775/* True if ABFD is for CPUs that are faster if JR is converted to B.
776   This should be safe for all architectures.  We enable this predicate for
777   all CPUs.  */
778#define JR_TO_B_P(abfd) 1
779
780/* True if ABFD is a PIC object.  */
781#define PIC_OBJECT_P(abfd) \
782  ((elf_elfheader (abfd)->e_flags & EF_MIPS_PIC) != 0)
783
784/* Nonzero if ABFD is using the O32 ABI.  */
785#define ABI_O32_P(abfd) \
786  ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O32)
787
788/* Nonzero if ABFD is using the N32 ABI.  */
789#define ABI_N32_P(abfd) \
790  ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI2) != 0)
791
792/* Nonzero if ABFD is using the N64 ABI.  */
793#define ABI_64_P(abfd) \
794  (get_elf_backend_data (abfd)->s->elfclass == ELFCLASS64)
795
796/* Nonzero if ABFD is using NewABI conventions.  */
797#define NEWABI_P(abfd) (ABI_N32_P (abfd) || ABI_64_P (abfd))
798
799/* Nonzero if ABFD has microMIPS code.  */
800#define MICROMIPS_P(abfd) \
801  ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MICROMIPS) != 0)
802
803/* Nonzero if ABFD is MIPS R6.  */
804#define MIPSR6_P(abfd) \
805  ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R6 \
806    || (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64R6)
807
808/* The IRIX compatibility level we are striving for.  */
809#define IRIX_COMPAT(abfd) \
810  (get_elf_backend_data (abfd)->elf_backend_mips_irix_compat (abfd))
811
812/* Whether we are trying to be compatible with IRIX at all.  */
813#define SGI_COMPAT(abfd) \
814  (IRIX_COMPAT (abfd) != ict_none)
815
816/* The name of the options section.  */
817#define MIPS_ELF_OPTIONS_SECTION_NAME(abfd) \
818  (NEWABI_P (abfd) ? ".MIPS.options" : ".options")
819
820/* True if NAME is the recognized name of any SHT_MIPS_OPTIONS section.
821   Some IRIX system files do not use MIPS_ELF_OPTIONS_SECTION_NAME.  */
822#define MIPS_ELF_OPTIONS_SECTION_NAME_P(NAME) \
823  (strcmp (NAME, ".MIPS.options") == 0 || strcmp (NAME, ".options") == 0)
824
825/* True if NAME is the recognized name of any SHT_MIPS_ABIFLAGS section.  */
826#define MIPS_ELF_ABIFLAGS_SECTION_NAME_P(NAME) \
827  (strcmp (NAME, ".MIPS.abiflags") == 0)
828
829/* Whether the section is readonly.  */
830#define MIPS_ELF_READONLY_SECTION(sec) \
831  ((sec->flags & (SEC_ALLOC | SEC_LOAD | SEC_READONLY))		\
832   == (SEC_ALLOC | SEC_LOAD | SEC_READONLY))
833
834/* The name of the stub section.  */
835#define MIPS_ELF_STUB_SECTION_NAME(abfd) ".MIPS.stubs"
836
837/* The size of an external REL relocation.  */
838#define MIPS_ELF_REL_SIZE(abfd) \
839  (get_elf_backend_data (abfd)->s->sizeof_rel)
840
841/* The size of an external RELA relocation.  */
842#define MIPS_ELF_RELA_SIZE(abfd) \
843  (get_elf_backend_data (abfd)->s->sizeof_rela)
844
845/* The size of an external dynamic table entry.  */
846#define MIPS_ELF_DYN_SIZE(abfd) \
847  (get_elf_backend_data (abfd)->s->sizeof_dyn)
848
849/* The size of a GOT entry.  */
850#define MIPS_ELF_GOT_SIZE(abfd) \
851  (get_elf_backend_data (abfd)->s->arch_size / 8)
852
853/* The size of the .rld_map section. */
854#define MIPS_ELF_RLD_MAP_SIZE(abfd) \
855  (get_elf_backend_data (abfd)->s->arch_size / 8)
856
857/* The size of a symbol-table entry.  */
858#define MIPS_ELF_SYM_SIZE(abfd) \
859  (get_elf_backend_data (abfd)->s->sizeof_sym)
860
861/* The default alignment for sections, as a power of two.  */
862#define MIPS_ELF_LOG_FILE_ALIGN(abfd)				\
863  (get_elf_backend_data (abfd)->s->log_file_align)
864
865/* Get word-sized data.  */
866#define MIPS_ELF_GET_WORD(abfd, ptr) \
867  (ABI_64_P (abfd) ? bfd_get_64 (abfd, ptr) : bfd_get_32 (abfd, ptr))
868
869/* Put out word-sized data.  */
870#define MIPS_ELF_PUT_WORD(abfd, val, ptr)	\
871  (ABI_64_P (abfd) 				\
872   ? bfd_put_64 (abfd, val, ptr) 		\
873   : bfd_put_32 (abfd, val, ptr))
874
875/* The opcode for word-sized loads (LW or LD).  */
876#define MIPS_ELF_LOAD_WORD(abfd) \
877  (ABI_64_P (abfd) ? 0xdc000000 : 0x8c000000)
878
879/* Add a dynamic symbol table-entry.  */
880#define MIPS_ELF_ADD_DYNAMIC_ENTRY(info, tag, val)	\
881  _bfd_elf_add_dynamic_entry (info, tag, val)
882
883#define MIPS_ELF_RTYPE_TO_HOWTO(abfd, rtype, rela)			\
884  (get_elf_backend_data (abfd)->elf_backend_mips_rtype_to_howto (rtype, rela))
885
886/* The name of the dynamic relocation section.  */
887#define MIPS_ELF_REL_DYN_NAME(INFO) \
888  (mips_elf_hash_table (INFO)->is_vxworks ? ".rela.dyn" : ".rel.dyn")
889
890/* In case we're on a 32-bit machine, construct a 64-bit "-1" value
891   from smaller values.  Start with zero, widen, *then* decrement.  */
892#define MINUS_ONE	(((bfd_vma)0) - 1)
893#define MINUS_TWO	(((bfd_vma)0) - 2)
894
895/* The value to write into got[1] for SVR4 targets, to identify it is
896   a GNU object.  The dynamic linker can then use got[1] to store the
897   module pointer.  */
898#define MIPS_ELF_GNU_GOT1_MASK(abfd) \
899  ((bfd_vma) 1 << (ABI_64_P (abfd) ? 63 : 31))
900
901/* The offset of $gp from the beginning of the .got section.  */
902#define ELF_MIPS_GP_OFFSET(INFO) \
903  (mips_elf_hash_table (INFO)->is_vxworks ? 0x0 : 0x7ff0)
904
905/* The maximum size of the GOT for it to be addressable using 16-bit
906   offsets from $gp.  */
907#define MIPS_ELF_GOT_MAX_SIZE(INFO) (ELF_MIPS_GP_OFFSET (INFO) + 0x7fff)
908
909/* Instructions which appear in a stub.  */
910#define STUB_LW(abfd)							\
911  ((ABI_64_P (abfd)							\
912    ? 0xdf998010				/* ld t9,0x8010(gp) */	\
913    : 0x8f998010))              		/* lw t9,0x8010(gp) */
914#define STUB_MOVE 0x03e07825			/* or t7,ra,zero */
915#define STUB_LUI(VAL) (0x3c180000 + (VAL))	/* lui t8,VAL */
916#define STUB_JALR 0x0320f809			/* jalr ra,t9 */
917#define STUB_ORI(VAL) (0x37180000 + (VAL))	/* ori t8,t8,VAL */
918#define STUB_LI16U(VAL) (0x34180000 + (VAL))	/* ori t8,zero,VAL unsigned */
919#define STUB_LI16S(abfd, VAL)						\
920   ((ABI_64_P (abfd)							\
921    ? (0x64180000 + (VAL))	/* daddiu t8,zero,VAL sign extended */	\
922    : (0x24180000 + (VAL))))	/* addiu t8,zero,VAL sign extended */
923
924/* Likewise for the microMIPS ASE.  */
925#define STUB_LW_MICROMIPS(abfd)						\
926  (ABI_64_P (abfd)							\
927   ? 0xdf3c8010					/* ld t9,0x8010(gp) */	\
928   : 0xff3c8010)				/* lw t9,0x8010(gp) */
929#define STUB_MOVE_MICROMIPS 0x0dff		/* move t7,ra */
930#define STUB_MOVE32_MICROMIPS 0x001f7a90	/* or t7,ra,zero */
931#define STUB_LUI_MICROMIPS(VAL)						\
932   (0x41b80000 + (VAL))				/* lui t8,VAL */
933#define STUB_JALR_MICROMIPS 0x45d9		/* jalr t9 */
934#define STUB_JALR32_MICROMIPS 0x03f90f3c	/* jalr ra,t9 */
935#define STUB_ORI_MICROMIPS(VAL)						\
936  (0x53180000 + (VAL))				/* ori t8,t8,VAL */
937#define STUB_LI16U_MICROMIPS(VAL)					\
938  (0x53000000 + (VAL))				/* ori t8,zero,VAL unsigned */
939#define STUB_LI16S_MICROMIPS(abfd, VAL)					\
940   (ABI_64_P (abfd)							\
941    ? 0x5f000000 + (VAL)	/* daddiu t8,zero,VAL sign extended */	\
942    : 0x33000000 + (VAL))	/* addiu t8,zero,VAL sign extended */
943
944#define MIPS_FUNCTION_STUB_NORMAL_SIZE 16
945#define MIPS_FUNCTION_STUB_BIG_SIZE 20
946#define MICROMIPS_FUNCTION_STUB_NORMAL_SIZE 12
947#define MICROMIPS_FUNCTION_STUB_BIG_SIZE 16
948#define MICROMIPS_INSN32_FUNCTION_STUB_NORMAL_SIZE 16
949#define MICROMIPS_INSN32_FUNCTION_STUB_BIG_SIZE 20
950
951/* The name of the dynamic interpreter.  This is put in the .interp
952   section.  */
953
954#define ELF_DYNAMIC_INTERPRETER(abfd) 		\
955   (ABI_N32_P (abfd) ? "/usr/lib32/libc.so.1" 	\
956    : ABI_64_P (abfd) ? "/usr/lib64/libc.so.1" 	\
957    : "/usr/lib/libc.so.1")
958
959#ifdef BFD64
960#define MNAME(bfd,pre,pos) \
961  (ABI_64_P (bfd) ? CONCAT4 (pre,64,_,pos) : CONCAT4 (pre,32,_,pos))
962#define ELF_R_SYM(bfd, i)					\
963  (ABI_64_P (bfd) ? ELF64_R_SYM (i) : ELF32_R_SYM (i))
964#define ELF_R_TYPE(bfd, i)					\
965  (ABI_64_P (bfd) ? ELF64_MIPS_R_TYPE (i) : ELF32_R_TYPE (i))
966#define ELF_R_INFO(bfd, s, t)					\
967  (ABI_64_P (bfd) ? ELF64_R_INFO (s, t) : ELF32_R_INFO (s, t))
968#else
969#define MNAME(bfd,pre,pos) CONCAT4 (pre,32,_,pos)
970#define ELF_R_SYM(bfd, i)					\
971  (ELF32_R_SYM (i))
972#define ELF_R_TYPE(bfd, i)					\
973  (ELF32_R_TYPE (i))
974#define ELF_R_INFO(bfd, s, t)					\
975  (ELF32_R_INFO (s, t))
976#endif
977
978  /* The mips16 compiler uses a couple of special sections to handle
979     floating point arguments.
980
981     Section names that look like .mips16.fn.FNNAME contain stubs that
982     copy floating point arguments from the fp regs to the gp regs and
983     then jump to FNNAME.  If any 32 bit function calls FNNAME, the
984     call should be redirected to the stub instead.  If no 32 bit
985     function calls FNNAME, the stub should be discarded.  We need to
986     consider any reference to the function, not just a call, because
987     if the address of the function is taken we will need the stub,
988     since the address might be passed to a 32 bit function.
989
990     Section names that look like .mips16.call.FNNAME contain stubs
991     that copy floating point arguments from the gp regs to the fp
992     regs and then jump to FNNAME.  If FNNAME is a 32 bit function,
993     then any 16 bit function that calls FNNAME should be redirected
994     to the stub instead.  If FNNAME is not a 32 bit function, the
995     stub should be discarded.
996
997     .mips16.call.fp.FNNAME sections are similar, but contain stubs
998     which call FNNAME and then copy the return value from the fp regs
999     to the gp regs.  These stubs store the return value in $18 while
1000     calling FNNAME; any function which might call one of these stubs
1001     must arrange to save $18 around the call.  (This case is not
1002     needed for 32 bit functions that call 16 bit functions, because
1003     16 bit functions always return floating point values in both
1004     $f0/$f1 and $2/$3.)
1005
1006     Note that in all cases FNNAME might be defined statically.
1007     Therefore, FNNAME is not used literally.  Instead, the relocation
1008     information will indicate which symbol the section is for.
1009
1010     We record any stubs that we find in the symbol table.  */
1011
1012#define FN_STUB ".mips16.fn."
1013#define CALL_STUB ".mips16.call."
1014#define CALL_FP_STUB ".mips16.call.fp."
1015
1016#define FN_STUB_P(name) CONST_STRNEQ (name, FN_STUB)
1017#define CALL_STUB_P(name) CONST_STRNEQ (name, CALL_STUB)
1018#define CALL_FP_STUB_P(name) CONST_STRNEQ (name, CALL_FP_STUB)
1019
1020/* The format of the first PLT entry in an O32 executable.  */
1021static const bfd_vma mips_o32_exec_plt0_entry[] =
1022{
1023  0x3c1c0000,	/* lui $28, %hi(&GOTPLT[0])				*/
1024  0x8f990000,	/* lw $25, %lo(&GOTPLT[0])($28)				*/
1025  0x279c0000,	/* addiu $28, $28, %lo(&GOTPLT[0])			*/
1026  0x031cc023,	/* subu $24, $24, $28					*/
1027  0x03e07825,	/* or t7, ra, zero					*/
1028  0x0018c082,	/* srl $24, $24, 2					*/
1029  0x0320f809,	/* jalr $25						*/
1030  0x2718fffe	/* subu $24, $24, 2					*/
1031};
1032
1033/* The format of the first PLT entry in an N32 executable.  Different
1034   because gp ($28) is not available; we use t2 ($14) instead.  */
1035static const bfd_vma mips_n32_exec_plt0_entry[] =
1036{
1037  0x3c0e0000,	/* lui $14, %hi(&GOTPLT[0])				*/
1038  0x8dd90000,	/* lw $25, %lo(&GOTPLT[0])($14)				*/
1039  0x25ce0000,	/* addiu $14, $14, %lo(&GOTPLT[0])			*/
1040  0x030ec023,	/* subu $24, $24, $14					*/
1041  0x03e07825,	/* or t7, ra, zero					*/
1042  0x0018c082,	/* srl $24, $24, 2					*/
1043  0x0320f809,	/* jalr $25						*/
1044  0x2718fffe	/* subu $24, $24, 2					*/
1045};
1046
1047/* The format of the first PLT entry in an N64 executable.  Different
1048   from N32 because of the increased size of GOT entries.  */
1049static const bfd_vma mips_n64_exec_plt0_entry[] =
1050{
1051  0x3c0e0000,	/* lui $14, %hi(&GOTPLT[0])				*/
1052  0xddd90000,	/* ld $25, %lo(&GOTPLT[0])($14)				*/
1053  0x25ce0000,	/* addiu $14, $14, %lo(&GOTPLT[0])			*/
1054  0x030ec023,	/* subu $24, $24, $14					*/
1055  0x03e07825,	/* or t7, ra, zero					*/
1056  0x0018c0c2,	/* srl $24, $24, 3					*/
1057  0x0320f809,	/* jalr $25						*/
1058  0x2718fffe	/* subu $24, $24, 2					*/
1059};
1060
1061/* The format of the microMIPS first PLT entry in an O32 executable.
1062   We rely on v0 ($2) rather than t8 ($24) to contain the address
1063   of the GOTPLT entry handled, so this stub may only be used when
1064   all the subsequent PLT entries are microMIPS code too.
1065
1066   The trailing NOP is for alignment and correct disassembly only.  */
1067static const bfd_vma micromips_o32_exec_plt0_entry[] =
1068{
1069  0x7980, 0x0000,	/* addiupc $3, (&GOTPLT[0]) - .			*/
1070  0xff23, 0x0000,	/* lw $25, 0($3)				*/
1071  0x0535,		/* subu $2, $2, $3				*/
1072  0x2525,		/* srl $2, $2, 2				*/
1073  0x3302, 0xfffe,	/* subu $24, $2, 2				*/
1074  0x0dff,		/* move $15, $31				*/
1075  0x45f9,		/* jalrs $25					*/
1076  0x0f83,		/* move $28, $3					*/
1077  0x0c00		/* nop						*/
1078};
1079
1080/* The format of the microMIPS first PLT entry in an O32 executable
1081   in the insn32 mode.  */
1082static const bfd_vma micromips_insn32_o32_exec_plt0_entry[] =
1083{
1084  0x41bc, 0x0000,	/* lui $28, %hi(&GOTPLT[0])			*/
1085  0xff3c, 0x0000,	/* lw $25, %lo(&GOTPLT[0])($28)			*/
1086  0x339c, 0x0000,	/* addiu $28, $28, %lo(&GOTPLT[0])		*/
1087  0x0398, 0xc1d0,	/* subu $24, $24, $28				*/
1088  0x001f, 0x7a90,	/* or $15, $31, zero				*/
1089  0x0318, 0x1040,	/* srl $24, $24, 2				*/
1090  0x03f9, 0x0f3c,	/* jalr $25					*/
1091  0x3318, 0xfffe	/* subu $24, $24, 2				*/
1092};
1093
1094/* The format of subsequent standard PLT entries.  */
1095static const bfd_vma mips_exec_plt_entry[] =
1096{
1097  0x3c0f0000,	/* lui $15, %hi(.got.plt entry)			*/
1098  0x01f90000,	/* l[wd] $25, %lo(.got.plt entry)($15)		*/
1099  0x25f80000,	/* addiu $24, $15, %lo(.got.plt entry)		*/
1100  0x03200008	/* jr $25					*/
1101};
1102
1103/* In the following PLT entry the JR and ADDIU instructions will
1104   be swapped in _bfd_mips_elf_finish_dynamic_symbol because
1105   LOAD_INTERLOCKS_P will be true for MIPS R6.  */
1106static const bfd_vma mipsr6_exec_plt_entry[] =
1107{
1108  0x3c0f0000,	/* lui $15, %hi(.got.plt entry)			*/
1109  0x01f90000,	/* l[wd] $25, %lo(.got.plt entry)($15)		*/
1110  0x25f80000,	/* addiu $24, $15, %lo(.got.plt entry)		*/
1111  0x03200009	/* jr $25					*/
1112};
1113
1114/* The format of subsequent MIPS16 o32 PLT entries.  We use v0 ($2)
1115   and v1 ($3) as temporaries because t8 ($24) and t9 ($25) are not
1116   directly addressable.  */
1117static const bfd_vma mips16_o32_exec_plt_entry[] =
1118{
1119  0xb203,		/* lw $2, 12($pc)			*/
1120  0x9a60,		/* lw $3, 0($2)				*/
1121  0x651a,		/* move $24, $2				*/
1122  0xeb00,		/* jr $3				*/
1123  0x653b,		/* move $25, $3				*/
1124  0x6500,		/* nop					*/
1125  0x0000, 0x0000	/* .word (.got.plt entry)		*/
1126};
1127
1128/* The format of subsequent microMIPS o32 PLT entries.  We use v0 ($2)
1129   as a temporary because t8 ($24) is not addressable with ADDIUPC.  */
1130static const bfd_vma micromips_o32_exec_plt_entry[] =
1131{
1132  0x7900, 0x0000,	/* addiupc $2, (.got.plt entry) - .	*/
1133  0xff22, 0x0000,	/* lw $25, 0($2)			*/
1134  0x4599,		/* jr $25				*/
1135  0x0f02		/* move $24, $2				*/
1136};
1137
1138/* The format of subsequent microMIPS o32 PLT entries in the insn32 mode.  */
1139static const bfd_vma micromips_insn32_o32_exec_plt_entry[] =
1140{
1141  0x41af, 0x0000,	/* lui $15, %hi(.got.plt entry)		*/
1142  0xff2f, 0x0000,	/* lw $25, %lo(.got.plt entry)($15)	*/
1143  0x0019, 0x0f3c,	/* jr $25				*/
1144  0x330f, 0x0000	/* addiu $24, $15, %lo(.got.plt entry)	*/
1145};
1146
1147/* The format of the first PLT entry in a VxWorks executable.  */
1148static const bfd_vma mips_vxworks_exec_plt0_entry[] =
1149{
1150  0x3c190000,	/* lui t9, %hi(_GLOBAL_OFFSET_TABLE_)		*/
1151  0x27390000,	/* addiu t9, t9, %lo(_GLOBAL_OFFSET_TABLE_)	*/
1152  0x8f390008,	/* lw t9, 8(t9)					*/
1153  0x00000000,	/* nop						*/
1154  0x03200008,	/* jr t9					*/
1155  0x00000000	/* nop						*/
1156};
1157
1158/* The format of subsequent PLT entries.  */
1159static const bfd_vma mips_vxworks_exec_plt_entry[] =
1160{
1161  0x10000000,	/* b .PLT_resolver			*/
1162  0x24180000,	/* li t8, <pltindex>			*/
1163  0x3c190000,	/* lui t9, %hi(<.got.plt slot>)		*/
1164  0x27390000,	/* addiu t9, t9, %lo(<.got.plt slot>)	*/
1165  0x8f390000,	/* lw t9, 0(t9)				*/
1166  0x00000000,	/* nop					*/
1167  0x03200008,	/* jr t9				*/
1168  0x00000000	/* nop					*/
1169};
1170
1171/* The format of the first PLT entry in a VxWorks shared object.  */
1172static const bfd_vma mips_vxworks_shared_plt0_entry[] =
1173{
1174  0x8f990008,	/* lw t9, 8(gp)		*/
1175  0x00000000,	/* nop			*/
1176  0x03200008,	/* jr t9		*/
1177  0x00000000,	/* nop			*/
1178  0x00000000,	/* nop			*/
1179  0x00000000	/* nop			*/
1180};
1181
1182/* The format of subsequent PLT entries.  */
1183static const bfd_vma mips_vxworks_shared_plt_entry[] =
1184{
1185  0x10000000,	/* b .PLT_resolver	*/
1186  0x24180000	/* li t8, <pltindex>	*/
1187};
1188
1189/* microMIPS 32-bit opcode helper installer.  */
1190
1191static void
1192bfd_put_micromips_32 (const bfd *abfd, bfd_vma opcode, bfd_byte *ptr)
1193{
1194  bfd_put_16 (abfd, (opcode >> 16) & 0xffff, ptr);
1195  bfd_put_16 (abfd,  opcode        & 0xffff, ptr + 2);
1196}
1197
1198/* microMIPS 32-bit opcode helper retriever.  */
1199
1200static bfd_vma
1201bfd_get_micromips_32 (const bfd *abfd, const bfd_byte *ptr)
1202{
1203  return (bfd_get_16 (abfd, ptr) << 16) | bfd_get_16 (abfd, ptr + 2);
1204}
1205
1206/* Look up an entry in a MIPS ELF linker hash table.  */
1207
1208#define mips_elf_link_hash_lookup(table, string, create, copy, follow)	\
1209  ((struct mips_elf_link_hash_entry *)					\
1210   elf_link_hash_lookup (&(table)->root, (string), (create),		\
1211			 (copy), (follow)))
1212
1213/* Traverse a MIPS ELF linker hash table.  */
1214
1215#define mips_elf_link_hash_traverse(table, func, info)			\
1216  (elf_link_hash_traverse						\
1217   (&(table)->root,							\
1218    (bfd_boolean (*) (struct elf_link_hash_entry *, void *)) (func),	\
1219    (info)))
1220
1221/* Find the base offsets for thread-local storage in this object,
1222   for GD/LD and IE/LE respectively.  */
1223
1224#define TP_OFFSET 0x7000
1225#define DTP_OFFSET 0x8000
1226
1227static bfd_vma
1228dtprel_base (struct bfd_link_info *info)
1229{
1230  /* If tls_sec is NULL, we should have signalled an error already.  */
1231  if (elf_hash_table (info)->tls_sec == NULL)
1232    return 0;
1233  return elf_hash_table (info)->tls_sec->vma + DTP_OFFSET;
1234}
1235
1236static bfd_vma
1237tprel_base (struct bfd_link_info *info)
1238{
1239  /* If tls_sec is NULL, we should have signalled an error already.  */
1240  if (elf_hash_table (info)->tls_sec == NULL)
1241    return 0;
1242  return elf_hash_table (info)->tls_sec->vma + TP_OFFSET;
1243}
1244
1245/* Create an entry in a MIPS ELF linker hash table.  */
1246
1247static struct bfd_hash_entry *
1248mips_elf_link_hash_newfunc (struct bfd_hash_entry *entry,
1249			    struct bfd_hash_table *table, const char *string)
1250{
1251  struct mips_elf_link_hash_entry *ret =
1252    (struct mips_elf_link_hash_entry *) entry;
1253
1254  /* Allocate the structure if it has not already been allocated by a
1255     subclass.  */
1256  if (ret == NULL)
1257    ret = bfd_hash_allocate (table, sizeof (struct mips_elf_link_hash_entry));
1258  if (ret == NULL)
1259    return (struct bfd_hash_entry *) ret;
1260
1261  /* Call the allocation method of the superclass.  */
1262  ret = ((struct mips_elf_link_hash_entry *)
1263	 _bfd_elf_link_hash_newfunc ((struct bfd_hash_entry *) ret,
1264				     table, string));
1265  if (ret != NULL)
1266    {
1267      /* Set local fields.  */
1268      memset (&ret->esym, 0, sizeof (EXTR));
1269      /* We use -2 as a marker to indicate that the information has
1270	 not been set.  -1 means there is no associated ifd.  */
1271      ret->esym.ifd = -2;
1272      ret->la25_stub = 0;
1273      ret->possibly_dynamic_relocs = 0;
1274      ret->fn_stub = NULL;
1275      ret->call_stub = NULL;
1276      ret->call_fp_stub = NULL;
1277      ret->global_got_area = GGA_NONE;
1278      ret->got_only_for_calls = TRUE;
1279      ret->readonly_reloc = FALSE;
1280      ret->has_static_relocs = FALSE;
1281      ret->no_fn_stub = FALSE;
1282      ret->need_fn_stub = FALSE;
1283      ret->has_nonpic_branches = FALSE;
1284      ret->needs_lazy_stub = FALSE;
1285      ret->use_plt_entry = FALSE;
1286    }
1287
1288  return (struct bfd_hash_entry *) ret;
1289}
1290
1291/* Allocate MIPS ELF private object data.  */
1292
1293bfd_boolean
1294_bfd_mips_elf_mkobject (bfd *abfd)
1295{
1296  return bfd_elf_allocate_object (abfd, sizeof (struct mips_elf_obj_tdata),
1297				  MIPS_ELF_DATA);
1298}
1299
1300bfd_boolean
1301_bfd_mips_elf_new_section_hook (bfd *abfd, asection *sec)
1302{
1303  if (!sec->used_by_bfd)
1304    {
1305      struct _mips_elf_section_data *sdata;
1306      bfd_size_type amt = sizeof (*sdata);
1307
1308      sdata = bfd_zalloc (abfd, amt);
1309      if (sdata == NULL)
1310	return FALSE;
1311      sec->used_by_bfd = sdata;
1312    }
1313
1314  return _bfd_elf_new_section_hook (abfd, sec);
1315}
1316
1317/* Read ECOFF debugging information from a .mdebug section into a
1318   ecoff_debug_info structure.  */
1319
1320bfd_boolean
1321_bfd_mips_elf_read_ecoff_info (bfd *abfd, asection *section,
1322			       struct ecoff_debug_info *debug)
1323{
1324  HDRR *symhdr;
1325  const struct ecoff_debug_swap *swap;
1326  char *ext_hdr;
1327
1328  swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
1329  memset (debug, 0, sizeof (*debug));
1330
1331  ext_hdr = bfd_malloc (swap->external_hdr_size);
1332  if (ext_hdr == NULL && swap->external_hdr_size != 0)
1333    goto error_return;
1334
1335  if (! bfd_get_section_contents (abfd, section, ext_hdr, 0,
1336				  swap->external_hdr_size))
1337    goto error_return;
1338
1339  symhdr = &debug->symbolic_header;
1340  (*swap->swap_hdr_in) (abfd, ext_hdr, symhdr);
1341
1342  /* The symbolic header contains absolute file offsets and sizes to
1343     read.  */
1344#define READ(ptr, offset, count, size, type)				\
1345  if (symhdr->count == 0)						\
1346    debug->ptr = NULL;							\
1347  else									\
1348    {									\
1349      bfd_size_type amt = (bfd_size_type) size * symhdr->count;		\
1350      debug->ptr = bfd_malloc (amt);					\
1351      if (debug->ptr == NULL)						\
1352	goto error_return;						\
1353      if (bfd_seek (abfd, symhdr->offset, SEEK_SET) != 0		\
1354	  || bfd_bread (debug->ptr, amt, abfd) != amt)			\
1355	goto error_return;						\
1356    }
1357
1358  READ (line, cbLineOffset, cbLine, sizeof (unsigned char), unsigned char *);
1359  READ (external_dnr, cbDnOffset, idnMax, swap->external_dnr_size, void *);
1360  READ (external_pdr, cbPdOffset, ipdMax, swap->external_pdr_size, void *);
1361  READ (external_sym, cbSymOffset, isymMax, swap->external_sym_size, void *);
1362  READ (external_opt, cbOptOffset, ioptMax, swap->external_opt_size, void *);
1363  READ (external_aux, cbAuxOffset, iauxMax, sizeof (union aux_ext),
1364	union aux_ext *);
1365  READ (ss, cbSsOffset, issMax, sizeof (char), char *);
1366  READ (ssext, cbSsExtOffset, issExtMax, sizeof (char), char *);
1367  READ (external_fdr, cbFdOffset, ifdMax, swap->external_fdr_size, void *);
1368  READ (external_rfd, cbRfdOffset, crfd, swap->external_rfd_size, void *);
1369  READ (external_ext, cbExtOffset, iextMax, swap->external_ext_size, void *);
1370#undef READ
1371
1372  debug->fdr = NULL;
1373
1374  return TRUE;
1375
1376 error_return:
1377  if (ext_hdr != NULL)
1378    free (ext_hdr);
1379  if (debug->line != NULL)
1380    free (debug->line);
1381  if (debug->external_dnr != NULL)
1382    free (debug->external_dnr);
1383  if (debug->external_pdr != NULL)
1384    free (debug->external_pdr);
1385  if (debug->external_sym != NULL)
1386    free (debug->external_sym);
1387  if (debug->external_opt != NULL)
1388    free (debug->external_opt);
1389  if (debug->external_aux != NULL)
1390    free (debug->external_aux);
1391  if (debug->ss != NULL)
1392    free (debug->ss);
1393  if (debug->ssext != NULL)
1394    free (debug->ssext);
1395  if (debug->external_fdr != NULL)
1396    free (debug->external_fdr);
1397  if (debug->external_rfd != NULL)
1398    free (debug->external_rfd);
1399  if (debug->external_ext != NULL)
1400    free (debug->external_ext);
1401  return FALSE;
1402}
1403
1404/* Swap RPDR (runtime procedure table entry) for output.  */
1405
1406static void
1407ecoff_swap_rpdr_out (bfd *abfd, const RPDR *in, struct rpdr_ext *ex)
1408{
1409  H_PUT_S32 (abfd, in->adr, ex->p_adr);
1410  H_PUT_32 (abfd, in->regmask, ex->p_regmask);
1411  H_PUT_32 (abfd, in->regoffset, ex->p_regoffset);
1412  H_PUT_32 (abfd, in->fregmask, ex->p_fregmask);
1413  H_PUT_32 (abfd, in->fregoffset, ex->p_fregoffset);
1414  H_PUT_32 (abfd, in->frameoffset, ex->p_frameoffset);
1415
1416  H_PUT_16 (abfd, in->framereg, ex->p_framereg);
1417  H_PUT_16 (abfd, in->pcreg, ex->p_pcreg);
1418
1419  H_PUT_32 (abfd, in->irpss, ex->p_irpss);
1420}
1421
1422/* Create a runtime procedure table from the .mdebug section.  */
1423
1424static bfd_boolean
1425mips_elf_create_procedure_table (void *handle, bfd *abfd,
1426				 struct bfd_link_info *info, asection *s,
1427				 struct ecoff_debug_info *debug)
1428{
1429  const struct ecoff_debug_swap *swap;
1430  HDRR *hdr = &debug->symbolic_header;
1431  RPDR *rpdr, *rp;
1432  struct rpdr_ext *erp;
1433  void *rtproc;
1434  struct pdr_ext *epdr;
1435  struct sym_ext *esym;
1436  char *ss, **sv;
1437  char *str;
1438  bfd_size_type size;
1439  bfd_size_type count;
1440  unsigned long sindex;
1441  unsigned long i;
1442  PDR pdr;
1443  SYMR sym;
1444  const char *no_name_func = _("static procedure (no name)");
1445
1446  epdr = NULL;
1447  rpdr = NULL;
1448  esym = NULL;
1449  ss = NULL;
1450  sv = NULL;
1451
1452  swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
1453
1454  sindex = strlen (no_name_func) + 1;
1455  count = hdr->ipdMax;
1456  if (count > 0)
1457    {
1458      size = swap->external_pdr_size;
1459
1460      epdr = bfd_malloc (size * count);
1461      if (epdr == NULL)
1462	goto error_return;
1463
1464      if (! _bfd_ecoff_get_accumulated_pdr (handle, (bfd_byte *) epdr))
1465	goto error_return;
1466
1467      size = sizeof (RPDR);
1468      rp = rpdr = bfd_malloc (size * count);
1469      if (rpdr == NULL)
1470	goto error_return;
1471
1472      size = sizeof (char *);
1473      sv = bfd_malloc (size * count);
1474      if (sv == NULL)
1475	goto error_return;
1476
1477      count = hdr->isymMax;
1478      size = swap->external_sym_size;
1479      esym = bfd_malloc (size * count);
1480      if (esym == NULL)
1481	goto error_return;
1482
1483      if (! _bfd_ecoff_get_accumulated_sym (handle, (bfd_byte *) esym))
1484	goto error_return;
1485
1486      count = hdr->issMax;
1487      ss = bfd_malloc (count);
1488      if (ss == NULL)
1489	goto error_return;
1490      if (! _bfd_ecoff_get_accumulated_ss (handle, (bfd_byte *) ss))
1491	goto error_return;
1492
1493      count = hdr->ipdMax;
1494      for (i = 0; i < (unsigned long) count; i++, rp++)
1495	{
1496	  (*swap->swap_pdr_in) (abfd, epdr + i, &pdr);
1497	  (*swap->swap_sym_in) (abfd, &esym[pdr.isym], &sym);
1498	  rp->adr = sym.value;
1499	  rp->regmask = pdr.regmask;
1500	  rp->regoffset = pdr.regoffset;
1501	  rp->fregmask = pdr.fregmask;
1502	  rp->fregoffset = pdr.fregoffset;
1503	  rp->frameoffset = pdr.frameoffset;
1504	  rp->framereg = pdr.framereg;
1505	  rp->pcreg = pdr.pcreg;
1506	  rp->irpss = sindex;
1507	  sv[i] = ss + sym.iss;
1508	  sindex += strlen (sv[i]) + 1;
1509	}
1510    }
1511
1512  size = sizeof (struct rpdr_ext) * (count + 2) + sindex;
1513  size = BFD_ALIGN (size, 16);
1514  rtproc = bfd_alloc (abfd, size);
1515  if (rtproc == NULL)
1516    {
1517      mips_elf_hash_table (info)->procedure_count = 0;
1518      goto error_return;
1519    }
1520
1521  mips_elf_hash_table (info)->procedure_count = count + 2;
1522
1523  erp = rtproc;
1524  memset (erp, 0, sizeof (struct rpdr_ext));
1525  erp++;
1526  str = (char *) rtproc + sizeof (struct rpdr_ext) * (count + 2);
1527  strcpy (str, no_name_func);
1528  str += strlen (no_name_func) + 1;
1529  for (i = 0; i < count; i++)
1530    {
1531      ecoff_swap_rpdr_out (abfd, rpdr + i, erp + i);
1532      strcpy (str, sv[i]);
1533      str += strlen (sv[i]) + 1;
1534    }
1535  H_PUT_S32 (abfd, -1, (erp + count)->p_adr);
1536
1537  /* Set the size and contents of .rtproc section.  */
1538  s->size = size;
1539  s->contents = rtproc;
1540
1541  /* Skip this section later on (I don't think this currently
1542     matters, but someday it might).  */
1543  s->map_head.link_order = NULL;
1544
1545  if (epdr != NULL)
1546    free (epdr);
1547  if (rpdr != NULL)
1548    free (rpdr);
1549  if (esym != NULL)
1550    free (esym);
1551  if (ss != NULL)
1552    free (ss);
1553  if (sv != NULL)
1554    free (sv);
1555
1556  return TRUE;
1557
1558 error_return:
1559  if (epdr != NULL)
1560    free (epdr);
1561  if (rpdr != NULL)
1562    free (rpdr);
1563  if (esym != NULL)
1564    free (esym);
1565  if (ss != NULL)
1566    free (ss);
1567  if (sv != NULL)
1568    free (sv);
1569  return FALSE;
1570}
1571
1572/* We're going to create a stub for H.  Create a symbol for the stub's
1573   value and size, to help make the disassembly easier to read.  */
1574
1575static bfd_boolean
1576mips_elf_create_stub_symbol (struct bfd_link_info *info,
1577			     struct mips_elf_link_hash_entry *h,
1578			     const char *prefix, asection *s, bfd_vma value,
1579			     bfd_vma size)
1580{
1581  bfd_boolean micromips_p = ELF_ST_IS_MICROMIPS (h->root.other);
1582  struct bfd_link_hash_entry *bh;
1583  struct elf_link_hash_entry *elfh;
1584  char *name;
1585  bfd_boolean res;
1586
1587  if (micromips_p)
1588    value |= 1;
1589
1590  /* Create a new symbol.  */
1591  name = concat (prefix, h->root.root.root.string, NULL);
1592  bh = NULL;
1593  res = _bfd_generic_link_add_one_symbol (info, s->owner, name,
1594					  BSF_LOCAL, s, value, NULL,
1595					  TRUE, FALSE, &bh);
1596  free (name);
1597  if (! res)
1598    return FALSE;
1599
1600  /* Make it a local function.  */
1601  elfh = (struct elf_link_hash_entry *) bh;
1602  elfh->type = ELF_ST_INFO (STB_LOCAL, STT_FUNC);
1603  elfh->size = size;
1604  elfh->forced_local = 1;
1605  if (micromips_p)
1606    elfh->other = ELF_ST_SET_MICROMIPS (elfh->other);
1607  return TRUE;
1608}
1609
1610/* We're about to redefine H.  Create a symbol to represent H's
1611   current value and size, to help make the disassembly easier
1612   to read.  */
1613
1614static bfd_boolean
1615mips_elf_create_shadow_symbol (struct bfd_link_info *info,
1616			       struct mips_elf_link_hash_entry *h,
1617			       const char *prefix)
1618{
1619  struct bfd_link_hash_entry *bh;
1620  struct elf_link_hash_entry *elfh;
1621  char *name;
1622  asection *s;
1623  bfd_vma value;
1624  bfd_boolean res;
1625
1626  /* Read the symbol's value.  */
1627  BFD_ASSERT (h->root.root.type == bfd_link_hash_defined
1628	      || h->root.root.type == bfd_link_hash_defweak);
1629  s = h->root.root.u.def.section;
1630  value = h->root.root.u.def.value;
1631
1632  /* Create a new symbol.  */
1633  name = concat (prefix, h->root.root.root.string, NULL);
1634  bh = NULL;
1635  res = _bfd_generic_link_add_one_symbol (info, s->owner, name,
1636					  BSF_LOCAL, s, value, NULL,
1637					  TRUE, FALSE, &bh);
1638  free (name);
1639  if (! res)
1640    return FALSE;
1641
1642  /* Make it local and copy the other attributes from H.  */
1643  elfh = (struct elf_link_hash_entry *) bh;
1644  elfh->type = ELF_ST_INFO (STB_LOCAL, ELF_ST_TYPE (h->root.type));
1645  elfh->other = h->root.other;
1646  elfh->size = h->root.size;
1647  elfh->forced_local = 1;
1648  return TRUE;
1649}
1650
1651/* Return TRUE if relocations in SECTION can refer directly to a MIPS16
1652   function rather than to a hard-float stub.  */
1653
1654static bfd_boolean
1655section_allows_mips16_refs_p (asection *section)
1656{
1657  const char *name;
1658
1659  name = bfd_get_section_name (section->owner, section);
1660  return (FN_STUB_P (name)
1661	  || CALL_STUB_P (name)
1662	  || CALL_FP_STUB_P (name)
1663	  || strcmp (name, ".pdr") == 0);
1664}
1665
1666/* [RELOCS, RELEND) are the relocations against SEC, which is a MIPS16
1667   stub section of some kind.  Return the R_SYMNDX of the target
1668   function, or 0 if we can't decide which function that is.  */
1669
1670static unsigned long
1671mips16_stub_symndx (const struct elf_backend_data *bed,
1672		    asection *sec ATTRIBUTE_UNUSED,
1673		    const Elf_Internal_Rela *relocs,
1674		    const Elf_Internal_Rela *relend)
1675{
1676  int int_rels_per_ext_rel = bed->s->int_rels_per_ext_rel;
1677  const Elf_Internal_Rela *rel;
1678
1679  /* Trust the first R_MIPS_NONE relocation, if any, but not a subsequent
1680     one in a compound relocation.  */
1681  for (rel = relocs; rel < relend; rel += int_rels_per_ext_rel)
1682    if (ELF_R_TYPE (sec->owner, rel->r_info) == R_MIPS_NONE)
1683      return ELF_R_SYM (sec->owner, rel->r_info);
1684
1685  /* Otherwise trust the first relocation, whatever its kind.  This is
1686     the traditional behavior.  */
1687  if (relocs < relend)
1688    return ELF_R_SYM (sec->owner, relocs->r_info);
1689
1690  return 0;
1691}
1692
1693/* Check the mips16 stubs for a particular symbol, and see if we can
1694   discard them.  */
1695
1696static void
1697mips_elf_check_mips16_stubs (struct bfd_link_info *info,
1698			     struct mips_elf_link_hash_entry *h)
1699{
1700  /* Dynamic symbols must use the standard call interface, in case other
1701     objects try to call them.  */
1702  if (h->fn_stub != NULL
1703      && h->root.dynindx != -1)
1704    {
1705      mips_elf_create_shadow_symbol (info, h, ".mips16.");
1706      h->need_fn_stub = TRUE;
1707    }
1708
1709  if (h->fn_stub != NULL
1710      && ! h->need_fn_stub)
1711    {
1712      /* We don't need the fn_stub; the only references to this symbol
1713         are 16 bit calls.  Clobber the size to 0 to prevent it from
1714         being included in the link.  */
1715      h->fn_stub->size = 0;
1716      h->fn_stub->flags &= ~SEC_RELOC;
1717      h->fn_stub->reloc_count = 0;
1718      h->fn_stub->flags |= SEC_EXCLUDE;
1719      h->fn_stub->output_section = bfd_abs_section_ptr;
1720    }
1721
1722  if (h->call_stub != NULL
1723      && ELF_ST_IS_MIPS16 (h->root.other))
1724    {
1725      /* We don't need the call_stub; this is a 16 bit function, so
1726         calls from other 16 bit functions are OK.  Clobber the size
1727         to 0 to prevent it from being included in the link.  */
1728      h->call_stub->size = 0;
1729      h->call_stub->flags &= ~SEC_RELOC;
1730      h->call_stub->reloc_count = 0;
1731      h->call_stub->flags |= SEC_EXCLUDE;
1732      h->call_stub->output_section = bfd_abs_section_ptr;
1733    }
1734
1735  if (h->call_fp_stub != NULL
1736      && ELF_ST_IS_MIPS16 (h->root.other))
1737    {
1738      /* We don't need the call_stub; this is a 16 bit function, so
1739         calls from other 16 bit functions are OK.  Clobber the size
1740         to 0 to prevent it from being included in the link.  */
1741      h->call_fp_stub->size = 0;
1742      h->call_fp_stub->flags &= ~SEC_RELOC;
1743      h->call_fp_stub->reloc_count = 0;
1744      h->call_fp_stub->flags |= SEC_EXCLUDE;
1745      h->call_fp_stub->output_section = bfd_abs_section_ptr;
1746    }
1747}
1748
1749/* Hashtable callbacks for mips_elf_la25_stubs.  */
1750
1751static hashval_t
1752mips_elf_la25_stub_hash (const void *entry_)
1753{
1754  const struct mips_elf_la25_stub *entry;
1755
1756  entry = (struct mips_elf_la25_stub *) entry_;
1757  return entry->h->root.root.u.def.section->id
1758    + entry->h->root.root.u.def.value;
1759}
1760
1761static int
1762mips_elf_la25_stub_eq (const void *entry1_, const void *entry2_)
1763{
1764  const struct mips_elf_la25_stub *entry1, *entry2;
1765
1766  entry1 = (struct mips_elf_la25_stub *) entry1_;
1767  entry2 = (struct mips_elf_la25_stub *) entry2_;
1768  return ((entry1->h->root.root.u.def.section
1769	   == entry2->h->root.root.u.def.section)
1770	  && (entry1->h->root.root.u.def.value
1771	      == entry2->h->root.root.u.def.value));
1772}
1773
1774/* Called by the linker to set up the la25 stub-creation code.  FN is
1775   the linker's implementation of add_stub_function.  Return true on
1776   success.  */
1777
1778bfd_boolean
1779_bfd_mips_elf_init_stubs (struct bfd_link_info *info,
1780			  asection *(*fn) (const char *, asection *,
1781					   asection *))
1782{
1783  struct mips_elf_link_hash_table *htab;
1784
1785  htab = mips_elf_hash_table (info);
1786  if (htab == NULL)
1787    return FALSE;
1788
1789  htab->add_stub_section = fn;
1790  htab->la25_stubs = htab_try_create (1, mips_elf_la25_stub_hash,
1791				      mips_elf_la25_stub_eq, NULL);
1792  if (htab->la25_stubs == NULL)
1793    return FALSE;
1794
1795  return TRUE;
1796}
1797
1798/* Return true if H is a locally-defined PIC function, in the sense
1799   that it or its fn_stub might need $25 to be valid on entry.
1800   Note that MIPS16 functions set up $gp using PC-relative instructions,
1801   so they themselves never need $25 to be valid.  Only non-MIPS16
1802   entry points are of interest here.  */
1803
1804static bfd_boolean
1805mips_elf_local_pic_function_p (struct mips_elf_link_hash_entry *h)
1806{
1807  return ((h->root.root.type == bfd_link_hash_defined
1808	   || h->root.root.type == bfd_link_hash_defweak)
1809	  && h->root.def_regular
1810	  && !bfd_is_abs_section (h->root.root.u.def.section)
1811	  && !bfd_is_und_section (h->root.root.u.def.section)
1812	  && (!ELF_ST_IS_MIPS16 (h->root.other)
1813	      || (h->fn_stub && h->need_fn_stub))
1814	  && (PIC_OBJECT_P (h->root.root.u.def.section->owner)
1815	      || ELF_ST_IS_MIPS_PIC (h->root.other)));
1816}
1817
1818/* Set *SEC to the input section that contains the target of STUB.
1819   Return the offset of the target from the start of that section.  */
1820
1821static bfd_vma
1822mips_elf_get_la25_target (struct mips_elf_la25_stub *stub,
1823			  asection **sec)
1824{
1825  if (ELF_ST_IS_MIPS16 (stub->h->root.other))
1826    {
1827      BFD_ASSERT (stub->h->need_fn_stub);
1828      *sec = stub->h->fn_stub;
1829      return 0;
1830    }
1831  else
1832    {
1833      *sec = stub->h->root.root.u.def.section;
1834      return stub->h->root.root.u.def.value;
1835    }
1836}
1837
1838/* STUB describes an la25 stub that we have decided to implement
1839   by inserting an LUI/ADDIU pair before the target function.
1840   Create the section and redirect the function symbol to it.  */
1841
1842static bfd_boolean
1843mips_elf_add_la25_intro (struct mips_elf_la25_stub *stub,
1844			 struct bfd_link_info *info)
1845{
1846  struct mips_elf_link_hash_table *htab;
1847  char *name;
1848  asection *s, *input_section;
1849  unsigned int align;
1850
1851  htab = mips_elf_hash_table (info);
1852  if (htab == NULL)
1853    return FALSE;
1854
1855  /* Create a unique name for the new section.  */
1856  name = bfd_malloc (11 + sizeof (".text.stub."));
1857  if (name == NULL)
1858    return FALSE;
1859  sprintf (name, ".text.stub.%d", (int) htab_elements (htab->la25_stubs));
1860
1861  /* Create the section.  */
1862  mips_elf_get_la25_target (stub, &input_section);
1863  s = htab->add_stub_section (name, input_section,
1864			      input_section->output_section);
1865  if (s == NULL)
1866    return FALSE;
1867
1868  /* Make sure that any padding goes before the stub.  */
1869  align = input_section->alignment_power;
1870  if (!bfd_set_section_alignment (s->owner, s, align))
1871    return FALSE;
1872  if (align > 3)
1873    s->size = (1 << align) - 8;
1874
1875  /* Create a symbol for the stub.  */
1876  mips_elf_create_stub_symbol (info, stub->h, ".pic.", s, s->size, 8);
1877  stub->stub_section = s;
1878  stub->offset = s->size;
1879
1880  /* Allocate room for it.  */
1881  s->size += 8;
1882  return TRUE;
1883}
1884
1885/* STUB describes an la25 stub that we have decided to implement
1886   with a separate trampoline.  Allocate room for it and redirect
1887   the function symbol to it.  */
1888
1889static bfd_boolean
1890mips_elf_add_la25_trampoline (struct mips_elf_la25_stub *stub,
1891			      struct bfd_link_info *info)
1892{
1893  struct mips_elf_link_hash_table *htab;
1894  asection *s;
1895
1896  htab = mips_elf_hash_table (info);
1897  if (htab == NULL)
1898    return FALSE;
1899
1900  /* Create a trampoline section, if we haven't already.  */
1901  s = htab->strampoline;
1902  if (s == NULL)
1903    {
1904      asection *input_section = stub->h->root.root.u.def.section;
1905      s = htab->add_stub_section (".text", NULL,
1906				  input_section->output_section);
1907      if (s == NULL || !bfd_set_section_alignment (s->owner, s, 4))
1908	return FALSE;
1909      htab->strampoline = s;
1910    }
1911
1912  /* Create a symbol for the stub.  */
1913  mips_elf_create_stub_symbol (info, stub->h, ".pic.", s, s->size, 16);
1914  stub->stub_section = s;
1915  stub->offset = s->size;
1916
1917  /* Allocate room for it.  */
1918  s->size += 16;
1919  return TRUE;
1920}
1921
1922/* H describes a symbol that needs an la25 stub.  Make sure that an
1923   appropriate stub exists and point H at it.  */
1924
1925static bfd_boolean
1926mips_elf_add_la25_stub (struct bfd_link_info *info,
1927			struct mips_elf_link_hash_entry *h)
1928{
1929  struct mips_elf_link_hash_table *htab;
1930  struct mips_elf_la25_stub search, *stub;
1931  bfd_boolean use_trampoline_p;
1932  asection *s;
1933  bfd_vma value;
1934  void **slot;
1935
1936  /* Describe the stub we want.  */
1937  search.stub_section = NULL;
1938  search.offset = 0;
1939  search.h = h;
1940
1941  /* See if we've already created an equivalent stub.  */
1942  htab = mips_elf_hash_table (info);
1943  if (htab == NULL)
1944    return FALSE;
1945
1946  slot = htab_find_slot (htab->la25_stubs, &search, INSERT);
1947  if (slot == NULL)
1948    return FALSE;
1949
1950  stub = (struct mips_elf_la25_stub *) *slot;
1951  if (stub != NULL)
1952    {
1953      /* We can reuse the existing stub.  */
1954      h->la25_stub = stub;
1955      return TRUE;
1956    }
1957
1958  /* Create a permanent copy of ENTRY and add it to the hash table.  */
1959  stub = bfd_malloc (sizeof (search));
1960  if (stub == NULL)
1961    return FALSE;
1962  *stub = search;
1963  *slot = stub;
1964
1965  /* Prefer to use LUI/ADDIU stubs if the function is at the beginning
1966     of the section and if we would need no more than 2 nops.  */
1967  value = mips_elf_get_la25_target (stub, &s);
1968  if (ELF_ST_IS_MICROMIPS (stub->h->root.other))
1969    value &= ~1;
1970  use_trampoline_p = (value != 0 || s->alignment_power > 4);
1971
1972  h->la25_stub = stub;
1973  return (use_trampoline_p
1974	  ? mips_elf_add_la25_trampoline (stub, info)
1975	  : mips_elf_add_la25_intro (stub, info));
1976}
1977
1978/* A mips_elf_link_hash_traverse callback that is called before sizing
1979   sections.  DATA points to a mips_htab_traverse_info structure.  */
1980
1981static bfd_boolean
1982mips_elf_check_symbols (struct mips_elf_link_hash_entry *h, void *data)
1983{
1984  struct mips_htab_traverse_info *hti;
1985
1986  hti = (struct mips_htab_traverse_info *) data;
1987  if (!bfd_link_relocatable (hti->info))
1988    mips_elf_check_mips16_stubs (hti->info, h);
1989
1990  if (mips_elf_local_pic_function_p (h))
1991    {
1992      /* PR 12845: If H is in a section that has been garbage
1993	 collected it will have its output section set to *ABS*.  */
1994      if (bfd_is_abs_section (h->root.root.u.def.section->output_section))
1995	return TRUE;
1996
1997      /* H is a function that might need $25 to be valid on entry.
1998	 If we're creating a non-PIC relocatable object, mark H as
1999	 being PIC.  If we're creating a non-relocatable object with
2000	 non-PIC branches and jumps to H, make sure that H has an la25
2001	 stub.  */
2002      if (bfd_link_relocatable (hti->info))
2003	{
2004	  if (!PIC_OBJECT_P (hti->output_bfd))
2005	    h->root.other = ELF_ST_SET_MIPS_PIC (h->root.other);
2006	}
2007      else if (h->has_nonpic_branches && !mips_elf_add_la25_stub (hti->info, h))
2008	{
2009	  hti->error = TRUE;
2010	  return FALSE;
2011	}
2012    }
2013  return TRUE;
2014}
2015
2016/* R_MIPS16_26 is used for the mips16 jal and jalx instructions.
2017   Most mips16 instructions are 16 bits, but these instructions
2018   are 32 bits.
2019
2020   The format of these instructions is:
2021
2022   +--------------+--------------------------------+
2023   |     JALX     | X|   Imm 20:16  |   Imm 25:21  |
2024   +--------------+--------------------------------+
2025   |                Immediate  15:0                |
2026   +-----------------------------------------------+
2027
2028   JALX is the 5-bit value 00011.  X is 0 for jal, 1 for jalx.
2029   Note that the immediate value in the first word is swapped.
2030
2031   When producing a relocatable object file, R_MIPS16_26 is
2032   handled mostly like R_MIPS_26.  In particular, the addend is
2033   stored as a straight 26-bit value in a 32-bit instruction.
2034   (gas makes life simpler for itself by never adjusting a
2035   R_MIPS16_26 reloc to be against a section, so the addend is
2036   always zero).  However, the 32 bit instruction is stored as 2
2037   16-bit values, rather than a single 32-bit value.  In a
2038   big-endian file, the result is the same; in a little-endian
2039   file, the two 16-bit halves of the 32 bit value are swapped.
2040   This is so that a disassembler can recognize the jal
2041   instruction.
2042
2043   When doing a final link, R_MIPS16_26 is treated as a 32 bit
2044   instruction stored as two 16-bit values.  The addend A is the
2045   contents of the targ26 field.  The calculation is the same as
2046   R_MIPS_26.  When storing the calculated value, reorder the
2047   immediate value as shown above, and don't forget to store the
2048   value as two 16-bit values.
2049
2050   To put it in MIPS ABI terms, the relocation field is T-targ26-16,
2051   defined as
2052
2053   big-endian:
2054   +--------+----------------------+
2055   |        |                      |
2056   |        |    targ26-16         |
2057   |31    26|25                   0|
2058   +--------+----------------------+
2059
2060   little-endian:
2061   +----------+------+-------------+
2062   |          |      |             |
2063   |  sub1    |      |     sub2    |
2064   |0        9|10  15|16         31|
2065   +----------+--------------------+
2066   where targ26-16 is sub1 followed by sub2 (i.e., the addend field A is
2067   ((sub1 << 16) | sub2)).
2068
2069   When producing a relocatable object file, the calculation is
2070   (((A < 2) | ((P + 4) & 0xf0000000) + S) >> 2)
2071   When producing a fully linked file, the calculation is
2072   let R = (((A < 2) | ((P + 4) & 0xf0000000) + S) >> 2)
2073   ((R & 0x1f0000) << 5) | ((R & 0x3e00000) >> 5) | (R & 0xffff)
2074
2075   The table below lists the other MIPS16 instruction relocations.
2076   Each one is calculated in the same way as the non-MIPS16 relocation
2077   given on the right, but using the extended MIPS16 layout of 16-bit
2078   immediate fields:
2079
2080	R_MIPS16_GPREL		R_MIPS_GPREL16
2081	R_MIPS16_GOT16		R_MIPS_GOT16
2082	R_MIPS16_CALL16		R_MIPS_CALL16
2083	R_MIPS16_HI16		R_MIPS_HI16
2084	R_MIPS16_LO16		R_MIPS_LO16
2085
2086   A typical instruction will have a format like this:
2087
2088   +--------------+--------------------------------+
2089   |    EXTEND    |     Imm 10:5    |   Imm 15:11  |
2090   +--------------+--------------------------------+
2091   |    Major     |   rx   |   ry   |   Imm  4:0   |
2092   +--------------+--------------------------------+
2093
2094   EXTEND is the five bit value 11110.  Major is the instruction
2095   opcode.
2096
2097   All we need to do here is shuffle the bits appropriately.
2098   As above, the two 16-bit halves must be swapped on a
2099   little-endian system.
2100
2101   Finally R_MIPS16_PC16_S1 corresponds to R_MIPS_PC16, however the
2102   relocatable field is shifted by 1 rather than 2 and the same bit
2103   shuffling is done as with the relocations above.  */
2104
2105static inline bfd_boolean
2106mips16_reloc_p (int r_type)
2107{
2108  switch (r_type)
2109    {
2110    case R_MIPS16_26:
2111    case R_MIPS16_GPREL:
2112    case R_MIPS16_GOT16:
2113    case R_MIPS16_CALL16:
2114    case R_MIPS16_HI16:
2115    case R_MIPS16_LO16:
2116    case R_MIPS16_TLS_GD:
2117    case R_MIPS16_TLS_LDM:
2118    case R_MIPS16_TLS_DTPREL_HI16:
2119    case R_MIPS16_TLS_DTPREL_LO16:
2120    case R_MIPS16_TLS_GOTTPREL:
2121    case R_MIPS16_TLS_TPREL_HI16:
2122    case R_MIPS16_TLS_TPREL_LO16:
2123    case R_MIPS16_PC16_S1:
2124      return TRUE;
2125
2126    default:
2127      return FALSE;
2128    }
2129}
2130
2131/* Check if a microMIPS reloc.  */
2132
2133static inline bfd_boolean
2134micromips_reloc_p (unsigned int r_type)
2135{
2136  return r_type >= R_MICROMIPS_min && r_type < R_MICROMIPS_max;
2137}
2138
2139/* Similar to MIPS16, the two 16-bit halves in microMIPS must be swapped
2140   on a little-endian system.  This does not apply to R_MICROMIPS_PC7_S1
2141   and R_MICROMIPS_PC10_S1 relocs that apply to 16-bit instructions.  */
2142
2143static inline bfd_boolean
2144micromips_reloc_shuffle_p (unsigned int r_type)
2145{
2146  return (micromips_reloc_p (r_type)
2147	  && r_type != R_MICROMIPS_PC7_S1
2148	  && r_type != R_MICROMIPS_PC10_S1);
2149}
2150
2151static inline bfd_boolean
2152got16_reloc_p (int r_type)
2153{
2154  return (r_type == R_MIPS_GOT16
2155	  || r_type == R_MIPS16_GOT16
2156	  || r_type == R_MICROMIPS_GOT16);
2157}
2158
2159static inline bfd_boolean
2160call16_reloc_p (int r_type)
2161{
2162  return (r_type == R_MIPS_CALL16
2163	  || r_type == R_MIPS16_CALL16
2164	  || r_type == R_MICROMIPS_CALL16);
2165}
2166
2167static inline bfd_boolean
2168got_disp_reloc_p (unsigned int r_type)
2169{
2170  return r_type == R_MIPS_GOT_DISP || r_type == R_MICROMIPS_GOT_DISP;
2171}
2172
2173static inline bfd_boolean
2174got_page_reloc_p (unsigned int r_type)
2175{
2176  return r_type == R_MIPS_GOT_PAGE || r_type == R_MICROMIPS_GOT_PAGE;
2177}
2178
2179static inline bfd_boolean
2180got_lo16_reloc_p (unsigned int r_type)
2181{
2182  return r_type == R_MIPS_GOT_LO16 || r_type == R_MICROMIPS_GOT_LO16;
2183}
2184
2185static inline bfd_boolean
2186call_hi16_reloc_p (unsigned int r_type)
2187{
2188  return r_type == R_MIPS_CALL_HI16 || r_type == R_MICROMIPS_CALL_HI16;
2189}
2190
2191static inline bfd_boolean
2192call_lo16_reloc_p (unsigned int r_type)
2193{
2194  return r_type == R_MIPS_CALL_LO16 || r_type == R_MICROMIPS_CALL_LO16;
2195}
2196
2197static inline bfd_boolean
2198hi16_reloc_p (int r_type)
2199{
2200  return (r_type == R_MIPS_HI16
2201	  || r_type == R_MIPS16_HI16
2202	  || r_type == R_MICROMIPS_HI16
2203	  || r_type == R_MIPS_PCHI16);
2204}
2205
2206static inline bfd_boolean
2207lo16_reloc_p (int r_type)
2208{
2209  return (r_type == R_MIPS_LO16
2210	  || r_type == R_MIPS16_LO16
2211	  || r_type == R_MICROMIPS_LO16
2212	  || r_type == R_MIPS_PCLO16);
2213}
2214
2215static inline bfd_boolean
2216mips16_call_reloc_p (int r_type)
2217{
2218  return r_type == R_MIPS16_26 || r_type == R_MIPS16_CALL16;
2219}
2220
2221static inline bfd_boolean
2222jal_reloc_p (int r_type)
2223{
2224  return (r_type == R_MIPS_26
2225	  || r_type == R_MIPS16_26
2226	  || r_type == R_MICROMIPS_26_S1);
2227}
2228
2229static inline bfd_boolean
2230b_reloc_p (int r_type)
2231{
2232  return (r_type == R_MIPS_PC26_S2
2233	  || r_type == R_MIPS_PC21_S2
2234	  || r_type == R_MIPS_PC16
2235	  || r_type == R_MIPS_GNU_REL16_S2
2236	  || r_type == R_MIPS16_PC16_S1
2237	  || r_type == R_MICROMIPS_PC16_S1
2238	  || r_type == R_MICROMIPS_PC10_S1
2239	  || r_type == R_MICROMIPS_PC7_S1);
2240}
2241
2242static inline bfd_boolean
2243aligned_pcrel_reloc_p (int r_type)
2244{
2245  return (r_type == R_MIPS_PC18_S3
2246	  || r_type == R_MIPS_PC19_S2);
2247}
2248
2249static inline bfd_boolean
2250branch_reloc_p (int r_type)
2251{
2252  return (r_type == R_MIPS_26
2253	  || r_type == R_MIPS_PC26_S2
2254	  || r_type == R_MIPS_PC21_S2
2255	  || r_type == R_MIPS_PC16
2256	  || r_type == R_MIPS_GNU_REL16_S2);
2257}
2258
2259static inline bfd_boolean
2260mips16_branch_reloc_p (int r_type)
2261{
2262  return (r_type == R_MIPS16_26
2263	  || r_type == R_MIPS16_PC16_S1);
2264}
2265
2266static inline bfd_boolean
2267micromips_branch_reloc_p (int r_type)
2268{
2269  return (r_type == R_MICROMIPS_26_S1
2270	  || r_type == R_MICROMIPS_PC16_S1
2271	  || r_type == R_MICROMIPS_PC10_S1
2272	  || r_type == R_MICROMIPS_PC7_S1);
2273}
2274
2275static inline bfd_boolean
2276tls_gd_reloc_p (unsigned int r_type)
2277{
2278  return (r_type == R_MIPS_TLS_GD
2279	  || r_type == R_MIPS16_TLS_GD
2280	  || r_type == R_MICROMIPS_TLS_GD);
2281}
2282
2283static inline bfd_boolean
2284tls_ldm_reloc_p (unsigned int r_type)
2285{
2286  return (r_type == R_MIPS_TLS_LDM
2287	  || r_type == R_MIPS16_TLS_LDM
2288	  || r_type == R_MICROMIPS_TLS_LDM);
2289}
2290
2291static inline bfd_boolean
2292tls_gottprel_reloc_p (unsigned int r_type)
2293{
2294  return (r_type == R_MIPS_TLS_GOTTPREL
2295	  || r_type == R_MIPS16_TLS_GOTTPREL
2296	  || r_type == R_MICROMIPS_TLS_GOTTPREL);
2297}
2298
2299void
2300_bfd_mips_elf_reloc_unshuffle (bfd *abfd, int r_type,
2301			       bfd_boolean jal_shuffle, bfd_byte *data)
2302{
2303  bfd_vma first, second, val;
2304
2305  if (!mips16_reloc_p (r_type) && !micromips_reloc_shuffle_p (r_type))
2306    return;
2307
2308  /* Pick up the first and second halfwords of the instruction.  */
2309  first = bfd_get_16 (abfd, data);
2310  second = bfd_get_16 (abfd, data + 2);
2311  if (micromips_reloc_p (r_type) || (r_type == R_MIPS16_26 && !jal_shuffle))
2312    val = first << 16 | second;
2313  else if (r_type != R_MIPS16_26)
2314    val = (((first & 0xf800) << 16) | ((second & 0xffe0) << 11)
2315	   | ((first & 0x1f) << 11) | (first & 0x7e0) | (second & 0x1f));
2316  else
2317    val = (((first & 0xfc00) << 16) | ((first & 0x3e0) << 11)
2318	   | ((first & 0x1f) << 21) | second);
2319  bfd_put_32 (abfd, val, data);
2320}
2321
2322void
2323_bfd_mips_elf_reloc_shuffle (bfd *abfd, int r_type,
2324			     bfd_boolean jal_shuffle, bfd_byte *data)
2325{
2326  bfd_vma first, second, val;
2327
2328  if (!mips16_reloc_p (r_type) && !micromips_reloc_shuffle_p (r_type))
2329    return;
2330
2331  val = bfd_get_32 (abfd, data);
2332  if (micromips_reloc_p (r_type) || (r_type == R_MIPS16_26 && !jal_shuffle))
2333    {
2334      second = val & 0xffff;
2335      first = val >> 16;
2336    }
2337  else if (r_type != R_MIPS16_26)
2338    {
2339      second = ((val >> 11) & 0xffe0) | (val & 0x1f);
2340      first = ((val >> 16) & 0xf800) | ((val >> 11) & 0x1f) | (val & 0x7e0);
2341    }
2342  else
2343    {
2344      second = val & 0xffff;
2345      first = ((val >> 16) & 0xfc00) | ((val >> 11) & 0x3e0)
2346	       | ((val >> 21) & 0x1f);
2347    }
2348  bfd_put_16 (abfd, second, data + 2);
2349  bfd_put_16 (abfd, first, data);
2350}
2351
2352bfd_reloc_status_type
2353_bfd_mips_elf_gprel16_with_gp (bfd *abfd, asymbol *symbol,
2354			       arelent *reloc_entry, asection *input_section,
2355			       bfd_boolean relocatable, void *data, bfd_vma gp)
2356{
2357  bfd_vma relocation;
2358  bfd_signed_vma val;
2359  bfd_reloc_status_type status;
2360
2361  if (bfd_is_com_section (symbol->section))
2362    relocation = 0;
2363  else
2364    relocation = symbol->value;
2365
2366  relocation += symbol->section->output_section->vma;
2367  relocation += symbol->section->output_offset;
2368
2369  if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2370    return bfd_reloc_outofrange;
2371
2372  /* Set val to the offset into the section or symbol.  */
2373  val = reloc_entry->addend;
2374
2375  _bfd_mips_elf_sign_extend (val, 16);
2376
2377  /* Adjust val for the final section location and GP value.  If we
2378     are producing relocatable output, we don't want to do this for
2379     an external symbol.  */
2380  if (! relocatable
2381      || (symbol->flags & BSF_SECTION_SYM) != 0)
2382    val += relocation - gp;
2383
2384  if (reloc_entry->howto->partial_inplace)
2385    {
2386      status = _bfd_relocate_contents (reloc_entry->howto, abfd, val,
2387				       (bfd_byte *) data
2388				       + reloc_entry->address);
2389      if (status != bfd_reloc_ok)
2390	return status;
2391    }
2392  else
2393    reloc_entry->addend = val;
2394
2395  if (relocatable)
2396    reloc_entry->address += input_section->output_offset;
2397
2398  return bfd_reloc_ok;
2399}
2400
2401/* Used to store a REL high-part relocation such as R_MIPS_HI16 or
2402   R_MIPS_GOT16.  REL is the relocation, INPUT_SECTION is the section
2403   that contains the relocation field and DATA points to the start of
2404   INPUT_SECTION.  */
2405
2406struct mips_hi16
2407{
2408  struct mips_hi16 *next;
2409  bfd_byte *data;
2410  asection *input_section;
2411  arelent rel;
2412};
2413
2414/* FIXME: This should not be a static variable.  */
2415
2416static struct mips_hi16 *mips_hi16_list;
2417
2418/* A howto special_function for REL *HI16 relocations.  We can only
2419   calculate the correct value once we've seen the partnering
2420   *LO16 relocation, so just save the information for later.
2421
2422   The ABI requires that the *LO16 immediately follow the *HI16.
2423   However, as a GNU extension, we permit an arbitrary number of
2424   *HI16s to be associated with a single *LO16.  This significantly
2425   simplies the relocation handling in gcc.  */
2426
2427bfd_reloc_status_type
2428_bfd_mips_elf_hi16_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry,
2429			  asymbol *symbol ATTRIBUTE_UNUSED, void *data,
2430			  asection *input_section, bfd *output_bfd,
2431			  char **error_message ATTRIBUTE_UNUSED)
2432{
2433  struct mips_hi16 *n;
2434
2435  if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2436    return bfd_reloc_outofrange;
2437
2438  n = bfd_malloc (sizeof *n);
2439  if (n == NULL)
2440    return bfd_reloc_outofrange;
2441
2442  n->next = mips_hi16_list;
2443  n->data = data;
2444  n->input_section = input_section;
2445  n->rel = *reloc_entry;
2446  mips_hi16_list = n;
2447
2448  if (output_bfd != NULL)
2449    reloc_entry->address += input_section->output_offset;
2450
2451  return bfd_reloc_ok;
2452}
2453
2454/* A howto special_function for REL R_MIPS*_GOT16 relocations.  This is just
2455   like any other 16-bit relocation when applied to global symbols, but is
2456   treated in the same as R_MIPS_HI16 when applied to local symbols.  */
2457
2458bfd_reloc_status_type
2459_bfd_mips_elf_got16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2460			   void *data, asection *input_section,
2461			   bfd *output_bfd, char **error_message)
2462{
2463  if ((symbol->flags & (BSF_GLOBAL | BSF_WEAK)) != 0
2464      || bfd_is_und_section (bfd_get_section (symbol))
2465      || bfd_is_com_section (bfd_get_section (symbol)))
2466    /* The relocation is against a global symbol.  */
2467    return _bfd_mips_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2468					input_section, output_bfd,
2469					error_message);
2470
2471  return _bfd_mips_elf_hi16_reloc (abfd, reloc_entry, symbol, data,
2472				   input_section, output_bfd, error_message);
2473}
2474
2475/* A howto special_function for REL *LO16 relocations.  The *LO16 itself
2476   is a straightforward 16 bit inplace relocation, but we must deal with
2477   any partnering high-part relocations as well.  */
2478
2479bfd_reloc_status_type
2480_bfd_mips_elf_lo16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2481			  void *data, asection *input_section,
2482			  bfd *output_bfd, char **error_message)
2483{
2484  bfd_vma vallo;
2485  bfd_byte *location = (bfd_byte *) data + reloc_entry->address;
2486
2487  if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2488    return bfd_reloc_outofrange;
2489
2490  _bfd_mips_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, FALSE,
2491				 location);
2492  vallo = bfd_get_32 (abfd, location);
2493  _bfd_mips_elf_reloc_shuffle (abfd, reloc_entry->howto->type, FALSE,
2494			       location);
2495
2496  while (mips_hi16_list != NULL)
2497    {
2498      bfd_reloc_status_type ret;
2499      struct mips_hi16 *hi;
2500
2501      hi = mips_hi16_list;
2502
2503      /* R_MIPS*_GOT16 relocations are something of a special case.  We
2504	 want to install the addend in the same way as for a R_MIPS*_HI16
2505	 relocation (with a rightshift of 16).  However, since GOT16
2506	 relocations can also be used with global symbols, their howto
2507	 has a rightshift of 0.  */
2508      if (hi->rel.howto->type == R_MIPS_GOT16)
2509	hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MIPS_HI16, FALSE);
2510      else if (hi->rel.howto->type == R_MIPS16_GOT16)
2511	hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MIPS16_HI16, FALSE);
2512      else if (hi->rel.howto->type == R_MICROMIPS_GOT16)
2513	hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MICROMIPS_HI16, FALSE);
2514
2515      /* VALLO is a signed 16-bit number.  Bias it by 0x8000 so that any
2516	 carry or borrow will induce a change of +1 or -1 in the high part.  */
2517      hi->rel.addend += (vallo + 0x8000) & 0xffff;
2518
2519      ret = _bfd_mips_elf_generic_reloc (abfd, &hi->rel, symbol, hi->data,
2520					 hi->input_section, output_bfd,
2521					 error_message);
2522      if (ret != bfd_reloc_ok)
2523	return ret;
2524
2525      mips_hi16_list = hi->next;
2526      free (hi);
2527    }
2528
2529  return _bfd_mips_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2530				      input_section, output_bfd,
2531				      error_message);
2532}
2533
2534/* A generic howto special_function.  This calculates and installs the
2535   relocation itself, thus avoiding the oft-discussed problems in
2536   bfd_perform_relocation and bfd_install_relocation.  */
2537
2538bfd_reloc_status_type
2539_bfd_mips_elf_generic_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry,
2540			     asymbol *symbol, void *data ATTRIBUTE_UNUSED,
2541			     asection *input_section, bfd *output_bfd,
2542			     char **error_message ATTRIBUTE_UNUSED)
2543{
2544  bfd_signed_vma val;
2545  bfd_reloc_status_type status;
2546  bfd_boolean relocatable;
2547
2548  relocatable = (output_bfd != NULL);
2549
2550  if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2551    return bfd_reloc_outofrange;
2552
2553  /* Build up the field adjustment in VAL.  */
2554  val = 0;
2555  if (!relocatable || (symbol->flags & BSF_SECTION_SYM) != 0)
2556    {
2557      /* Either we're calculating the final field value or we have a
2558	 relocation against a section symbol.  Add in the section's
2559	 offset or address.  */
2560      val += symbol->section->output_section->vma;
2561      val += symbol->section->output_offset;
2562    }
2563
2564  if (!relocatable)
2565    {
2566      /* We're calculating the final field value.  Add in the symbol's value
2567	 and, if pc-relative, subtract the address of the field itself.  */
2568      val += symbol->value;
2569      if (reloc_entry->howto->pc_relative)
2570	{
2571	  val -= input_section->output_section->vma;
2572	  val -= input_section->output_offset;
2573	  val -= reloc_entry->address;
2574	}
2575    }
2576
2577  /* VAL is now the final adjustment.  If we're keeping this relocation
2578     in the output file, and if the relocation uses a separate addend,
2579     we just need to add VAL to that addend.  Otherwise we need to add
2580     VAL to the relocation field itself.  */
2581  if (relocatable && !reloc_entry->howto->partial_inplace)
2582    reloc_entry->addend += val;
2583  else
2584    {
2585      bfd_byte *location = (bfd_byte *) data + reloc_entry->address;
2586
2587      /* Add in the separate addend, if any.  */
2588      val += reloc_entry->addend;
2589
2590      /* Add VAL to the relocation field.  */
2591      _bfd_mips_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, FALSE,
2592				     location);
2593      status = _bfd_relocate_contents (reloc_entry->howto, abfd, val,
2594				       location);
2595      _bfd_mips_elf_reloc_shuffle (abfd, reloc_entry->howto->type, FALSE,
2596				   location);
2597
2598      if (status != bfd_reloc_ok)
2599	return status;
2600    }
2601
2602  if (relocatable)
2603    reloc_entry->address += input_section->output_offset;
2604
2605  return bfd_reloc_ok;
2606}
2607
2608/* Swap an entry in a .gptab section.  Note that these routines rely
2609   on the equivalence of the two elements of the union.  */
2610
2611static void
2612bfd_mips_elf32_swap_gptab_in (bfd *abfd, const Elf32_External_gptab *ex,
2613			      Elf32_gptab *in)
2614{
2615  in->gt_entry.gt_g_value = H_GET_32 (abfd, ex->gt_entry.gt_g_value);
2616  in->gt_entry.gt_bytes = H_GET_32 (abfd, ex->gt_entry.gt_bytes);
2617}
2618
2619static void
2620bfd_mips_elf32_swap_gptab_out (bfd *abfd, const Elf32_gptab *in,
2621			       Elf32_External_gptab *ex)
2622{
2623  H_PUT_32 (abfd, in->gt_entry.gt_g_value, ex->gt_entry.gt_g_value);
2624  H_PUT_32 (abfd, in->gt_entry.gt_bytes, ex->gt_entry.gt_bytes);
2625}
2626
2627static void
2628bfd_elf32_swap_compact_rel_out (bfd *abfd, const Elf32_compact_rel *in,
2629				Elf32_External_compact_rel *ex)
2630{
2631  H_PUT_32 (abfd, in->id1, ex->id1);
2632  H_PUT_32 (abfd, in->num, ex->num);
2633  H_PUT_32 (abfd, in->id2, ex->id2);
2634  H_PUT_32 (abfd, in->offset, ex->offset);
2635  H_PUT_32 (abfd, in->reserved0, ex->reserved0);
2636  H_PUT_32 (abfd, in->reserved1, ex->reserved1);
2637}
2638
2639static void
2640bfd_elf32_swap_crinfo_out (bfd *abfd, const Elf32_crinfo *in,
2641			   Elf32_External_crinfo *ex)
2642{
2643  unsigned long l;
2644
2645  l = (((in->ctype & CRINFO_CTYPE) << CRINFO_CTYPE_SH)
2646       | ((in->rtype & CRINFO_RTYPE) << CRINFO_RTYPE_SH)
2647       | ((in->dist2to & CRINFO_DIST2TO) << CRINFO_DIST2TO_SH)
2648       | ((in->relvaddr & CRINFO_RELVADDR) << CRINFO_RELVADDR_SH));
2649  H_PUT_32 (abfd, l, ex->info);
2650  H_PUT_32 (abfd, in->konst, ex->konst);
2651  H_PUT_32 (abfd, in->vaddr, ex->vaddr);
2652}
2653
2654/* A .reginfo section holds a single Elf32_RegInfo structure.  These
2655   routines swap this structure in and out.  They are used outside of
2656   BFD, so they are globally visible.  */
2657
2658void
2659bfd_mips_elf32_swap_reginfo_in (bfd *abfd, const Elf32_External_RegInfo *ex,
2660				Elf32_RegInfo *in)
2661{
2662  in->ri_gprmask = H_GET_32 (abfd, ex->ri_gprmask);
2663  in->ri_cprmask[0] = H_GET_32 (abfd, ex->ri_cprmask[0]);
2664  in->ri_cprmask[1] = H_GET_32 (abfd, ex->ri_cprmask[1]);
2665  in->ri_cprmask[2] = H_GET_32 (abfd, ex->ri_cprmask[2]);
2666  in->ri_cprmask[3] = H_GET_32 (abfd, ex->ri_cprmask[3]);
2667  in->ri_gp_value = H_GET_32 (abfd, ex->ri_gp_value);
2668}
2669
2670void
2671bfd_mips_elf32_swap_reginfo_out (bfd *abfd, const Elf32_RegInfo *in,
2672				 Elf32_External_RegInfo *ex)
2673{
2674  H_PUT_32 (abfd, in->ri_gprmask, ex->ri_gprmask);
2675  H_PUT_32 (abfd, in->ri_cprmask[0], ex->ri_cprmask[0]);
2676  H_PUT_32 (abfd, in->ri_cprmask[1], ex->ri_cprmask[1]);
2677  H_PUT_32 (abfd, in->ri_cprmask[2], ex->ri_cprmask[2]);
2678  H_PUT_32 (abfd, in->ri_cprmask[3], ex->ri_cprmask[3]);
2679  H_PUT_32 (abfd, in->ri_gp_value, ex->ri_gp_value);
2680}
2681
2682/* In the 64 bit ABI, the .MIPS.options section holds register
2683   information in an Elf64_Reginfo structure.  These routines swap
2684   them in and out.  They are globally visible because they are used
2685   outside of BFD.  These routines are here so that gas can call them
2686   without worrying about whether the 64 bit ABI has been included.  */
2687
2688void
2689bfd_mips_elf64_swap_reginfo_in (bfd *abfd, const Elf64_External_RegInfo *ex,
2690				Elf64_Internal_RegInfo *in)
2691{
2692  in->ri_gprmask = H_GET_32 (abfd, ex->ri_gprmask);
2693  in->ri_pad = H_GET_32 (abfd, ex->ri_pad);
2694  in->ri_cprmask[0] = H_GET_32 (abfd, ex->ri_cprmask[0]);
2695  in->ri_cprmask[1] = H_GET_32 (abfd, ex->ri_cprmask[1]);
2696  in->ri_cprmask[2] = H_GET_32 (abfd, ex->ri_cprmask[2]);
2697  in->ri_cprmask[3] = H_GET_32 (abfd, ex->ri_cprmask[3]);
2698  in->ri_gp_value = H_GET_64 (abfd, ex->ri_gp_value);
2699}
2700
2701void
2702bfd_mips_elf64_swap_reginfo_out (bfd *abfd, const Elf64_Internal_RegInfo *in,
2703				 Elf64_External_RegInfo *ex)
2704{
2705  H_PUT_32 (abfd, in->ri_gprmask, ex->ri_gprmask);
2706  H_PUT_32 (abfd, in->ri_pad, ex->ri_pad);
2707  H_PUT_32 (abfd, in->ri_cprmask[0], ex->ri_cprmask[0]);
2708  H_PUT_32 (abfd, in->ri_cprmask[1], ex->ri_cprmask[1]);
2709  H_PUT_32 (abfd, in->ri_cprmask[2], ex->ri_cprmask[2]);
2710  H_PUT_32 (abfd, in->ri_cprmask[3], ex->ri_cprmask[3]);
2711  H_PUT_64 (abfd, in->ri_gp_value, ex->ri_gp_value);
2712}
2713
2714/* Swap in an options header.  */
2715
2716void
2717bfd_mips_elf_swap_options_in (bfd *abfd, const Elf_External_Options *ex,
2718			      Elf_Internal_Options *in)
2719{
2720  in->kind = H_GET_8 (abfd, ex->kind);
2721  in->size = H_GET_8 (abfd, ex->size);
2722  in->section = H_GET_16 (abfd, ex->section);
2723  in->info = H_GET_32 (abfd, ex->info);
2724}
2725
2726/* Swap out an options header.  */
2727
2728void
2729bfd_mips_elf_swap_options_out (bfd *abfd, const Elf_Internal_Options *in,
2730			       Elf_External_Options *ex)
2731{
2732  H_PUT_8 (abfd, in->kind, ex->kind);
2733  H_PUT_8 (abfd, in->size, ex->size);
2734  H_PUT_16 (abfd, in->section, ex->section);
2735  H_PUT_32 (abfd, in->info, ex->info);
2736}
2737
2738/* Swap in an abiflags structure.  */
2739
2740void
2741bfd_mips_elf_swap_abiflags_v0_in (bfd *abfd,
2742				  const Elf_External_ABIFlags_v0 *ex,
2743				  Elf_Internal_ABIFlags_v0 *in)
2744{
2745  in->version = H_GET_16 (abfd, ex->version);
2746  in->isa_level = H_GET_8 (abfd, ex->isa_level);
2747  in->isa_rev = H_GET_8 (abfd, ex->isa_rev);
2748  in->gpr_size = H_GET_8 (abfd, ex->gpr_size);
2749  in->cpr1_size = H_GET_8 (abfd, ex->cpr1_size);
2750  in->cpr2_size = H_GET_8 (abfd, ex->cpr2_size);
2751  in->fp_abi = H_GET_8 (abfd, ex->fp_abi);
2752  in->isa_ext = H_GET_32 (abfd, ex->isa_ext);
2753  in->ases = H_GET_32 (abfd, ex->ases);
2754  in->flags1 = H_GET_32 (abfd, ex->flags1);
2755  in->flags2 = H_GET_32 (abfd, ex->flags2);
2756}
2757
2758/* Swap out an abiflags structure.  */
2759
2760void
2761bfd_mips_elf_swap_abiflags_v0_out (bfd *abfd,
2762				   const Elf_Internal_ABIFlags_v0 *in,
2763				   Elf_External_ABIFlags_v0 *ex)
2764{
2765  H_PUT_16 (abfd, in->version, ex->version);
2766  H_PUT_8 (abfd, in->isa_level, ex->isa_level);
2767  H_PUT_8 (abfd, in->isa_rev, ex->isa_rev);
2768  H_PUT_8 (abfd, in->gpr_size, ex->gpr_size);
2769  H_PUT_8 (abfd, in->cpr1_size, ex->cpr1_size);
2770  H_PUT_8 (abfd, in->cpr2_size, ex->cpr2_size);
2771  H_PUT_8 (abfd, in->fp_abi, ex->fp_abi);
2772  H_PUT_32 (abfd, in->isa_ext, ex->isa_ext);
2773  H_PUT_32 (abfd, in->ases, ex->ases);
2774  H_PUT_32 (abfd, in->flags1, ex->flags1);
2775  H_PUT_32 (abfd, in->flags2, ex->flags2);
2776}
2777
2778/* This function is called via qsort() to sort the dynamic relocation
2779   entries by increasing r_symndx value.  */
2780
2781static int
2782sort_dynamic_relocs (const void *arg1, const void *arg2)
2783{
2784  Elf_Internal_Rela int_reloc1;
2785  Elf_Internal_Rela int_reloc2;
2786  int diff;
2787
2788  bfd_elf32_swap_reloc_in (reldyn_sorting_bfd, arg1, &int_reloc1);
2789  bfd_elf32_swap_reloc_in (reldyn_sorting_bfd, arg2, &int_reloc2);
2790
2791  diff = ELF32_R_SYM (int_reloc1.r_info) - ELF32_R_SYM (int_reloc2.r_info);
2792  if (diff != 0)
2793    return diff;
2794
2795  if (int_reloc1.r_offset < int_reloc2.r_offset)
2796    return -1;
2797  if (int_reloc1.r_offset > int_reloc2.r_offset)
2798    return 1;
2799  return 0;
2800}
2801
2802/* Like sort_dynamic_relocs, but used for elf64 relocations.  */
2803
2804static int
2805sort_dynamic_relocs_64 (const void *arg1 ATTRIBUTE_UNUSED,
2806			const void *arg2 ATTRIBUTE_UNUSED)
2807{
2808#ifdef BFD64
2809  Elf_Internal_Rela int_reloc1[3];
2810  Elf_Internal_Rela int_reloc2[3];
2811
2812  (*get_elf_backend_data (reldyn_sorting_bfd)->s->swap_reloc_in)
2813    (reldyn_sorting_bfd, arg1, int_reloc1);
2814  (*get_elf_backend_data (reldyn_sorting_bfd)->s->swap_reloc_in)
2815    (reldyn_sorting_bfd, arg2, int_reloc2);
2816
2817  if (ELF64_R_SYM (int_reloc1[0].r_info) < ELF64_R_SYM (int_reloc2[0].r_info))
2818    return -1;
2819  if (ELF64_R_SYM (int_reloc1[0].r_info) > ELF64_R_SYM (int_reloc2[0].r_info))
2820    return 1;
2821
2822  if (int_reloc1[0].r_offset < int_reloc2[0].r_offset)
2823    return -1;
2824  if (int_reloc1[0].r_offset > int_reloc2[0].r_offset)
2825    return 1;
2826  return 0;
2827#else
2828  abort ();
2829#endif
2830}
2831
2832
2833/* This routine is used to write out ECOFF debugging external symbol
2834   information.  It is called via mips_elf_link_hash_traverse.  The
2835   ECOFF external symbol information must match the ELF external
2836   symbol information.  Unfortunately, at this point we don't know
2837   whether a symbol is required by reloc information, so the two
2838   tables may wind up being different.  We must sort out the external
2839   symbol information before we can set the final size of the .mdebug
2840   section, and we must set the size of the .mdebug section before we
2841   can relocate any sections, and we can't know which symbols are
2842   required by relocation until we relocate the sections.
2843   Fortunately, it is relatively unlikely that any symbol will be
2844   stripped but required by a reloc.  In particular, it can not happen
2845   when generating a final executable.  */
2846
2847static bfd_boolean
2848mips_elf_output_extsym (struct mips_elf_link_hash_entry *h, void *data)
2849{
2850  struct extsym_info *einfo = data;
2851  bfd_boolean strip;
2852  asection *sec, *output_section;
2853
2854  if (h->root.indx == -2)
2855    strip = FALSE;
2856  else if ((h->root.def_dynamic
2857	    || h->root.ref_dynamic
2858	    || h->root.type == bfd_link_hash_new)
2859	   && !h->root.def_regular
2860	   && !h->root.ref_regular)
2861    strip = TRUE;
2862  else if (einfo->info->strip == strip_all
2863	   || (einfo->info->strip == strip_some
2864	       && bfd_hash_lookup (einfo->info->keep_hash,
2865				   h->root.root.root.string,
2866				   FALSE, FALSE) == NULL))
2867    strip = TRUE;
2868  else
2869    strip = FALSE;
2870
2871  if (strip)
2872    return TRUE;
2873
2874  if (h->esym.ifd == -2)
2875    {
2876      h->esym.jmptbl = 0;
2877      h->esym.cobol_main = 0;
2878      h->esym.weakext = 0;
2879      h->esym.reserved = 0;
2880      h->esym.ifd = ifdNil;
2881      h->esym.asym.value = 0;
2882      h->esym.asym.st = stGlobal;
2883
2884      if (h->root.root.type == bfd_link_hash_undefined
2885	  || h->root.root.type == bfd_link_hash_undefweak)
2886	{
2887	  const char *name;
2888
2889	  /* Use undefined class.  Also, set class and type for some
2890             special symbols.  */
2891	  name = h->root.root.root.string;
2892	  if (strcmp (name, mips_elf_dynsym_rtproc_names[0]) == 0
2893	      || strcmp (name, mips_elf_dynsym_rtproc_names[1]) == 0)
2894	    {
2895	      h->esym.asym.sc = scData;
2896	      h->esym.asym.st = stLabel;
2897	      h->esym.asym.value = 0;
2898	    }
2899	  else if (strcmp (name, mips_elf_dynsym_rtproc_names[2]) == 0)
2900	    {
2901	      h->esym.asym.sc = scAbs;
2902	      h->esym.asym.st = stLabel;
2903	      h->esym.asym.value =
2904		mips_elf_hash_table (einfo->info)->procedure_count;
2905	    }
2906	  else if (strcmp (name, "_gp_disp") == 0 && ! NEWABI_P (einfo->abfd))
2907	    {
2908	      h->esym.asym.sc = scAbs;
2909	      h->esym.asym.st = stLabel;
2910	      h->esym.asym.value = elf_gp (einfo->abfd);
2911	    }
2912	  else
2913	    h->esym.asym.sc = scUndefined;
2914	}
2915      else if (h->root.root.type != bfd_link_hash_defined
2916	  && h->root.root.type != bfd_link_hash_defweak)
2917	h->esym.asym.sc = scAbs;
2918      else
2919	{
2920	  const char *name;
2921
2922	  sec = h->root.root.u.def.section;
2923	  output_section = sec->output_section;
2924
2925	  /* When making a shared library and symbol h is the one from
2926	     the another shared library, OUTPUT_SECTION may be null.  */
2927	  if (output_section == NULL)
2928	    h->esym.asym.sc = scUndefined;
2929	  else
2930	    {
2931	      name = bfd_section_name (output_section->owner, output_section);
2932
2933	      if (strcmp (name, ".text") == 0)
2934		h->esym.asym.sc = scText;
2935	      else if (strcmp (name, ".data") == 0)
2936		h->esym.asym.sc = scData;
2937	      else if (strcmp (name, ".sdata") == 0)
2938		h->esym.asym.sc = scSData;
2939	      else if (strcmp (name, ".rodata") == 0
2940		       || strcmp (name, ".rdata") == 0)
2941		h->esym.asym.sc = scRData;
2942	      else if (strcmp (name, ".bss") == 0)
2943		h->esym.asym.sc = scBss;
2944	      else if (strcmp (name, ".sbss") == 0)
2945		h->esym.asym.sc = scSBss;
2946	      else if (strcmp (name, ".init") == 0)
2947		h->esym.asym.sc = scInit;
2948	      else if (strcmp (name, ".fini") == 0)
2949		h->esym.asym.sc = scFini;
2950	      else
2951		h->esym.asym.sc = scAbs;
2952	    }
2953	}
2954
2955      h->esym.asym.reserved = 0;
2956      h->esym.asym.index = indexNil;
2957    }
2958
2959  if (h->root.root.type == bfd_link_hash_common)
2960    h->esym.asym.value = h->root.root.u.c.size;
2961  else if (h->root.root.type == bfd_link_hash_defined
2962	   || h->root.root.type == bfd_link_hash_defweak)
2963    {
2964      if (h->esym.asym.sc == scCommon)
2965	h->esym.asym.sc = scBss;
2966      else if (h->esym.asym.sc == scSCommon)
2967	h->esym.asym.sc = scSBss;
2968
2969      sec = h->root.root.u.def.section;
2970      output_section = sec->output_section;
2971      if (output_section != NULL)
2972	h->esym.asym.value = (h->root.root.u.def.value
2973			      + sec->output_offset
2974			      + output_section->vma);
2975      else
2976	h->esym.asym.value = 0;
2977    }
2978  else
2979    {
2980      struct mips_elf_link_hash_entry *hd = h;
2981
2982      while (hd->root.root.type == bfd_link_hash_indirect)
2983	hd = (struct mips_elf_link_hash_entry *)h->root.root.u.i.link;
2984
2985      if (hd->needs_lazy_stub)
2986	{
2987	  BFD_ASSERT (hd->root.plt.plist != NULL);
2988	  BFD_ASSERT (hd->root.plt.plist->stub_offset != MINUS_ONE);
2989	  /* Set type and value for a symbol with a function stub.  */
2990	  h->esym.asym.st = stProc;
2991	  sec = hd->root.root.u.def.section;
2992	  if (sec == NULL)
2993	    h->esym.asym.value = 0;
2994	  else
2995	    {
2996	      output_section = sec->output_section;
2997	      if (output_section != NULL)
2998		h->esym.asym.value = (hd->root.plt.plist->stub_offset
2999				      + sec->output_offset
3000				      + output_section->vma);
3001	      else
3002		h->esym.asym.value = 0;
3003	    }
3004	}
3005    }
3006
3007  if (! bfd_ecoff_debug_one_external (einfo->abfd, einfo->debug, einfo->swap,
3008				      h->root.root.root.string,
3009				      &h->esym))
3010    {
3011      einfo->failed = TRUE;
3012      return FALSE;
3013    }
3014
3015  return TRUE;
3016}
3017
3018/* A comparison routine used to sort .gptab entries.  */
3019
3020static int
3021gptab_compare (const void *p1, const void *p2)
3022{
3023  const Elf32_gptab *a1 = p1;
3024  const Elf32_gptab *a2 = p2;
3025
3026  return a1->gt_entry.gt_g_value - a2->gt_entry.gt_g_value;
3027}
3028
3029/* Functions to manage the got entry hash table.  */
3030
3031/* Use all 64 bits of a bfd_vma for the computation of a 32-bit
3032   hash number.  */
3033
3034static INLINE hashval_t
3035mips_elf_hash_bfd_vma (bfd_vma addr)
3036{
3037#ifdef BFD64
3038  return addr + (addr >> 32);
3039#else
3040  return addr;
3041#endif
3042}
3043
3044static hashval_t
3045mips_elf_got_entry_hash (const void *entry_)
3046{
3047  const struct mips_got_entry *entry = (struct mips_got_entry *)entry_;
3048
3049  return (entry->symndx
3050	  + ((entry->tls_type == GOT_TLS_LDM) << 18)
3051	  + (entry->tls_type == GOT_TLS_LDM ? 0
3052	     : !entry->abfd ? mips_elf_hash_bfd_vma (entry->d.address)
3053	     : entry->symndx >= 0 ? (entry->abfd->id
3054				     + mips_elf_hash_bfd_vma (entry->d.addend))
3055	     : entry->d.h->root.root.root.hash));
3056}
3057
3058static int
3059mips_elf_got_entry_eq (const void *entry1, const void *entry2)
3060{
3061  const struct mips_got_entry *e1 = (struct mips_got_entry *)entry1;
3062  const struct mips_got_entry *e2 = (struct mips_got_entry *)entry2;
3063
3064  return (e1->symndx == e2->symndx
3065	  && e1->tls_type == e2->tls_type
3066	  && (e1->tls_type == GOT_TLS_LDM ? TRUE
3067	      : !e1->abfd ? !e2->abfd && e1->d.address == e2->d.address
3068	      : e1->symndx >= 0 ? (e1->abfd == e2->abfd
3069				   && e1->d.addend == e2->d.addend)
3070	      : e2->abfd && e1->d.h == e2->d.h));
3071}
3072
3073static hashval_t
3074mips_got_page_ref_hash (const void *ref_)
3075{
3076  const struct mips_got_page_ref *ref;
3077
3078  ref = (const struct mips_got_page_ref *) ref_;
3079  return ((ref->symndx >= 0
3080	   ? (hashval_t) (ref->u.abfd->id + ref->symndx)
3081	   : ref->u.h->root.root.root.hash)
3082	  + mips_elf_hash_bfd_vma (ref->addend));
3083}
3084
3085static int
3086mips_got_page_ref_eq (const void *ref1_, const void *ref2_)
3087{
3088  const struct mips_got_page_ref *ref1, *ref2;
3089
3090  ref1 = (const struct mips_got_page_ref *) ref1_;
3091  ref2 = (const struct mips_got_page_ref *) ref2_;
3092  return (ref1->symndx == ref2->symndx
3093	  && (ref1->symndx < 0
3094	      ? ref1->u.h == ref2->u.h
3095	      : ref1->u.abfd == ref2->u.abfd)
3096	  && ref1->addend == ref2->addend);
3097}
3098
3099static hashval_t
3100mips_got_page_entry_hash (const void *entry_)
3101{
3102  const struct mips_got_page_entry *entry;
3103
3104  entry = (const struct mips_got_page_entry *) entry_;
3105  return entry->sec->id;
3106}
3107
3108static int
3109mips_got_page_entry_eq (const void *entry1_, const void *entry2_)
3110{
3111  const struct mips_got_page_entry *entry1, *entry2;
3112
3113  entry1 = (const struct mips_got_page_entry *) entry1_;
3114  entry2 = (const struct mips_got_page_entry *) entry2_;
3115  return entry1->sec == entry2->sec;
3116}
3117
3118/* Create and return a new mips_got_info structure.  */
3119
3120static struct mips_got_info *
3121mips_elf_create_got_info (bfd *abfd)
3122{
3123  struct mips_got_info *g;
3124
3125  g = bfd_zalloc (abfd, sizeof (struct mips_got_info));
3126  if (g == NULL)
3127    return NULL;
3128
3129  g->got_entries = htab_try_create (1, mips_elf_got_entry_hash,
3130				    mips_elf_got_entry_eq, NULL);
3131  if (g->got_entries == NULL)
3132    return NULL;
3133
3134  g->got_page_refs = htab_try_create (1, mips_got_page_ref_hash,
3135				      mips_got_page_ref_eq, NULL);
3136  if (g->got_page_refs == NULL)
3137    return NULL;
3138
3139  return g;
3140}
3141
3142/* Return the GOT info for input bfd ABFD, trying to create a new one if
3143   CREATE_P and if ABFD doesn't already have a GOT.  */
3144
3145static struct mips_got_info *
3146mips_elf_bfd_got (bfd *abfd, bfd_boolean create_p)
3147{
3148  struct mips_elf_obj_tdata *tdata;
3149
3150  if (!is_mips_elf (abfd))
3151    return NULL;
3152
3153  tdata = mips_elf_tdata (abfd);
3154  if (!tdata->got && create_p)
3155    tdata->got = mips_elf_create_got_info (abfd);
3156  return tdata->got;
3157}
3158
3159/* Record that ABFD should use output GOT G.  */
3160
3161static void
3162mips_elf_replace_bfd_got (bfd *abfd, struct mips_got_info *g)
3163{
3164  struct mips_elf_obj_tdata *tdata;
3165
3166  BFD_ASSERT (is_mips_elf (abfd));
3167  tdata = mips_elf_tdata (abfd);
3168  if (tdata->got)
3169    {
3170      /* The GOT structure itself and the hash table entries are
3171	 allocated to a bfd, but the hash tables aren't.  */
3172      htab_delete (tdata->got->got_entries);
3173      htab_delete (tdata->got->got_page_refs);
3174      if (tdata->got->got_page_entries)
3175	htab_delete (tdata->got->got_page_entries);
3176    }
3177  tdata->got = g;
3178}
3179
3180/* Return the dynamic relocation section.  If it doesn't exist, try to
3181   create a new it if CREATE_P, otherwise return NULL.  Also return NULL
3182   if creation fails.  */
3183
3184static asection *
3185mips_elf_rel_dyn_section (struct bfd_link_info *info, bfd_boolean create_p)
3186{
3187  const char *dname;
3188  asection *sreloc;
3189  bfd *dynobj;
3190
3191  dname = MIPS_ELF_REL_DYN_NAME (info);
3192  dynobj = elf_hash_table (info)->dynobj;
3193  sreloc = bfd_get_linker_section (dynobj, dname);
3194  if (sreloc == NULL && create_p)
3195    {
3196      sreloc = bfd_make_section_anyway_with_flags (dynobj, dname,
3197						   (SEC_ALLOC
3198						    | SEC_LOAD
3199						    | SEC_HAS_CONTENTS
3200						    | SEC_IN_MEMORY
3201						    | SEC_LINKER_CREATED
3202						    | SEC_READONLY));
3203      if (sreloc == NULL
3204	  || ! bfd_set_section_alignment (dynobj, sreloc,
3205					  MIPS_ELF_LOG_FILE_ALIGN (dynobj)))
3206	return NULL;
3207    }
3208  return sreloc;
3209}
3210
3211/* Return the GOT_TLS_* type required by relocation type R_TYPE.  */
3212
3213static int
3214mips_elf_reloc_tls_type (unsigned int r_type)
3215{
3216  if (tls_gd_reloc_p (r_type))
3217    return GOT_TLS_GD;
3218
3219  if (tls_ldm_reloc_p (r_type))
3220    return GOT_TLS_LDM;
3221
3222  if (tls_gottprel_reloc_p (r_type))
3223    return GOT_TLS_IE;
3224
3225  return GOT_TLS_NONE;
3226}
3227
3228/* Return the number of GOT slots needed for GOT TLS type TYPE.  */
3229
3230static int
3231mips_tls_got_entries (unsigned int type)
3232{
3233  switch (type)
3234    {
3235    case GOT_TLS_GD:
3236    case GOT_TLS_LDM:
3237      return 2;
3238
3239    case GOT_TLS_IE:
3240      return 1;
3241
3242    case GOT_TLS_NONE:
3243      return 0;
3244    }
3245  abort ();
3246}
3247
3248/* Count the number of relocations needed for a TLS GOT entry, with
3249   access types from TLS_TYPE, and symbol H (or a local symbol if H
3250   is NULL).  */
3251
3252static int
3253mips_tls_got_relocs (struct bfd_link_info *info, unsigned char tls_type,
3254		     struct elf_link_hash_entry *h)
3255{
3256  int indx = 0;
3257  bfd_boolean need_relocs = FALSE;
3258  bfd_boolean dyn = elf_hash_table (info)->dynamic_sections_created;
3259
3260  if (h && WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info), h)
3261      && (!bfd_link_pic (info) || !SYMBOL_REFERENCES_LOCAL (info, h)))
3262    indx = h->dynindx;
3263
3264  if ((bfd_link_pic (info) || indx != 0)
3265      && (h == NULL
3266	  || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
3267	  || h->root.type != bfd_link_hash_undefweak))
3268    need_relocs = TRUE;
3269
3270  if (!need_relocs)
3271    return 0;
3272
3273  switch (tls_type)
3274    {
3275    case GOT_TLS_GD:
3276      return indx != 0 ? 2 : 1;
3277
3278    case GOT_TLS_IE:
3279      return 1;
3280
3281    case GOT_TLS_LDM:
3282      return bfd_link_pic (info) ? 1 : 0;
3283
3284    default:
3285      return 0;
3286    }
3287}
3288
3289/* Add the number of GOT entries and TLS relocations required by ENTRY
3290   to G.  */
3291
3292static void
3293mips_elf_count_got_entry (struct bfd_link_info *info,
3294			  struct mips_got_info *g,
3295			  struct mips_got_entry *entry)
3296{
3297  if (entry->tls_type)
3298    {
3299      g->tls_gotno += mips_tls_got_entries (entry->tls_type);
3300      g->relocs += mips_tls_got_relocs (info, entry->tls_type,
3301					entry->symndx < 0
3302					? &entry->d.h->root : NULL);
3303    }
3304  else if (entry->symndx >= 0 || entry->d.h->global_got_area == GGA_NONE)
3305    g->local_gotno += 1;
3306  else
3307    g->global_gotno += 1;
3308}
3309
3310/* Output a simple dynamic relocation into SRELOC.  */
3311
3312static void
3313mips_elf_output_dynamic_relocation (bfd *output_bfd,
3314				    asection *sreloc,
3315				    unsigned long reloc_index,
3316				    unsigned long indx,
3317				    int r_type,
3318				    bfd_vma offset)
3319{
3320  Elf_Internal_Rela rel[3];
3321
3322  memset (rel, 0, sizeof (rel));
3323
3324  rel[0].r_info = ELF_R_INFO (output_bfd, indx, r_type);
3325  rel[0].r_offset = rel[1].r_offset = rel[2].r_offset = offset;
3326
3327  if (ABI_64_P (output_bfd))
3328    {
3329      (*get_elf_backend_data (output_bfd)->s->swap_reloc_out)
3330	(output_bfd, &rel[0],
3331	 (sreloc->contents
3332	  + reloc_index * sizeof (Elf64_Mips_External_Rel)));
3333    }
3334  else
3335    bfd_elf32_swap_reloc_out
3336      (output_bfd, &rel[0],
3337       (sreloc->contents
3338	+ reloc_index * sizeof (Elf32_External_Rel)));
3339}
3340
3341/* Initialize a set of TLS GOT entries for one symbol.  */
3342
3343static void
3344mips_elf_initialize_tls_slots (bfd *abfd, struct bfd_link_info *info,
3345			       struct mips_got_entry *entry,
3346			       struct mips_elf_link_hash_entry *h,
3347			       bfd_vma value)
3348{
3349  struct mips_elf_link_hash_table *htab;
3350  int indx;
3351  asection *sreloc, *sgot;
3352  bfd_vma got_offset, got_offset2;
3353  bfd_boolean need_relocs = FALSE;
3354
3355  htab = mips_elf_hash_table (info);
3356  if (htab == NULL)
3357    return;
3358
3359  sgot = htab->root.sgot;
3360
3361  indx = 0;
3362  if (h != NULL)
3363    {
3364      bfd_boolean dyn = elf_hash_table (info)->dynamic_sections_created;
3365
3366      if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info),
3367					   &h->root)
3368	  && (!bfd_link_pic (info)
3369	      || !SYMBOL_REFERENCES_LOCAL (info, &h->root)))
3370	indx = h->root.dynindx;
3371    }
3372
3373  if (entry->tls_initialized)
3374    return;
3375
3376  if ((bfd_link_pic (info) || indx != 0)
3377      && (h == NULL
3378	  || ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT
3379	  || h->root.type != bfd_link_hash_undefweak))
3380    need_relocs = TRUE;
3381
3382  /* MINUS_ONE means the symbol is not defined in this object.  It may not
3383     be defined at all; assume that the value doesn't matter in that
3384     case.  Otherwise complain if we would use the value.  */
3385  BFD_ASSERT (value != MINUS_ONE || (indx != 0 && need_relocs)
3386	      || h->root.root.type == bfd_link_hash_undefweak);
3387
3388  /* Emit necessary relocations.  */
3389  sreloc = mips_elf_rel_dyn_section (info, FALSE);
3390  got_offset = entry->gotidx;
3391
3392  switch (entry->tls_type)
3393    {
3394    case GOT_TLS_GD:
3395      /* General Dynamic.  */
3396      got_offset2 = got_offset + MIPS_ELF_GOT_SIZE (abfd);
3397
3398      if (need_relocs)
3399	{
3400	  mips_elf_output_dynamic_relocation
3401	    (abfd, sreloc, sreloc->reloc_count++, indx,
3402	     ABI_64_P (abfd) ? R_MIPS_TLS_DTPMOD64 : R_MIPS_TLS_DTPMOD32,
3403	     sgot->output_offset + sgot->output_section->vma + got_offset);
3404
3405	  if (indx)
3406	    mips_elf_output_dynamic_relocation
3407	      (abfd, sreloc, sreloc->reloc_count++, indx,
3408	       ABI_64_P (abfd) ? R_MIPS_TLS_DTPREL64 : R_MIPS_TLS_DTPREL32,
3409	       sgot->output_offset + sgot->output_section->vma + got_offset2);
3410	  else
3411	    MIPS_ELF_PUT_WORD (abfd, value - dtprel_base (info),
3412			       sgot->contents + got_offset2);
3413	}
3414      else
3415	{
3416	  MIPS_ELF_PUT_WORD (abfd, 1,
3417			     sgot->contents + got_offset);
3418	  MIPS_ELF_PUT_WORD (abfd, value - dtprel_base (info),
3419			     sgot->contents + got_offset2);
3420	}
3421      break;
3422
3423    case GOT_TLS_IE:
3424      /* Initial Exec model.  */
3425      if (need_relocs)
3426	{
3427	  if (indx == 0)
3428	    MIPS_ELF_PUT_WORD (abfd, value - elf_hash_table (info)->tls_sec->vma,
3429			       sgot->contents + got_offset);
3430	  else
3431	    MIPS_ELF_PUT_WORD (abfd, 0,
3432			       sgot->contents + got_offset);
3433
3434	  mips_elf_output_dynamic_relocation
3435	    (abfd, sreloc, sreloc->reloc_count++, indx,
3436	     ABI_64_P (abfd) ? R_MIPS_TLS_TPREL64 : R_MIPS_TLS_TPREL32,
3437	     sgot->output_offset + sgot->output_section->vma + got_offset);
3438	}
3439      else
3440	MIPS_ELF_PUT_WORD (abfd, value - tprel_base (info),
3441			   sgot->contents + got_offset);
3442      break;
3443
3444    case GOT_TLS_LDM:
3445      /* The initial offset is zero, and the LD offsets will include the
3446	 bias by DTP_OFFSET.  */
3447      MIPS_ELF_PUT_WORD (abfd, 0,
3448			 sgot->contents + got_offset
3449			 + MIPS_ELF_GOT_SIZE (abfd));
3450
3451      if (!bfd_link_pic (info))
3452	MIPS_ELF_PUT_WORD (abfd, 1,
3453			   sgot->contents + got_offset);
3454      else
3455	mips_elf_output_dynamic_relocation
3456	  (abfd, sreloc, sreloc->reloc_count++, indx,
3457	   ABI_64_P (abfd) ? R_MIPS_TLS_DTPMOD64 : R_MIPS_TLS_DTPMOD32,
3458	   sgot->output_offset + sgot->output_section->vma + got_offset);
3459      break;
3460
3461    default:
3462      abort ();
3463    }
3464
3465  entry->tls_initialized = TRUE;
3466}
3467
3468/* Return the offset from _GLOBAL_OFFSET_TABLE_ of the .got.plt entry
3469   for global symbol H.  .got.plt comes before the GOT, so the offset
3470   will be negative.  */
3471
3472static bfd_vma
3473mips_elf_gotplt_index (struct bfd_link_info *info,
3474		       struct elf_link_hash_entry *h)
3475{
3476  bfd_vma got_address, got_value;
3477  struct mips_elf_link_hash_table *htab;
3478
3479  htab = mips_elf_hash_table (info);
3480  BFD_ASSERT (htab != NULL);
3481
3482  BFD_ASSERT (h->plt.plist != NULL);
3483  BFD_ASSERT (h->plt.plist->gotplt_index != MINUS_ONE);
3484
3485  /* Calculate the address of the associated .got.plt entry.  */
3486  got_address = (htab->root.sgotplt->output_section->vma
3487		 + htab->root.sgotplt->output_offset
3488		 + (h->plt.plist->gotplt_index
3489		    * MIPS_ELF_GOT_SIZE (info->output_bfd)));
3490
3491  /* Calculate the value of _GLOBAL_OFFSET_TABLE_.  */
3492  got_value = (htab->root.hgot->root.u.def.section->output_section->vma
3493	       + htab->root.hgot->root.u.def.section->output_offset
3494	       + htab->root.hgot->root.u.def.value);
3495
3496  return got_address - got_value;
3497}
3498
3499/* Return the GOT offset for address VALUE.   If there is not yet a GOT
3500   entry for this value, create one.  If R_SYMNDX refers to a TLS symbol,
3501   create a TLS GOT entry instead.  Return -1 if no satisfactory GOT
3502   offset can be found.  */
3503
3504static bfd_vma
3505mips_elf_local_got_index (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
3506			  bfd_vma value, unsigned long r_symndx,
3507			  struct mips_elf_link_hash_entry *h, int r_type)
3508{
3509  struct mips_elf_link_hash_table *htab;
3510  struct mips_got_entry *entry;
3511
3512  htab = mips_elf_hash_table (info);
3513  BFD_ASSERT (htab != NULL);
3514
3515  entry = mips_elf_create_local_got_entry (abfd, info, ibfd, value,
3516					   r_symndx, h, r_type);
3517  if (!entry)
3518    return MINUS_ONE;
3519
3520  if (entry->tls_type)
3521    mips_elf_initialize_tls_slots (abfd, info, entry, h, value);
3522  return entry->gotidx;
3523}
3524
3525/* Return the GOT index of global symbol H in the primary GOT.  */
3526
3527static bfd_vma
3528mips_elf_primary_global_got_index (bfd *obfd, struct bfd_link_info *info,
3529				   struct elf_link_hash_entry *h)
3530{
3531  struct mips_elf_link_hash_table *htab;
3532  long global_got_dynindx;
3533  struct mips_got_info *g;
3534  bfd_vma got_index;
3535
3536  htab = mips_elf_hash_table (info);
3537  BFD_ASSERT (htab != NULL);
3538
3539  global_got_dynindx = 0;
3540  if (htab->global_gotsym != NULL)
3541    global_got_dynindx = htab->global_gotsym->dynindx;
3542
3543  /* Once we determine the global GOT entry with the lowest dynamic
3544     symbol table index, we must put all dynamic symbols with greater
3545     indices into the primary GOT.  That makes it easy to calculate the
3546     GOT offset.  */
3547  BFD_ASSERT (h->dynindx >= global_got_dynindx);
3548  g = mips_elf_bfd_got (obfd, FALSE);
3549  got_index = ((h->dynindx - global_got_dynindx + g->local_gotno)
3550	       * MIPS_ELF_GOT_SIZE (obfd));
3551  BFD_ASSERT (got_index < htab->root.sgot->size);
3552
3553  return got_index;
3554}
3555
3556/* Return the GOT index for the global symbol indicated by H, which is
3557   referenced by a relocation of type R_TYPE in IBFD.  */
3558
3559static bfd_vma
3560mips_elf_global_got_index (bfd *obfd, struct bfd_link_info *info, bfd *ibfd,
3561			   struct elf_link_hash_entry *h, int r_type)
3562{
3563  struct mips_elf_link_hash_table *htab;
3564  struct mips_got_info *g;
3565  struct mips_got_entry lookup, *entry;
3566  bfd_vma gotidx;
3567
3568  htab = mips_elf_hash_table (info);
3569  BFD_ASSERT (htab != NULL);
3570
3571  g = mips_elf_bfd_got (ibfd, FALSE);
3572  BFD_ASSERT (g);
3573
3574  lookup.tls_type = mips_elf_reloc_tls_type (r_type);
3575  if (!lookup.tls_type && g == mips_elf_bfd_got (obfd, FALSE))
3576    return mips_elf_primary_global_got_index (obfd, info, h);
3577
3578  lookup.abfd = ibfd;
3579  lookup.symndx = -1;
3580  lookup.d.h = (struct mips_elf_link_hash_entry *) h;
3581  entry = htab_find (g->got_entries, &lookup);
3582  BFD_ASSERT (entry);
3583
3584  gotidx = entry->gotidx;
3585  BFD_ASSERT (gotidx > 0 && gotidx < htab->root.sgot->size);
3586
3587  if (lookup.tls_type)
3588    {
3589      bfd_vma value = MINUS_ONE;
3590
3591      if ((h->root.type == bfd_link_hash_defined
3592	   || h->root.type == bfd_link_hash_defweak)
3593	  && h->root.u.def.section->output_section)
3594	value = (h->root.u.def.value
3595		 + h->root.u.def.section->output_offset
3596		 + h->root.u.def.section->output_section->vma);
3597
3598      mips_elf_initialize_tls_slots (obfd, info, entry, lookup.d.h, value);
3599    }
3600  return gotidx;
3601}
3602
3603/* Find a GOT page entry that points to within 32KB of VALUE.  These
3604   entries are supposed to be placed at small offsets in the GOT, i.e.,
3605   within 32KB of GP.  Return the index of the GOT entry, or -1 if no
3606   entry could be created.  If OFFSETP is nonnull, use it to return the
3607   offset of the GOT entry from VALUE.  */
3608
3609static bfd_vma
3610mips_elf_got_page (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
3611		   bfd_vma value, bfd_vma *offsetp)
3612{
3613  bfd_vma page, got_index;
3614  struct mips_got_entry *entry;
3615
3616  page = (value + 0x8000) & ~(bfd_vma) 0xffff;
3617  entry = mips_elf_create_local_got_entry (abfd, info, ibfd, page, 0,
3618					   NULL, R_MIPS_GOT_PAGE);
3619
3620  if (!entry)
3621    return MINUS_ONE;
3622
3623  got_index = entry->gotidx;
3624
3625  if (offsetp)
3626    *offsetp = value - entry->d.address;
3627
3628  return got_index;
3629}
3630
3631/* Find a local GOT entry for an R_MIPS*_GOT16 relocation against VALUE.
3632   EXTERNAL is true if the relocation was originally against a global
3633   symbol that binds locally.  */
3634
3635static bfd_vma
3636mips_elf_got16_entry (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
3637		      bfd_vma value, bfd_boolean external)
3638{
3639  struct mips_got_entry *entry;
3640
3641  /* GOT16 relocations against local symbols are followed by a LO16
3642     relocation; those against global symbols are not.  Thus if the
3643     symbol was originally local, the GOT16 relocation should load the
3644     equivalent of %hi(VALUE), otherwise it should load VALUE itself.  */
3645  if (! external)
3646    value = mips_elf_high (value) << 16;
3647
3648  /* It doesn't matter whether the original relocation was R_MIPS_GOT16,
3649     R_MIPS16_GOT16, R_MIPS_CALL16, etc.  The format of the entry is the
3650     same in all cases.  */
3651  entry = mips_elf_create_local_got_entry (abfd, info, ibfd, value, 0,
3652					   NULL, R_MIPS_GOT16);
3653  if (entry)
3654    return entry->gotidx;
3655  else
3656    return MINUS_ONE;
3657}
3658
3659/* Returns the offset for the entry at the INDEXth position
3660   in the GOT.  */
3661
3662static bfd_vma
3663mips_elf_got_offset_from_index (struct bfd_link_info *info, bfd *output_bfd,
3664				bfd *input_bfd, bfd_vma got_index)
3665{
3666  struct mips_elf_link_hash_table *htab;
3667  asection *sgot;
3668  bfd_vma gp;
3669
3670  htab = mips_elf_hash_table (info);
3671  BFD_ASSERT (htab != NULL);
3672
3673  sgot = htab->root.sgot;
3674  gp = _bfd_get_gp_value (output_bfd)
3675    + mips_elf_adjust_gp (output_bfd, htab->got_info, input_bfd);
3676
3677  return sgot->output_section->vma + sgot->output_offset + got_index - gp;
3678}
3679
3680/* Create and return a local GOT entry for VALUE, which was calculated
3681   from a symbol belonging to INPUT_SECTON.  Return NULL if it could not
3682   be created.  If R_SYMNDX refers to a TLS symbol, create a TLS entry
3683   instead.  */
3684
3685static struct mips_got_entry *
3686mips_elf_create_local_got_entry (bfd *abfd, struct bfd_link_info *info,
3687				 bfd *ibfd, bfd_vma value,
3688				 unsigned long r_symndx,
3689				 struct mips_elf_link_hash_entry *h,
3690				 int r_type)
3691{
3692  struct mips_got_entry lookup, *entry;
3693  void **loc;
3694  struct mips_got_info *g;
3695  struct mips_elf_link_hash_table *htab;
3696  bfd_vma gotidx;
3697
3698  htab = mips_elf_hash_table (info);
3699  BFD_ASSERT (htab != NULL);
3700
3701  g = mips_elf_bfd_got (ibfd, FALSE);
3702  if (g == NULL)
3703    {
3704      g = mips_elf_bfd_got (abfd, FALSE);
3705      BFD_ASSERT (g != NULL);
3706    }
3707
3708  /* This function shouldn't be called for symbols that live in the global
3709     area of the GOT.  */
3710  BFD_ASSERT (h == NULL || h->global_got_area == GGA_NONE);
3711
3712  lookup.tls_type = mips_elf_reloc_tls_type (r_type);
3713  if (lookup.tls_type)
3714    {
3715      lookup.abfd = ibfd;
3716      if (tls_ldm_reloc_p (r_type))
3717	{
3718	  lookup.symndx = 0;
3719	  lookup.d.addend = 0;
3720	}
3721      else if (h == NULL)
3722	{
3723	  lookup.symndx = r_symndx;
3724	  lookup.d.addend = 0;
3725	}
3726      else
3727	{
3728	  lookup.symndx = -1;
3729	  lookup.d.h = h;
3730	}
3731
3732      entry = (struct mips_got_entry *) htab_find (g->got_entries, &lookup);
3733      BFD_ASSERT (entry);
3734
3735      gotidx = entry->gotidx;
3736      BFD_ASSERT (gotidx > 0 && gotidx < htab->root.sgot->size);
3737
3738      return entry;
3739    }
3740
3741  lookup.abfd = NULL;
3742  lookup.symndx = -1;
3743  lookup.d.address = value;
3744  loc = htab_find_slot (g->got_entries, &lookup, INSERT);
3745  if (!loc)
3746    return NULL;
3747
3748  entry = (struct mips_got_entry *) *loc;
3749  if (entry)
3750    return entry;
3751
3752  if (g->assigned_low_gotno > g->assigned_high_gotno)
3753    {
3754      /* We didn't allocate enough space in the GOT.  */
3755      _bfd_error_handler
3756	(_("not enough GOT space for local GOT entries"));
3757      bfd_set_error (bfd_error_bad_value);
3758      return NULL;
3759    }
3760
3761  entry = (struct mips_got_entry *) bfd_alloc (abfd, sizeof (*entry));
3762  if (!entry)
3763    return NULL;
3764
3765  if (got16_reloc_p (r_type)
3766      || call16_reloc_p (r_type)
3767      || got_page_reloc_p (r_type)
3768      || got_disp_reloc_p (r_type))
3769    lookup.gotidx = MIPS_ELF_GOT_SIZE (abfd) * g->assigned_low_gotno++;
3770  else
3771    lookup.gotidx = MIPS_ELF_GOT_SIZE (abfd) * g->assigned_high_gotno--;
3772
3773  *entry = lookup;
3774  *loc = entry;
3775
3776  MIPS_ELF_PUT_WORD (abfd, value, htab->root.sgot->contents + entry->gotidx);
3777
3778  /* These GOT entries need a dynamic relocation on VxWorks.  */
3779  if (htab->is_vxworks)
3780    {
3781      Elf_Internal_Rela outrel;
3782      asection *s;
3783      bfd_byte *rloc;
3784      bfd_vma got_address;
3785
3786      s = mips_elf_rel_dyn_section (info, FALSE);
3787      got_address = (htab->root.sgot->output_section->vma
3788		     + htab->root.sgot->output_offset
3789		     + entry->gotidx);
3790
3791      rloc = s->contents + (s->reloc_count++ * sizeof (Elf32_External_Rela));
3792      outrel.r_offset = got_address;
3793      outrel.r_info = ELF32_R_INFO (STN_UNDEF, R_MIPS_32);
3794      outrel.r_addend = value;
3795      bfd_elf32_swap_reloca_out (abfd, &outrel, rloc);
3796    }
3797
3798  return entry;
3799}
3800
3801/* Return the number of dynamic section symbols required by OUTPUT_BFD.
3802   The number might be exact or a worst-case estimate, depending on how
3803   much information is available to elf_backend_omit_section_dynsym at
3804   the current linking stage.  */
3805
3806static bfd_size_type
3807count_section_dynsyms (bfd *output_bfd, struct bfd_link_info *info)
3808{
3809  bfd_size_type count;
3810
3811  count = 0;
3812  if (bfd_link_pic (info)
3813      || elf_hash_table (info)->is_relocatable_executable)
3814    {
3815      asection *p;
3816      const struct elf_backend_data *bed;
3817
3818      bed = get_elf_backend_data (output_bfd);
3819      for (p = output_bfd->sections; p ; p = p->next)
3820	if ((p->flags & SEC_EXCLUDE) == 0
3821	    && (p->flags & SEC_ALLOC) != 0
3822	    && !(*bed->elf_backend_omit_section_dynsym) (output_bfd, info, p))
3823	  ++count;
3824    }
3825  return count;
3826}
3827
3828/* Sort the dynamic symbol table so that symbols that need GOT entries
3829   appear towards the end.  */
3830
3831static bfd_boolean
3832mips_elf_sort_hash_table (bfd *abfd, struct bfd_link_info *info)
3833{
3834  struct mips_elf_link_hash_table *htab;
3835  struct mips_elf_hash_sort_data hsd;
3836  struct mips_got_info *g;
3837
3838  htab = mips_elf_hash_table (info);
3839  BFD_ASSERT (htab != NULL);
3840
3841  if (htab->root.dynsymcount == 0)
3842    return TRUE;
3843
3844  g = htab->got_info;
3845  if (g == NULL)
3846    return TRUE;
3847
3848  hsd.low = NULL;
3849  hsd.max_unref_got_dynindx
3850    = hsd.min_got_dynindx
3851    = (htab->root.dynsymcount - g->reloc_only_gotno);
3852  /* Add 1 to local symbol indices to account for the mandatory NULL entry
3853     at the head of the table; see `_bfd_elf_link_renumber_dynsyms'.  */
3854  hsd.max_local_dynindx = count_section_dynsyms (abfd, info) + 1;
3855  hsd.max_non_got_dynindx = htab->root.local_dynsymcount + 1;
3856  mips_elf_link_hash_traverse (htab, mips_elf_sort_hash_table_f, &hsd);
3857
3858  /* There should have been enough room in the symbol table to
3859     accommodate both the GOT and non-GOT symbols.  */
3860  BFD_ASSERT (hsd.max_local_dynindx <= htab->root.local_dynsymcount + 1);
3861  BFD_ASSERT (hsd.max_non_got_dynindx <= hsd.min_got_dynindx);
3862  BFD_ASSERT (hsd.max_unref_got_dynindx == htab->root.dynsymcount);
3863  BFD_ASSERT (htab->root.dynsymcount - hsd.min_got_dynindx == g->global_gotno);
3864
3865  /* Now we know which dynamic symbol has the lowest dynamic symbol
3866     table index in the GOT.  */
3867  htab->global_gotsym = hsd.low;
3868
3869  return TRUE;
3870}
3871
3872/* If H needs a GOT entry, assign it the highest available dynamic
3873   index.  Otherwise, assign it the lowest available dynamic
3874   index.  */
3875
3876static bfd_boolean
3877mips_elf_sort_hash_table_f (struct mips_elf_link_hash_entry *h, void *data)
3878{
3879  struct mips_elf_hash_sort_data *hsd = data;
3880
3881  /* Symbols without dynamic symbol table entries aren't interesting
3882     at all.  */
3883  if (h->root.dynindx == -1)
3884    return TRUE;
3885
3886  switch (h->global_got_area)
3887    {
3888    case GGA_NONE:
3889      if (h->root.forced_local)
3890	h->root.dynindx = hsd->max_local_dynindx++;
3891      else
3892	h->root.dynindx = hsd->max_non_got_dynindx++;
3893      break;
3894
3895    case GGA_NORMAL:
3896      h->root.dynindx = --hsd->min_got_dynindx;
3897      hsd->low = (struct elf_link_hash_entry *) h;
3898      break;
3899
3900    case GGA_RELOC_ONLY:
3901      if (hsd->max_unref_got_dynindx == hsd->min_got_dynindx)
3902	hsd->low = (struct elf_link_hash_entry *) h;
3903      h->root.dynindx = hsd->max_unref_got_dynindx++;
3904      break;
3905    }
3906
3907  return TRUE;
3908}
3909
3910/* Record that input bfd ABFD requires a GOT entry like *LOOKUP
3911   (which is owned by the caller and shouldn't be added to the
3912   hash table directly).  */
3913
3914static bfd_boolean
3915mips_elf_record_got_entry (struct bfd_link_info *info, bfd *abfd,
3916			   struct mips_got_entry *lookup)
3917{
3918  struct mips_elf_link_hash_table *htab;
3919  struct mips_got_entry *entry;
3920  struct mips_got_info *g;
3921  void **loc, **bfd_loc;
3922
3923  /* Make sure there's a slot for this entry in the master GOT.  */
3924  htab = mips_elf_hash_table (info);
3925  g = htab->got_info;
3926  loc = htab_find_slot (g->got_entries, lookup, INSERT);
3927  if (!loc)
3928    return FALSE;
3929
3930  /* Populate the entry if it isn't already.  */
3931  entry = (struct mips_got_entry *) *loc;
3932  if (!entry)
3933    {
3934      entry = (struct mips_got_entry *) bfd_alloc (abfd, sizeof (*entry));
3935      if (!entry)
3936	return FALSE;
3937
3938      lookup->tls_initialized = FALSE;
3939      lookup->gotidx = -1;
3940      *entry = *lookup;
3941      *loc = entry;
3942    }
3943
3944  /* Reuse the same GOT entry for the BFD's GOT.  */
3945  g = mips_elf_bfd_got (abfd, TRUE);
3946  if (!g)
3947    return FALSE;
3948
3949  bfd_loc = htab_find_slot (g->got_entries, lookup, INSERT);
3950  if (!bfd_loc)
3951    return FALSE;
3952
3953  if (!*bfd_loc)
3954    *bfd_loc = entry;
3955  return TRUE;
3956}
3957
3958/* ABFD has a GOT relocation of type R_TYPE against H.  Reserve a GOT
3959   entry for it.  FOR_CALL is true if the caller is only interested in
3960   using the GOT entry for calls.  */
3961
3962static bfd_boolean
3963mips_elf_record_global_got_symbol (struct elf_link_hash_entry *h,
3964				   bfd *abfd, struct bfd_link_info *info,
3965				   bfd_boolean for_call, int r_type)
3966{
3967  struct mips_elf_link_hash_table *htab;
3968  struct mips_elf_link_hash_entry *hmips;
3969  struct mips_got_entry entry;
3970  unsigned char tls_type;
3971
3972  htab = mips_elf_hash_table (info);
3973  BFD_ASSERT (htab != NULL);
3974
3975  hmips = (struct mips_elf_link_hash_entry *) h;
3976  if (!for_call)
3977    hmips->got_only_for_calls = FALSE;
3978
3979  /* A global symbol in the GOT must also be in the dynamic symbol
3980     table.  */
3981  if (h->dynindx == -1)
3982    {
3983      switch (ELF_ST_VISIBILITY (h->other))
3984	{
3985	case STV_INTERNAL:
3986	case STV_HIDDEN:
3987	  _bfd_elf_link_hash_hide_symbol (info, h, TRUE);
3988	  break;
3989	}
3990      if (!bfd_elf_link_record_dynamic_symbol (info, h))
3991	return FALSE;
3992    }
3993
3994  tls_type = mips_elf_reloc_tls_type (r_type);
3995  if (tls_type == GOT_TLS_NONE && hmips->global_got_area > GGA_NORMAL)
3996    hmips->global_got_area = GGA_NORMAL;
3997
3998  entry.abfd = abfd;
3999  entry.symndx = -1;
4000  entry.d.h = (struct mips_elf_link_hash_entry *) h;
4001  entry.tls_type = tls_type;
4002  return mips_elf_record_got_entry (info, abfd, &entry);
4003}
4004
4005/* ABFD has a GOT relocation of type R_TYPE against symbol SYMNDX + ADDEND,
4006   where SYMNDX is a local symbol.  Reserve a GOT entry for it.  */
4007
4008static bfd_boolean
4009mips_elf_record_local_got_symbol (bfd *abfd, long symndx, bfd_vma addend,
4010				  struct bfd_link_info *info, int r_type)
4011{
4012  struct mips_elf_link_hash_table *htab;
4013  struct mips_got_info *g;
4014  struct mips_got_entry entry;
4015
4016  htab = mips_elf_hash_table (info);
4017  BFD_ASSERT (htab != NULL);
4018
4019  g = htab->got_info;
4020  BFD_ASSERT (g != NULL);
4021
4022  entry.abfd = abfd;
4023  entry.symndx = symndx;
4024  entry.d.addend = addend;
4025  entry.tls_type = mips_elf_reloc_tls_type (r_type);
4026  return mips_elf_record_got_entry (info, abfd, &entry);
4027}
4028
4029/* Record that ABFD has a page relocation against SYMNDX + ADDEND.
4030   H is the symbol's hash table entry, or null if SYMNDX is local
4031   to ABFD.  */
4032
4033static bfd_boolean
4034mips_elf_record_got_page_ref (struct bfd_link_info *info, bfd *abfd,
4035			      long symndx, struct elf_link_hash_entry *h,
4036			      bfd_signed_vma addend)
4037{
4038  struct mips_elf_link_hash_table *htab;
4039  struct mips_got_info *g1, *g2;
4040  struct mips_got_page_ref lookup, *entry;
4041  void **loc, **bfd_loc;
4042
4043  htab = mips_elf_hash_table (info);
4044  BFD_ASSERT (htab != NULL);
4045
4046  g1 = htab->got_info;
4047  BFD_ASSERT (g1 != NULL);
4048
4049  if (h)
4050    {
4051      lookup.symndx = -1;
4052      lookup.u.h = (struct mips_elf_link_hash_entry *) h;
4053    }
4054  else
4055    {
4056      lookup.symndx = symndx;
4057      lookup.u.abfd = abfd;
4058    }
4059  lookup.addend = addend;
4060  loc = htab_find_slot (g1->got_page_refs, &lookup, INSERT);
4061  if (loc == NULL)
4062    return FALSE;
4063
4064  entry = (struct mips_got_page_ref *) *loc;
4065  if (!entry)
4066    {
4067      entry = bfd_alloc (abfd, sizeof (*entry));
4068      if (!entry)
4069	return FALSE;
4070
4071      *entry = lookup;
4072      *loc = entry;
4073    }
4074
4075  /* Add the same entry to the BFD's GOT.  */
4076  g2 = mips_elf_bfd_got (abfd, TRUE);
4077  if (!g2)
4078    return FALSE;
4079
4080  bfd_loc = htab_find_slot (g2->got_page_refs, &lookup, INSERT);
4081  if (!bfd_loc)
4082    return FALSE;
4083
4084  if (!*bfd_loc)
4085    *bfd_loc = entry;
4086
4087  return TRUE;
4088}
4089
4090/* Add room for N relocations to the .rel(a).dyn section in ABFD.  */
4091
4092static void
4093mips_elf_allocate_dynamic_relocations (bfd *abfd, struct bfd_link_info *info,
4094				       unsigned int n)
4095{
4096  asection *s;
4097  struct mips_elf_link_hash_table *htab;
4098
4099  htab = mips_elf_hash_table (info);
4100  BFD_ASSERT (htab != NULL);
4101
4102  s = mips_elf_rel_dyn_section (info, FALSE);
4103  BFD_ASSERT (s != NULL);
4104
4105  if (htab->is_vxworks)
4106    s->size += n * MIPS_ELF_RELA_SIZE (abfd);
4107  else
4108    {
4109      if (s->size == 0)
4110	{
4111	  /* Make room for a null element.  */
4112	  s->size += MIPS_ELF_REL_SIZE (abfd);
4113	  ++s->reloc_count;
4114	}
4115      s->size += n * MIPS_ELF_REL_SIZE (abfd);
4116    }
4117}
4118
4119/* A htab_traverse callback for GOT entries, with DATA pointing to a
4120   mips_elf_traverse_got_arg structure.  Count the number of GOT
4121   entries and TLS relocs.  Set DATA->value to true if we need
4122   to resolve indirect or warning symbols and then recreate the GOT.  */
4123
4124static int
4125mips_elf_check_recreate_got (void **entryp, void *data)
4126{
4127  struct mips_got_entry *entry;
4128  struct mips_elf_traverse_got_arg *arg;
4129
4130  entry = (struct mips_got_entry *) *entryp;
4131  arg = (struct mips_elf_traverse_got_arg *) data;
4132  if (entry->abfd != NULL && entry->symndx == -1)
4133    {
4134      struct mips_elf_link_hash_entry *h;
4135
4136      h = entry->d.h;
4137      if (h->root.root.type == bfd_link_hash_indirect
4138	  || h->root.root.type == bfd_link_hash_warning)
4139	{
4140	  arg->value = TRUE;
4141	  return 0;
4142	}
4143    }
4144  mips_elf_count_got_entry (arg->info, arg->g, entry);
4145  return 1;
4146}
4147
4148/* A htab_traverse callback for GOT entries, with DATA pointing to a
4149   mips_elf_traverse_got_arg structure.  Add all entries to DATA->g,
4150   converting entries for indirect and warning symbols into entries
4151   for the target symbol.  Set DATA->g to null on error.  */
4152
4153static int
4154mips_elf_recreate_got (void **entryp, void *data)
4155{
4156  struct mips_got_entry new_entry, *entry;
4157  struct mips_elf_traverse_got_arg *arg;
4158  void **slot;
4159
4160  entry = (struct mips_got_entry *) *entryp;
4161  arg = (struct mips_elf_traverse_got_arg *) data;
4162  if (entry->abfd != NULL
4163      && entry->symndx == -1
4164      && (entry->d.h->root.root.type == bfd_link_hash_indirect
4165	  || entry->d.h->root.root.type == bfd_link_hash_warning))
4166    {
4167      struct mips_elf_link_hash_entry *h;
4168
4169      new_entry = *entry;
4170      entry = &new_entry;
4171      h = entry->d.h;
4172      do
4173	{
4174	  BFD_ASSERT (h->global_got_area == GGA_NONE);
4175	  h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
4176	}
4177      while (h->root.root.type == bfd_link_hash_indirect
4178	     || h->root.root.type == bfd_link_hash_warning);
4179      entry->d.h = h;
4180    }
4181  slot = htab_find_slot (arg->g->got_entries, entry, INSERT);
4182  if (slot == NULL)
4183    {
4184      arg->g = NULL;
4185      return 0;
4186    }
4187  if (*slot == NULL)
4188    {
4189      if (entry == &new_entry)
4190	{
4191	  entry = bfd_alloc (entry->abfd, sizeof (*entry));
4192	  if (!entry)
4193	    {
4194	      arg->g = NULL;
4195	      return 0;
4196	    }
4197	  *entry = new_entry;
4198	}
4199      *slot = entry;
4200      mips_elf_count_got_entry (arg->info, arg->g, entry);
4201    }
4202  return 1;
4203}
4204
4205/* Return the maximum number of GOT page entries required for RANGE.  */
4206
4207static bfd_vma
4208mips_elf_pages_for_range (const struct mips_got_page_range *range)
4209{
4210  return (range->max_addend - range->min_addend + 0x1ffff) >> 16;
4211}
4212
4213/* Record that G requires a page entry that can reach SEC + ADDEND.  */
4214
4215static bfd_boolean
4216mips_elf_record_got_page_entry (struct mips_elf_traverse_got_arg *arg,
4217				asection *sec, bfd_signed_vma addend)
4218{
4219  struct mips_got_info *g = arg->g;
4220  struct mips_got_page_entry lookup, *entry;
4221  struct mips_got_page_range **range_ptr, *range;
4222  bfd_vma old_pages, new_pages;
4223  void **loc;
4224
4225  /* Find the mips_got_page_entry hash table entry for this section.  */
4226  lookup.sec = sec;
4227  loc = htab_find_slot (g->got_page_entries, &lookup, INSERT);
4228  if (loc == NULL)
4229    return FALSE;
4230
4231  /* Create a mips_got_page_entry if this is the first time we've
4232     seen the section.  */
4233  entry = (struct mips_got_page_entry *) *loc;
4234  if (!entry)
4235    {
4236      entry = bfd_zalloc (arg->info->output_bfd, sizeof (*entry));
4237      if (!entry)
4238	return FALSE;
4239
4240      entry->sec = sec;
4241      *loc = entry;
4242    }
4243
4244  /* Skip over ranges whose maximum extent cannot share a page entry
4245     with ADDEND.  */
4246  range_ptr = &entry->ranges;
4247  while (*range_ptr && addend > (*range_ptr)->max_addend + 0xffff)
4248    range_ptr = &(*range_ptr)->next;
4249
4250  /* If we scanned to the end of the list, or found a range whose
4251     minimum extent cannot share a page entry with ADDEND, create
4252     a new singleton range.  */
4253  range = *range_ptr;
4254  if (!range || addend < range->min_addend - 0xffff)
4255    {
4256      range = bfd_zalloc (arg->info->output_bfd, sizeof (*range));
4257      if (!range)
4258	return FALSE;
4259
4260      range->next = *range_ptr;
4261      range->min_addend = addend;
4262      range->max_addend = addend;
4263
4264      *range_ptr = range;
4265      entry->num_pages++;
4266      g->page_gotno++;
4267      return TRUE;
4268    }
4269
4270  /* Remember how many pages the old range contributed.  */
4271  old_pages = mips_elf_pages_for_range (range);
4272
4273  /* Update the ranges.  */
4274  if (addend < range->min_addend)
4275    range->min_addend = addend;
4276  else if (addend > range->max_addend)
4277    {
4278      if (range->next && addend >= range->next->min_addend - 0xffff)
4279	{
4280	  old_pages += mips_elf_pages_for_range (range->next);
4281	  range->max_addend = range->next->max_addend;
4282	  range->next = range->next->next;
4283	}
4284      else
4285	range->max_addend = addend;
4286    }
4287
4288  /* Record any change in the total estimate.  */
4289  new_pages = mips_elf_pages_for_range (range);
4290  if (old_pages != new_pages)
4291    {
4292      entry->num_pages += new_pages - old_pages;
4293      g->page_gotno += new_pages - old_pages;
4294    }
4295
4296  return TRUE;
4297}
4298
4299/* A htab_traverse callback for which *REFP points to a mips_got_page_ref
4300   and for which DATA points to a mips_elf_traverse_got_arg.  Work out
4301   whether the page reference described by *REFP needs a GOT page entry,
4302   and record that entry in DATA->g if so.  Set DATA->g to null on failure.  */
4303
4304static bfd_boolean
4305mips_elf_resolve_got_page_ref (void **refp, void *data)
4306{
4307  struct mips_got_page_ref *ref;
4308  struct mips_elf_traverse_got_arg *arg;
4309  struct mips_elf_link_hash_table *htab;
4310  asection *sec;
4311  bfd_vma addend;
4312
4313  ref = (struct mips_got_page_ref *) *refp;
4314  arg = (struct mips_elf_traverse_got_arg *) data;
4315  htab = mips_elf_hash_table (arg->info);
4316
4317  if (ref->symndx < 0)
4318    {
4319      struct mips_elf_link_hash_entry *h;
4320
4321      /* Global GOT_PAGEs decay to GOT_DISP and so don't need page entries.  */
4322      h = ref->u.h;
4323      if (!SYMBOL_REFERENCES_LOCAL (arg->info, &h->root))
4324	return 1;
4325
4326      /* Ignore undefined symbols; we'll issue an error later if
4327	 appropriate.  */
4328      if (!((h->root.root.type == bfd_link_hash_defined
4329	     || h->root.root.type == bfd_link_hash_defweak)
4330	    && h->root.root.u.def.section))
4331	return 1;
4332
4333      sec = h->root.root.u.def.section;
4334      addend = h->root.root.u.def.value + ref->addend;
4335    }
4336  else
4337    {
4338      Elf_Internal_Sym *isym;
4339
4340      /* Read in the symbol.  */
4341      isym = bfd_sym_from_r_symndx (&htab->sym_cache, ref->u.abfd,
4342				    ref->symndx);
4343      if (isym == NULL)
4344	{
4345	  arg->g = NULL;
4346	  return 0;
4347	}
4348
4349      /* Get the associated input section.  */
4350      sec = bfd_section_from_elf_index (ref->u.abfd, isym->st_shndx);
4351      if (sec == NULL)
4352	{
4353	  arg->g = NULL;
4354	  return 0;
4355	}
4356
4357      /* If this is a mergable section, work out the section and offset
4358	 of the merged data.  For section symbols, the addend specifies
4359	 of the offset _of_ the first byte in the data, otherwise it
4360	 specifies the offset _from_ the first byte.  */
4361      if (sec->flags & SEC_MERGE)
4362	{
4363	  void *secinfo;
4364
4365	  secinfo = elf_section_data (sec)->sec_info;
4366	  if (ELF_ST_TYPE (isym->st_info) == STT_SECTION)
4367	    addend = _bfd_merged_section_offset (ref->u.abfd, &sec, secinfo,
4368						 isym->st_value + ref->addend);
4369	  else
4370	    addend = _bfd_merged_section_offset (ref->u.abfd, &sec, secinfo,
4371						 isym->st_value) + ref->addend;
4372	}
4373      else
4374	addend = isym->st_value + ref->addend;
4375    }
4376  if (!mips_elf_record_got_page_entry (arg, sec, addend))
4377    {
4378      arg->g = NULL;
4379      return 0;
4380    }
4381  return 1;
4382}
4383
4384/* If any entries in G->got_entries are for indirect or warning symbols,
4385   replace them with entries for the target symbol.  Convert g->got_page_refs
4386   into got_page_entry structures and estimate the number of page entries
4387   that they require.  */
4388
4389static bfd_boolean
4390mips_elf_resolve_final_got_entries (struct bfd_link_info *info,
4391				    struct mips_got_info *g)
4392{
4393  struct mips_elf_traverse_got_arg tga;
4394  struct mips_got_info oldg;
4395
4396  oldg = *g;
4397
4398  tga.info = info;
4399  tga.g = g;
4400  tga.value = FALSE;
4401  htab_traverse (g->got_entries, mips_elf_check_recreate_got, &tga);
4402  if (tga.value)
4403    {
4404      *g = oldg;
4405      g->got_entries = htab_create (htab_size (oldg.got_entries),
4406				    mips_elf_got_entry_hash,
4407				    mips_elf_got_entry_eq, NULL);
4408      if (!g->got_entries)
4409	return FALSE;
4410
4411      htab_traverse (oldg.got_entries, mips_elf_recreate_got, &tga);
4412      if (!tga.g)
4413	return FALSE;
4414
4415      htab_delete (oldg.got_entries);
4416    }
4417
4418  g->got_page_entries = htab_try_create (1, mips_got_page_entry_hash,
4419					 mips_got_page_entry_eq, NULL);
4420  if (g->got_page_entries == NULL)
4421    return FALSE;
4422
4423  tga.info = info;
4424  tga.g = g;
4425  htab_traverse (g->got_page_refs, mips_elf_resolve_got_page_ref, &tga);
4426
4427  return TRUE;
4428}
4429
4430/* Return true if a GOT entry for H should live in the local rather than
4431   global GOT area.  */
4432
4433static bfd_boolean
4434mips_use_local_got_p (struct bfd_link_info *info,
4435		      struct mips_elf_link_hash_entry *h)
4436{
4437  /* Symbols that aren't in the dynamic symbol table must live in the
4438     local GOT.  This includes symbols that are completely undefined
4439     and which therefore don't bind locally.  We'll report undefined
4440     symbols later if appropriate.  */
4441  if (h->root.dynindx == -1)
4442    return TRUE;
4443
4444  /* Symbols that bind locally can (and in the case of forced-local
4445     symbols, must) live in the local GOT.  */
4446  if (h->got_only_for_calls
4447      ? SYMBOL_CALLS_LOCAL (info, &h->root)
4448      : SYMBOL_REFERENCES_LOCAL (info, &h->root))
4449    return TRUE;
4450
4451  /* If this is an executable that must provide a definition of the symbol,
4452     either though PLTs or copy relocations, then that address should go in
4453     the local rather than global GOT.  */
4454  if (bfd_link_executable (info) && h->has_static_relocs)
4455    return TRUE;
4456
4457  return FALSE;
4458}
4459
4460/* A mips_elf_link_hash_traverse callback for which DATA points to the
4461   link_info structure.  Decide whether the hash entry needs an entry in
4462   the global part of the primary GOT, setting global_got_area accordingly.
4463   Count the number of global symbols that are in the primary GOT only
4464   because they have relocations against them (reloc_only_gotno).  */
4465
4466static int
4467mips_elf_count_got_symbols (struct mips_elf_link_hash_entry *h, void *data)
4468{
4469  struct bfd_link_info *info;
4470  struct mips_elf_link_hash_table *htab;
4471  struct mips_got_info *g;
4472
4473  info = (struct bfd_link_info *) data;
4474  htab = mips_elf_hash_table (info);
4475  g = htab->got_info;
4476  if (h->global_got_area != GGA_NONE)
4477    {
4478      /* Make a final decision about whether the symbol belongs in the
4479	 local or global GOT.  */
4480      if (mips_use_local_got_p (info, h))
4481	/* The symbol belongs in the local GOT.  We no longer need this
4482	   entry if it was only used for relocations; those relocations
4483	   will be against the null or section symbol instead of H.  */
4484	h->global_got_area = GGA_NONE;
4485      else if (htab->is_vxworks
4486	       && h->got_only_for_calls
4487	       && h->root.plt.plist->mips_offset != MINUS_ONE)
4488	/* On VxWorks, calls can refer directly to the .got.plt entry;
4489	   they don't need entries in the regular GOT.  .got.plt entries
4490	   will be allocated by _bfd_mips_elf_adjust_dynamic_symbol.  */
4491	h->global_got_area = GGA_NONE;
4492      else if (h->global_got_area == GGA_RELOC_ONLY)
4493	{
4494	  g->reloc_only_gotno++;
4495	  g->global_gotno++;
4496	}
4497    }
4498  return 1;
4499}
4500
4501/* A htab_traverse callback for GOT entries.  Add each one to the GOT
4502   given in mips_elf_traverse_got_arg DATA.  Clear DATA->G on error.  */
4503
4504static int
4505mips_elf_add_got_entry (void **entryp, void *data)
4506{
4507  struct mips_got_entry *entry;
4508  struct mips_elf_traverse_got_arg *arg;
4509  void **slot;
4510
4511  entry = (struct mips_got_entry *) *entryp;
4512  arg = (struct mips_elf_traverse_got_arg *) data;
4513  slot = htab_find_slot (arg->g->got_entries, entry, INSERT);
4514  if (!slot)
4515    {
4516      arg->g = NULL;
4517      return 0;
4518    }
4519  if (!*slot)
4520    {
4521      *slot = entry;
4522      mips_elf_count_got_entry (arg->info, arg->g, entry);
4523    }
4524  return 1;
4525}
4526
4527/* A htab_traverse callback for GOT page entries.  Add each one to the GOT
4528   given in mips_elf_traverse_got_arg DATA.  Clear DATA->G on error.  */
4529
4530static int
4531mips_elf_add_got_page_entry (void **entryp, void *data)
4532{
4533  struct mips_got_page_entry *entry;
4534  struct mips_elf_traverse_got_arg *arg;
4535  void **slot;
4536
4537  entry = (struct mips_got_page_entry *) *entryp;
4538  arg = (struct mips_elf_traverse_got_arg *) data;
4539  slot = htab_find_slot (arg->g->got_page_entries, entry, INSERT);
4540  if (!slot)
4541    {
4542      arg->g = NULL;
4543      return 0;
4544    }
4545  if (!*slot)
4546    {
4547      *slot = entry;
4548      arg->g->page_gotno += entry->num_pages;
4549    }
4550  return 1;
4551}
4552
4553/* Consider merging FROM, which is ABFD's GOT, into TO.  Return -1 if
4554   this would lead to overflow, 1 if they were merged successfully,
4555   and 0 if a merge failed due to lack of memory.  (These values are chosen
4556   so that nonnegative return values can be returned by a htab_traverse
4557   callback.)  */
4558
4559static int
4560mips_elf_merge_got_with (bfd *abfd, struct mips_got_info *from,
4561			 struct mips_got_info *to,
4562			 struct mips_elf_got_per_bfd_arg *arg)
4563{
4564  struct mips_elf_traverse_got_arg tga;
4565  unsigned int estimate;
4566
4567  /* Work out how many page entries we would need for the combined GOT.  */
4568  estimate = arg->max_pages;
4569  if (estimate >= from->page_gotno + to->page_gotno)
4570    estimate = from->page_gotno + to->page_gotno;
4571
4572  /* And conservatively estimate how many local and TLS entries
4573     would be needed.  */
4574  estimate += from->local_gotno + to->local_gotno;
4575  estimate += from->tls_gotno + to->tls_gotno;
4576
4577  /* If we're merging with the primary got, any TLS relocations will
4578     come after the full set of global entries.  Otherwise estimate those
4579     conservatively as well.  */
4580  if (to == arg->primary && from->tls_gotno + to->tls_gotno)
4581    estimate += arg->global_count;
4582  else
4583    estimate += from->global_gotno + to->global_gotno;
4584
4585  /* Bail out if the combined GOT might be too big.  */
4586  if (estimate > arg->max_count)
4587    return -1;
4588
4589  /* Transfer the bfd's got information from FROM to TO.  */
4590  tga.info = arg->info;
4591  tga.g = to;
4592  htab_traverse (from->got_entries, mips_elf_add_got_entry, &tga);
4593  if (!tga.g)
4594    return 0;
4595
4596  htab_traverse (from->got_page_entries, mips_elf_add_got_page_entry, &tga);
4597  if (!tga.g)
4598    return 0;
4599
4600  mips_elf_replace_bfd_got (abfd, to);
4601  return 1;
4602}
4603
4604/* Attempt to merge GOT G, which belongs to ABFD.  Try to use as much
4605   as possible of the primary got, since it doesn't require explicit
4606   dynamic relocations, but don't use bfds that would reference global
4607   symbols out of the addressable range.  Failing the primary got,
4608   attempt to merge with the current got, or finish the current got
4609   and then make make the new got current.  */
4610
4611static bfd_boolean
4612mips_elf_merge_got (bfd *abfd, struct mips_got_info *g,
4613		    struct mips_elf_got_per_bfd_arg *arg)
4614{
4615  unsigned int estimate;
4616  int result;
4617
4618  if (!mips_elf_resolve_final_got_entries (arg->info, g))
4619    return FALSE;
4620
4621  /* Work out the number of page, local and TLS entries.  */
4622  estimate = arg->max_pages;
4623  if (estimate > g->page_gotno)
4624    estimate = g->page_gotno;
4625  estimate += g->local_gotno + g->tls_gotno;
4626
4627  /* We place TLS GOT entries after both locals and globals.  The globals
4628     for the primary GOT may overflow the normal GOT size limit, so be
4629     sure not to merge a GOT which requires TLS with the primary GOT in that
4630     case.  This doesn't affect non-primary GOTs.  */
4631  estimate += (g->tls_gotno > 0 ? arg->global_count : g->global_gotno);
4632
4633  if (estimate <= arg->max_count)
4634    {
4635      /* If we don't have a primary GOT, use it as
4636	 a starting point for the primary GOT.  */
4637      if (!arg->primary)
4638	{
4639	  arg->primary = g;
4640	  return TRUE;
4641	}
4642
4643      /* Try merging with the primary GOT.  */
4644      result = mips_elf_merge_got_with (abfd, g, arg->primary, arg);
4645      if (result >= 0)
4646	return result;
4647    }
4648
4649  /* If we can merge with the last-created got, do it.  */
4650  if (arg->current)
4651    {
4652      result = mips_elf_merge_got_with (abfd, g, arg->current, arg);
4653      if (result >= 0)
4654	return result;
4655    }
4656
4657  /* Well, we couldn't merge, so create a new GOT.  Don't check if it
4658     fits; if it turns out that it doesn't, we'll get relocation
4659     overflows anyway.  */
4660  g->next = arg->current;
4661  arg->current = g;
4662
4663  return TRUE;
4664}
4665
4666/* ENTRYP is a hash table entry for a mips_got_entry.  Set its gotidx
4667   to GOTIDX, duplicating the entry if it has already been assigned
4668   an index in a different GOT.  */
4669
4670static bfd_boolean
4671mips_elf_set_gotidx (void **entryp, long gotidx)
4672{
4673  struct mips_got_entry *entry;
4674
4675  entry = (struct mips_got_entry *) *entryp;
4676  if (entry->gotidx > 0)
4677    {
4678      struct mips_got_entry *new_entry;
4679
4680      new_entry = bfd_alloc (entry->abfd, sizeof (*entry));
4681      if (!new_entry)
4682	return FALSE;
4683
4684      *new_entry = *entry;
4685      *entryp = new_entry;
4686      entry = new_entry;
4687    }
4688  entry->gotidx = gotidx;
4689  return TRUE;
4690}
4691
4692/* Set the TLS GOT index for the GOT entry in ENTRYP.  DATA points to a
4693   mips_elf_traverse_got_arg in which DATA->value is the size of one
4694   GOT entry.  Set DATA->g to null on failure.  */
4695
4696static int
4697mips_elf_initialize_tls_index (void **entryp, void *data)
4698{
4699  struct mips_got_entry *entry;
4700  struct mips_elf_traverse_got_arg *arg;
4701
4702  /* We're only interested in TLS symbols.  */
4703  entry = (struct mips_got_entry *) *entryp;
4704  if (entry->tls_type == GOT_TLS_NONE)
4705    return 1;
4706
4707  arg = (struct mips_elf_traverse_got_arg *) data;
4708  if (!mips_elf_set_gotidx (entryp, arg->value * arg->g->tls_assigned_gotno))
4709    {
4710      arg->g = NULL;
4711      return 0;
4712    }
4713
4714  /* Account for the entries we've just allocated.  */
4715  arg->g->tls_assigned_gotno += mips_tls_got_entries (entry->tls_type);
4716  return 1;
4717}
4718
4719/* A htab_traverse callback for GOT entries, where DATA points to a
4720   mips_elf_traverse_got_arg.  Set the global_got_area of each global
4721   symbol to DATA->value.  */
4722
4723static int
4724mips_elf_set_global_got_area (void **entryp, void *data)
4725{
4726  struct mips_got_entry *entry;
4727  struct mips_elf_traverse_got_arg *arg;
4728
4729  entry = (struct mips_got_entry *) *entryp;
4730  arg = (struct mips_elf_traverse_got_arg *) data;
4731  if (entry->abfd != NULL
4732      && entry->symndx == -1
4733      && entry->d.h->global_got_area != GGA_NONE)
4734    entry->d.h->global_got_area = arg->value;
4735  return 1;
4736}
4737
4738/* A htab_traverse callback for secondary GOT entries, where DATA points
4739   to a mips_elf_traverse_got_arg.  Assign GOT indices to global entries
4740   and record the number of relocations they require.  DATA->value is
4741   the size of one GOT entry.  Set DATA->g to null on failure.  */
4742
4743static int
4744mips_elf_set_global_gotidx (void **entryp, void *data)
4745{
4746  struct mips_got_entry *entry;
4747  struct mips_elf_traverse_got_arg *arg;
4748
4749  entry = (struct mips_got_entry *) *entryp;
4750  arg = (struct mips_elf_traverse_got_arg *) data;
4751  if (entry->abfd != NULL
4752      && entry->symndx == -1
4753      && entry->d.h->global_got_area != GGA_NONE)
4754    {
4755      if (!mips_elf_set_gotidx (entryp, arg->value * arg->g->assigned_low_gotno))
4756	{
4757	  arg->g = NULL;
4758	  return 0;
4759	}
4760      arg->g->assigned_low_gotno += 1;
4761
4762      if (bfd_link_pic (arg->info)
4763	  || (elf_hash_table (arg->info)->dynamic_sections_created
4764	      && entry->d.h->root.def_dynamic
4765	      && !entry->d.h->root.def_regular))
4766	arg->g->relocs += 1;
4767    }
4768
4769  return 1;
4770}
4771
4772/* A htab_traverse callback for GOT entries for which DATA is the
4773   bfd_link_info.  Forbid any global symbols from having traditional
4774   lazy-binding stubs.  */
4775
4776static int
4777mips_elf_forbid_lazy_stubs (void **entryp, void *data)
4778{
4779  struct bfd_link_info *info;
4780  struct mips_elf_link_hash_table *htab;
4781  struct mips_got_entry *entry;
4782
4783  entry = (struct mips_got_entry *) *entryp;
4784  info = (struct bfd_link_info *) data;
4785  htab = mips_elf_hash_table (info);
4786  BFD_ASSERT (htab != NULL);
4787
4788  if (entry->abfd != NULL
4789      && entry->symndx == -1
4790      && entry->d.h->needs_lazy_stub)
4791    {
4792      entry->d.h->needs_lazy_stub = FALSE;
4793      htab->lazy_stub_count--;
4794    }
4795
4796  return 1;
4797}
4798
4799/* Return the offset of an input bfd IBFD's GOT from the beginning of
4800   the primary GOT.  */
4801static bfd_vma
4802mips_elf_adjust_gp (bfd *abfd, struct mips_got_info *g, bfd *ibfd)
4803{
4804  if (!g->next)
4805    return 0;
4806
4807  g = mips_elf_bfd_got (ibfd, FALSE);
4808  if (! g)
4809    return 0;
4810
4811  BFD_ASSERT (g->next);
4812
4813  g = g->next;
4814
4815  return (g->local_gotno + g->global_gotno + g->tls_gotno)
4816    * MIPS_ELF_GOT_SIZE (abfd);
4817}
4818
4819/* Turn a single GOT that is too big for 16-bit addressing into
4820   a sequence of GOTs, each one 16-bit addressable.  */
4821
4822static bfd_boolean
4823mips_elf_multi_got (bfd *abfd, struct bfd_link_info *info,
4824		    asection *got, bfd_size_type pages)
4825{
4826  struct mips_elf_link_hash_table *htab;
4827  struct mips_elf_got_per_bfd_arg got_per_bfd_arg;
4828  struct mips_elf_traverse_got_arg tga;
4829  struct mips_got_info *g, *gg;
4830  unsigned int assign, needed_relocs;
4831  bfd *dynobj, *ibfd;
4832
4833  dynobj = elf_hash_table (info)->dynobj;
4834  htab = mips_elf_hash_table (info);
4835  BFD_ASSERT (htab != NULL);
4836
4837  g = htab->got_info;
4838
4839  got_per_bfd_arg.obfd = abfd;
4840  got_per_bfd_arg.info = info;
4841  got_per_bfd_arg.current = NULL;
4842  got_per_bfd_arg.primary = NULL;
4843  got_per_bfd_arg.max_count = ((MIPS_ELF_GOT_MAX_SIZE (info)
4844				/ MIPS_ELF_GOT_SIZE (abfd))
4845			       - htab->reserved_gotno);
4846  got_per_bfd_arg.max_pages = pages;
4847  /* The number of globals that will be included in the primary GOT.
4848     See the calls to mips_elf_set_global_got_area below for more
4849     information.  */
4850  got_per_bfd_arg.global_count = g->global_gotno;
4851
4852  /* Try to merge the GOTs of input bfds together, as long as they
4853     don't seem to exceed the maximum GOT size, choosing one of them
4854     to be the primary GOT.  */
4855  for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link.next)
4856    {
4857      gg = mips_elf_bfd_got (ibfd, FALSE);
4858      if (gg && !mips_elf_merge_got (ibfd, gg, &got_per_bfd_arg))
4859	return FALSE;
4860    }
4861
4862  /* If we do not find any suitable primary GOT, create an empty one.  */
4863  if (got_per_bfd_arg.primary == NULL)
4864    g->next = mips_elf_create_got_info (abfd);
4865  else
4866    g->next = got_per_bfd_arg.primary;
4867  g->next->next = got_per_bfd_arg.current;
4868
4869  /* GG is now the master GOT, and G is the primary GOT.  */
4870  gg = g;
4871  g = g->next;
4872
4873  /* Map the output bfd to the primary got.  That's what we're going
4874     to use for bfds that use GOT16 or GOT_PAGE relocations that we
4875     didn't mark in check_relocs, and we want a quick way to find it.
4876     We can't just use gg->next because we're going to reverse the
4877     list.  */
4878  mips_elf_replace_bfd_got (abfd, g);
4879
4880  /* Every symbol that is referenced in a dynamic relocation must be
4881     present in the primary GOT, so arrange for them to appear after
4882     those that are actually referenced.  */
4883  gg->reloc_only_gotno = gg->global_gotno - g->global_gotno;
4884  g->global_gotno = gg->global_gotno;
4885
4886  tga.info = info;
4887  tga.value = GGA_RELOC_ONLY;
4888  htab_traverse (gg->got_entries, mips_elf_set_global_got_area, &tga);
4889  tga.value = GGA_NORMAL;
4890  htab_traverse (g->got_entries, mips_elf_set_global_got_area, &tga);
4891
4892  /* Now go through the GOTs assigning them offset ranges.
4893     [assigned_low_gotno, local_gotno[ will be set to the range of local
4894     entries in each GOT.  We can then compute the end of a GOT by
4895     adding local_gotno to global_gotno.  We reverse the list and make
4896     it circular since then we'll be able to quickly compute the
4897     beginning of a GOT, by computing the end of its predecessor.  To
4898     avoid special cases for the primary GOT, while still preserving
4899     assertions that are valid for both single- and multi-got links,
4900     we arrange for the main got struct to have the right number of
4901     global entries, but set its local_gotno such that the initial
4902     offset of the primary GOT is zero.  Remember that the primary GOT
4903     will become the last item in the circular linked list, so it
4904     points back to the master GOT.  */
4905  gg->local_gotno = -g->global_gotno;
4906  gg->global_gotno = g->global_gotno;
4907  gg->tls_gotno = 0;
4908  assign = 0;
4909  gg->next = gg;
4910
4911  do
4912    {
4913      struct mips_got_info *gn;
4914
4915      assign += htab->reserved_gotno;
4916      g->assigned_low_gotno = assign;
4917      g->local_gotno += assign;
4918      g->local_gotno += (pages < g->page_gotno ? pages : g->page_gotno);
4919      g->assigned_high_gotno = g->local_gotno - 1;
4920      assign = g->local_gotno + g->global_gotno + g->tls_gotno;
4921
4922      /* Take g out of the direct list, and push it onto the reversed
4923	 list that gg points to.  g->next is guaranteed to be nonnull after
4924	 this operation, as required by mips_elf_initialize_tls_index. */
4925      gn = g->next;
4926      g->next = gg->next;
4927      gg->next = g;
4928
4929      /* Set up any TLS entries.  We always place the TLS entries after
4930	 all non-TLS entries.  */
4931      g->tls_assigned_gotno = g->local_gotno + g->global_gotno;
4932      tga.g = g;
4933      tga.value = MIPS_ELF_GOT_SIZE (abfd);
4934      htab_traverse (g->got_entries, mips_elf_initialize_tls_index, &tga);
4935      if (!tga.g)
4936	return FALSE;
4937      BFD_ASSERT (g->tls_assigned_gotno == assign);
4938
4939      /* Move onto the next GOT.  It will be a secondary GOT if nonull.  */
4940      g = gn;
4941
4942      /* Forbid global symbols in every non-primary GOT from having
4943	 lazy-binding stubs.  */
4944      if (g)
4945	htab_traverse (g->got_entries, mips_elf_forbid_lazy_stubs, info);
4946    }
4947  while (g);
4948
4949  got->size = assign * MIPS_ELF_GOT_SIZE (abfd);
4950
4951  needed_relocs = 0;
4952  for (g = gg->next; g && g->next != gg; g = g->next)
4953    {
4954      unsigned int save_assign;
4955
4956      /* Assign offsets to global GOT entries and count how many
4957	 relocations they need.  */
4958      save_assign = g->assigned_low_gotno;
4959      g->assigned_low_gotno = g->local_gotno;
4960      tga.info = info;
4961      tga.value = MIPS_ELF_GOT_SIZE (abfd);
4962      tga.g = g;
4963      htab_traverse (g->got_entries, mips_elf_set_global_gotidx, &tga);
4964      if (!tga.g)
4965	return FALSE;
4966      BFD_ASSERT (g->assigned_low_gotno == g->local_gotno + g->global_gotno);
4967      g->assigned_low_gotno = save_assign;
4968
4969      if (bfd_link_pic (info))
4970	{
4971	  g->relocs += g->local_gotno - g->assigned_low_gotno;
4972	  BFD_ASSERT (g->assigned_low_gotno == g->next->local_gotno
4973		      + g->next->global_gotno
4974		      + g->next->tls_gotno
4975		      + htab->reserved_gotno);
4976	}
4977      needed_relocs += g->relocs;
4978    }
4979  needed_relocs += g->relocs;
4980
4981  if (needed_relocs)
4982    mips_elf_allocate_dynamic_relocations (dynobj, info,
4983					   needed_relocs);
4984
4985  return TRUE;
4986}
4987
4988
4989/* Returns the first relocation of type r_type found, beginning with
4990   RELOCATION.  RELEND is one-past-the-end of the relocation table.  */
4991
4992static const Elf_Internal_Rela *
4993mips_elf_next_relocation (bfd *abfd ATTRIBUTE_UNUSED, unsigned int r_type,
4994			  const Elf_Internal_Rela *relocation,
4995			  const Elf_Internal_Rela *relend)
4996{
4997  unsigned long r_symndx = ELF_R_SYM (abfd, relocation->r_info);
4998
4999  while (relocation < relend)
5000    {
5001      if (ELF_R_TYPE (abfd, relocation->r_info) == r_type
5002	  && ELF_R_SYM (abfd, relocation->r_info) == r_symndx)
5003	return relocation;
5004
5005      ++relocation;
5006    }
5007
5008  /* We didn't find it.  */
5009  return NULL;
5010}
5011
5012/* Return whether an input relocation is against a local symbol.  */
5013
5014static bfd_boolean
5015mips_elf_local_relocation_p (bfd *input_bfd,
5016			     const Elf_Internal_Rela *relocation,
5017			     asection **local_sections)
5018{
5019  unsigned long r_symndx;
5020  Elf_Internal_Shdr *symtab_hdr;
5021  size_t extsymoff;
5022
5023  r_symndx = ELF_R_SYM (input_bfd, relocation->r_info);
5024  symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
5025  extsymoff = (elf_bad_symtab (input_bfd)) ? 0 : symtab_hdr->sh_info;
5026
5027  if (r_symndx < extsymoff)
5028    return TRUE;
5029  if (elf_bad_symtab (input_bfd) && local_sections[r_symndx] != NULL)
5030    return TRUE;
5031
5032  return FALSE;
5033}
5034
5035/* Sign-extend VALUE, which has the indicated number of BITS.  */
5036
5037bfd_vma
5038_bfd_mips_elf_sign_extend (bfd_vma value, int bits)
5039{
5040  if (value & ((bfd_vma) 1 << (bits - 1)))
5041    /* VALUE is negative.  */
5042    value |= ((bfd_vma) - 1) << bits;
5043
5044  return value;
5045}
5046
5047/* Return non-zero if the indicated VALUE has overflowed the maximum
5048   range expressible by a signed number with the indicated number of
5049   BITS.  */
5050
5051static bfd_boolean
5052mips_elf_overflow_p (bfd_vma value, int bits)
5053{
5054  bfd_signed_vma svalue = (bfd_signed_vma) value;
5055
5056  if (svalue > (1 << (bits - 1)) - 1)
5057    /* The value is too big.  */
5058    return TRUE;
5059  else if (svalue < -(1 << (bits - 1)))
5060    /* The value is too small.  */
5061    return TRUE;
5062
5063  /* All is well.  */
5064  return FALSE;
5065}
5066
5067/* Calculate the %high function.  */
5068
5069static bfd_vma
5070mips_elf_high (bfd_vma value)
5071{
5072  return ((value + (bfd_vma) 0x8000) >> 16) & 0xffff;
5073}
5074
5075/* Calculate the %higher function.  */
5076
5077static bfd_vma
5078mips_elf_higher (bfd_vma value ATTRIBUTE_UNUSED)
5079{
5080#ifdef BFD64
5081  return ((value + (bfd_vma) 0x80008000) >> 32) & 0xffff;
5082#else
5083  abort ();
5084  return MINUS_ONE;
5085#endif
5086}
5087
5088/* Calculate the %highest function.  */
5089
5090static bfd_vma
5091mips_elf_highest (bfd_vma value ATTRIBUTE_UNUSED)
5092{
5093#ifdef BFD64
5094  return ((value + (((bfd_vma) 0x8000 << 32) | 0x80008000)) >> 48) & 0xffff;
5095#else
5096  abort ();
5097  return MINUS_ONE;
5098#endif
5099}
5100
5101/* Create the .compact_rel section.  */
5102
5103static bfd_boolean
5104mips_elf_create_compact_rel_section
5105  (bfd *abfd, struct bfd_link_info *info ATTRIBUTE_UNUSED)
5106{
5107  flagword flags;
5108  register asection *s;
5109
5110  if (bfd_get_linker_section (abfd, ".compact_rel") == NULL)
5111    {
5112      flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED
5113	       | SEC_READONLY);
5114
5115      s = bfd_make_section_anyway_with_flags (abfd, ".compact_rel", flags);
5116      if (s == NULL
5117	  || ! bfd_set_section_alignment (abfd, s,
5118					  MIPS_ELF_LOG_FILE_ALIGN (abfd)))
5119	return FALSE;
5120
5121      s->size = sizeof (Elf32_External_compact_rel);
5122    }
5123
5124  return TRUE;
5125}
5126
5127/* Create the .got section to hold the global offset table.  */
5128
5129static bfd_boolean
5130mips_elf_create_got_section (bfd *abfd, struct bfd_link_info *info)
5131{
5132  flagword flags;
5133  register asection *s;
5134  struct elf_link_hash_entry *h;
5135  struct bfd_link_hash_entry *bh;
5136  struct mips_elf_link_hash_table *htab;
5137
5138  htab = mips_elf_hash_table (info);
5139  BFD_ASSERT (htab != NULL);
5140
5141  /* This function may be called more than once.  */
5142  if (htab->root.sgot)
5143    return TRUE;
5144
5145  flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
5146	   | SEC_LINKER_CREATED);
5147
5148  /* We have to use an alignment of 2**4 here because this is hardcoded
5149     in the function stub generation and in the linker script.  */
5150  s = bfd_make_section_anyway_with_flags (abfd, ".got", flags);
5151  if (s == NULL
5152      || ! bfd_set_section_alignment (abfd, s, 4))
5153    return FALSE;
5154  htab->root.sgot = s;
5155
5156  /* Define the symbol _GLOBAL_OFFSET_TABLE_.  We don't do this in the
5157     linker script because we don't want to define the symbol if we
5158     are not creating a global offset table.  */
5159  bh = NULL;
5160  if (! (_bfd_generic_link_add_one_symbol
5161	 (info, abfd, "_GLOBAL_OFFSET_TABLE_", BSF_GLOBAL, s,
5162	  0, NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
5163    return FALSE;
5164
5165  h = (struct elf_link_hash_entry *) bh;
5166  h->non_elf = 0;
5167  h->def_regular = 1;
5168  h->type = STT_OBJECT;
5169  h->other = (h->other & ~ELF_ST_VISIBILITY (-1)) | STV_HIDDEN;
5170  elf_hash_table (info)->hgot = h;
5171
5172  if (bfd_link_pic (info)
5173      && ! bfd_elf_link_record_dynamic_symbol (info, h))
5174    return FALSE;
5175
5176  htab->got_info = mips_elf_create_got_info (abfd);
5177  mips_elf_section_data (s)->elf.this_hdr.sh_flags
5178    |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL;
5179
5180  /* We also need a .got.plt section when generating PLTs.  */
5181  s = bfd_make_section_anyway_with_flags (abfd, ".got.plt",
5182					  SEC_ALLOC | SEC_LOAD
5183					  | SEC_HAS_CONTENTS
5184					  | SEC_IN_MEMORY
5185					  | SEC_LINKER_CREATED);
5186  if (s == NULL)
5187    return FALSE;
5188  htab->root.sgotplt = s;
5189
5190  return TRUE;
5191}
5192
5193/* Return true if H refers to the special VxWorks __GOTT_BASE__ or
5194   __GOTT_INDEX__ symbols.  These symbols are only special for
5195   shared objects; they are not used in executables.  */
5196
5197static bfd_boolean
5198is_gott_symbol (struct bfd_link_info *info, struct elf_link_hash_entry *h)
5199{
5200  return (mips_elf_hash_table (info)->is_vxworks
5201	  && bfd_link_pic (info)
5202	  && (strcmp (h->root.root.string, "__GOTT_BASE__") == 0
5203	      || strcmp (h->root.root.string, "__GOTT_INDEX__") == 0));
5204}
5205
5206/* Return TRUE if a relocation of type R_TYPE from INPUT_BFD might
5207   require an la25 stub.  See also mips_elf_local_pic_function_p,
5208   which determines whether the destination function ever requires a
5209   stub.  */
5210
5211static bfd_boolean
5212mips_elf_relocation_needs_la25_stub (bfd *input_bfd, int r_type,
5213				     bfd_boolean target_is_16_bit_code_p)
5214{
5215  /* We specifically ignore branches and jumps from EF_PIC objects,
5216     where the onus is on the compiler or programmer to perform any
5217     necessary initialization of $25.  Sometimes such initialization
5218     is unnecessary; for example, -mno-shared functions do not use
5219     the incoming value of $25, and may therefore be called directly.  */
5220  if (PIC_OBJECT_P (input_bfd))
5221    return FALSE;
5222
5223  switch (r_type)
5224    {
5225    case R_MIPS_26:
5226    case R_MIPS_PC16:
5227    case R_MIPS_PC21_S2:
5228    case R_MIPS_PC26_S2:
5229    case R_MICROMIPS_26_S1:
5230    case R_MICROMIPS_PC7_S1:
5231    case R_MICROMIPS_PC10_S1:
5232    case R_MICROMIPS_PC16_S1:
5233    case R_MICROMIPS_PC23_S2:
5234      return TRUE;
5235
5236    case R_MIPS16_26:
5237      return !target_is_16_bit_code_p;
5238
5239    default:
5240      return FALSE;
5241    }
5242}
5243
5244/* Calculate the value produced by the RELOCATION (which comes from
5245   the INPUT_BFD).  The ADDEND is the addend to use for this
5246   RELOCATION; RELOCATION->R_ADDEND is ignored.
5247
5248   The result of the relocation calculation is stored in VALUEP.
5249   On exit, set *CROSS_MODE_JUMP_P to true if the relocation field
5250   is a MIPS16 or microMIPS jump to standard MIPS code, or vice versa.
5251
5252   This function returns bfd_reloc_continue if the caller need take no
5253   further action regarding this relocation, bfd_reloc_notsupported if
5254   something goes dramatically wrong, bfd_reloc_overflow if an
5255   overflow occurs, and bfd_reloc_ok to indicate success.  */
5256
5257static bfd_reloc_status_type
5258mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
5259			       asection *input_section,
5260			       struct bfd_link_info *info,
5261			       const Elf_Internal_Rela *relocation,
5262			       bfd_vma addend, reloc_howto_type *howto,
5263			       Elf_Internal_Sym *local_syms,
5264			       asection **local_sections, bfd_vma *valuep,
5265			       const char **namep,
5266			       bfd_boolean *cross_mode_jump_p,
5267			       bfd_boolean save_addend)
5268{
5269  /* The eventual value we will return.  */
5270  bfd_vma value;
5271  /* The address of the symbol against which the relocation is
5272     occurring.  */
5273  bfd_vma symbol = 0;
5274  /* The final GP value to be used for the relocatable, executable, or
5275     shared object file being produced.  */
5276  bfd_vma gp;
5277  /* The place (section offset or address) of the storage unit being
5278     relocated.  */
5279  bfd_vma p;
5280  /* The value of GP used to create the relocatable object.  */
5281  bfd_vma gp0;
5282  /* The offset into the global offset table at which the address of
5283     the relocation entry symbol, adjusted by the addend, resides
5284     during execution.  */
5285  bfd_vma g = MINUS_ONE;
5286  /* The section in which the symbol referenced by the relocation is
5287     located.  */
5288  asection *sec = NULL;
5289  struct mips_elf_link_hash_entry *h = NULL;
5290  /* TRUE if the symbol referred to by this relocation is a local
5291     symbol.  */
5292  bfd_boolean local_p, was_local_p;
5293  /* TRUE if the symbol referred to by this relocation is a section
5294     symbol.  */
5295  bfd_boolean section_p = FALSE;
5296  /* TRUE if the symbol referred to by this relocation is "_gp_disp".  */
5297  bfd_boolean gp_disp_p = FALSE;
5298  /* TRUE if the symbol referred to by this relocation is
5299     "__gnu_local_gp".  */
5300  bfd_boolean gnu_local_gp_p = FALSE;
5301  Elf_Internal_Shdr *symtab_hdr;
5302  size_t extsymoff;
5303  unsigned long r_symndx;
5304  int r_type;
5305  /* TRUE if overflow occurred during the calculation of the
5306     relocation value.  */
5307  bfd_boolean overflowed_p;
5308  /* TRUE if this relocation refers to a MIPS16 function.  */
5309  bfd_boolean target_is_16_bit_code_p = FALSE;
5310  bfd_boolean target_is_micromips_code_p = FALSE;
5311  struct mips_elf_link_hash_table *htab;
5312  bfd *dynobj;
5313
5314  dynobj = elf_hash_table (info)->dynobj;
5315  htab = mips_elf_hash_table (info);
5316  BFD_ASSERT (htab != NULL);
5317
5318  /* Parse the relocation.  */
5319  r_symndx = ELF_R_SYM (input_bfd, relocation->r_info);
5320  r_type = ELF_R_TYPE (input_bfd, relocation->r_info);
5321  p = (input_section->output_section->vma
5322       + input_section->output_offset
5323       + relocation->r_offset);
5324
5325  /* Assume that there will be no overflow.  */
5326  overflowed_p = FALSE;
5327
5328  /* Figure out whether or not the symbol is local, and get the offset
5329     used in the array of hash table entries.  */
5330  symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
5331  local_p = mips_elf_local_relocation_p (input_bfd, relocation,
5332					 local_sections);
5333  was_local_p = local_p;
5334  if (! elf_bad_symtab (input_bfd))
5335    extsymoff = symtab_hdr->sh_info;
5336  else
5337    {
5338      /* The symbol table does not follow the rule that local symbols
5339	 must come before globals.  */
5340      extsymoff = 0;
5341    }
5342
5343  /* Figure out the value of the symbol.  */
5344  if (local_p)
5345    {
5346      bfd_boolean micromips_p = MICROMIPS_P (abfd);
5347      Elf_Internal_Sym *sym;
5348
5349      sym = local_syms + r_symndx;
5350      sec = local_sections[r_symndx];
5351
5352      section_p = ELF_ST_TYPE (sym->st_info) == STT_SECTION;
5353
5354      symbol = sec->output_section->vma + sec->output_offset;
5355      if (!section_p || (sec->flags & SEC_MERGE))
5356	symbol += sym->st_value;
5357      if ((sec->flags & SEC_MERGE) && section_p)
5358	{
5359	  addend = _bfd_elf_rel_local_sym (abfd, sym, &sec, addend);
5360	  addend -= symbol;
5361	  addend += sec->output_section->vma + sec->output_offset;
5362	}
5363
5364      /* MIPS16/microMIPS text labels should be treated as odd.  */
5365      if (ELF_ST_IS_COMPRESSED (sym->st_other))
5366	++symbol;
5367
5368      /* Record the name of this symbol, for our caller.  */
5369      *namep = bfd_elf_string_from_elf_section (input_bfd,
5370						symtab_hdr->sh_link,
5371						sym->st_name);
5372      if (*namep == NULL || **namep == '\0')
5373	*namep = bfd_section_name (input_bfd, sec);
5374
5375      /* For relocations against a section symbol and ones against no
5376         symbol (absolute relocations) infer the ISA mode from the addend.  */
5377      if (section_p || r_symndx == STN_UNDEF)
5378	{
5379	  target_is_16_bit_code_p = (addend & 1) && !micromips_p;
5380	  target_is_micromips_code_p = (addend & 1) && micromips_p;
5381	}
5382      /* For relocations against an absolute symbol infer the ISA mode
5383         from the value of the symbol plus addend.  */
5384      else if (bfd_is_abs_section (sec))
5385	{
5386	  target_is_16_bit_code_p = ((symbol + addend) & 1) && !micromips_p;
5387	  target_is_micromips_code_p = ((symbol + addend) & 1) && micromips_p;
5388	}
5389      /* Otherwise just use the regular symbol annotation available.  */
5390      else
5391	{
5392	  target_is_16_bit_code_p = ELF_ST_IS_MIPS16 (sym->st_other);
5393	  target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (sym->st_other);
5394	}
5395    }
5396  else
5397    {
5398      /* ??? Could we use RELOC_FOR_GLOBAL_SYMBOL here ?  */
5399
5400      /* For global symbols we look up the symbol in the hash-table.  */
5401      h = ((struct mips_elf_link_hash_entry *)
5402	   elf_sym_hashes (input_bfd) [r_symndx - extsymoff]);
5403      /* Find the real hash-table entry for this symbol.  */
5404      while (h->root.root.type == bfd_link_hash_indirect
5405	     || h->root.root.type == bfd_link_hash_warning)
5406	h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
5407
5408      /* Record the name of this symbol, for our caller.  */
5409      *namep = h->root.root.root.string;
5410
5411      /* See if this is the special _gp_disp symbol.  Note that such a
5412	 symbol must always be a global symbol.  */
5413      if (strcmp (*namep, "_gp_disp") == 0
5414	  && ! NEWABI_P (input_bfd))
5415	{
5416	  /* Relocations against _gp_disp are permitted only with
5417	     R_MIPS_HI16 and R_MIPS_LO16 relocations.  */
5418	  if (!hi16_reloc_p (r_type) && !lo16_reloc_p (r_type))
5419	    return bfd_reloc_notsupported;
5420
5421	  gp_disp_p = TRUE;
5422	}
5423      /* See if this is the special _gp symbol.  Note that such a
5424	 symbol must always be a global symbol.  */
5425      else if (strcmp (*namep, "__gnu_local_gp") == 0)
5426	gnu_local_gp_p = TRUE;
5427
5428
5429      /* If this symbol is defined, calculate its address.  Note that
5430	 _gp_disp is a magic symbol, always implicitly defined by the
5431	 linker, so it's inappropriate to check to see whether or not
5432	 its defined.  */
5433      else if ((h->root.root.type == bfd_link_hash_defined
5434		|| h->root.root.type == bfd_link_hash_defweak)
5435	       && h->root.root.u.def.section)
5436	{
5437	  sec = h->root.root.u.def.section;
5438	  if (sec->output_section)
5439	    symbol = (h->root.root.u.def.value
5440		      + sec->output_section->vma
5441		      + sec->output_offset);
5442	  else
5443	    symbol = h->root.root.u.def.value;
5444	}
5445      else if (h->root.root.type == bfd_link_hash_undefweak)
5446	/* We allow relocations against undefined weak symbols, giving
5447	   it the value zero, so that you can undefined weak functions
5448	   and check to see if they exist by looking at their
5449	   addresses.  */
5450	symbol = 0;
5451      else if (info->unresolved_syms_in_objects == RM_IGNORE
5452	       && ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT)
5453	symbol = 0;
5454      else if (strcmp (*namep, SGI_COMPAT (input_bfd)
5455		       ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING") == 0)
5456	{
5457	  /* If this is a dynamic link, we should have created a
5458	     _DYNAMIC_LINK symbol or _DYNAMIC_LINKING(for normal mips) symbol
5459	     in in _bfd_mips_elf_create_dynamic_sections.
5460	     Otherwise, we should define the symbol with a value of 0.
5461	     FIXME: It should probably get into the symbol table
5462	     somehow as well.  */
5463	  BFD_ASSERT (! bfd_link_pic (info));
5464	  BFD_ASSERT (bfd_get_section_by_name (abfd, ".dynamic") == NULL);
5465	  symbol = 0;
5466	}
5467      else if (ELF_MIPS_IS_OPTIONAL (h->root.other))
5468	{
5469	  /* This is an optional symbol - an Irix specific extension to the
5470	     ELF spec.  Ignore it for now.
5471	     XXX - FIXME - there is more to the spec for OPTIONAL symbols
5472	     than simply ignoring them, but we do not handle this for now.
5473	     For information see the "64-bit ELF Object File Specification"
5474	     which is available from here:
5475	     http://techpubs.sgi.com/library/manuals/4000/007-4658-001/pdf/007-4658-001.pdf  */
5476	  symbol = 0;
5477	}
5478      else
5479	{
5480	  (*info->callbacks->undefined_symbol)
5481	    (info, h->root.root.root.string, input_bfd,
5482	     input_section, relocation->r_offset,
5483	     (info->unresolved_syms_in_objects == RM_GENERATE_ERROR)
5484	     || ELF_ST_VISIBILITY (h->root.other));
5485	  return bfd_reloc_undefined;
5486	}
5487
5488      target_is_16_bit_code_p = ELF_ST_IS_MIPS16 (h->root.other);
5489      target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (h->root.other);
5490    }
5491
5492  /* If this is a reference to a 16-bit function with a stub, we need
5493     to redirect the relocation to the stub unless:
5494
5495     (a) the relocation is for a MIPS16 JAL;
5496
5497     (b) the relocation is for a MIPS16 PIC call, and there are no
5498	 non-MIPS16 uses of the GOT slot; or
5499
5500     (c) the section allows direct references to MIPS16 functions.  */
5501  if (r_type != R_MIPS16_26
5502      && !bfd_link_relocatable (info)
5503      && ((h != NULL
5504	   && h->fn_stub != NULL
5505	   && (r_type != R_MIPS16_CALL16 || h->need_fn_stub))
5506	  || (local_p
5507	      && mips_elf_tdata (input_bfd)->local_stubs != NULL
5508	      && mips_elf_tdata (input_bfd)->local_stubs[r_symndx] != NULL))
5509      && !section_allows_mips16_refs_p (input_section))
5510    {
5511      /* This is a 32- or 64-bit call to a 16-bit function.  We should
5512	 have already noticed that we were going to need the
5513	 stub.  */
5514      if (local_p)
5515	{
5516	  sec = mips_elf_tdata (input_bfd)->local_stubs[r_symndx];
5517	  value = 0;
5518	}
5519      else
5520	{
5521	  BFD_ASSERT (h->need_fn_stub);
5522	  if (h->la25_stub)
5523	    {
5524	      /* If a LA25 header for the stub itself exists, point to the
5525		 prepended LUI/ADDIU sequence.  */
5526	      sec = h->la25_stub->stub_section;
5527	      value = h->la25_stub->offset;
5528	    }
5529	  else
5530	    {
5531	      sec = h->fn_stub;
5532	      value = 0;
5533	    }
5534	}
5535
5536      symbol = sec->output_section->vma + sec->output_offset + value;
5537      /* The target is 16-bit, but the stub isn't.  */
5538      target_is_16_bit_code_p = FALSE;
5539    }
5540  /* If this is a MIPS16 call with a stub, that is made through the PLT or
5541     to a standard MIPS function, we need to redirect the call to the stub.
5542     Note that we specifically exclude R_MIPS16_CALL16 from this behavior;
5543     indirect calls should use an indirect stub instead.  */
5544  else if (r_type == R_MIPS16_26 && !bfd_link_relocatable (info)
5545	   && ((h != NULL && (h->call_stub != NULL || h->call_fp_stub != NULL))
5546	       || (local_p
5547		   && mips_elf_tdata (input_bfd)->local_call_stubs != NULL
5548		   && mips_elf_tdata (input_bfd)->local_call_stubs[r_symndx] != NULL))
5549	   && ((h != NULL && h->use_plt_entry) || !target_is_16_bit_code_p))
5550    {
5551      if (local_p)
5552	sec = mips_elf_tdata (input_bfd)->local_call_stubs[r_symndx];
5553      else
5554	{
5555	  /* If both call_stub and call_fp_stub are defined, we can figure
5556	     out which one to use by checking which one appears in the input
5557	     file.  */
5558	  if (h->call_stub != NULL && h->call_fp_stub != NULL)
5559	    {
5560	      asection *o;
5561
5562	      sec = NULL;
5563	      for (o = input_bfd->sections; o != NULL; o = o->next)
5564		{
5565		  if (CALL_FP_STUB_P (bfd_get_section_name (input_bfd, o)))
5566		    {
5567		      sec = h->call_fp_stub;
5568		      break;
5569		    }
5570		}
5571	      if (sec == NULL)
5572		sec = h->call_stub;
5573	    }
5574	  else if (h->call_stub != NULL)
5575	    sec = h->call_stub;
5576	  else
5577	    sec = h->call_fp_stub;
5578  	}
5579
5580      BFD_ASSERT (sec->size > 0);
5581      symbol = sec->output_section->vma + sec->output_offset;
5582    }
5583  /* If this is a direct call to a PIC function, redirect to the
5584     non-PIC stub.  */
5585  else if (h != NULL && h->la25_stub
5586	   && mips_elf_relocation_needs_la25_stub (input_bfd, r_type,
5587						   target_is_16_bit_code_p))
5588    {
5589	symbol = (h->la25_stub->stub_section->output_section->vma
5590		  + h->la25_stub->stub_section->output_offset
5591		  + h->la25_stub->offset);
5592	if (ELF_ST_IS_MICROMIPS (h->root.other))
5593	  symbol |= 1;
5594    }
5595  /* For direct MIPS16 and microMIPS calls make sure the compressed PLT
5596     entry is used if a standard PLT entry has also been made.  In this
5597     case the symbol will have been set by mips_elf_set_plt_sym_value
5598     to point to the standard PLT entry, so redirect to the compressed
5599     one.  */
5600  else if ((mips16_branch_reloc_p (r_type)
5601	    || micromips_branch_reloc_p (r_type))
5602	   && !bfd_link_relocatable (info)
5603	   && h != NULL
5604	   && h->use_plt_entry
5605	   && h->root.plt.plist->comp_offset != MINUS_ONE
5606	   && h->root.plt.plist->mips_offset != MINUS_ONE)
5607    {
5608      bfd_boolean micromips_p = MICROMIPS_P (abfd);
5609
5610      sec = htab->root.splt;
5611      symbol = (sec->output_section->vma
5612		+ sec->output_offset
5613		+ htab->plt_header_size
5614		+ htab->plt_mips_offset
5615		+ h->root.plt.plist->comp_offset
5616		+ 1);
5617
5618      target_is_16_bit_code_p = !micromips_p;
5619      target_is_micromips_code_p = micromips_p;
5620    }
5621
5622  /* Make sure MIPS16 and microMIPS are not used together.  */
5623  if ((mips16_branch_reloc_p (r_type) && target_is_micromips_code_p)
5624      || (micromips_branch_reloc_p (r_type) && target_is_16_bit_code_p))
5625   {
5626      _bfd_error_handler
5627	(_("MIPS16 and microMIPS functions cannot call each other"));
5628      return bfd_reloc_notsupported;
5629   }
5630
5631  /* Calls from 16-bit code to 32-bit code and vice versa require the
5632     mode change.  However, we can ignore calls to undefined weak symbols,
5633     which should never be executed at runtime.  This exception is important
5634     because the assembly writer may have "known" that any definition of the
5635     symbol would be 16-bit code, and that direct jumps were therefore
5636     acceptable.  */
5637  *cross_mode_jump_p = (!bfd_link_relocatable (info)
5638			&& !(h && h->root.root.type == bfd_link_hash_undefweak)
5639			&& ((mips16_branch_reloc_p (r_type)
5640			     && !target_is_16_bit_code_p)
5641			    || (micromips_branch_reloc_p (r_type)
5642				&& !target_is_micromips_code_p)
5643			    || ((branch_reloc_p (r_type)
5644				 || r_type == R_MIPS_JALR)
5645				&& (target_is_16_bit_code_p
5646				    || target_is_micromips_code_p))));
5647
5648  local_p = (h == NULL || mips_use_local_got_p (info, h));
5649
5650  gp0 = _bfd_get_gp_value (input_bfd);
5651  gp = _bfd_get_gp_value (abfd);
5652  if (htab->got_info)
5653    gp += mips_elf_adjust_gp (abfd, htab->got_info, input_bfd);
5654
5655  if (gnu_local_gp_p)
5656    symbol = gp;
5657
5658  /* Global R_MIPS_GOT_PAGE/R_MICROMIPS_GOT_PAGE relocations are equivalent
5659     to R_MIPS_GOT_DISP/R_MICROMIPS_GOT_DISP.  The addend is applied by the
5660     corresponding R_MIPS_GOT_OFST/R_MICROMIPS_GOT_OFST.  */
5661  if (got_page_reloc_p (r_type) && !local_p)
5662    {
5663      r_type = (micromips_reloc_p (r_type)
5664		? R_MICROMIPS_GOT_DISP : R_MIPS_GOT_DISP);
5665      addend = 0;
5666    }
5667
5668  /* If we haven't already determined the GOT offset, and we're going
5669     to need it, get it now.  */
5670  switch (r_type)
5671    {
5672    case R_MIPS16_CALL16:
5673    case R_MIPS16_GOT16:
5674    case R_MIPS_CALL16:
5675    case R_MIPS_GOT16:
5676    case R_MIPS_GOT_DISP:
5677    case R_MIPS_GOT_HI16:
5678    case R_MIPS_CALL_HI16:
5679    case R_MIPS_GOT_LO16:
5680    case R_MIPS_CALL_LO16:
5681    case R_MICROMIPS_CALL16:
5682    case R_MICROMIPS_GOT16:
5683    case R_MICROMIPS_GOT_DISP:
5684    case R_MICROMIPS_GOT_HI16:
5685    case R_MICROMIPS_CALL_HI16:
5686    case R_MICROMIPS_GOT_LO16:
5687    case R_MICROMIPS_CALL_LO16:
5688    case R_MIPS_TLS_GD:
5689    case R_MIPS_TLS_GOTTPREL:
5690    case R_MIPS_TLS_LDM:
5691    case R_MIPS16_TLS_GD:
5692    case R_MIPS16_TLS_GOTTPREL:
5693    case R_MIPS16_TLS_LDM:
5694    case R_MICROMIPS_TLS_GD:
5695    case R_MICROMIPS_TLS_GOTTPREL:
5696    case R_MICROMIPS_TLS_LDM:
5697      /* Find the index into the GOT where this value is located.  */
5698      if (tls_ldm_reloc_p (r_type))
5699	{
5700	  g = mips_elf_local_got_index (abfd, input_bfd, info,
5701					0, 0, NULL, r_type);
5702	  if (g == MINUS_ONE)
5703	    return bfd_reloc_outofrange;
5704	}
5705      else if (!local_p)
5706	{
5707	  /* On VxWorks, CALL relocations should refer to the .got.plt
5708	     entry, which is initialized to point at the PLT stub.  */
5709	  if (htab->is_vxworks
5710	      && (call_hi16_reloc_p (r_type)
5711		  || call_lo16_reloc_p (r_type)
5712		  || call16_reloc_p (r_type)))
5713	    {
5714	      BFD_ASSERT (addend == 0);
5715	      BFD_ASSERT (h->root.needs_plt);
5716	      g = mips_elf_gotplt_index (info, &h->root);
5717	    }
5718	  else
5719	    {
5720	      BFD_ASSERT (addend == 0);
5721	      g = mips_elf_global_got_index (abfd, info, input_bfd,
5722					     &h->root, r_type);
5723	      if (!TLS_RELOC_P (r_type)
5724		  && !elf_hash_table (info)->dynamic_sections_created)
5725		/* This is a static link.  We must initialize the GOT entry.  */
5726		MIPS_ELF_PUT_WORD (dynobj, symbol, htab->root.sgot->contents + g);
5727	    }
5728	}
5729      else if (!htab->is_vxworks
5730	       && (call16_reloc_p (r_type) || got16_reloc_p (r_type)))
5731	/* The calculation below does not involve "g".  */
5732	break;
5733      else
5734	{
5735	  g = mips_elf_local_got_index (abfd, input_bfd, info,
5736					symbol + addend, r_symndx, h, r_type);
5737	  if (g == MINUS_ONE)
5738	    return bfd_reloc_outofrange;
5739	}
5740
5741      /* Convert GOT indices to actual offsets.  */
5742      g = mips_elf_got_offset_from_index (info, abfd, input_bfd, g);
5743      break;
5744    }
5745
5746  /* Relocations against the VxWorks __GOTT_BASE__ and __GOTT_INDEX__
5747     symbols are resolved by the loader.  Add them to .rela.dyn.  */
5748  if (h != NULL && is_gott_symbol (info, &h->root))
5749    {
5750      Elf_Internal_Rela outrel;
5751      bfd_byte *loc;
5752      asection *s;
5753
5754      s = mips_elf_rel_dyn_section (info, FALSE);
5755      loc = s->contents + s->reloc_count++ * sizeof (Elf32_External_Rela);
5756
5757      outrel.r_offset = (input_section->output_section->vma
5758			 + input_section->output_offset
5759			 + relocation->r_offset);
5760      outrel.r_info = ELF32_R_INFO (h->root.dynindx, r_type);
5761      outrel.r_addend = addend;
5762      bfd_elf32_swap_reloca_out (abfd, &outrel, loc);
5763
5764      /* If we've written this relocation for a readonly section,
5765	 we need to set DF_TEXTREL again, so that we do not delete the
5766	 DT_TEXTREL tag.  */
5767      if (MIPS_ELF_READONLY_SECTION (input_section))
5768	info->flags |= DF_TEXTREL;
5769
5770      *valuep = 0;
5771      return bfd_reloc_ok;
5772    }
5773
5774  /* Figure out what kind of relocation is being performed.  */
5775  switch (r_type)
5776    {
5777    case R_MIPS_NONE:
5778      return bfd_reloc_continue;
5779
5780    case R_MIPS_16:
5781      if (howto->partial_inplace)
5782	addend = _bfd_mips_elf_sign_extend (addend, 16);
5783      value = symbol + addend;
5784      overflowed_p = mips_elf_overflow_p (value, 16);
5785      break;
5786
5787    case R_MIPS_32:
5788    case R_MIPS_REL32:
5789    case R_MIPS_64:
5790      if ((bfd_link_pic (info)
5791	   || (htab->root.dynamic_sections_created
5792	       && h != NULL
5793	       && h->root.def_dynamic
5794	       && !h->root.def_regular
5795	       && !h->has_static_relocs))
5796	  && r_symndx != STN_UNDEF
5797	  && (h == NULL
5798	      || h->root.root.type != bfd_link_hash_undefweak
5799	      || ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT)
5800	  && (input_section->flags & SEC_ALLOC) != 0)
5801	{
5802	  /* If we're creating a shared library, then we can't know
5803	     where the symbol will end up.  So, we create a relocation
5804	     record in the output, and leave the job up to the dynamic
5805	     linker.  We must do the same for executable references to
5806	     shared library symbols, unless we've decided to use copy
5807	     relocs or PLTs instead.  */
5808	  value = addend;
5809	  if (!mips_elf_create_dynamic_relocation (abfd,
5810						   info,
5811						   relocation,
5812						   h,
5813						   sec,
5814						   symbol,
5815						   &value,
5816						   input_section))
5817	    return bfd_reloc_undefined;
5818	}
5819      else
5820	{
5821	  if (r_type != R_MIPS_REL32)
5822	    value = symbol + addend;
5823	  else
5824	    value = addend;
5825	}
5826      value &= howto->dst_mask;
5827      break;
5828
5829    case R_MIPS_PC32:
5830      value = symbol + addend - p;
5831      value &= howto->dst_mask;
5832      break;
5833
5834    case R_MIPS16_26:
5835      /* The calculation for R_MIPS16_26 is just the same as for an
5836	 R_MIPS_26.  It's only the storage of the relocated field into
5837	 the output file that's different.  That's handled in
5838	 mips_elf_perform_relocation.  So, we just fall through to the
5839	 R_MIPS_26 case here.  */
5840    case R_MIPS_26:
5841    case R_MICROMIPS_26_S1:
5842      {
5843	unsigned int shift;
5844
5845	/* Shift is 2, unusually, for microMIPS JALX.  */
5846	shift = (!*cross_mode_jump_p && r_type == R_MICROMIPS_26_S1) ? 1 : 2;
5847
5848	if (howto->partial_inplace && !section_p)
5849	  value = _bfd_mips_elf_sign_extend (addend, 26 + shift);
5850	else
5851	  value = addend;
5852	value += symbol;
5853
5854	/* Make sure the target of a jump is suitably aligned.  Bit 0 must
5855	   be the correct ISA mode selector except for weak undefined
5856	   symbols.  */
5857	if ((was_local_p || h->root.root.type != bfd_link_hash_undefweak)
5858	    && (*cross_mode_jump_p
5859		? (value & 3) != (r_type == R_MIPS_26)
5860	        : (value & ((1 << shift) - 1)) != (r_type != R_MIPS_26)))
5861	  return bfd_reloc_outofrange;
5862
5863	value >>= shift;
5864	if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
5865	  overflowed_p = (value >> 26) != ((p + 4) >> (26 + shift));
5866	value &= howto->dst_mask;
5867      }
5868      break;
5869
5870    case R_MIPS_TLS_DTPREL_HI16:
5871    case R_MIPS16_TLS_DTPREL_HI16:
5872    case R_MICROMIPS_TLS_DTPREL_HI16:
5873      value = (mips_elf_high (addend + symbol - dtprel_base (info))
5874	       & howto->dst_mask);
5875      break;
5876
5877    case R_MIPS_TLS_DTPREL_LO16:
5878    case R_MIPS_TLS_DTPREL32:
5879    case R_MIPS_TLS_DTPREL64:
5880    case R_MIPS16_TLS_DTPREL_LO16:
5881    case R_MICROMIPS_TLS_DTPREL_LO16:
5882      value = (symbol + addend - dtprel_base (info)) & howto->dst_mask;
5883      break;
5884
5885    case R_MIPS_TLS_TPREL_HI16:
5886    case R_MIPS16_TLS_TPREL_HI16:
5887    case R_MICROMIPS_TLS_TPREL_HI16:
5888      value = (mips_elf_high (addend + symbol - tprel_base (info))
5889	       & howto->dst_mask);
5890      break;
5891
5892    case R_MIPS_TLS_TPREL_LO16:
5893    case R_MIPS_TLS_TPREL32:
5894    case R_MIPS_TLS_TPREL64:
5895    case R_MIPS16_TLS_TPREL_LO16:
5896    case R_MICROMIPS_TLS_TPREL_LO16:
5897      value = (symbol + addend - tprel_base (info)) & howto->dst_mask;
5898      break;
5899
5900    case R_MIPS_HI16:
5901    case R_MIPS16_HI16:
5902    case R_MICROMIPS_HI16:
5903      if (!gp_disp_p)
5904	{
5905	  value = mips_elf_high (addend + symbol);
5906	  value &= howto->dst_mask;
5907	}
5908      else
5909	{
5910	  /* For MIPS16 ABI code we generate this sequence
5911	        0: li      $v0,%hi(_gp_disp)
5912	        4: addiupc $v1,%lo(_gp_disp)
5913	        8: sll     $v0,16
5914	       12: addu    $v0,$v1
5915	       14: move    $gp,$v0
5916	     So the offsets of hi and lo relocs are the same, but the
5917	     base $pc is that used by the ADDIUPC instruction at $t9 + 4.
5918	     ADDIUPC clears the low two bits of the instruction address,
5919	     so the base is ($t9 + 4) & ~3.  */
5920	  if (r_type == R_MIPS16_HI16)
5921	    value = mips_elf_high (addend + gp - ((p + 4) & ~(bfd_vma) 0x3));
5922	  /* The microMIPS .cpload sequence uses the same assembly
5923	     instructions as the traditional psABI version, but the
5924	     incoming $t9 has the low bit set.  */
5925	  else if (r_type == R_MICROMIPS_HI16)
5926	    value = mips_elf_high (addend + gp - p - 1);
5927	  else
5928	    value = mips_elf_high (addend + gp - p);
5929	}
5930      break;
5931
5932    case R_MIPS_LO16:
5933    case R_MIPS16_LO16:
5934    case R_MICROMIPS_LO16:
5935    case R_MICROMIPS_HI0_LO16:
5936      if (!gp_disp_p)
5937	value = (symbol + addend) & howto->dst_mask;
5938      else
5939	{
5940	  /* See the comment for R_MIPS16_HI16 above for the reason
5941	     for this conditional.  */
5942	  if (r_type == R_MIPS16_LO16)
5943	    value = addend + gp - (p & ~(bfd_vma) 0x3);
5944	  else if (r_type == R_MICROMIPS_LO16
5945		   || r_type == R_MICROMIPS_HI0_LO16)
5946	    value = addend + gp - p + 3;
5947	  else
5948	    value = addend + gp - p + 4;
5949	  /* The MIPS ABI requires checking the R_MIPS_LO16 relocation
5950	     for overflow.  But, on, say, IRIX5, relocations against
5951	     _gp_disp are normally generated from the .cpload
5952	     pseudo-op.  It generates code that normally looks like
5953	     this:
5954
5955	       lui    $gp,%hi(_gp_disp)
5956	       addiu  $gp,$gp,%lo(_gp_disp)
5957	       addu   $gp,$gp,$t9
5958
5959	     Here $t9 holds the address of the function being called,
5960	     as required by the MIPS ELF ABI.  The R_MIPS_LO16
5961	     relocation can easily overflow in this situation, but the
5962	     R_MIPS_HI16 relocation will handle the overflow.
5963	     Therefore, we consider this a bug in the MIPS ABI, and do
5964	     not check for overflow here.  */
5965	}
5966      break;
5967
5968    case R_MIPS_LITERAL:
5969    case R_MICROMIPS_LITERAL:
5970      /* Because we don't merge literal sections, we can handle this
5971	 just like R_MIPS_GPREL16.  In the long run, we should merge
5972	 shared literals, and then we will need to additional work
5973	 here.  */
5974
5975      /* Fall through.  */
5976
5977    case R_MIPS16_GPREL:
5978      /* The R_MIPS16_GPREL performs the same calculation as
5979	 R_MIPS_GPREL16, but stores the relocated bits in a different
5980	 order.  We don't need to do anything special here; the
5981	 differences are handled in mips_elf_perform_relocation.  */
5982    case R_MIPS_GPREL16:
5983    case R_MICROMIPS_GPREL7_S2:
5984    case R_MICROMIPS_GPREL16:
5985      /* Only sign-extend the addend if it was extracted from the
5986	 instruction.  If the addend was separate, leave it alone,
5987	 otherwise we may lose significant bits.  */
5988      if (howto->partial_inplace)
5989	addend = _bfd_mips_elf_sign_extend (addend, 16);
5990      value = symbol + addend - gp;
5991      /* If the symbol was local, any earlier relocatable links will
5992	 have adjusted its addend with the gp offset, so compensate
5993	 for that now.  Don't do it for symbols forced local in this
5994	 link, though, since they won't have had the gp offset applied
5995	 to them before.  */
5996      if (was_local_p)
5997	value += gp0;
5998      if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
5999	overflowed_p = mips_elf_overflow_p (value, 16);
6000      break;
6001
6002    case R_MIPS16_GOT16:
6003    case R_MIPS16_CALL16:
6004    case R_MIPS_GOT16:
6005    case R_MIPS_CALL16:
6006    case R_MICROMIPS_GOT16:
6007    case R_MICROMIPS_CALL16:
6008      /* VxWorks does not have separate local and global semantics for
6009	 R_MIPS*_GOT16; every relocation evaluates to "G".  */
6010      if (!htab->is_vxworks && local_p)
6011	{
6012	  value = mips_elf_got16_entry (abfd, input_bfd, info,
6013					symbol + addend, !was_local_p);
6014	  if (value == MINUS_ONE)
6015	    return bfd_reloc_outofrange;
6016	  value
6017	    = mips_elf_got_offset_from_index (info, abfd, input_bfd, value);
6018	  overflowed_p = mips_elf_overflow_p (value, 16);
6019	  break;
6020	}
6021
6022      /* Fall through.  */
6023
6024    case R_MIPS_TLS_GD:
6025    case R_MIPS_TLS_GOTTPREL:
6026    case R_MIPS_TLS_LDM:
6027    case R_MIPS_GOT_DISP:
6028    case R_MIPS16_TLS_GD:
6029    case R_MIPS16_TLS_GOTTPREL:
6030    case R_MIPS16_TLS_LDM:
6031    case R_MICROMIPS_TLS_GD:
6032    case R_MICROMIPS_TLS_GOTTPREL:
6033    case R_MICROMIPS_TLS_LDM:
6034    case R_MICROMIPS_GOT_DISP:
6035      value = g;
6036      overflowed_p = mips_elf_overflow_p (value, 16);
6037      break;
6038
6039    case R_MIPS_GPREL32:
6040      value = (addend + symbol + gp0 - gp);
6041      if (!save_addend)
6042	value &= howto->dst_mask;
6043      break;
6044
6045    case R_MIPS_PC16:
6046    case R_MIPS_GNU_REL16_S2:
6047      if (howto->partial_inplace)
6048	addend = _bfd_mips_elf_sign_extend (addend, 18);
6049
6050      /* No need to exclude weak undefined symbols here as they resolve
6051         to 0 and never set `*cross_mode_jump_p', so this alignment check
6052         will never trigger for them.  */
6053      if (*cross_mode_jump_p
6054	  ? ((symbol + addend) & 3) != 1
6055	  : ((symbol + addend) & 3) != 0)
6056	return bfd_reloc_outofrange;
6057
6058      value = symbol + addend - p;
6059      if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6060	overflowed_p = mips_elf_overflow_p (value, 18);
6061      value >>= howto->rightshift;
6062      value &= howto->dst_mask;
6063      break;
6064
6065    case R_MIPS16_PC16_S1:
6066      if (howto->partial_inplace)
6067	addend = _bfd_mips_elf_sign_extend (addend, 17);
6068
6069      if ((was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6070	  && (*cross_mode_jump_p
6071	      ? ((symbol + addend) & 3) != 0
6072	      : ((symbol + addend) & 1) == 0))
6073	return bfd_reloc_outofrange;
6074
6075      value = symbol + addend - p;
6076      if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6077	overflowed_p = mips_elf_overflow_p (value, 17);
6078      value >>= howto->rightshift;
6079      value &= howto->dst_mask;
6080      break;
6081
6082    case R_MIPS_PC21_S2:
6083      if (howto->partial_inplace)
6084	addend = _bfd_mips_elf_sign_extend (addend, 23);
6085
6086      if ((symbol + addend) & 3)
6087	return bfd_reloc_outofrange;
6088
6089      value = symbol + addend - p;
6090      if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6091	overflowed_p = mips_elf_overflow_p (value, 23);
6092      value >>= howto->rightshift;
6093      value &= howto->dst_mask;
6094      break;
6095
6096    case R_MIPS_PC26_S2:
6097      if (howto->partial_inplace)
6098	addend = _bfd_mips_elf_sign_extend (addend, 28);
6099
6100      if ((symbol + addend) & 3)
6101	return bfd_reloc_outofrange;
6102
6103      value = symbol + addend - p;
6104      if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6105	overflowed_p = mips_elf_overflow_p (value, 28);
6106      value >>= howto->rightshift;
6107      value &= howto->dst_mask;
6108      break;
6109
6110    case R_MIPS_PC18_S3:
6111      if (howto->partial_inplace)
6112	addend = _bfd_mips_elf_sign_extend (addend, 21);
6113
6114      if ((symbol + addend) & 7)
6115	return bfd_reloc_outofrange;
6116
6117      value = symbol + addend - ((p | 7) ^ 7);
6118      if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6119	overflowed_p = mips_elf_overflow_p (value, 21);
6120      value >>= howto->rightshift;
6121      value &= howto->dst_mask;
6122      break;
6123
6124    case R_MIPS_PC19_S2:
6125      if (howto->partial_inplace)
6126	addend = _bfd_mips_elf_sign_extend (addend, 21);
6127
6128      if ((symbol + addend) & 3)
6129	return bfd_reloc_outofrange;
6130
6131      value = symbol + addend - p;
6132      if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6133	overflowed_p = mips_elf_overflow_p (value, 21);
6134      value >>= howto->rightshift;
6135      value &= howto->dst_mask;
6136      break;
6137
6138    case R_MIPS_PCHI16:
6139      value = mips_elf_high (symbol + addend - p);
6140      if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6141	overflowed_p = mips_elf_overflow_p (value, 16);
6142      value &= howto->dst_mask;
6143      break;
6144
6145    case R_MIPS_PCLO16:
6146      if (howto->partial_inplace)
6147	addend = _bfd_mips_elf_sign_extend (addend, 16);
6148      value = symbol + addend - p;
6149      value &= howto->dst_mask;
6150      break;
6151
6152    case R_MICROMIPS_PC7_S1:
6153      if (howto->partial_inplace)
6154	addend = _bfd_mips_elf_sign_extend (addend, 8);
6155
6156      if ((was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6157	  && (*cross_mode_jump_p
6158	      ? ((symbol + addend + 2) & 3) != 0
6159	      : ((symbol + addend + 2) & 1) == 0))
6160	return bfd_reloc_outofrange;
6161
6162      value = symbol + addend - p;
6163      if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6164	overflowed_p = mips_elf_overflow_p (value, 8);
6165      value >>= howto->rightshift;
6166      value &= howto->dst_mask;
6167      break;
6168
6169    case R_MICROMIPS_PC10_S1:
6170      if (howto->partial_inplace)
6171	addend = _bfd_mips_elf_sign_extend (addend, 11);
6172
6173      if ((was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6174	  && (*cross_mode_jump_p
6175	      ? ((symbol + addend + 2) & 3) != 0
6176	      : ((symbol + addend + 2) & 1) == 0))
6177	return bfd_reloc_outofrange;
6178
6179      value = symbol + addend - p;
6180      if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6181	overflowed_p = mips_elf_overflow_p (value, 11);
6182      value >>= howto->rightshift;
6183      value &= howto->dst_mask;
6184      break;
6185
6186    case R_MICROMIPS_PC16_S1:
6187      if (howto->partial_inplace)
6188	addend = _bfd_mips_elf_sign_extend (addend, 17);
6189
6190      if ((was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6191	  && (*cross_mode_jump_p
6192	      ? ((symbol + addend) & 3) != 0
6193	      : ((symbol + addend) & 1) == 0))
6194	return bfd_reloc_outofrange;
6195
6196      value = symbol + addend - p;
6197      if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6198	overflowed_p = mips_elf_overflow_p (value, 17);
6199      value >>= howto->rightshift;
6200      value &= howto->dst_mask;
6201      break;
6202
6203    case R_MICROMIPS_PC23_S2:
6204      if (howto->partial_inplace)
6205	addend = _bfd_mips_elf_sign_extend (addend, 25);
6206      value = symbol + addend - ((p | 3) ^ 3);
6207      if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6208	overflowed_p = mips_elf_overflow_p (value, 25);
6209      value >>= howto->rightshift;
6210      value &= howto->dst_mask;
6211      break;
6212
6213    case R_MIPS_GOT_HI16:
6214    case R_MIPS_CALL_HI16:
6215    case R_MICROMIPS_GOT_HI16:
6216    case R_MICROMIPS_CALL_HI16:
6217      /* We're allowed to handle these two relocations identically.
6218	 The dynamic linker is allowed to handle the CALL relocations
6219	 differently by creating a lazy evaluation stub.  */
6220      value = g;
6221      value = mips_elf_high (value);
6222      value &= howto->dst_mask;
6223      break;
6224
6225    case R_MIPS_GOT_LO16:
6226    case R_MIPS_CALL_LO16:
6227    case R_MICROMIPS_GOT_LO16:
6228    case R_MICROMIPS_CALL_LO16:
6229      value = g & howto->dst_mask;
6230      break;
6231
6232    case R_MIPS_GOT_PAGE:
6233    case R_MICROMIPS_GOT_PAGE:
6234      value = mips_elf_got_page (abfd, input_bfd, info, symbol + addend, NULL);
6235      if (value == MINUS_ONE)
6236	return bfd_reloc_outofrange;
6237      value = mips_elf_got_offset_from_index (info, abfd, input_bfd, value);
6238      overflowed_p = mips_elf_overflow_p (value, 16);
6239      break;
6240
6241    case R_MIPS_GOT_OFST:
6242    case R_MICROMIPS_GOT_OFST:
6243      if (local_p)
6244	mips_elf_got_page (abfd, input_bfd, info, symbol + addend, &value);
6245      else
6246	value = addend;
6247      overflowed_p = mips_elf_overflow_p (value, 16);
6248      break;
6249
6250    case R_MIPS_SUB:
6251    case R_MICROMIPS_SUB:
6252      value = symbol - addend;
6253      value &= howto->dst_mask;
6254      break;
6255
6256    case R_MIPS_HIGHER:
6257    case R_MICROMIPS_HIGHER:
6258      value = mips_elf_higher (addend + symbol);
6259      value &= howto->dst_mask;
6260      break;
6261
6262    case R_MIPS_HIGHEST:
6263    case R_MICROMIPS_HIGHEST:
6264      value = mips_elf_highest (addend + symbol);
6265      value &= howto->dst_mask;
6266      break;
6267
6268    case R_MIPS_SCN_DISP:
6269    case R_MICROMIPS_SCN_DISP:
6270      value = symbol + addend - sec->output_offset;
6271      value &= howto->dst_mask;
6272      break;
6273
6274    case R_MIPS_JALR:
6275    case R_MICROMIPS_JALR:
6276      /* This relocation is only a hint.  In some cases, we optimize
6277	 it into a bal instruction.  But we don't try to optimize
6278	 when the symbol does not resolve locally.  */
6279      if (h != NULL && !SYMBOL_CALLS_LOCAL (info, &h->root))
6280	return bfd_reloc_continue;
6281      value = symbol + addend;
6282      break;
6283
6284    case R_MIPS_PJUMP:
6285    case R_MIPS_GNU_VTINHERIT:
6286    case R_MIPS_GNU_VTENTRY:
6287      /* We don't do anything with these at present.  */
6288      return bfd_reloc_continue;
6289
6290    default:
6291      /* An unrecognized relocation type.  */
6292      return bfd_reloc_notsupported;
6293    }
6294
6295  /* Store the VALUE for our caller.  */
6296  *valuep = value;
6297  return overflowed_p ? bfd_reloc_overflow : bfd_reloc_ok;
6298}
6299
6300/* Obtain the field relocated by RELOCATION.  */
6301
6302static bfd_vma
6303mips_elf_obtain_contents (reloc_howto_type *howto,
6304			  const Elf_Internal_Rela *relocation,
6305			  bfd *input_bfd, bfd_byte *contents)
6306{
6307  bfd_vma x = 0;
6308  bfd_byte *location = contents + relocation->r_offset;
6309  unsigned int size = bfd_get_reloc_size (howto);
6310
6311  /* Obtain the bytes.  */
6312  if (size != 0)
6313    x = bfd_get (8 * size, input_bfd, location);
6314
6315  return x;
6316}
6317
6318/* It has been determined that the result of the RELOCATION is the
6319   VALUE.  Use HOWTO to place VALUE into the output file at the
6320   appropriate position.  The SECTION is the section to which the
6321   relocation applies.
6322   CROSS_MODE_JUMP_P is true if the relocation field
6323   is a MIPS16 or microMIPS jump to standard MIPS code, or vice versa.
6324
6325   Returns FALSE if anything goes wrong.  */
6326
6327static bfd_boolean
6328mips_elf_perform_relocation (struct bfd_link_info *info,
6329			     reloc_howto_type *howto,
6330			     const Elf_Internal_Rela *relocation,
6331			     bfd_vma value, bfd *input_bfd,
6332			     asection *input_section, bfd_byte *contents,
6333			     bfd_boolean cross_mode_jump_p)
6334{
6335  bfd_vma x;
6336  bfd_byte *location;
6337  int r_type = ELF_R_TYPE (input_bfd, relocation->r_info);
6338  unsigned int size;
6339
6340  /* Figure out where the relocation is occurring.  */
6341  location = contents + relocation->r_offset;
6342
6343  _bfd_mips_elf_reloc_unshuffle (input_bfd, r_type, FALSE, location);
6344
6345  /* Obtain the current value.  */
6346  x = mips_elf_obtain_contents (howto, relocation, input_bfd, contents);
6347
6348  /* Clear the field we are setting.  */
6349  x &= ~howto->dst_mask;
6350
6351  /* Set the field.  */
6352  x |= (value & howto->dst_mask);
6353
6354  /* Detect incorrect JALX usage.  If required, turn JAL or BAL into JALX.  */
6355  if (!cross_mode_jump_p && jal_reloc_p (r_type))
6356    {
6357      bfd_vma opcode = x >> 26;
6358
6359      if (r_type == R_MIPS16_26 ? opcode == 0x7
6360	  : r_type == R_MICROMIPS_26_S1 ? opcode == 0x3c
6361	  : opcode == 0x1d)
6362	{
6363	  info->callbacks->einfo
6364	    (_("%X%H: Unsupported JALX to the same ISA mode\n"),
6365	     input_bfd, input_section, relocation->r_offset);
6366	  return TRUE;
6367	}
6368    }
6369  if (cross_mode_jump_p && jal_reloc_p (r_type))
6370    {
6371      bfd_boolean ok;
6372      bfd_vma opcode = x >> 26;
6373      bfd_vma jalx_opcode;
6374
6375      /* Check to see if the opcode is already JAL or JALX.  */
6376      if (r_type == R_MIPS16_26)
6377	{
6378	  ok = ((opcode == 0x6) || (opcode == 0x7));
6379	  jalx_opcode = 0x7;
6380	}
6381      else if (r_type == R_MICROMIPS_26_S1)
6382	{
6383	  ok = ((opcode == 0x3d) || (opcode == 0x3c));
6384	  jalx_opcode = 0x3c;
6385	}
6386      else
6387	{
6388	  ok = ((opcode == 0x3) || (opcode == 0x1d));
6389	  jalx_opcode = 0x1d;
6390	}
6391
6392      /* If the opcode is not JAL or JALX, there's a problem.  We cannot
6393         convert J or JALS to JALX.  */
6394      if (!ok)
6395	{
6396	  info->callbacks->einfo
6397	    (_("%X%H: Unsupported jump between ISA modes; "
6398	       "consider recompiling with interlinking enabled\n"),
6399	     input_bfd, input_section, relocation->r_offset);
6400	  return TRUE;
6401	}
6402
6403      /* Make this the JALX opcode.  */
6404      x = (x & ~(0x3f << 26)) | (jalx_opcode << 26);
6405    }
6406  else if (cross_mode_jump_p && b_reloc_p (r_type))
6407    {
6408      bfd_boolean ok = FALSE;
6409      bfd_vma opcode = x >> 16;
6410      bfd_vma jalx_opcode = 0;
6411      bfd_vma addr;
6412      bfd_vma dest;
6413
6414      if (r_type == R_MICROMIPS_PC16_S1)
6415	{
6416	  ok = opcode == 0x4060;
6417	  jalx_opcode = 0x3c;
6418	  value <<= 1;
6419	}
6420      else if (r_type == R_MIPS_PC16 || r_type == R_MIPS_GNU_REL16_S2)
6421	{
6422	  ok = opcode == 0x411;
6423	  jalx_opcode = 0x1d;
6424	  value <<= 2;
6425	}
6426
6427      if (ok && !bfd_link_pic (info))
6428	{
6429	  addr = (input_section->output_section->vma
6430		  + input_section->output_offset
6431		  + relocation->r_offset
6432		  + 4);
6433	  dest = addr + (((value & 0x3ffff) ^ 0x20000) - 0x20000);
6434
6435	  if ((addr >> 28) << 28 != (dest >> 28) << 28)
6436	    {
6437	      info->callbacks->einfo
6438		(_("%X%H: Cannot convert branch between ISA modes "
6439		   "to JALX: relocation out of range\n"),
6440		 input_bfd, input_section, relocation->r_offset);
6441	      return TRUE;
6442	    }
6443
6444	  /* Make this the JALX opcode.  */
6445	  x = ((dest >> 2) & 0x3ffffff) | jalx_opcode << 26;
6446	}
6447      else if (!mips_elf_hash_table (info)->ignore_branch_isa)
6448	{
6449	  info->callbacks->einfo
6450	    (_("%X%H: Unsupported branch between ISA modes\n"),
6451	     input_bfd, input_section, relocation->r_offset);
6452	  return TRUE;
6453	}
6454    }
6455
6456  /* Try converting JAL to BAL and J(AL)R to B(AL), if the target is in
6457     range.  */
6458  if (!bfd_link_relocatable (info)
6459      && !cross_mode_jump_p
6460      && ((JAL_TO_BAL_P (input_bfd)
6461	   && r_type == R_MIPS_26
6462	   && (x >> 26) == 0x3)		/* jal addr */
6463	  || (JALR_TO_BAL_P (input_bfd)
6464	      && r_type == R_MIPS_JALR
6465	      && x == 0x0320f809)	/* jalr t9 */
6466	  || (JR_TO_B_P (input_bfd)
6467	      && r_type == R_MIPS_JALR
6468	      && x == 0x03200008)))	/* jr t9 */
6469    {
6470      bfd_vma addr;
6471      bfd_vma dest;
6472      bfd_signed_vma off;
6473
6474      addr = (input_section->output_section->vma
6475	      + input_section->output_offset
6476	      + relocation->r_offset
6477	      + 4);
6478      if (r_type == R_MIPS_26)
6479	dest = (value << 2) | ((addr >> 28) << 28);
6480      else
6481	dest = value;
6482      off = dest - addr;
6483      if (off <= 0x1ffff && off >= -0x20000)
6484	{
6485	  if (x == 0x03200008)	/* jr t9 */
6486	    x = 0x10000000 | (((bfd_vma) off >> 2) & 0xffff);   /* b addr */
6487	  else
6488	    x = 0x04110000 | (((bfd_vma) off >> 2) & 0xffff);   /* bal addr */
6489	}
6490    }
6491
6492  /* Put the value into the output.  */
6493  size = bfd_get_reloc_size (howto);
6494  if (size != 0)
6495    bfd_put (8 * size, input_bfd, x, location);
6496
6497  _bfd_mips_elf_reloc_shuffle (input_bfd, r_type, !bfd_link_relocatable (info),
6498			       location);
6499
6500  return TRUE;
6501}
6502
6503/* Create a rel.dyn relocation for the dynamic linker to resolve.  REL
6504   is the original relocation, which is now being transformed into a
6505   dynamic relocation.  The ADDENDP is adjusted if necessary; the
6506   caller should store the result in place of the original addend.  */
6507
6508static bfd_boolean
6509mips_elf_create_dynamic_relocation (bfd *output_bfd,
6510				    struct bfd_link_info *info,
6511				    const Elf_Internal_Rela *rel,
6512				    struct mips_elf_link_hash_entry *h,
6513				    asection *sec, bfd_vma symbol,
6514				    bfd_vma *addendp, asection *input_section)
6515{
6516  Elf_Internal_Rela outrel[3];
6517  asection *sreloc;
6518  bfd *dynobj;
6519  int r_type;
6520  long indx;
6521  bfd_boolean defined_p;
6522  struct mips_elf_link_hash_table *htab;
6523
6524  htab = mips_elf_hash_table (info);
6525  BFD_ASSERT (htab != NULL);
6526
6527  r_type = ELF_R_TYPE (output_bfd, rel->r_info);
6528  dynobj = elf_hash_table (info)->dynobj;
6529  sreloc = mips_elf_rel_dyn_section (info, FALSE);
6530  BFD_ASSERT (sreloc != NULL);
6531  BFD_ASSERT (sreloc->contents != NULL);
6532  BFD_ASSERT (sreloc->reloc_count * MIPS_ELF_REL_SIZE (output_bfd)
6533	      < sreloc->size);
6534
6535  outrel[0].r_offset =
6536    _bfd_elf_section_offset (output_bfd, info, input_section, rel[0].r_offset);
6537  if (ABI_64_P (output_bfd))
6538    {
6539      outrel[1].r_offset =
6540	_bfd_elf_section_offset (output_bfd, info, input_section, rel[1].r_offset);
6541      outrel[2].r_offset =
6542	_bfd_elf_section_offset (output_bfd, info, input_section, rel[2].r_offset);
6543    }
6544
6545  if (outrel[0].r_offset == MINUS_ONE)
6546    /* The relocation field has been deleted.  */
6547    return TRUE;
6548
6549  if (outrel[0].r_offset == MINUS_TWO)
6550    {
6551      /* The relocation field has been converted into a relative value of
6552	 some sort.  Functions like _bfd_elf_write_section_eh_frame expect
6553	 the field to be fully relocated, so add in the symbol's value.  */
6554      *addendp += symbol;
6555      return TRUE;
6556    }
6557
6558  /* We must now calculate the dynamic symbol table index to use
6559     in the relocation.  */
6560  if (h != NULL && ! SYMBOL_REFERENCES_LOCAL (info, &h->root))
6561    {
6562      BFD_ASSERT (htab->is_vxworks || h->global_got_area != GGA_NONE);
6563      indx = h->root.dynindx;
6564      if (SGI_COMPAT (output_bfd))
6565	defined_p = h->root.def_regular;
6566      else
6567	/* ??? glibc's ld.so just adds the final GOT entry to the
6568	   relocation field.  It therefore treats relocs against
6569	   defined symbols in the same way as relocs against
6570	   undefined symbols.  */
6571	defined_p = FALSE;
6572    }
6573  else
6574    {
6575      if (sec != NULL && bfd_is_abs_section (sec))
6576	indx = 0;
6577      else if (sec == NULL || sec->owner == NULL)
6578	{
6579	  bfd_set_error (bfd_error_bad_value);
6580	  return FALSE;
6581	}
6582      else
6583	{
6584	  indx = elf_section_data (sec->output_section)->dynindx;
6585	  if (indx == 0)
6586	    {
6587	      asection *osec = htab->root.text_index_section;
6588	      indx = elf_section_data (osec)->dynindx;
6589	    }
6590	  if (indx == 0)
6591	    abort ();
6592	}
6593
6594      /* Instead of generating a relocation using the section
6595	 symbol, we may as well make it a fully relative
6596	 relocation.  We want to avoid generating relocations to
6597	 local symbols because we used to generate them
6598	 incorrectly, without adding the original symbol value,
6599	 which is mandated by the ABI for section symbols.  In
6600	 order to give dynamic loaders and applications time to
6601	 phase out the incorrect use, we refrain from emitting
6602	 section-relative relocations.  It's not like they're
6603	 useful, after all.  This should be a bit more efficient
6604	 as well.  */
6605      /* ??? Although this behavior is compatible with glibc's ld.so,
6606	 the ABI says that relocations against STN_UNDEF should have
6607	 a symbol value of 0.  Irix rld honors this, so relocations
6608	 against STN_UNDEF have no effect.  */
6609      if (!SGI_COMPAT (output_bfd))
6610	indx = 0;
6611      defined_p = TRUE;
6612    }
6613
6614  /* If the relocation was previously an absolute relocation and
6615     this symbol will not be referred to by the relocation, we must
6616     adjust it by the value we give it in the dynamic symbol table.
6617     Otherwise leave the job up to the dynamic linker.  */
6618  if (defined_p && r_type != R_MIPS_REL32)
6619    *addendp += symbol;
6620
6621  if (htab->is_vxworks)
6622    /* VxWorks uses non-relative relocations for this.  */
6623    outrel[0].r_info = ELF32_R_INFO (indx, R_MIPS_32);
6624  else
6625    /* The relocation is always an REL32 relocation because we don't
6626       know where the shared library will wind up at load-time.  */
6627    outrel[0].r_info = ELF_R_INFO (output_bfd, (unsigned long) indx,
6628				   R_MIPS_REL32);
6629
6630  /* For strict adherence to the ABI specification, we should
6631     generate a R_MIPS_64 relocation record by itself before the
6632     _REL32/_64 record as well, such that the addend is read in as
6633     a 64-bit value (REL32 is a 32-bit relocation, after all).
6634     However, since none of the existing ELF64 MIPS dynamic
6635     loaders seems to care, we don't waste space with these
6636     artificial relocations.  If this turns out to not be true,
6637     mips_elf_allocate_dynamic_relocation() should be tweaked so
6638     as to make room for a pair of dynamic relocations per
6639     invocation if ABI_64_P, and here we should generate an
6640     additional relocation record with R_MIPS_64 by itself for a
6641     NULL symbol before this relocation record.  */
6642  outrel[1].r_info = ELF_R_INFO (output_bfd, 0,
6643				 ABI_64_P (output_bfd)
6644				 ? R_MIPS_64
6645				 : R_MIPS_NONE);
6646  outrel[2].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_NONE);
6647
6648  /* Adjust the output offset of the relocation to reference the
6649     correct location in the output file.  */
6650  outrel[0].r_offset += (input_section->output_section->vma
6651			 + input_section->output_offset);
6652  outrel[1].r_offset += (input_section->output_section->vma
6653			 + input_section->output_offset);
6654  outrel[2].r_offset += (input_section->output_section->vma
6655			 + input_section->output_offset);
6656
6657  /* Put the relocation back out.  We have to use the special
6658     relocation outputter in the 64-bit case since the 64-bit
6659     relocation format is non-standard.  */
6660  if (ABI_64_P (output_bfd))
6661    {
6662      (*get_elf_backend_data (output_bfd)->s->swap_reloc_out)
6663	(output_bfd, &outrel[0],
6664	 (sreloc->contents
6665	  + sreloc->reloc_count * sizeof (Elf64_Mips_External_Rel)));
6666    }
6667  else if (htab->is_vxworks)
6668    {
6669      /* VxWorks uses RELA rather than REL dynamic relocations.  */
6670      outrel[0].r_addend = *addendp;
6671      bfd_elf32_swap_reloca_out
6672	(output_bfd, &outrel[0],
6673	 (sreloc->contents
6674	  + sreloc->reloc_count * sizeof (Elf32_External_Rela)));
6675    }
6676  else
6677    bfd_elf32_swap_reloc_out
6678      (output_bfd, &outrel[0],
6679       (sreloc->contents + sreloc->reloc_count * sizeof (Elf32_External_Rel)));
6680
6681  /* We've now added another relocation.  */
6682  ++sreloc->reloc_count;
6683
6684  /* Make sure the output section is writable.  The dynamic linker
6685     will be writing to it.  */
6686  elf_section_data (input_section->output_section)->this_hdr.sh_flags
6687    |= SHF_WRITE;
6688
6689  /* On IRIX5, make an entry of compact relocation info.  */
6690  if (IRIX_COMPAT (output_bfd) == ict_irix5)
6691    {
6692      asection *scpt = bfd_get_linker_section (dynobj, ".compact_rel");
6693      bfd_byte *cr;
6694
6695      if (scpt)
6696	{
6697	  Elf32_crinfo cptrel;
6698
6699	  mips_elf_set_cr_format (cptrel, CRF_MIPS_LONG);
6700	  cptrel.vaddr = (rel->r_offset
6701			  + input_section->output_section->vma
6702			  + input_section->output_offset);
6703	  if (r_type == R_MIPS_REL32)
6704	    mips_elf_set_cr_type (cptrel, CRT_MIPS_REL32);
6705	  else
6706	    mips_elf_set_cr_type (cptrel, CRT_MIPS_WORD);
6707	  mips_elf_set_cr_dist2to (cptrel, 0);
6708	  cptrel.konst = *addendp;
6709
6710	  cr = (scpt->contents
6711		+ sizeof (Elf32_External_compact_rel));
6712	  mips_elf_set_cr_relvaddr (cptrel, 0);
6713	  bfd_elf32_swap_crinfo_out (output_bfd, &cptrel,
6714				     ((Elf32_External_crinfo *) cr
6715				      + scpt->reloc_count));
6716	  ++scpt->reloc_count;
6717	}
6718    }
6719
6720  /* If we've written this relocation for a readonly section,
6721     we need to set DF_TEXTREL again, so that we do not delete the
6722     DT_TEXTREL tag.  */
6723  if (MIPS_ELF_READONLY_SECTION (input_section))
6724    info->flags |= DF_TEXTREL;
6725
6726  return TRUE;
6727}
6728
6729/* Return the MACH for a MIPS e_flags value.  */
6730
6731unsigned long
6732_bfd_elf_mips_mach (flagword flags)
6733{
6734  switch (flags & EF_MIPS_MACH)
6735    {
6736    case E_MIPS_MACH_3900:
6737      return bfd_mach_mips3900;
6738
6739    case E_MIPS_MACH_4010:
6740      return bfd_mach_mips4010;
6741
6742    case E_MIPS_MACH_4100:
6743      return bfd_mach_mips4100;
6744
6745    case E_MIPS_MACH_4111:
6746      return bfd_mach_mips4111;
6747
6748    case E_MIPS_MACH_4120:
6749      return bfd_mach_mips4120;
6750
6751    case E_MIPS_MACH_4650:
6752      return bfd_mach_mips4650;
6753
6754    case E_MIPS_MACH_5400:
6755      return bfd_mach_mips5400;
6756
6757    case E_MIPS_MACH_5500:
6758      return bfd_mach_mips5500;
6759
6760    case E_MIPS_MACH_5900:
6761      return bfd_mach_mips5900;
6762
6763    case E_MIPS_MACH_9000:
6764      return bfd_mach_mips9000;
6765
6766    case E_MIPS_MACH_SB1:
6767      return bfd_mach_mips_sb1;
6768
6769    case E_MIPS_MACH_LS2E:
6770      return bfd_mach_mips_loongson_2e;
6771
6772    case E_MIPS_MACH_LS2F:
6773      return bfd_mach_mips_loongson_2f;
6774
6775    case E_MIPS_MACH_LS3A:
6776      return bfd_mach_mips_loongson_3a;
6777
6778    case E_MIPS_MACH_OCTEON3:
6779      return bfd_mach_mips_octeon3;
6780
6781    case E_MIPS_MACH_OCTEON2:
6782      return bfd_mach_mips_octeon2;
6783
6784    case E_MIPS_MACH_OCTEON:
6785      return bfd_mach_mips_octeon;
6786
6787    case E_MIPS_MACH_XLR:
6788      return bfd_mach_mips_xlr;
6789
6790    default:
6791      switch (flags & EF_MIPS_ARCH)
6792	{
6793	default:
6794	case E_MIPS_ARCH_1:
6795	  return bfd_mach_mips3000;
6796
6797	case E_MIPS_ARCH_2:
6798	  return bfd_mach_mips6000;
6799
6800	case E_MIPS_ARCH_3:
6801	  return bfd_mach_mips4000;
6802
6803	case E_MIPS_ARCH_4:
6804	  return bfd_mach_mips8000;
6805
6806	case E_MIPS_ARCH_5:
6807	  return bfd_mach_mips5;
6808
6809	case E_MIPS_ARCH_32:
6810	  return bfd_mach_mipsisa32;
6811
6812	case E_MIPS_ARCH_64:
6813	  return bfd_mach_mipsisa64;
6814
6815	case E_MIPS_ARCH_32R2:
6816	  return bfd_mach_mipsisa32r2;
6817
6818	case E_MIPS_ARCH_64R2:
6819	  return bfd_mach_mipsisa64r2;
6820
6821	case E_MIPS_ARCH_32R6:
6822	  return bfd_mach_mipsisa32r6;
6823
6824	case E_MIPS_ARCH_64R6:
6825	  return bfd_mach_mipsisa64r6;
6826	}
6827    }
6828
6829  return 0;
6830}
6831
6832/* Return printable name for ABI.  */
6833
6834static INLINE char *
6835elf_mips_abi_name (bfd *abfd)
6836{
6837  flagword flags;
6838
6839  flags = elf_elfheader (abfd)->e_flags;
6840  switch (flags & EF_MIPS_ABI)
6841    {
6842    case 0:
6843      if (ABI_N32_P (abfd))
6844	return "N32";
6845      else if (ABI_64_P (abfd))
6846	return "64";
6847      else
6848	return "none";
6849    case E_MIPS_ABI_O32:
6850      return "O32";
6851    case E_MIPS_ABI_O64:
6852      return "O64";
6853    case E_MIPS_ABI_EABI32:
6854      return "EABI32";
6855    case E_MIPS_ABI_EABI64:
6856      return "EABI64";
6857    default:
6858      return "unknown abi";
6859    }
6860}
6861
6862/* MIPS ELF uses two common sections.  One is the usual one, and the
6863   other is for small objects.  All the small objects are kept
6864   together, and then referenced via the gp pointer, which yields
6865   faster assembler code.  This is what we use for the small common
6866   section.  This approach is copied from ecoff.c.  */
6867static asection mips_elf_scom_section;
6868static asymbol mips_elf_scom_symbol;
6869static asymbol *mips_elf_scom_symbol_ptr;
6870
6871/* MIPS ELF also uses an acommon section, which represents an
6872   allocated common symbol which may be overridden by a
6873   definition in a shared library.  */
6874static asection mips_elf_acom_section;
6875static asymbol mips_elf_acom_symbol;
6876static asymbol *mips_elf_acom_symbol_ptr;
6877
6878/* This is used for both the 32-bit and the 64-bit ABI.  */
6879
6880void
6881_bfd_mips_elf_symbol_processing (bfd *abfd, asymbol *asym)
6882{
6883  elf_symbol_type *elfsym;
6884
6885  /* Handle the special MIPS section numbers that a symbol may use.  */
6886  elfsym = (elf_symbol_type *) asym;
6887  switch (elfsym->internal_elf_sym.st_shndx)
6888    {
6889    case SHN_MIPS_ACOMMON:
6890      /* This section is used in a dynamically linked executable file.
6891	 It is an allocated common section.  The dynamic linker can
6892	 either resolve these symbols to something in a shared
6893	 library, or it can just leave them here.  For our purposes,
6894	 we can consider these symbols to be in a new section.  */
6895      if (mips_elf_acom_section.name == NULL)
6896	{
6897	  /* Initialize the acommon section.  */
6898	  mips_elf_acom_section.name = ".acommon";
6899	  mips_elf_acom_section.flags = SEC_ALLOC;
6900	  mips_elf_acom_section.output_section = &mips_elf_acom_section;
6901	  mips_elf_acom_section.symbol = &mips_elf_acom_symbol;
6902	  mips_elf_acom_section.symbol_ptr_ptr = &mips_elf_acom_symbol_ptr;
6903	  mips_elf_acom_symbol.name = ".acommon";
6904	  mips_elf_acom_symbol.flags = BSF_SECTION_SYM;
6905	  mips_elf_acom_symbol.section = &mips_elf_acom_section;
6906	  mips_elf_acom_symbol_ptr = &mips_elf_acom_symbol;
6907	}
6908      asym->section = &mips_elf_acom_section;
6909      break;
6910
6911    case SHN_COMMON:
6912      /* Common symbols less than the GP size are automatically
6913	 treated as SHN_MIPS_SCOMMON symbols on IRIX5.  */
6914      if (asym->value > elf_gp_size (abfd)
6915	  || ELF_ST_TYPE (elfsym->internal_elf_sym.st_info) == STT_TLS
6916	  || IRIX_COMPAT (abfd) == ict_irix6)
6917	break;
6918      /* Fall through.  */
6919    case SHN_MIPS_SCOMMON:
6920      if (mips_elf_scom_section.name == NULL)
6921	{
6922	  /* Initialize the small common section.  */
6923	  mips_elf_scom_section.name = ".scommon";
6924	  mips_elf_scom_section.flags = SEC_IS_COMMON;
6925	  mips_elf_scom_section.output_section = &mips_elf_scom_section;
6926	  mips_elf_scom_section.symbol = &mips_elf_scom_symbol;
6927	  mips_elf_scom_section.symbol_ptr_ptr = &mips_elf_scom_symbol_ptr;
6928	  mips_elf_scom_symbol.name = ".scommon";
6929	  mips_elf_scom_symbol.flags = BSF_SECTION_SYM;
6930	  mips_elf_scom_symbol.section = &mips_elf_scom_section;
6931	  mips_elf_scom_symbol_ptr = &mips_elf_scom_symbol;
6932	}
6933      asym->section = &mips_elf_scom_section;
6934      asym->value = elfsym->internal_elf_sym.st_size;
6935      break;
6936
6937    case SHN_MIPS_SUNDEFINED:
6938      asym->section = bfd_und_section_ptr;
6939      break;
6940
6941    case SHN_MIPS_TEXT:
6942      {
6943	asection *section = bfd_get_section_by_name (abfd, ".text");
6944
6945	if (section != NULL)
6946	  {
6947	    asym->section = section;
6948	    /* MIPS_TEXT is a bit special, the address is not an offset
6949	       to the base of the .text section.  So substract the section
6950	       base address to make it an offset.  */
6951	    asym->value -= section->vma;
6952	  }
6953      }
6954      break;
6955
6956    case SHN_MIPS_DATA:
6957      {
6958	asection *section = bfd_get_section_by_name (abfd, ".data");
6959
6960	if (section != NULL)
6961	  {
6962	    asym->section = section;
6963	    /* MIPS_DATA is a bit special, the address is not an offset
6964	       to the base of the .data section.  So substract the section
6965	       base address to make it an offset.  */
6966	    asym->value -= section->vma;
6967	  }
6968      }
6969      break;
6970    }
6971
6972  /* If this is an odd-valued function symbol, assume it's a MIPS16
6973     or microMIPS one.  */
6974  if (ELF_ST_TYPE (elfsym->internal_elf_sym.st_info) == STT_FUNC
6975      && (asym->value & 1) != 0)
6976    {
6977      asym->value--;
6978      if (MICROMIPS_P (abfd))
6979	elfsym->internal_elf_sym.st_other
6980	  = ELF_ST_SET_MICROMIPS (elfsym->internal_elf_sym.st_other);
6981      else
6982	elfsym->internal_elf_sym.st_other
6983	  = ELF_ST_SET_MIPS16 (elfsym->internal_elf_sym.st_other);
6984    }
6985}
6986
6987/* Implement elf_backend_eh_frame_address_size.  This differs from
6988   the default in the way it handles EABI64.
6989
6990   EABI64 was originally specified as an LP64 ABI, and that is what
6991   -mabi=eabi normally gives on a 64-bit target.  However, gcc has
6992   historically accepted the combination of -mabi=eabi and -mlong32,
6993   and this ILP32 variation has become semi-official over time.
6994   Both forms use elf32 and have pointer-sized FDE addresses.
6995
6996   If an EABI object was generated by GCC 4.0 or above, it will have
6997   an empty .gcc_compiled_longXX section, where XX is the size of longs
6998   in bits.  Unfortunately, ILP32 objects generated by earlier compilers
6999   have no special marking to distinguish them from LP64 objects.
7000
7001   We don't want users of the official LP64 ABI to be punished for the
7002   existence of the ILP32 variant, but at the same time, we don't want
7003   to mistakenly interpret pre-4.0 ILP32 objects as being LP64 objects.
7004   We therefore take the following approach:
7005
7006      - If ABFD contains a .gcc_compiled_longXX section, use it to
7007        determine the pointer size.
7008
7009      - Otherwise check the type of the first relocation.  Assume that
7010        the LP64 ABI is being used if the relocation is of type R_MIPS_64.
7011
7012      - Otherwise punt.
7013
7014   The second check is enough to detect LP64 objects generated by pre-4.0
7015   compilers because, in the kind of output generated by those compilers,
7016   the first relocation will be associated with either a CIE personality
7017   routine or an FDE start address.  Furthermore, the compilers never
7018   used a special (non-pointer) encoding for this ABI.
7019
7020   Checking the relocation type should also be safe because there is no
7021   reason to use R_MIPS_64 in an ILP32 object.  Pre-4.0 compilers never
7022   did so.  */
7023
7024unsigned int
7025_bfd_mips_elf_eh_frame_address_size (bfd *abfd, asection *sec)
7026{
7027  if (elf_elfheader (abfd)->e_ident[EI_CLASS] == ELFCLASS64)
7028    return 8;
7029  if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI64)
7030    {
7031      bfd_boolean long32_p, long64_p;
7032
7033      long32_p = bfd_get_section_by_name (abfd, ".gcc_compiled_long32") != 0;
7034      long64_p = bfd_get_section_by_name (abfd, ".gcc_compiled_long64") != 0;
7035      if (long32_p && long64_p)
7036	return 0;
7037      if (long32_p)
7038	return 4;
7039      if (long64_p)
7040	return 8;
7041
7042      if (sec->reloc_count > 0
7043	  && elf_section_data (sec)->relocs != NULL
7044	  && (ELF32_R_TYPE (elf_section_data (sec)->relocs[0].r_info)
7045	      == R_MIPS_64))
7046	return 8;
7047
7048      return 0;
7049    }
7050  return 4;
7051}
7052
7053/* There appears to be a bug in the MIPSpro linker that causes GOT_DISP
7054   relocations against two unnamed section symbols to resolve to the
7055   same address.  For example, if we have code like:
7056
7057	lw	$4,%got_disp(.data)($gp)
7058	lw	$25,%got_disp(.text)($gp)
7059	jalr	$25
7060
7061   then the linker will resolve both relocations to .data and the program
7062   will jump there rather than to .text.
7063
7064   We can work around this problem by giving names to local section symbols.
7065   This is also what the MIPSpro tools do.  */
7066
7067bfd_boolean
7068_bfd_mips_elf_name_local_section_symbols (bfd *abfd)
7069{
7070  return SGI_COMPAT (abfd);
7071}
7072
7073/* Work over a section just before writing it out.  This routine is
7074   used by both the 32-bit and the 64-bit ABI.  FIXME: We recognize
7075   sections that need the SHF_MIPS_GPREL flag by name; there has to be
7076   a better way.  */
7077
7078bfd_boolean
7079_bfd_mips_elf_section_processing (bfd *abfd, Elf_Internal_Shdr *hdr)
7080{
7081  if (hdr->sh_type == SHT_MIPS_REGINFO
7082      && hdr->sh_size > 0)
7083    {
7084      bfd_byte buf[4];
7085
7086      BFD_ASSERT (hdr->sh_size == sizeof (Elf32_External_RegInfo));
7087      BFD_ASSERT (hdr->contents == NULL);
7088
7089      if (bfd_seek (abfd,
7090		    hdr->sh_offset + sizeof (Elf32_External_RegInfo) - 4,
7091		    SEEK_SET) != 0)
7092	return FALSE;
7093      H_PUT_32 (abfd, elf_gp (abfd), buf);
7094      if (bfd_bwrite (buf, 4, abfd) != 4)
7095	return FALSE;
7096    }
7097
7098  if (hdr->sh_type == SHT_MIPS_OPTIONS
7099      && hdr->bfd_section != NULL
7100      && mips_elf_section_data (hdr->bfd_section) != NULL
7101      && mips_elf_section_data (hdr->bfd_section)->u.tdata != NULL)
7102    {
7103      bfd_byte *contents, *l, *lend;
7104
7105      /* We stored the section contents in the tdata field in the
7106	 set_section_contents routine.  We save the section contents
7107	 so that we don't have to read them again.
7108	 At this point we know that elf_gp is set, so we can look
7109	 through the section contents to see if there is an
7110	 ODK_REGINFO structure.  */
7111
7112      contents = mips_elf_section_data (hdr->bfd_section)->u.tdata;
7113      l = contents;
7114      lend = contents + hdr->sh_size;
7115      while (l + sizeof (Elf_External_Options) <= lend)
7116	{
7117	  Elf_Internal_Options intopt;
7118
7119	  bfd_mips_elf_swap_options_in (abfd, (Elf_External_Options *) l,
7120					&intopt);
7121	  if (intopt.size < sizeof (Elf_External_Options))
7122	    {
7123	      _bfd_error_handler
7124		/* xgettext:c-format */
7125		(_("%B: Warning: bad `%s' option size %u smaller than its header"),
7126		abfd, MIPS_ELF_OPTIONS_SECTION_NAME (abfd), intopt.size);
7127	      break;
7128	    }
7129	  if (ABI_64_P (abfd) && intopt.kind == ODK_REGINFO)
7130	    {
7131	      bfd_byte buf[8];
7132
7133	      if (bfd_seek (abfd,
7134			    (hdr->sh_offset
7135			     + (l - contents)
7136			     + sizeof (Elf_External_Options)
7137			     + (sizeof (Elf64_External_RegInfo) - 8)),
7138			     SEEK_SET) != 0)
7139		return FALSE;
7140	      H_PUT_64 (abfd, elf_gp (abfd), buf);
7141	      if (bfd_bwrite (buf, 8, abfd) != 8)
7142		return FALSE;
7143	    }
7144	  else if (intopt.kind == ODK_REGINFO)
7145	    {
7146	      bfd_byte buf[4];
7147
7148	      if (bfd_seek (abfd,
7149			    (hdr->sh_offset
7150			     + (l - contents)
7151			     + sizeof (Elf_External_Options)
7152			     + (sizeof (Elf32_External_RegInfo) - 4)),
7153			    SEEK_SET) != 0)
7154		return FALSE;
7155	      H_PUT_32 (abfd, elf_gp (abfd), buf);
7156	      if (bfd_bwrite (buf, 4, abfd) != 4)
7157		return FALSE;
7158	    }
7159	  l += intopt.size;
7160	}
7161    }
7162
7163  if (hdr->bfd_section != NULL)
7164    {
7165      const char *name = bfd_get_section_name (abfd, hdr->bfd_section);
7166
7167      /* .sbss is not handled specially here because the GNU/Linux
7168	 prelinker can convert .sbss from NOBITS to PROGBITS and
7169	 changing it back to NOBITS breaks the binary.  The entry in
7170	 _bfd_mips_elf_special_sections will ensure the correct flags
7171	 are set on .sbss if BFD creates it without reading it from an
7172	 input file, and without special handling here the flags set
7173	 on it in an input file will be followed.  */
7174      if (strcmp (name, ".sdata") == 0
7175	  || strcmp (name, ".lit8") == 0
7176	  || strcmp (name, ".lit4") == 0)
7177	hdr->sh_flags |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL;
7178      else if (strcmp (name, ".srdata") == 0)
7179	hdr->sh_flags |= SHF_ALLOC | SHF_MIPS_GPREL;
7180      else if (strcmp (name, ".compact_rel") == 0)
7181	hdr->sh_flags = 0;
7182      else if (strcmp (name, ".rtproc") == 0)
7183	{
7184	  if (hdr->sh_addralign != 0 && hdr->sh_entsize == 0)
7185	    {
7186	      unsigned int adjust;
7187
7188	      adjust = hdr->sh_size % hdr->sh_addralign;
7189	      if (adjust != 0)
7190		hdr->sh_size += hdr->sh_addralign - adjust;
7191	    }
7192	}
7193    }
7194
7195  return TRUE;
7196}
7197
7198/* Handle a MIPS specific section when reading an object file.  This
7199   is called when elfcode.h finds a section with an unknown type.
7200   This routine supports both the 32-bit and 64-bit ELF ABI.
7201
7202   FIXME: We need to handle the SHF_MIPS_GPREL flag, but I'm not sure
7203   how to.  */
7204
7205bfd_boolean
7206_bfd_mips_elf_section_from_shdr (bfd *abfd,
7207				 Elf_Internal_Shdr *hdr,
7208				 const char *name,
7209				 int shindex)
7210{
7211  flagword flags = 0;
7212
7213  /* There ought to be a place to keep ELF backend specific flags, but
7214     at the moment there isn't one.  We just keep track of the
7215     sections by their name, instead.  Fortunately, the ABI gives
7216     suggested names for all the MIPS specific sections, so we will
7217     probably get away with this.  */
7218  switch (hdr->sh_type)
7219    {
7220    case SHT_MIPS_LIBLIST:
7221      if (strcmp (name, ".liblist") != 0)
7222	return FALSE;
7223      break;
7224    case SHT_MIPS_MSYM:
7225      if (strcmp (name, ".msym") != 0)
7226	return FALSE;
7227      break;
7228    case SHT_MIPS_CONFLICT:
7229      if (strcmp (name, ".conflict") != 0)
7230	return FALSE;
7231      break;
7232    case SHT_MIPS_GPTAB:
7233      if (! CONST_STRNEQ (name, ".gptab."))
7234	return FALSE;
7235      break;
7236    case SHT_MIPS_UCODE:
7237      if (strcmp (name, ".ucode") != 0)
7238	return FALSE;
7239      break;
7240    case SHT_MIPS_DEBUG:
7241      if (strcmp (name, ".mdebug") != 0)
7242	return FALSE;
7243      flags = SEC_DEBUGGING;
7244      break;
7245    case SHT_MIPS_REGINFO:
7246      if (strcmp (name, ".reginfo") != 0
7247	  || hdr->sh_size != sizeof (Elf32_External_RegInfo))
7248	return FALSE;
7249      flags = (SEC_LINK_ONCE | SEC_LINK_DUPLICATES_SAME_SIZE);
7250      break;
7251    case SHT_MIPS_IFACE:
7252      if (strcmp (name, ".MIPS.interfaces") != 0)
7253	return FALSE;
7254      break;
7255    case SHT_MIPS_CONTENT:
7256      if (! CONST_STRNEQ (name, ".MIPS.content"))
7257	return FALSE;
7258      break;
7259    case SHT_MIPS_OPTIONS:
7260      if (!MIPS_ELF_OPTIONS_SECTION_NAME_P (name))
7261	return FALSE;
7262      break;
7263    case SHT_MIPS_ABIFLAGS:
7264      if (!MIPS_ELF_ABIFLAGS_SECTION_NAME_P (name))
7265	return FALSE;
7266      flags = (SEC_LINK_ONCE | SEC_LINK_DUPLICATES_SAME_SIZE);
7267      break;
7268    case SHT_MIPS_DWARF:
7269      if (! CONST_STRNEQ (name, ".debug_")
7270          && ! CONST_STRNEQ (name, ".zdebug_"))
7271	return FALSE;
7272      break;
7273    case SHT_MIPS_SYMBOL_LIB:
7274      if (strcmp (name, ".MIPS.symlib") != 0)
7275	return FALSE;
7276      break;
7277    case SHT_MIPS_EVENTS:
7278      if (! CONST_STRNEQ (name, ".MIPS.events")
7279	  && ! CONST_STRNEQ (name, ".MIPS.post_rel"))
7280	return FALSE;
7281      break;
7282    default:
7283      break;
7284    }
7285
7286  if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
7287    return FALSE;
7288
7289  if (flags)
7290    {
7291      if (! bfd_set_section_flags (abfd, hdr->bfd_section,
7292				   (bfd_get_section_flags (abfd,
7293							   hdr->bfd_section)
7294				    | flags)))
7295	return FALSE;
7296    }
7297
7298  if (hdr->sh_type == SHT_MIPS_ABIFLAGS)
7299    {
7300      Elf_External_ABIFlags_v0 ext;
7301
7302      if (! bfd_get_section_contents (abfd, hdr->bfd_section,
7303				      &ext, 0, sizeof ext))
7304	return FALSE;
7305      bfd_mips_elf_swap_abiflags_v0_in (abfd, &ext,
7306					&mips_elf_tdata (abfd)->abiflags);
7307      if (mips_elf_tdata (abfd)->abiflags.version != 0)
7308	return FALSE;
7309      mips_elf_tdata (abfd)->abiflags_valid = TRUE;
7310    }
7311
7312  /* FIXME: We should record sh_info for a .gptab section.  */
7313
7314  /* For a .reginfo section, set the gp value in the tdata information
7315     from the contents of this section.  We need the gp value while
7316     processing relocs, so we just get it now.  The .reginfo section
7317     is not used in the 64-bit MIPS ELF ABI.  */
7318  if (hdr->sh_type == SHT_MIPS_REGINFO)
7319    {
7320      Elf32_External_RegInfo ext;
7321      Elf32_RegInfo s;
7322
7323      if (! bfd_get_section_contents (abfd, hdr->bfd_section,
7324				      &ext, 0, sizeof ext))
7325	return FALSE;
7326      bfd_mips_elf32_swap_reginfo_in (abfd, &ext, &s);
7327      elf_gp (abfd) = s.ri_gp_value;
7328    }
7329
7330  /* For a SHT_MIPS_OPTIONS section, look for a ODK_REGINFO entry, and
7331     set the gp value based on what we find.  We may see both
7332     SHT_MIPS_REGINFO and SHT_MIPS_OPTIONS/ODK_REGINFO; in that case,
7333     they should agree.  */
7334  if (hdr->sh_type == SHT_MIPS_OPTIONS)
7335    {
7336      bfd_byte *contents, *l, *lend;
7337
7338      contents = bfd_malloc (hdr->sh_size);
7339      if (contents == NULL)
7340	return FALSE;
7341      if (! bfd_get_section_contents (abfd, hdr->bfd_section, contents,
7342				      0, hdr->sh_size))
7343	{
7344	  free (contents);
7345	  return FALSE;
7346	}
7347      l = contents;
7348      lend = contents + hdr->sh_size;
7349      while (l + sizeof (Elf_External_Options) <= lend)
7350	{
7351	  Elf_Internal_Options intopt;
7352
7353	  bfd_mips_elf_swap_options_in (abfd, (Elf_External_Options *) l,
7354					&intopt);
7355	  if (intopt.size < sizeof (Elf_External_Options))
7356	    {
7357	      _bfd_error_handler
7358		/* xgettext:c-format */
7359		(_("%B: Warning: bad `%s' option size %u smaller than its header"),
7360		abfd, MIPS_ELF_OPTIONS_SECTION_NAME (abfd), intopt.size);
7361	      break;
7362	    }
7363	  if (ABI_64_P (abfd) && intopt.kind == ODK_REGINFO)
7364	    {
7365	      Elf64_Internal_RegInfo intreg;
7366
7367	      bfd_mips_elf64_swap_reginfo_in
7368		(abfd,
7369		 ((Elf64_External_RegInfo *)
7370		  (l + sizeof (Elf_External_Options))),
7371		 &intreg);
7372	      elf_gp (abfd) = intreg.ri_gp_value;
7373	    }
7374	  else if (intopt.kind == ODK_REGINFO)
7375	    {
7376	      Elf32_RegInfo intreg;
7377
7378	      bfd_mips_elf32_swap_reginfo_in
7379		(abfd,
7380		 ((Elf32_External_RegInfo *)
7381		  (l + sizeof (Elf_External_Options))),
7382		 &intreg);
7383	      elf_gp (abfd) = intreg.ri_gp_value;
7384	    }
7385	  l += intopt.size;
7386	}
7387      free (contents);
7388    }
7389
7390  return TRUE;
7391}
7392
7393/* Set the correct type for a MIPS ELF section.  We do this by the
7394   section name, which is a hack, but ought to work.  This routine is
7395   used by both the 32-bit and the 64-bit ABI.  */
7396
7397bfd_boolean
7398_bfd_mips_elf_fake_sections (bfd *abfd, Elf_Internal_Shdr *hdr, asection *sec)
7399{
7400  const char *name = bfd_get_section_name (abfd, sec);
7401
7402  if (strcmp (name, ".liblist") == 0)
7403    {
7404      hdr->sh_type = SHT_MIPS_LIBLIST;
7405      hdr->sh_info = sec->size / sizeof (Elf32_Lib);
7406      /* The sh_link field is set in final_write_processing.  */
7407    }
7408  else if (strcmp (name, ".conflict") == 0)
7409    hdr->sh_type = SHT_MIPS_CONFLICT;
7410  else if (CONST_STRNEQ (name, ".gptab."))
7411    {
7412      hdr->sh_type = SHT_MIPS_GPTAB;
7413      hdr->sh_entsize = sizeof (Elf32_External_gptab);
7414      /* The sh_info field is set in final_write_processing.  */
7415    }
7416  else if (strcmp (name, ".ucode") == 0)
7417    hdr->sh_type = SHT_MIPS_UCODE;
7418  else if (strcmp (name, ".mdebug") == 0)
7419    {
7420      hdr->sh_type = SHT_MIPS_DEBUG;
7421      /* In a shared object on IRIX 5.3, the .mdebug section has an
7422         entsize of 0.  FIXME: Does this matter?  */
7423      if (SGI_COMPAT (abfd) && (abfd->flags & DYNAMIC) != 0)
7424	hdr->sh_entsize = 0;
7425      else
7426	hdr->sh_entsize = 1;
7427    }
7428  else if (strcmp (name, ".reginfo") == 0)
7429    {
7430      hdr->sh_type = SHT_MIPS_REGINFO;
7431      /* In a shared object on IRIX 5.3, the .reginfo section has an
7432         entsize of 0x18.  FIXME: Does this matter?  */
7433      if (SGI_COMPAT (abfd))
7434	{
7435	  if ((abfd->flags & DYNAMIC) != 0)
7436	    hdr->sh_entsize = sizeof (Elf32_External_RegInfo);
7437	  else
7438	    hdr->sh_entsize = 1;
7439	}
7440      else
7441	hdr->sh_entsize = sizeof (Elf32_External_RegInfo);
7442    }
7443  else if (SGI_COMPAT (abfd)
7444	   && (strcmp (name, ".hash") == 0
7445	       || strcmp (name, ".dynamic") == 0
7446	       || strcmp (name, ".dynstr") == 0))
7447    {
7448      if (SGI_COMPAT (abfd))
7449	hdr->sh_entsize = 0;
7450#if 0
7451      /* This isn't how the IRIX6 linker behaves.  */
7452      hdr->sh_info = SIZEOF_MIPS_DYNSYM_SECNAMES;
7453#endif
7454    }
7455  else if (strcmp (name, ".got") == 0
7456	   || strcmp (name, ".srdata") == 0
7457	   || strcmp (name, ".sdata") == 0
7458	   || strcmp (name, ".sbss") == 0
7459	   || strcmp (name, ".lit4") == 0
7460	   || strcmp (name, ".lit8") == 0)
7461    hdr->sh_flags |= SHF_MIPS_GPREL;
7462  else if (strcmp (name, ".MIPS.interfaces") == 0)
7463    {
7464      hdr->sh_type = SHT_MIPS_IFACE;
7465      hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7466    }
7467  else if (CONST_STRNEQ (name, ".MIPS.content"))
7468    {
7469      hdr->sh_type = SHT_MIPS_CONTENT;
7470      hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7471      /* The sh_info field is set in final_write_processing.  */
7472    }
7473  else if (MIPS_ELF_OPTIONS_SECTION_NAME_P (name))
7474    {
7475      hdr->sh_type = SHT_MIPS_OPTIONS;
7476      hdr->sh_entsize = 1;
7477      hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7478    }
7479  else if (CONST_STRNEQ (name, ".MIPS.abiflags"))
7480    {
7481      hdr->sh_type = SHT_MIPS_ABIFLAGS;
7482      hdr->sh_entsize = sizeof (Elf_External_ABIFlags_v0);
7483    }
7484  else if (CONST_STRNEQ (name, ".debug_")
7485           || CONST_STRNEQ (name, ".zdebug_"))
7486    {
7487      hdr->sh_type = SHT_MIPS_DWARF;
7488
7489      /* Irix facilities such as libexc expect a single .debug_frame
7490	 per executable, the system ones have NOSTRIP set and the linker
7491	 doesn't merge sections with different flags so ...  */
7492      if (SGI_COMPAT (abfd) && CONST_STRNEQ (name, ".debug_frame"))
7493	hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7494    }
7495  else if (strcmp (name, ".MIPS.symlib") == 0)
7496    {
7497      hdr->sh_type = SHT_MIPS_SYMBOL_LIB;
7498      /* The sh_link and sh_info fields are set in
7499         final_write_processing.  */
7500    }
7501  else if (CONST_STRNEQ (name, ".MIPS.events")
7502	   || CONST_STRNEQ (name, ".MIPS.post_rel"))
7503    {
7504      hdr->sh_type = SHT_MIPS_EVENTS;
7505      hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7506      /* The sh_link field is set in final_write_processing.  */
7507    }
7508  else if (strcmp (name, ".msym") == 0)
7509    {
7510      hdr->sh_type = SHT_MIPS_MSYM;
7511      hdr->sh_flags |= SHF_ALLOC;
7512      hdr->sh_entsize = 8;
7513    }
7514
7515  /* The generic elf_fake_sections will set up REL_HDR using the default
7516   kind of relocations.  We used to set up a second header for the
7517   non-default kind of relocations here, but only NewABI would use
7518   these, and the IRIX ld doesn't like resulting empty RELA sections.
7519   Thus we create those header only on demand now.  */
7520
7521  return TRUE;
7522}
7523
7524/* Given a BFD section, try to locate the corresponding ELF section
7525   index.  This is used by both the 32-bit and the 64-bit ABI.
7526   Actually, it's not clear to me that the 64-bit ABI supports these,
7527   but for non-PIC objects we will certainly want support for at least
7528   the .scommon section.  */
7529
7530bfd_boolean
7531_bfd_mips_elf_section_from_bfd_section (bfd *abfd ATTRIBUTE_UNUSED,
7532					asection *sec, int *retval)
7533{
7534  if (strcmp (bfd_get_section_name (abfd, sec), ".scommon") == 0)
7535    {
7536      *retval = SHN_MIPS_SCOMMON;
7537      return TRUE;
7538    }
7539  if (strcmp (bfd_get_section_name (abfd, sec), ".acommon") == 0)
7540    {
7541      *retval = SHN_MIPS_ACOMMON;
7542      return TRUE;
7543    }
7544  return FALSE;
7545}
7546
7547/* Hook called by the linker routine which adds symbols from an object
7548   file.  We must handle the special MIPS section numbers here.  */
7549
7550bfd_boolean
7551_bfd_mips_elf_add_symbol_hook (bfd *abfd, struct bfd_link_info *info,
7552			       Elf_Internal_Sym *sym, const char **namep,
7553			       flagword *flagsp ATTRIBUTE_UNUSED,
7554			       asection **secp, bfd_vma *valp)
7555{
7556  if (SGI_COMPAT (abfd)
7557      && (abfd->flags & DYNAMIC) != 0
7558      && strcmp (*namep, "_rld_new_interface") == 0)
7559    {
7560      /* Skip IRIX5 rld entry name.  */
7561      *namep = NULL;
7562      return TRUE;
7563    }
7564
7565  /* Shared objects may have a dynamic symbol '_gp_disp' defined as
7566     a SECTION *ABS*.  This causes ld to think it can resolve _gp_disp
7567     by setting a DT_NEEDED for the shared object.  Since _gp_disp is
7568     a magic symbol resolved by the linker, we ignore this bogus definition
7569     of _gp_disp.  New ABI objects do not suffer from this problem so this
7570     is not done for them. */
7571  if (!NEWABI_P(abfd)
7572      && (sym->st_shndx == SHN_ABS)
7573      && (strcmp (*namep, "_gp_disp") == 0))
7574    {
7575      *namep = NULL;
7576      return TRUE;
7577    }
7578
7579  switch (sym->st_shndx)
7580    {
7581    case SHN_COMMON:
7582      /* Common symbols less than the GP size are automatically
7583	 treated as SHN_MIPS_SCOMMON symbols.  */
7584      if (sym->st_size > elf_gp_size (abfd)
7585	  || ELF_ST_TYPE (sym->st_info) == STT_TLS
7586	  || IRIX_COMPAT (abfd) == ict_irix6)
7587	break;
7588      /* Fall through.  */
7589    case SHN_MIPS_SCOMMON:
7590      *secp = bfd_make_section_old_way (abfd, ".scommon");
7591      (*secp)->flags |= SEC_IS_COMMON;
7592      *valp = sym->st_size;
7593      break;
7594
7595    case SHN_MIPS_TEXT:
7596      /* This section is used in a shared object.  */
7597      if (mips_elf_tdata (abfd)->elf_text_section == NULL)
7598	{
7599	  asymbol *elf_text_symbol;
7600	  asection *elf_text_section;
7601	  bfd_size_type amt = sizeof (asection);
7602
7603	  elf_text_section = bfd_zalloc (abfd, amt);
7604	  if (elf_text_section == NULL)
7605	    return FALSE;
7606
7607	  amt = sizeof (asymbol);
7608	  elf_text_symbol = bfd_zalloc (abfd, amt);
7609	  if (elf_text_symbol == NULL)
7610	    return FALSE;
7611
7612	  /* Initialize the section.  */
7613
7614	  mips_elf_tdata (abfd)->elf_text_section = elf_text_section;
7615	  mips_elf_tdata (abfd)->elf_text_symbol = elf_text_symbol;
7616
7617	  elf_text_section->symbol = elf_text_symbol;
7618	  elf_text_section->symbol_ptr_ptr = &mips_elf_tdata (abfd)->elf_text_symbol;
7619
7620	  elf_text_section->name = ".text";
7621	  elf_text_section->flags = SEC_NO_FLAGS;
7622	  elf_text_section->output_section = NULL;
7623	  elf_text_section->owner = abfd;
7624	  elf_text_symbol->name = ".text";
7625	  elf_text_symbol->flags = BSF_SECTION_SYM | BSF_DYNAMIC;
7626	  elf_text_symbol->section = elf_text_section;
7627	}
7628      /* This code used to do *secp = bfd_und_section_ptr if
7629         bfd_link_pic (info).  I don't know why, and that doesn't make sense,
7630         so I took it out.  */
7631      *secp = mips_elf_tdata (abfd)->elf_text_section;
7632      break;
7633
7634    case SHN_MIPS_ACOMMON:
7635      /* Fall through. XXX Can we treat this as allocated data?  */
7636    case SHN_MIPS_DATA:
7637      /* This section is used in a shared object.  */
7638      if (mips_elf_tdata (abfd)->elf_data_section == NULL)
7639	{
7640	  asymbol *elf_data_symbol;
7641	  asection *elf_data_section;
7642	  bfd_size_type amt = sizeof (asection);
7643
7644	  elf_data_section = bfd_zalloc (abfd, amt);
7645	  if (elf_data_section == NULL)
7646	    return FALSE;
7647
7648	  amt = sizeof (asymbol);
7649	  elf_data_symbol = bfd_zalloc (abfd, amt);
7650	  if (elf_data_symbol == NULL)
7651	    return FALSE;
7652
7653	  /* Initialize the section.  */
7654
7655	  mips_elf_tdata (abfd)->elf_data_section = elf_data_section;
7656	  mips_elf_tdata (abfd)->elf_data_symbol = elf_data_symbol;
7657
7658	  elf_data_section->symbol = elf_data_symbol;
7659	  elf_data_section->symbol_ptr_ptr = &mips_elf_tdata (abfd)->elf_data_symbol;
7660
7661	  elf_data_section->name = ".data";
7662	  elf_data_section->flags = SEC_NO_FLAGS;
7663	  elf_data_section->output_section = NULL;
7664	  elf_data_section->owner = abfd;
7665	  elf_data_symbol->name = ".data";
7666	  elf_data_symbol->flags = BSF_SECTION_SYM | BSF_DYNAMIC;
7667	  elf_data_symbol->section = elf_data_section;
7668	}
7669      /* This code used to do *secp = bfd_und_section_ptr if
7670         bfd_link_pic (info).  I don't know why, and that doesn't make sense,
7671         so I took it out.  */
7672      *secp = mips_elf_tdata (abfd)->elf_data_section;
7673      break;
7674
7675    case SHN_MIPS_SUNDEFINED:
7676      *secp = bfd_und_section_ptr;
7677      break;
7678    }
7679
7680  if (SGI_COMPAT (abfd)
7681      && ! bfd_link_pic (info)
7682      && info->output_bfd->xvec == abfd->xvec
7683      && strcmp (*namep, "__rld_obj_head") == 0)
7684    {
7685      struct elf_link_hash_entry *h;
7686      struct bfd_link_hash_entry *bh;
7687
7688      /* Mark __rld_obj_head as dynamic.  */
7689      bh = NULL;
7690      if (! (_bfd_generic_link_add_one_symbol
7691	     (info, abfd, *namep, BSF_GLOBAL, *secp, *valp, NULL, FALSE,
7692	      get_elf_backend_data (abfd)->collect, &bh)))
7693	return FALSE;
7694
7695      h = (struct elf_link_hash_entry *) bh;
7696      h->non_elf = 0;
7697      h->def_regular = 1;
7698      h->type = STT_OBJECT;
7699
7700      if (! bfd_elf_link_record_dynamic_symbol (info, h))
7701	return FALSE;
7702
7703      mips_elf_hash_table (info)->use_rld_obj_head = TRUE;
7704      mips_elf_hash_table (info)->rld_symbol = h;
7705    }
7706
7707  /* If this is a mips16 text symbol, add 1 to the value to make it
7708     odd.  This will cause something like .word SYM to come up with
7709     the right value when it is loaded into the PC.  */
7710  if (ELF_ST_IS_COMPRESSED (sym->st_other))
7711    ++*valp;
7712
7713  return TRUE;
7714}
7715
7716/* This hook function is called before the linker writes out a global
7717   symbol.  We mark symbols as small common if appropriate.  This is
7718   also where we undo the increment of the value for a mips16 symbol.  */
7719
7720int
7721_bfd_mips_elf_link_output_symbol_hook
7722  (struct bfd_link_info *info ATTRIBUTE_UNUSED,
7723   const char *name ATTRIBUTE_UNUSED, Elf_Internal_Sym *sym,
7724   asection *input_sec, struct elf_link_hash_entry *h ATTRIBUTE_UNUSED)
7725{
7726  /* If we see a common symbol, which implies a relocatable link, then
7727     if a symbol was small common in an input file, mark it as small
7728     common in the output file.  */
7729  if (sym->st_shndx == SHN_COMMON
7730      && strcmp (input_sec->name, ".scommon") == 0)
7731    sym->st_shndx = SHN_MIPS_SCOMMON;
7732
7733  if (ELF_ST_IS_COMPRESSED (sym->st_other))
7734    sym->st_value &= ~1;
7735
7736  return 1;
7737}
7738
7739/* Functions for the dynamic linker.  */
7740
7741/* Create dynamic sections when linking against a dynamic object.  */
7742
7743bfd_boolean
7744_bfd_mips_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
7745{
7746  struct elf_link_hash_entry *h;
7747  struct bfd_link_hash_entry *bh;
7748  flagword flags;
7749  register asection *s;
7750  const char * const *namep;
7751  struct mips_elf_link_hash_table *htab;
7752
7753  htab = mips_elf_hash_table (info);
7754  BFD_ASSERT (htab != NULL);
7755
7756  flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
7757	   | SEC_LINKER_CREATED | SEC_READONLY);
7758
7759  /* The psABI requires a read-only .dynamic section, but the VxWorks
7760     EABI doesn't.  */
7761  if (!htab->is_vxworks)
7762    {
7763      s = bfd_get_linker_section (abfd, ".dynamic");
7764      if (s != NULL)
7765	{
7766	  if (! bfd_set_section_flags (abfd, s, flags))
7767	    return FALSE;
7768	}
7769    }
7770
7771  /* We need to create .got section.  */
7772  if (!mips_elf_create_got_section (abfd, info))
7773    return FALSE;
7774
7775  if (! mips_elf_rel_dyn_section (info, TRUE))
7776    return FALSE;
7777
7778  /* Create .stub section.  */
7779  s = bfd_make_section_anyway_with_flags (abfd,
7780					  MIPS_ELF_STUB_SECTION_NAME (abfd),
7781					  flags | SEC_CODE);
7782  if (s == NULL
7783      || ! bfd_set_section_alignment (abfd, s,
7784				      MIPS_ELF_LOG_FILE_ALIGN (abfd)))
7785    return FALSE;
7786  htab->sstubs = s;
7787
7788  if (!mips_elf_hash_table (info)->use_rld_obj_head
7789      && bfd_link_executable (info)
7790      && bfd_get_linker_section (abfd, ".rld_map") == NULL)
7791    {
7792      s = bfd_make_section_anyway_with_flags (abfd, ".rld_map",
7793					      flags &~ (flagword) SEC_READONLY);
7794      if (s == NULL
7795	  || ! bfd_set_section_alignment (abfd, s,
7796					  MIPS_ELF_LOG_FILE_ALIGN (abfd)))
7797	return FALSE;
7798    }
7799
7800  /* On IRIX5, we adjust add some additional symbols and change the
7801     alignments of several sections.  There is no ABI documentation
7802     indicating that this is necessary on IRIX6, nor any evidence that
7803     the linker takes such action.  */
7804  if (IRIX_COMPAT (abfd) == ict_irix5)
7805    {
7806      for (namep = mips_elf_dynsym_rtproc_names; *namep != NULL; namep++)
7807	{
7808	  bh = NULL;
7809	  if (! (_bfd_generic_link_add_one_symbol
7810		 (info, abfd, *namep, BSF_GLOBAL, bfd_und_section_ptr, 0,
7811		  NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
7812	    return FALSE;
7813
7814	  h = (struct elf_link_hash_entry *) bh;
7815	  h->non_elf = 0;
7816	  h->def_regular = 1;
7817	  h->type = STT_SECTION;
7818
7819	  if (! bfd_elf_link_record_dynamic_symbol (info, h))
7820	    return FALSE;
7821	}
7822
7823      /* We need to create a .compact_rel section.  */
7824      if (SGI_COMPAT (abfd))
7825	{
7826	  if (!mips_elf_create_compact_rel_section (abfd, info))
7827	    return FALSE;
7828	}
7829
7830      /* Change alignments of some sections.  */
7831      s = bfd_get_linker_section (abfd, ".hash");
7832      if (s != NULL)
7833	(void) bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7834
7835      s = bfd_get_linker_section (abfd, ".dynsym");
7836      if (s != NULL)
7837	(void) bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7838
7839      s = bfd_get_linker_section (abfd, ".dynstr");
7840      if (s != NULL)
7841	(void) bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7842
7843      /* ??? */
7844      s = bfd_get_section_by_name (abfd, ".reginfo");
7845      if (s != NULL)
7846	(void) bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7847
7848      s = bfd_get_linker_section (abfd, ".dynamic");
7849      if (s != NULL)
7850	(void) bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7851    }
7852
7853  if (bfd_link_executable (info))
7854    {
7855      const char *name;
7856
7857      name = SGI_COMPAT (abfd) ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING";
7858      bh = NULL;
7859      if (!(_bfd_generic_link_add_one_symbol
7860	    (info, abfd, name, BSF_GLOBAL, bfd_abs_section_ptr, 0,
7861	     NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
7862	return FALSE;
7863
7864      h = (struct elf_link_hash_entry *) bh;
7865      h->non_elf = 0;
7866      h->def_regular = 1;
7867      h->type = STT_SECTION;
7868
7869      if (! bfd_elf_link_record_dynamic_symbol (info, h))
7870	return FALSE;
7871
7872      if (! mips_elf_hash_table (info)->use_rld_obj_head)
7873	{
7874	  /* __rld_map is a four byte word located in the .data section
7875	     and is filled in by the rtld to contain a pointer to
7876	     the _r_debug structure. Its symbol value will be set in
7877	     _bfd_mips_elf_finish_dynamic_symbol.  */
7878	  s = bfd_get_linker_section (abfd, ".rld_map");
7879	  BFD_ASSERT (s != NULL);
7880
7881	  name = SGI_COMPAT (abfd) ? "__rld_map" : "__RLD_MAP";
7882	  bh = NULL;
7883	  if (!(_bfd_generic_link_add_one_symbol
7884		(info, abfd, name, BSF_GLOBAL, s, 0, NULL, FALSE,
7885		 get_elf_backend_data (abfd)->collect, &bh)))
7886	    return FALSE;
7887
7888	  h = (struct elf_link_hash_entry *) bh;
7889	  h->non_elf = 0;
7890	  h->def_regular = 1;
7891	  h->type = STT_OBJECT;
7892
7893	  if (! bfd_elf_link_record_dynamic_symbol (info, h))
7894	    return FALSE;
7895	  mips_elf_hash_table (info)->rld_symbol = h;
7896	}
7897    }
7898
7899  /* Create the .plt, .rel(a).plt, .dynbss and .rel(a).bss sections.
7900     Also, on VxWorks, create the _PROCEDURE_LINKAGE_TABLE_ symbol.  */
7901  if (!_bfd_elf_create_dynamic_sections (abfd, info))
7902    return FALSE;
7903
7904  /* Do the usual VxWorks handling.  */
7905  if (htab->is_vxworks
7906      && !elf_vxworks_create_dynamic_sections (abfd, info, &htab->srelplt2))
7907    return FALSE;
7908
7909  return TRUE;
7910}
7911
7912/* Return true if relocation REL against section SEC is a REL rather than
7913   RELA relocation.  RELOCS is the first relocation in the section and
7914   ABFD is the bfd that contains SEC.  */
7915
7916static bfd_boolean
7917mips_elf_rel_relocation_p (bfd *abfd, asection *sec,
7918			   const Elf_Internal_Rela *relocs,
7919			   const Elf_Internal_Rela *rel)
7920{
7921  Elf_Internal_Shdr *rel_hdr;
7922  const struct elf_backend_data *bed;
7923
7924  /* To determine which flavor of relocation this is, we depend on the
7925     fact that the INPUT_SECTION's REL_HDR is read before RELA_HDR.  */
7926  rel_hdr = elf_section_data (sec)->rel.hdr;
7927  if (rel_hdr == NULL)
7928    return FALSE;
7929  bed = get_elf_backend_data (abfd);
7930  return ((size_t) (rel - relocs)
7931	  < NUM_SHDR_ENTRIES (rel_hdr) * bed->s->int_rels_per_ext_rel);
7932}
7933
7934/* Read the addend for REL relocation REL, which belongs to bfd ABFD.
7935   HOWTO is the relocation's howto and CONTENTS points to the contents
7936   of the section that REL is against.  */
7937
7938static bfd_vma
7939mips_elf_read_rel_addend (bfd *abfd, const Elf_Internal_Rela *rel,
7940			  reloc_howto_type *howto, bfd_byte *contents)
7941{
7942  bfd_byte *location;
7943  unsigned int r_type;
7944  bfd_vma addend;
7945  bfd_vma bytes;
7946
7947  r_type = ELF_R_TYPE (abfd, rel->r_info);
7948  location = contents + rel->r_offset;
7949
7950  /* Get the addend, which is stored in the input file.  */
7951  _bfd_mips_elf_reloc_unshuffle (abfd, r_type, FALSE, location);
7952  bytes = mips_elf_obtain_contents (howto, rel, abfd, contents);
7953  _bfd_mips_elf_reloc_shuffle (abfd, r_type, FALSE, location);
7954
7955  addend = bytes & howto->src_mask;
7956
7957  /* Shift is 2, unusually, for microMIPS JALX.  Adjust the addend
7958     accordingly.  */
7959  if (r_type == R_MICROMIPS_26_S1 && (bytes >> 26) == 0x3c)
7960    addend <<= 1;
7961
7962  return addend;
7963}
7964
7965/* REL is a relocation in ABFD that needs a partnering LO16 relocation
7966   and *ADDEND is the addend for REL itself.  Look for the LO16 relocation
7967   and update *ADDEND with the final addend.  Return true on success
7968   or false if the LO16 could not be found.  RELEND is the exclusive
7969   upper bound on the relocations for REL's section.  */
7970
7971static bfd_boolean
7972mips_elf_add_lo16_rel_addend (bfd *abfd,
7973			      const Elf_Internal_Rela *rel,
7974			      const Elf_Internal_Rela *relend,
7975			      bfd_byte *contents, bfd_vma *addend)
7976{
7977  unsigned int r_type, lo16_type;
7978  const Elf_Internal_Rela *lo16_relocation;
7979  reloc_howto_type *lo16_howto;
7980  bfd_vma l;
7981
7982  r_type = ELF_R_TYPE (abfd, rel->r_info);
7983  if (mips16_reloc_p (r_type))
7984    lo16_type = R_MIPS16_LO16;
7985  else if (micromips_reloc_p (r_type))
7986    lo16_type = R_MICROMIPS_LO16;
7987  else if (r_type == R_MIPS_PCHI16)
7988    lo16_type = R_MIPS_PCLO16;
7989  else
7990    lo16_type = R_MIPS_LO16;
7991
7992  /* The combined value is the sum of the HI16 addend, left-shifted by
7993     sixteen bits, and the LO16 addend, sign extended.  (Usually, the
7994     code does a `lui' of the HI16 value, and then an `addiu' of the
7995     LO16 value.)
7996
7997     Scan ahead to find a matching LO16 relocation.
7998
7999     According to the MIPS ELF ABI, the R_MIPS_LO16 relocation must
8000     be immediately following.  However, for the IRIX6 ABI, the next
8001     relocation may be a composed relocation consisting of several
8002     relocations for the same address.  In that case, the R_MIPS_LO16
8003     relocation may occur as one of these.  We permit a similar
8004     extension in general, as that is useful for GCC.
8005
8006     In some cases GCC dead code elimination removes the LO16 but keeps
8007     the corresponding HI16.  This is strictly speaking a violation of
8008     the ABI but not immediately harmful.  */
8009  lo16_relocation = mips_elf_next_relocation (abfd, lo16_type, rel, relend);
8010  if (lo16_relocation == NULL)
8011    return FALSE;
8012
8013  /* Obtain the addend kept there.  */
8014  lo16_howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, lo16_type, FALSE);
8015  l = mips_elf_read_rel_addend (abfd, lo16_relocation, lo16_howto, contents);
8016
8017  l <<= lo16_howto->rightshift;
8018  l = _bfd_mips_elf_sign_extend (l, 16);
8019
8020  *addend <<= 16;
8021  *addend += l;
8022  return TRUE;
8023}
8024
8025/* Try to read the contents of section SEC in bfd ABFD.  Return true and
8026   store the contents in *CONTENTS on success.  Assume that *CONTENTS
8027   already holds the contents if it is nonull on entry.  */
8028
8029static bfd_boolean
8030mips_elf_get_section_contents (bfd *abfd, asection *sec, bfd_byte **contents)
8031{
8032  if (*contents)
8033    return TRUE;
8034
8035  /* Get cached copy if it exists.  */
8036  if (elf_section_data (sec)->this_hdr.contents != NULL)
8037    {
8038      *contents = elf_section_data (sec)->this_hdr.contents;
8039      return TRUE;
8040    }
8041
8042  return bfd_malloc_and_get_section (abfd, sec, contents);
8043}
8044
8045/* Make a new PLT record to keep internal data.  */
8046
8047static struct plt_entry *
8048mips_elf_make_plt_record (bfd *abfd)
8049{
8050  struct plt_entry *entry;
8051
8052  entry = bfd_zalloc (abfd, sizeof (*entry));
8053  if (entry == NULL)
8054    return NULL;
8055
8056  entry->stub_offset = MINUS_ONE;
8057  entry->mips_offset = MINUS_ONE;
8058  entry->comp_offset = MINUS_ONE;
8059  entry->gotplt_index = MINUS_ONE;
8060  return entry;
8061}
8062
8063/* Look through the relocs for a section during the first phase, and
8064   allocate space in the global offset table and record the need for
8065   standard MIPS and compressed procedure linkage table entries.  */
8066
8067bfd_boolean
8068_bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
8069			    asection *sec, const Elf_Internal_Rela *relocs)
8070{
8071  const char *name;
8072  bfd *dynobj;
8073  Elf_Internal_Shdr *symtab_hdr;
8074  struct elf_link_hash_entry **sym_hashes;
8075  size_t extsymoff;
8076  const Elf_Internal_Rela *rel;
8077  const Elf_Internal_Rela *rel_end;
8078  asection *sreloc;
8079  const struct elf_backend_data *bed;
8080  struct mips_elf_link_hash_table *htab;
8081  bfd_byte *contents;
8082  bfd_vma addend;
8083  reloc_howto_type *howto;
8084
8085  if (bfd_link_relocatable (info))
8086    return TRUE;
8087
8088  htab = mips_elf_hash_table (info);
8089  BFD_ASSERT (htab != NULL);
8090
8091  dynobj = elf_hash_table (info)->dynobj;
8092  symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
8093  sym_hashes = elf_sym_hashes (abfd);
8094  extsymoff = (elf_bad_symtab (abfd)) ? 0 : symtab_hdr->sh_info;
8095
8096  bed = get_elf_backend_data (abfd);
8097  rel_end = relocs + sec->reloc_count * bed->s->int_rels_per_ext_rel;
8098
8099  /* Check for the mips16 stub sections.  */
8100
8101  name = bfd_get_section_name (abfd, sec);
8102  if (FN_STUB_P (name))
8103    {
8104      unsigned long r_symndx;
8105
8106      /* Look at the relocation information to figure out which symbol
8107         this is for.  */
8108
8109      r_symndx = mips16_stub_symndx (bed, sec, relocs, rel_end);
8110      if (r_symndx == 0)
8111	{
8112	  _bfd_error_handler
8113	    /* xgettext:c-format */
8114	    (_("%B: Warning: cannot determine the target function for"
8115	       " stub section `%s'"),
8116	     abfd, name);
8117	  bfd_set_error (bfd_error_bad_value);
8118	  return FALSE;
8119	}
8120
8121      if (r_symndx < extsymoff
8122	  || sym_hashes[r_symndx - extsymoff] == NULL)
8123	{
8124	  asection *o;
8125
8126	  /* This stub is for a local symbol.  This stub will only be
8127             needed if there is some relocation in this BFD, other
8128             than a 16 bit function call, which refers to this symbol.  */
8129	  for (o = abfd->sections; o != NULL; o = o->next)
8130	    {
8131	      Elf_Internal_Rela *sec_relocs;
8132	      const Elf_Internal_Rela *r, *rend;
8133
8134	      /* We can ignore stub sections when looking for relocs.  */
8135	      if ((o->flags & SEC_RELOC) == 0
8136		  || o->reloc_count == 0
8137		  || section_allows_mips16_refs_p (o))
8138		continue;
8139
8140	      sec_relocs
8141		= _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
8142					     info->keep_memory);
8143	      if (sec_relocs == NULL)
8144		return FALSE;
8145
8146	      rend = sec_relocs + o->reloc_count;
8147	      for (r = sec_relocs; r < rend; r++)
8148		if (ELF_R_SYM (abfd, r->r_info) == r_symndx
8149		    && !mips16_call_reloc_p (ELF_R_TYPE (abfd, r->r_info)))
8150		  break;
8151
8152	      if (elf_section_data (o)->relocs != sec_relocs)
8153		free (sec_relocs);
8154
8155	      if (r < rend)
8156		break;
8157	    }
8158
8159	  if (o == NULL)
8160	    {
8161	      /* There is no non-call reloc for this stub, so we do
8162                 not need it.  Since this function is called before
8163                 the linker maps input sections to output sections, we
8164                 can easily discard it by setting the SEC_EXCLUDE
8165                 flag.  */
8166	      sec->flags |= SEC_EXCLUDE;
8167	      return TRUE;
8168	    }
8169
8170	  /* Record this stub in an array of local symbol stubs for
8171             this BFD.  */
8172	  if (mips_elf_tdata (abfd)->local_stubs == NULL)
8173	    {
8174	      unsigned long symcount;
8175	      asection **n;
8176	      bfd_size_type amt;
8177
8178	      if (elf_bad_symtab (abfd))
8179		symcount = NUM_SHDR_ENTRIES (symtab_hdr);
8180	      else
8181		symcount = symtab_hdr->sh_info;
8182	      amt = symcount * sizeof (asection *);
8183	      n = bfd_zalloc (abfd, amt);
8184	      if (n == NULL)
8185		return FALSE;
8186	      mips_elf_tdata (abfd)->local_stubs = n;
8187	    }
8188
8189	  sec->flags |= SEC_KEEP;
8190	  mips_elf_tdata (abfd)->local_stubs[r_symndx] = sec;
8191
8192	  /* We don't need to set mips16_stubs_seen in this case.
8193             That flag is used to see whether we need to look through
8194             the global symbol table for stubs.  We don't need to set
8195             it here, because we just have a local stub.  */
8196	}
8197      else
8198	{
8199	  struct mips_elf_link_hash_entry *h;
8200
8201	  h = ((struct mips_elf_link_hash_entry *)
8202	       sym_hashes[r_symndx - extsymoff]);
8203
8204	  while (h->root.root.type == bfd_link_hash_indirect
8205		 || h->root.root.type == bfd_link_hash_warning)
8206	    h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
8207
8208	  /* H is the symbol this stub is for.  */
8209
8210	  /* If we already have an appropriate stub for this function, we
8211	     don't need another one, so we can discard this one.  Since
8212	     this function is called before the linker maps input sections
8213	     to output sections, we can easily discard it by setting the
8214	     SEC_EXCLUDE flag.  */
8215	  if (h->fn_stub != NULL)
8216	    {
8217	      sec->flags |= SEC_EXCLUDE;
8218	      return TRUE;
8219	    }
8220
8221	  sec->flags |= SEC_KEEP;
8222	  h->fn_stub = sec;
8223	  mips_elf_hash_table (info)->mips16_stubs_seen = TRUE;
8224	}
8225    }
8226  else if (CALL_STUB_P (name) || CALL_FP_STUB_P (name))
8227    {
8228      unsigned long r_symndx;
8229      struct mips_elf_link_hash_entry *h;
8230      asection **loc;
8231
8232      /* Look at the relocation information to figure out which symbol
8233         this is for.  */
8234
8235      r_symndx = mips16_stub_symndx (bed, sec, relocs, rel_end);
8236      if (r_symndx == 0)
8237	{
8238	  _bfd_error_handler
8239	    /* xgettext:c-format */
8240	    (_("%B: Warning: cannot determine the target function for"
8241	       " stub section `%s'"),
8242	     abfd, name);
8243	  bfd_set_error (bfd_error_bad_value);
8244	  return FALSE;
8245	}
8246
8247      if (r_symndx < extsymoff
8248	  || sym_hashes[r_symndx - extsymoff] == NULL)
8249	{
8250	  asection *o;
8251
8252	  /* This stub is for a local symbol.  This stub will only be
8253             needed if there is some relocation (R_MIPS16_26) in this BFD
8254             that refers to this symbol.  */
8255	  for (o = abfd->sections; o != NULL; o = o->next)
8256	    {
8257	      Elf_Internal_Rela *sec_relocs;
8258	      const Elf_Internal_Rela *r, *rend;
8259
8260	      /* We can ignore stub sections when looking for relocs.  */
8261	      if ((o->flags & SEC_RELOC) == 0
8262		  || o->reloc_count == 0
8263		  || section_allows_mips16_refs_p (o))
8264		continue;
8265
8266	      sec_relocs
8267		= _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
8268					     info->keep_memory);
8269	      if (sec_relocs == NULL)
8270		return FALSE;
8271
8272	      rend = sec_relocs + o->reloc_count;
8273	      for (r = sec_relocs; r < rend; r++)
8274		if (ELF_R_SYM (abfd, r->r_info) == r_symndx
8275		    && ELF_R_TYPE (abfd, r->r_info) == R_MIPS16_26)
8276		    break;
8277
8278	      if (elf_section_data (o)->relocs != sec_relocs)
8279		free (sec_relocs);
8280
8281	      if (r < rend)
8282		break;
8283	    }
8284
8285	  if (o == NULL)
8286	    {
8287	      /* There is no non-call reloc for this stub, so we do
8288                 not need it.  Since this function is called before
8289                 the linker maps input sections to output sections, we
8290                 can easily discard it by setting the SEC_EXCLUDE
8291                 flag.  */
8292	      sec->flags |= SEC_EXCLUDE;
8293	      return TRUE;
8294	    }
8295
8296	  /* Record this stub in an array of local symbol call_stubs for
8297             this BFD.  */
8298	  if (mips_elf_tdata (abfd)->local_call_stubs == NULL)
8299	    {
8300	      unsigned long symcount;
8301	      asection **n;
8302	      bfd_size_type amt;
8303
8304	      if (elf_bad_symtab (abfd))
8305		symcount = NUM_SHDR_ENTRIES (symtab_hdr);
8306	      else
8307		symcount = symtab_hdr->sh_info;
8308	      amt = symcount * sizeof (asection *);
8309	      n = bfd_zalloc (abfd, amt);
8310	      if (n == NULL)
8311		return FALSE;
8312	      mips_elf_tdata (abfd)->local_call_stubs = n;
8313	    }
8314
8315	  sec->flags |= SEC_KEEP;
8316	  mips_elf_tdata (abfd)->local_call_stubs[r_symndx] = sec;
8317
8318	  /* We don't need to set mips16_stubs_seen in this case.
8319             That flag is used to see whether we need to look through
8320             the global symbol table for stubs.  We don't need to set
8321             it here, because we just have a local stub.  */
8322	}
8323      else
8324	{
8325	  h = ((struct mips_elf_link_hash_entry *)
8326	       sym_hashes[r_symndx - extsymoff]);
8327
8328	  /* H is the symbol this stub is for.  */
8329
8330	  if (CALL_FP_STUB_P (name))
8331	    loc = &h->call_fp_stub;
8332	  else
8333	    loc = &h->call_stub;
8334
8335	  /* If we already have an appropriate stub for this function, we
8336	     don't need another one, so we can discard this one.  Since
8337	     this function is called before the linker maps input sections
8338	     to output sections, we can easily discard it by setting the
8339	     SEC_EXCLUDE flag.  */
8340	  if (*loc != NULL)
8341	    {
8342	      sec->flags |= SEC_EXCLUDE;
8343	      return TRUE;
8344	    }
8345
8346	  sec->flags |= SEC_KEEP;
8347	  *loc = sec;
8348	  mips_elf_hash_table (info)->mips16_stubs_seen = TRUE;
8349	}
8350    }
8351
8352  sreloc = NULL;
8353  contents = NULL;
8354  for (rel = relocs; rel < rel_end; ++rel)
8355    {
8356      unsigned long r_symndx;
8357      unsigned int r_type;
8358      struct elf_link_hash_entry *h;
8359      bfd_boolean can_make_dynamic_p;
8360      bfd_boolean call_reloc_p;
8361      bfd_boolean constrain_symbol_p;
8362
8363      r_symndx = ELF_R_SYM (abfd, rel->r_info);
8364      r_type = ELF_R_TYPE (abfd, rel->r_info);
8365
8366      if (r_symndx < extsymoff)
8367	h = NULL;
8368      else if (r_symndx >= extsymoff + NUM_SHDR_ENTRIES (symtab_hdr))
8369	{
8370	  _bfd_error_handler
8371	    /* xgettext:c-format */
8372	    (_("%B: Malformed reloc detected for section %s"),
8373	     abfd, name);
8374	  bfd_set_error (bfd_error_bad_value);
8375	  return FALSE;
8376	}
8377      else
8378	{
8379	  h = sym_hashes[r_symndx - extsymoff];
8380	  if (h != NULL)
8381	    {
8382	      while (h->root.type == bfd_link_hash_indirect
8383		     || h->root.type == bfd_link_hash_warning)
8384		h = (struct elf_link_hash_entry *) h->root.u.i.link;
8385
8386	      /* PR15323, ref flags aren't set for references in the
8387		 same object.  */
8388	      h->root.non_ir_ref = 1;
8389	    }
8390	}
8391
8392      /* Set CAN_MAKE_DYNAMIC_P to true if we can convert this
8393	 relocation into a dynamic one.  */
8394      can_make_dynamic_p = FALSE;
8395
8396      /* Set CALL_RELOC_P to true if the relocation is for a call,
8397	 and if pointer equality therefore doesn't matter.  */
8398      call_reloc_p = FALSE;
8399
8400      /* Set CONSTRAIN_SYMBOL_P if we need to take the relocation
8401	 into account when deciding how to define the symbol.
8402	 Relocations in nonallocatable sections such as .pdr and
8403	 .debug* should have no effect.  */
8404      constrain_symbol_p = ((sec->flags & SEC_ALLOC) != 0);
8405
8406      switch (r_type)
8407	{
8408	case R_MIPS_CALL16:
8409	case R_MIPS_CALL_HI16:
8410	case R_MIPS_CALL_LO16:
8411	case R_MIPS16_CALL16:
8412	case R_MICROMIPS_CALL16:
8413	case R_MICROMIPS_CALL_HI16:
8414	case R_MICROMIPS_CALL_LO16:
8415	  call_reloc_p = TRUE;
8416	  /* Fall through.  */
8417
8418	case R_MIPS_GOT16:
8419	case R_MIPS_GOT_HI16:
8420	case R_MIPS_GOT_LO16:
8421	case R_MIPS_GOT_PAGE:
8422	case R_MIPS_GOT_OFST:
8423	case R_MIPS_GOT_DISP:
8424	case R_MIPS_TLS_GOTTPREL:
8425	case R_MIPS_TLS_GD:
8426	case R_MIPS_TLS_LDM:
8427	case R_MIPS16_GOT16:
8428	case R_MIPS16_TLS_GOTTPREL:
8429	case R_MIPS16_TLS_GD:
8430	case R_MIPS16_TLS_LDM:
8431	case R_MICROMIPS_GOT16:
8432	case R_MICROMIPS_GOT_HI16:
8433	case R_MICROMIPS_GOT_LO16:
8434	case R_MICROMIPS_GOT_PAGE:
8435	case R_MICROMIPS_GOT_OFST:
8436	case R_MICROMIPS_GOT_DISP:
8437	case R_MICROMIPS_TLS_GOTTPREL:
8438	case R_MICROMIPS_TLS_GD:
8439	case R_MICROMIPS_TLS_LDM:
8440	  if (dynobj == NULL)
8441	    elf_hash_table (info)->dynobj = dynobj = abfd;
8442	  if (!mips_elf_create_got_section (dynobj, info))
8443	    return FALSE;
8444	  if (htab->is_vxworks && !bfd_link_pic (info))
8445	    {
8446	      _bfd_error_handler
8447		/* xgettext:c-format */
8448		(_("%B: GOT reloc at 0x%lx not expected in executables"),
8449		 abfd, (unsigned long) rel->r_offset);
8450	      bfd_set_error (bfd_error_bad_value);
8451	      return FALSE;
8452	    }
8453	  can_make_dynamic_p = TRUE;
8454	  break;
8455
8456	case R_MIPS_NONE:
8457	case R_MIPS_JALR:
8458	case R_MICROMIPS_JALR:
8459	  /* These relocations have empty fields and are purely there to
8460	     provide link information.  The symbol value doesn't matter.  */
8461	  constrain_symbol_p = FALSE;
8462	  break;
8463
8464	case R_MIPS_GPREL16:
8465	case R_MIPS_GPREL32:
8466	case R_MIPS16_GPREL:
8467	case R_MICROMIPS_GPREL16:
8468	  /* GP-relative relocations always resolve to a definition in a
8469	     regular input file, ignoring the one-definition rule.  This is
8470	     important for the GP setup sequence in NewABI code, which
8471	     always resolves to a local function even if other relocations
8472	     against the symbol wouldn't.  */
8473	  constrain_symbol_p = FALSE;
8474	  break;
8475
8476	case R_MIPS_32:
8477	case R_MIPS_REL32:
8478	case R_MIPS_64:
8479	  /* In VxWorks executables, references to external symbols
8480	     must be handled using copy relocs or PLT entries; it is not
8481	     possible to convert this relocation into a dynamic one.
8482
8483	     For executables that use PLTs and copy-relocs, we have a
8484	     choice between converting the relocation into a dynamic
8485	     one or using copy relocations or PLT entries.  It is
8486	     usually better to do the former, unless the relocation is
8487	     against a read-only section.  */
8488	  if ((bfd_link_pic (info)
8489	       || (h != NULL
8490		   && !htab->is_vxworks
8491		   && strcmp (h->root.root.string, "__gnu_local_gp") != 0
8492		   && !(!info->nocopyreloc
8493			&& !PIC_OBJECT_P (abfd)
8494			&& MIPS_ELF_READONLY_SECTION (sec))))
8495	      && (sec->flags & SEC_ALLOC) != 0)
8496	    {
8497	      can_make_dynamic_p = TRUE;
8498	      if (dynobj == NULL)
8499		elf_hash_table (info)->dynobj = dynobj = abfd;
8500	    }
8501	  break;
8502
8503	case R_MIPS_26:
8504	case R_MIPS_PC16:
8505	case R_MIPS_PC21_S2:
8506	case R_MIPS_PC26_S2:
8507	case R_MIPS16_26:
8508	case R_MIPS16_PC16_S1:
8509	case R_MICROMIPS_26_S1:
8510	case R_MICROMIPS_PC7_S1:
8511	case R_MICROMIPS_PC10_S1:
8512	case R_MICROMIPS_PC16_S1:
8513	case R_MICROMIPS_PC23_S2:
8514	  call_reloc_p = TRUE;
8515	  break;
8516	}
8517
8518      if (h)
8519	{
8520	  if (constrain_symbol_p)
8521	    {
8522	      if (!can_make_dynamic_p)
8523		((struct mips_elf_link_hash_entry *) h)->has_static_relocs = 1;
8524
8525	      if (!call_reloc_p)
8526		h->pointer_equality_needed = 1;
8527
8528	      /* We must not create a stub for a symbol that has
8529		 relocations related to taking the function's address.
8530		 This doesn't apply to VxWorks, where CALL relocs refer
8531		 to a .got.plt entry instead of a normal .got entry.  */
8532	      if (!htab->is_vxworks && (!can_make_dynamic_p || !call_reloc_p))
8533		((struct mips_elf_link_hash_entry *) h)->no_fn_stub = TRUE;
8534	    }
8535
8536	  /* Relocations against the special VxWorks __GOTT_BASE__ and
8537	     __GOTT_INDEX__ symbols must be left to the loader.  Allocate
8538	     room for them in .rela.dyn.  */
8539	  if (is_gott_symbol (info, h))
8540	    {
8541	      if (sreloc == NULL)
8542		{
8543		  sreloc = mips_elf_rel_dyn_section (info, TRUE);
8544		  if (sreloc == NULL)
8545		    return FALSE;
8546		}
8547	      mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
8548	      if (MIPS_ELF_READONLY_SECTION (sec))
8549		/* We tell the dynamic linker that there are
8550		   relocations against the text segment.  */
8551		info->flags |= DF_TEXTREL;
8552	    }
8553	}
8554      else if (call_lo16_reloc_p (r_type)
8555	       || got_lo16_reloc_p (r_type)
8556	       || got_disp_reloc_p (r_type)
8557	       || (got16_reloc_p (r_type) && htab->is_vxworks))
8558	{
8559	  /* We may need a local GOT entry for this relocation.  We
8560	     don't count R_MIPS_GOT_PAGE because we can estimate the
8561	     maximum number of pages needed by looking at the size of
8562	     the segment.  Similar comments apply to R_MIPS*_GOT16 and
8563	     R_MIPS*_CALL16, except on VxWorks, where GOT relocations
8564	     always evaluate to "G".  We don't count R_MIPS_GOT_HI16, or
8565	     R_MIPS_CALL_HI16 because these are always followed by an
8566	     R_MIPS_GOT_LO16 or R_MIPS_CALL_LO16.  */
8567	  if (!mips_elf_record_local_got_symbol (abfd, r_symndx,
8568						 rel->r_addend, info, r_type))
8569	    return FALSE;
8570	}
8571
8572      if (h != NULL
8573	  && mips_elf_relocation_needs_la25_stub (abfd, r_type,
8574						  ELF_ST_IS_MIPS16 (h->other)))
8575	((struct mips_elf_link_hash_entry *) h)->has_nonpic_branches = TRUE;
8576
8577      switch (r_type)
8578	{
8579	case R_MIPS_CALL16:
8580	case R_MIPS16_CALL16:
8581	case R_MICROMIPS_CALL16:
8582	  if (h == NULL)
8583	    {
8584	      _bfd_error_handler
8585		/* xgettext:c-format */
8586		(_("%B: CALL16 reloc at 0x%lx not against global symbol"),
8587		 abfd, (unsigned long) rel->r_offset);
8588	      bfd_set_error (bfd_error_bad_value);
8589	      return FALSE;
8590	    }
8591	  /* Fall through.  */
8592
8593	case R_MIPS_CALL_HI16:
8594	case R_MIPS_CALL_LO16:
8595	case R_MICROMIPS_CALL_HI16:
8596	case R_MICROMIPS_CALL_LO16:
8597	  if (h != NULL)
8598	    {
8599	      /* Make sure there is room in the regular GOT to hold the
8600		 function's address.  We may eliminate it in favour of
8601		 a .got.plt entry later; see mips_elf_count_got_symbols.  */
8602	      if (!mips_elf_record_global_got_symbol (h, abfd, info, TRUE,
8603						      r_type))
8604		return FALSE;
8605
8606	      /* We need a stub, not a plt entry for the undefined
8607		 function.  But we record it as if it needs plt.  See
8608		 _bfd_elf_adjust_dynamic_symbol.  */
8609	      h->needs_plt = 1;
8610	      h->type = STT_FUNC;
8611	    }
8612	  break;
8613
8614	case R_MIPS_GOT_PAGE:
8615	case R_MICROMIPS_GOT_PAGE:
8616	case R_MIPS16_GOT16:
8617	case R_MIPS_GOT16:
8618	case R_MIPS_GOT_HI16:
8619	case R_MIPS_GOT_LO16:
8620	case R_MICROMIPS_GOT16:
8621	case R_MICROMIPS_GOT_HI16:
8622	case R_MICROMIPS_GOT_LO16:
8623	  if (!h || got_page_reloc_p (r_type))
8624	    {
8625	      /* This relocation needs (or may need, if h != NULL) a
8626		 page entry in the GOT.  For R_MIPS_GOT_PAGE we do not
8627		 know for sure until we know whether the symbol is
8628		 preemptible.  */
8629	      if (mips_elf_rel_relocation_p (abfd, sec, relocs, rel))
8630		{
8631		  if (!mips_elf_get_section_contents (abfd, sec, &contents))
8632		    return FALSE;
8633		  howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, FALSE);
8634		  addend = mips_elf_read_rel_addend (abfd, rel,
8635						     howto, contents);
8636		  if (got16_reloc_p (r_type))
8637		    mips_elf_add_lo16_rel_addend (abfd, rel, rel_end,
8638						  contents, &addend);
8639		  else
8640		    addend <<= howto->rightshift;
8641		}
8642	      else
8643		addend = rel->r_addend;
8644	      if (!mips_elf_record_got_page_ref (info, abfd, r_symndx,
8645						 h, addend))
8646		return FALSE;
8647
8648	      if (h)
8649		{
8650		  struct mips_elf_link_hash_entry *hmips =
8651		    (struct mips_elf_link_hash_entry *) h;
8652
8653		  /* This symbol is definitely not overridable.  */
8654		  if (hmips->root.def_regular
8655		      && ! (bfd_link_pic (info) && ! info->symbolic
8656			    && ! hmips->root.forced_local))
8657		    h = NULL;
8658		}
8659	    }
8660	  /* If this is a global, overridable symbol, GOT_PAGE will
8661	     decay to GOT_DISP, so we'll need a GOT entry for it.  */
8662	  /* Fall through.  */
8663
8664	case R_MIPS_GOT_DISP:
8665	case R_MICROMIPS_GOT_DISP:
8666	  if (h && !mips_elf_record_global_got_symbol (h, abfd, info,
8667						       FALSE, r_type))
8668	    return FALSE;
8669	  break;
8670
8671	case R_MIPS_TLS_GOTTPREL:
8672	case R_MIPS16_TLS_GOTTPREL:
8673	case R_MICROMIPS_TLS_GOTTPREL:
8674	  if (bfd_link_pic (info))
8675	    info->flags |= DF_STATIC_TLS;
8676	  /* Fall through */
8677
8678	case R_MIPS_TLS_LDM:
8679	case R_MIPS16_TLS_LDM:
8680	case R_MICROMIPS_TLS_LDM:
8681	  if (tls_ldm_reloc_p (r_type))
8682	    {
8683	      r_symndx = STN_UNDEF;
8684	      h = NULL;
8685	    }
8686	  /* Fall through */
8687
8688	case R_MIPS_TLS_GD:
8689	case R_MIPS16_TLS_GD:
8690	case R_MICROMIPS_TLS_GD:
8691	  /* This symbol requires a global offset table entry, or two
8692	     for TLS GD relocations.  */
8693	  if (h != NULL)
8694	    {
8695	      if (!mips_elf_record_global_got_symbol (h, abfd, info,
8696						      FALSE, r_type))
8697		return FALSE;
8698	    }
8699	  else
8700	    {
8701	      if (!mips_elf_record_local_got_symbol (abfd, r_symndx,
8702						     rel->r_addend,
8703						     info, r_type))
8704		return FALSE;
8705	    }
8706	  break;
8707
8708	case R_MIPS_32:
8709	case R_MIPS_REL32:
8710	case R_MIPS_64:
8711	  /* In VxWorks executables, references to external symbols
8712	     are handled using copy relocs or PLT stubs, so there's
8713	     no need to add a .rela.dyn entry for this relocation.  */
8714	  if (can_make_dynamic_p)
8715	    {
8716	      if (sreloc == NULL)
8717		{
8718		  sreloc = mips_elf_rel_dyn_section (info, TRUE);
8719		  if (sreloc == NULL)
8720		    return FALSE;
8721		}
8722	      if (bfd_link_pic (info) && h == NULL)
8723		{
8724		  /* When creating a shared object, we must copy these
8725		     reloc types into the output file as R_MIPS_REL32
8726		     relocs.  Make room for this reloc in .rel(a).dyn.  */
8727		  mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
8728		  if (MIPS_ELF_READONLY_SECTION (sec))
8729		    /* We tell the dynamic linker that there are
8730		       relocations against the text segment.  */
8731		    info->flags |= DF_TEXTREL;
8732		}
8733	      else
8734		{
8735		  struct mips_elf_link_hash_entry *hmips;
8736
8737		  /* For a shared object, we must copy this relocation
8738		     unless the symbol turns out to be undefined and
8739		     weak with non-default visibility, in which case
8740		     it will be left as zero.
8741
8742		     We could elide R_MIPS_REL32 for locally binding symbols
8743		     in shared libraries, but do not yet do so.
8744
8745		     For an executable, we only need to copy this
8746		     reloc if the symbol is defined in a dynamic
8747		     object.  */
8748		  hmips = (struct mips_elf_link_hash_entry *) h;
8749		  ++hmips->possibly_dynamic_relocs;
8750		  if (MIPS_ELF_READONLY_SECTION (sec))
8751		    /* We need it to tell the dynamic linker if there
8752		       are relocations against the text segment.  */
8753		    hmips->readonly_reloc = TRUE;
8754		}
8755	    }
8756
8757	  if (SGI_COMPAT (abfd))
8758	    mips_elf_hash_table (info)->compact_rel_size +=
8759	      sizeof (Elf32_External_crinfo);
8760	  break;
8761
8762	case R_MIPS_26:
8763	case R_MIPS_GPREL16:
8764	case R_MIPS_LITERAL:
8765	case R_MIPS_GPREL32:
8766	case R_MICROMIPS_26_S1:
8767	case R_MICROMIPS_GPREL16:
8768	case R_MICROMIPS_LITERAL:
8769	case R_MICROMIPS_GPREL7_S2:
8770	  if (SGI_COMPAT (abfd))
8771	    mips_elf_hash_table (info)->compact_rel_size +=
8772	      sizeof (Elf32_External_crinfo);
8773	  break;
8774
8775	  /* This relocation describes the C++ object vtable hierarchy.
8776	     Reconstruct it for later use during GC.  */
8777	case R_MIPS_GNU_VTINHERIT:
8778	  if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
8779	    return FALSE;
8780	  break;
8781
8782	  /* This relocation describes which C++ vtable entries are actually
8783	     used.  Record for later use during GC.  */
8784	case R_MIPS_GNU_VTENTRY:
8785	  BFD_ASSERT (h != NULL);
8786	  if (h != NULL
8787	      && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset))
8788	    return FALSE;
8789	  break;
8790
8791	default:
8792	  break;
8793	}
8794
8795      /* Record the need for a PLT entry.  At this point we don't know
8796         yet if we are going to create a PLT in the first place, but
8797         we only record whether the relocation requires a standard MIPS
8798         or a compressed code entry anyway.  If we don't make a PLT after
8799         all, then we'll just ignore these arrangements.  Likewise if
8800         a PLT entry is not created because the symbol is satisfied
8801         locally.  */
8802      if (h != NULL
8803	  && (branch_reloc_p (r_type)
8804	      || mips16_branch_reloc_p (r_type)
8805	      || micromips_branch_reloc_p (r_type))
8806	  && !SYMBOL_CALLS_LOCAL (info, h))
8807	{
8808	  if (h->plt.plist == NULL)
8809	    h->plt.plist = mips_elf_make_plt_record (abfd);
8810	  if (h->plt.plist == NULL)
8811	    return FALSE;
8812
8813	  if (branch_reloc_p (r_type))
8814	    h->plt.plist->need_mips = TRUE;
8815	  else
8816	    h->plt.plist->need_comp = TRUE;
8817	}
8818
8819      /* See if this reloc would need to refer to a MIPS16 hard-float stub,
8820	 if there is one.  We only need to handle global symbols here;
8821	 we decide whether to keep or delete stubs for local symbols
8822	 when processing the stub's relocations.  */
8823      if (h != NULL
8824	  && !mips16_call_reloc_p (r_type)
8825	  && !section_allows_mips16_refs_p (sec))
8826	{
8827	  struct mips_elf_link_hash_entry *mh;
8828
8829	  mh = (struct mips_elf_link_hash_entry *) h;
8830	  mh->need_fn_stub = TRUE;
8831	}
8832
8833      /* Refuse some position-dependent relocations when creating a
8834	 shared library.  Do not refuse R_MIPS_32 / R_MIPS_64; they're
8835	 not PIC, but we can create dynamic relocations and the result
8836	 will be fine.  Also do not refuse R_MIPS_LO16, which can be
8837	 combined with R_MIPS_GOT16.  */
8838      if (bfd_link_pic (info))
8839	{
8840	  switch (r_type)
8841	    {
8842	    case R_MIPS16_HI16:
8843	    case R_MIPS_HI16:
8844	    case R_MIPS_HIGHER:
8845	    case R_MIPS_HIGHEST:
8846	    case R_MICROMIPS_HI16:
8847	    case R_MICROMIPS_HIGHER:
8848	    case R_MICROMIPS_HIGHEST:
8849	      /* Don't refuse a high part relocation if it's against
8850		 no symbol (e.g. part of a compound relocation).  */
8851	      if (r_symndx == STN_UNDEF)
8852		break;
8853
8854	      /* R_MIPS_HI16 against _gp_disp is used for $gp setup,
8855		 and has a special meaning.  */
8856	      if (!NEWABI_P (abfd) && h != NULL
8857		  && strcmp (h->root.root.string, "_gp_disp") == 0)
8858		break;
8859
8860	      /* Likewise __GOTT_BASE__ and __GOTT_INDEX__ on VxWorks.  */
8861	      if (is_gott_symbol (info, h))
8862		break;
8863
8864	      /* FALLTHROUGH */
8865
8866	    case R_MIPS16_26:
8867	    case R_MIPS_26:
8868	    case R_MICROMIPS_26_S1:
8869	      howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, FALSE);
8870	      _bfd_error_handler
8871		/* xgettext:c-format */
8872		(_("%B: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC"),
8873		 abfd, howto->name,
8874		 (h) ? h->root.root.string : "a local symbol");
8875	      bfd_set_error (bfd_error_bad_value);
8876	      return FALSE;
8877	    default:
8878	      break;
8879	    }
8880	}
8881    }
8882
8883  return TRUE;
8884}
8885
8886bfd_boolean
8887_bfd_mips_relax_section (bfd *abfd, asection *sec,
8888			 struct bfd_link_info *link_info,
8889			 bfd_boolean *again)
8890{
8891  Elf_Internal_Rela *internal_relocs;
8892  Elf_Internal_Rela *irel, *irelend;
8893  Elf_Internal_Shdr *symtab_hdr;
8894  bfd_byte *contents = NULL;
8895  size_t extsymoff;
8896  bfd_boolean changed_contents = FALSE;
8897  bfd_vma sec_start = sec->output_section->vma + sec->output_offset;
8898  Elf_Internal_Sym *isymbuf = NULL;
8899
8900  /* We are not currently changing any sizes, so only one pass.  */
8901  *again = FALSE;
8902
8903  if (bfd_link_relocatable (link_info))
8904    return TRUE;
8905
8906  internal_relocs = _bfd_elf_link_read_relocs (abfd, sec, NULL, NULL,
8907					       link_info->keep_memory);
8908  if (internal_relocs == NULL)
8909    return TRUE;
8910
8911  irelend = internal_relocs + sec->reloc_count
8912    * get_elf_backend_data (abfd)->s->int_rels_per_ext_rel;
8913  symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
8914  extsymoff = (elf_bad_symtab (abfd)) ? 0 : symtab_hdr->sh_info;
8915
8916  for (irel = internal_relocs; irel < irelend; irel++)
8917    {
8918      bfd_vma symval;
8919      bfd_signed_vma sym_offset;
8920      unsigned int r_type;
8921      unsigned long r_symndx;
8922      asection *sym_sec;
8923      unsigned long instruction;
8924
8925      /* Turn jalr into bgezal, and jr into beq, if they're marked
8926	 with a JALR relocation, that indicate where they jump to.
8927	 This saves some pipeline bubbles.  */
8928      r_type = ELF_R_TYPE (abfd, irel->r_info);
8929      if (r_type != R_MIPS_JALR)
8930	continue;
8931
8932      r_symndx = ELF_R_SYM (abfd, irel->r_info);
8933      /* Compute the address of the jump target.  */
8934      if (r_symndx >= extsymoff)
8935	{
8936	  struct mips_elf_link_hash_entry *h
8937	    = ((struct mips_elf_link_hash_entry *)
8938	       elf_sym_hashes (abfd) [r_symndx - extsymoff]);
8939
8940	  while (h->root.root.type == bfd_link_hash_indirect
8941		 || h->root.root.type == bfd_link_hash_warning)
8942	    h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
8943
8944	  /* If a symbol is undefined, or if it may be overridden,
8945	     skip it.  */
8946	  if (! ((h->root.root.type == bfd_link_hash_defined
8947		  || h->root.root.type == bfd_link_hash_defweak)
8948		 && h->root.root.u.def.section)
8949	      || (bfd_link_pic (link_info) && ! link_info->symbolic
8950		  && !h->root.forced_local))
8951	    continue;
8952
8953	  sym_sec = h->root.root.u.def.section;
8954	  if (sym_sec->output_section)
8955	    symval = (h->root.root.u.def.value
8956		      + sym_sec->output_section->vma
8957		      + sym_sec->output_offset);
8958	  else
8959	    symval = h->root.root.u.def.value;
8960	}
8961      else
8962	{
8963	  Elf_Internal_Sym *isym;
8964
8965	  /* Read this BFD's symbols if we haven't done so already.  */
8966	  if (isymbuf == NULL && symtab_hdr->sh_info != 0)
8967	    {
8968	      isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
8969	      if (isymbuf == NULL)
8970		isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
8971						symtab_hdr->sh_info, 0,
8972						NULL, NULL, NULL);
8973	      if (isymbuf == NULL)
8974		goto relax_return;
8975	    }
8976
8977	  isym = isymbuf + r_symndx;
8978	  if (isym->st_shndx == SHN_UNDEF)
8979	    continue;
8980	  else if (isym->st_shndx == SHN_ABS)
8981	    sym_sec = bfd_abs_section_ptr;
8982	  else if (isym->st_shndx == SHN_COMMON)
8983	    sym_sec = bfd_com_section_ptr;
8984	  else
8985	    sym_sec
8986	      = bfd_section_from_elf_index (abfd, isym->st_shndx);
8987	  symval = isym->st_value
8988	    + sym_sec->output_section->vma
8989	    + sym_sec->output_offset;
8990	}
8991
8992      /* Compute branch offset, from delay slot of the jump to the
8993	 branch target.  */
8994      sym_offset = (symval + irel->r_addend)
8995	- (sec_start + irel->r_offset + 4);
8996
8997      /* Branch offset must be properly aligned.  */
8998      if ((sym_offset & 3) != 0)
8999	continue;
9000
9001      sym_offset >>= 2;
9002
9003      /* Check that it's in range.  */
9004      if (sym_offset < -0x8000 || sym_offset >= 0x8000)
9005	continue;
9006
9007      /* Get the section contents if we haven't done so already.  */
9008      if (!mips_elf_get_section_contents (abfd, sec, &contents))
9009	goto relax_return;
9010
9011      instruction = bfd_get_32 (abfd, contents + irel->r_offset);
9012
9013      /* If it was jalr <reg>, turn it into bgezal $zero, <target>.  */
9014      if ((instruction & 0xfc1fffff) == 0x0000f809)
9015	instruction = 0x04110000;
9016      /* If it was jr <reg>, turn it into b <target>.  */
9017      else if ((instruction & 0xfc1fffff) == 0x00000008)
9018	instruction = 0x10000000;
9019      else
9020	continue;
9021
9022      instruction |= (sym_offset & 0xffff);
9023      bfd_put_32 (abfd, instruction, contents + irel->r_offset);
9024      changed_contents = TRUE;
9025    }
9026
9027  if (contents != NULL
9028      && elf_section_data (sec)->this_hdr.contents != contents)
9029    {
9030      if (!changed_contents && !link_info->keep_memory)
9031        free (contents);
9032      else
9033        {
9034          /* Cache the section contents for elf_link_input_bfd.  */
9035          elf_section_data (sec)->this_hdr.contents = contents;
9036        }
9037    }
9038  return TRUE;
9039
9040 relax_return:
9041  if (contents != NULL
9042      && elf_section_data (sec)->this_hdr.contents != contents)
9043    free (contents);
9044  return FALSE;
9045}
9046
9047/* Allocate space for global sym dynamic relocs.  */
9048
9049static bfd_boolean
9050allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
9051{
9052  struct bfd_link_info *info = inf;
9053  bfd *dynobj;
9054  struct mips_elf_link_hash_entry *hmips;
9055  struct mips_elf_link_hash_table *htab;
9056
9057  htab = mips_elf_hash_table (info);
9058  BFD_ASSERT (htab != NULL);
9059
9060  dynobj = elf_hash_table (info)->dynobj;
9061  hmips = (struct mips_elf_link_hash_entry *) h;
9062
9063  /* VxWorks executables are handled elsewhere; we only need to
9064     allocate relocations in shared objects.  */
9065  if (htab->is_vxworks && !bfd_link_pic (info))
9066    return TRUE;
9067
9068  /* Ignore indirect symbols.  All relocations against such symbols
9069     will be redirected to the target symbol.  */
9070  if (h->root.type == bfd_link_hash_indirect)
9071    return TRUE;
9072
9073  /* If this symbol is defined in a dynamic object, or we are creating
9074     a shared library, we will need to copy any R_MIPS_32 or
9075     R_MIPS_REL32 relocs against it into the output file.  */
9076  if (! bfd_link_relocatable (info)
9077      && hmips->possibly_dynamic_relocs != 0
9078      && (h->root.type == bfd_link_hash_defweak
9079	  || (!h->def_regular && !ELF_COMMON_DEF_P (h))
9080	  || bfd_link_pic (info)))
9081    {
9082      bfd_boolean do_copy = TRUE;
9083
9084      if (h->root.type == bfd_link_hash_undefweak)
9085	{
9086	  /* Do not copy relocations for undefined weak symbols with
9087	     non-default visibility.  */
9088	  if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
9089	    do_copy = FALSE;
9090
9091	  /* Make sure undefined weak symbols are output as a dynamic
9092	     symbol in PIEs.  */
9093	  else if (h->dynindx == -1 && !h->forced_local)
9094	    {
9095	      if (! bfd_elf_link_record_dynamic_symbol (info, h))
9096		return FALSE;
9097	    }
9098	}
9099
9100      if (do_copy)
9101	{
9102	  /* Even though we don't directly need a GOT entry for this symbol,
9103	     the SVR4 psABI requires it to have a dynamic symbol table
9104	     index greater that DT_MIPS_GOTSYM if there are dynamic
9105	     relocations against it.
9106
9107	     VxWorks does not enforce the same mapping between the GOT
9108	     and the symbol table, so the same requirement does not
9109	     apply there.  */
9110	  if (!htab->is_vxworks)
9111	    {
9112	      if (hmips->global_got_area > GGA_RELOC_ONLY)
9113		hmips->global_got_area = GGA_RELOC_ONLY;
9114	      hmips->got_only_for_calls = FALSE;
9115	    }
9116
9117	  mips_elf_allocate_dynamic_relocations
9118	    (dynobj, info, hmips->possibly_dynamic_relocs);
9119	  if (hmips->readonly_reloc)
9120	    /* We tell the dynamic linker that there are relocations
9121	       against the text segment.  */
9122	    info->flags |= DF_TEXTREL;
9123	}
9124    }
9125
9126  return TRUE;
9127}
9128
9129/* Adjust a symbol defined by a dynamic object and referenced by a
9130   regular object.  The current definition is in some section of the
9131   dynamic object, but we're not including those sections.  We have to
9132   change the definition to something the rest of the link can
9133   understand.  */
9134
9135bfd_boolean
9136_bfd_mips_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
9137				     struct elf_link_hash_entry *h)
9138{
9139  bfd *dynobj;
9140  struct mips_elf_link_hash_entry *hmips;
9141  struct mips_elf_link_hash_table *htab;
9142  asection *s, *srel;
9143
9144  htab = mips_elf_hash_table (info);
9145  BFD_ASSERT (htab != NULL);
9146
9147  dynobj = elf_hash_table (info)->dynobj;
9148  hmips = (struct mips_elf_link_hash_entry *) h;
9149
9150  /* Make sure we know what is going on here.  */
9151  BFD_ASSERT (dynobj != NULL
9152	      && (h->needs_plt
9153		  || h->u.weakdef != NULL
9154		  || (h->def_dynamic
9155		      && h->ref_regular
9156		      && !h->def_regular)));
9157
9158  hmips = (struct mips_elf_link_hash_entry *) h;
9159
9160  /* If there are call relocations against an externally-defined symbol,
9161     see whether we can create a MIPS lazy-binding stub for it.  We can
9162     only do this if all references to the function are through call
9163     relocations, and in that case, the traditional lazy-binding stubs
9164     are much more efficient than PLT entries.
9165
9166     Traditional stubs are only available on SVR4 psABI-based systems;
9167     VxWorks always uses PLTs instead.  */
9168  if (!htab->is_vxworks && h->needs_plt && !hmips->no_fn_stub)
9169    {
9170      if (! elf_hash_table (info)->dynamic_sections_created)
9171	return TRUE;
9172
9173      /* If this symbol is not defined in a regular file, then set
9174	 the symbol to the stub location.  This is required to make
9175	 function pointers compare as equal between the normal
9176	 executable and the shared library.  */
9177      if (!h->def_regular)
9178	{
9179	  hmips->needs_lazy_stub = TRUE;
9180	  htab->lazy_stub_count++;
9181	  return TRUE;
9182	}
9183    }
9184  /* As above, VxWorks requires PLT entries for externally-defined
9185     functions that are only accessed through call relocations.
9186
9187     Both VxWorks and non-VxWorks targets also need PLT entries if there
9188     are static-only relocations against an externally-defined function.
9189     This can technically occur for shared libraries if there are
9190     branches to the symbol, although it is unlikely that this will be
9191     used in practice due to the short ranges involved.  It can occur
9192     for any relative or absolute relocation in executables; in that
9193     case, the PLT entry becomes the function's canonical address.  */
9194  else if (((h->needs_plt && !hmips->no_fn_stub)
9195	    || (h->type == STT_FUNC && hmips->has_static_relocs))
9196	   && htab->use_plts_and_copy_relocs
9197	   && !SYMBOL_CALLS_LOCAL (info, h)
9198	   && !(ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
9199		&& h->root.type == bfd_link_hash_undefweak))
9200    {
9201      bfd_boolean micromips_p = MICROMIPS_P (info->output_bfd);
9202      bfd_boolean newabi_p = NEWABI_P (info->output_bfd);
9203
9204      /* If this is the first symbol to need a PLT entry, then make some
9205         basic setup.  Also work out PLT entry sizes.  We'll need them
9206         for PLT offset calculations.  */
9207      if (htab->plt_mips_offset + htab->plt_comp_offset == 0)
9208	{
9209	  BFD_ASSERT (htab->root.sgotplt->size == 0);
9210	  BFD_ASSERT (htab->plt_got_index == 0);
9211
9212	  /* If we're using the PLT additions to the psABI, each PLT
9213	     entry is 16 bytes and the PLT0 entry is 32 bytes.
9214	     Encourage better cache usage by aligning.  We do this
9215	     lazily to avoid pessimizing traditional objects.  */
9216	  if (!htab->is_vxworks
9217	      && !bfd_set_section_alignment (dynobj, htab->root.splt, 5))
9218	    return FALSE;
9219
9220	  /* Make sure that .got.plt is word-aligned.  We do this lazily
9221	     for the same reason as above.  */
9222	  if (!bfd_set_section_alignment (dynobj, htab->root.sgotplt,
9223					  MIPS_ELF_LOG_FILE_ALIGN (dynobj)))
9224	    return FALSE;
9225
9226	  /* On non-VxWorks targets, the first two entries in .got.plt
9227	     are reserved.  */
9228	  if (!htab->is_vxworks)
9229	    htab->plt_got_index
9230	      += (get_elf_backend_data (dynobj)->got_header_size
9231		  / MIPS_ELF_GOT_SIZE (dynobj));
9232
9233	  /* On VxWorks, also allocate room for the header's
9234	     .rela.plt.unloaded entries.  */
9235	  if (htab->is_vxworks && !bfd_link_pic (info))
9236	    htab->srelplt2->size += 2 * sizeof (Elf32_External_Rela);
9237
9238	  /* Now work out the sizes of individual PLT entries.  */
9239	  if (htab->is_vxworks && bfd_link_pic (info))
9240	    htab->plt_mips_entry_size
9241	      = 4 * ARRAY_SIZE (mips_vxworks_shared_plt_entry);
9242	  else if (htab->is_vxworks)
9243	    htab->plt_mips_entry_size
9244	      = 4 * ARRAY_SIZE (mips_vxworks_exec_plt_entry);
9245	  else if (newabi_p)
9246	    htab->plt_mips_entry_size
9247	      = 4 * ARRAY_SIZE (mips_exec_plt_entry);
9248	  else if (!micromips_p)
9249	    {
9250	      htab->plt_mips_entry_size
9251		= 4 * ARRAY_SIZE (mips_exec_plt_entry);
9252	      htab->plt_comp_entry_size
9253		= 2 * ARRAY_SIZE (mips16_o32_exec_plt_entry);
9254	    }
9255	  else if (htab->insn32)
9256	    {
9257	      htab->plt_mips_entry_size
9258		= 4 * ARRAY_SIZE (mips_exec_plt_entry);
9259	      htab->plt_comp_entry_size
9260		= 2 * ARRAY_SIZE (micromips_insn32_o32_exec_plt_entry);
9261	    }
9262	  else
9263	    {
9264	      htab->plt_mips_entry_size
9265		= 4 * ARRAY_SIZE (mips_exec_plt_entry);
9266	      htab->plt_comp_entry_size
9267		= 2 * ARRAY_SIZE (micromips_o32_exec_plt_entry);
9268	    }
9269	}
9270
9271      if (h->plt.plist == NULL)
9272	h->plt.plist = mips_elf_make_plt_record (dynobj);
9273      if (h->plt.plist == NULL)
9274	return FALSE;
9275
9276      /* There are no defined MIPS16 or microMIPS PLT entries for VxWorks,
9277         n32 or n64, so always use a standard entry there.
9278
9279         If the symbol has a MIPS16 call stub and gets a PLT entry, then
9280         all MIPS16 calls will go via that stub, and there is no benefit
9281         to having a MIPS16 entry.  And in the case of call_stub a
9282         standard entry actually has to be used as the stub ends with a J
9283         instruction.  */
9284      if (newabi_p
9285	  || htab->is_vxworks
9286	  || hmips->call_stub
9287	  || hmips->call_fp_stub)
9288	{
9289	  h->plt.plist->need_mips = TRUE;
9290	  h->plt.plist->need_comp = FALSE;
9291	}
9292
9293      /* Otherwise, if there are no direct calls to the function, we
9294         have a free choice of whether to use standard or compressed
9295         entries.  Prefer microMIPS entries if the object is known to
9296         contain microMIPS code, so that it becomes possible to create
9297         pure microMIPS binaries.  Prefer standard entries otherwise,
9298         because MIPS16 ones are no smaller and are usually slower.  */
9299      if (!h->plt.plist->need_mips && !h->plt.plist->need_comp)
9300	{
9301	  if (micromips_p)
9302	    h->plt.plist->need_comp = TRUE;
9303	  else
9304	    h->plt.plist->need_mips = TRUE;
9305	}
9306
9307      if (h->plt.plist->need_mips)
9308	{
9309	  h->plt.plist->mips_offset = htab->plt_mips_offset;
9310	  htab->plt_mips_offset += htab->plt_mips_entry_size;
9311	}
9312      if (h->plt.plist->need_comp)
9313	{
9314	  h->plt.plist->comp_offset = htab->plt_comp_offset;
9315	  htab->plt_comp_offset += htab->plt_comp_entry_size;
9316	}
9317
9318      /* Reserve the corresponding .got.plt entry now too.  */
9319      h->plt.plist->gotplt_index = htab->plt_got_index++;
9320
9321      /* If the output file has no definition of the symbol, set the
9322	 symbol's value to the address of the stub.  */
9323      if (!bfd_link_pic (info) && !h->def_regular)
9324	hmips->use_plt_entry = TRUE;
9325
9326      /* Make room for the R_MIPS_JUMP_SLOT relocation.  */
9327      htab->root.srelplt->size += (htab->is_vxworks
9328				   ? MIPS_ELF_RELA_SIZE (dynobj)
9329				   : MIPS_ELF_REL_SIZE (dynobj));
9330
9331      /* Make room for the .rela.plt.unloaded relocations.  */
9332      if (htab->is_vxworks && !bfd_link_pic (info))
9333	htab->srelplt2->size += 3 * sizeof (Elf32_External_Rela);
9334
9335      /* All relocations against this symbol that could have been made
9336	 dynamic will now refer to the PLT entry instead.  */
9337      hmips->possibly_dynamic_relocs = 0;
9338
9339      return TRUE;
9340    }
9341
9342  /* If this is a weak symbol, and there is a real definition, the
9343     processor independent code will have arranged for us to see the
9344     real definition first, and we can just use the same value.  */
9345  if (h->u.weakdef != NULL)
9346    {
9347      BFD_ASSERT (h->u.weakdef->root.type == bfd_link_hash_defined
9348		  || h->u.weakdef->root.type == bfd_link_hash_defweak);
9349      h->root.u.def.section = h->u.weakdef->root.u.def.section;
9350      h->root.u.def.value = h->u.weakdef->root.u.def.value;
9351      return TRUE;
9352    }
9353
9354  /* Otherwise, there is nothing further to do for symbols defined
9355     in regular objects.  */
9356  if (h->def_regular)
9357    return TRUE;
9358
9359  /* There's also nothing more to do if we'll convert all relocations
9360     against this symbol into dynamic relocations.  */
9361  if (!hmips->has_static_relocs)
9362    return TRUE;
9363
9364  /* We're now relying on copy relocations.  Complain if we have
9365     some that we can't convert.  */
9366  if (!htab->use_plts_and_copy_relocs || bfd_link_pic (info))
9367    {
9368      _bfd_error_handler (_("non-dynamic relocations refer to "
9369			    "dynamic symbol %s"),
9370			  h->root.root.string);
9371      bfd_set_error (bfd_error_bad_value);
9372      return FALSE;
9373    }
9374
9375  /* We must allocate the symbol in our .dynbss section, which will
9376     become part of the .bss section of the executable.  There will be
9377     an entry for this symbol in the .dynsym section.  The dynamic
9378     object will contain position independent code, so all references
9379     from the dynamic object to this symbol will go through the global
9380     offset table.  The dynamic linker will use the .dynsym entry to
9381     determine the address it must put in the global offset table, so
9382     both the dynamic object and the regular object will refer to the
9383     same memory location for the variable.  */
9384
9385  if ((h->root.u.def.section->flags & SEC_READONLY) != 0)
9386    {
9387      s = htab->root.sdynrelro;
9388      srel = htab->root.sreldynrelro;
9389    }
9390  else
9391    {
9392      s = htab->root.sdynbss;
9393      srel = htab->root.srelbss;
9394    }
9395  if ((h->root.u.def.section->flags & SEC_ALLOC) != 0)
9396    {
9397      if (htab->is_vxworks)
9398	srel->size += sizeof (Elf32_External_Rela);
9399      else
9400	mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
9401      h->needs_copy = 1;
9402    }
9403
9404  /* All relocations against this symbol that could have been made
9405     dynamic will now refer to the local copy instead.  */
9406  hmips->possibly_dynamic_relocs = 0;
9407
9408  return _bfd_elf_adjust_dynamic_copy (info, h, s);
9409}
9410
9411/* This function is called after all the input files have been read,
9412   and the input sections have been assigned to output sections.  We
9413   check for any mips16 stub sections that we can discard.  */
9414
9415bfd_boolean
9416_bfd_mips_elf_always_size_sections (bfd *output_bfd,
9417				    struct bfd_link_info *info)
9418{
9419  asection *sect;
9420  struct mips_elf_link_hash_table *htab;
9421  struct mips_htab_traverse_info hti;
9422
9423  htab = mips_elf_hash_table (info);
9424  BFD_ASSERT (htab != NULL);
9425
9426  /* The .reginfo section has a fixed size.  */
9427  sect = bfd_get_section_by_name (output_bfd, ".reginfo");
9428  if (sect != NULL)
9429    bfd_set_section_size (output_bfd, sect, sizeof (Elf32_External_RegInfo));
9430
9431  /* The .MIPS.abiflags section has a fixed size.  */
9432  sect = bfd_get_section_by_name (output_bfd, ".MIPS.abiflags");
9433  if (sect != NULL)
9434    bfd_set_section_size (output_bfd, sect, sizeof (Elf_External_ABIFlags_v0));
9435
9436  hti.info = info;
9437  hti.output_bfd = output_bfd;
9438  hti.error = FALSE;
9439  mips_elf_link_hash_traverse (mips_elf_hash_table (info),
9440			       mips_elf_check_symbols, &hti);
9441  if (hti.error)
9442    return FALSE;
9443
9444  return TRUE;
9445}
9446
9447/* If the link uses a GOT, lay it out and work out its size.  */
9448
9449static bfd_boolean
9450mips_elf_lay_out_got (bfd *output_bfd, struct bfd_link_info *info)
9451{
9452  bfd *dynobj;
9453  asection *s;
9454  struct mips_got_info *g;
9455  bfd_size_type loadable_size = 0;
9456  bfd_size_type page_gotno;
9457  bfd *ibfd;
9458  struct mips_elf_traverse_got_arg tga;
9459  struct mips_elf_link_hash_table *htab;
9460
9461  htab = mips_elf_hash_table (info);
9462  BFD_ASSERT (htab != NULL);
9463
9464  s = htab->root.sgot;
9465  if (s == NULL)
9466    return TRUE;
9467
9468  dynobj = elf_hash_table (info)->dynobj;
9469  g = htab->got_info;
9470
9471  /* Allocate room for the reserved entries.  VxWorks always reserves
9472     3 entries; other objects only reserve 2 entries.  */
9473  BFD_ASSERT (g->assigned_low_gotno == 0);
9474  if (htab->is_vxworks)
9475    htab->reserved_gotno = 3;
9476  else
9477    htab->reserved_gotno = 2;
9478  g->local_gotno += htab->reserved_gotno;
9479  g->assigned_low_gotno = htab->reserved_gotno;
9480
9481  /* Decide which symbols need to go in the global part of the GOT and
9482     count the number of reloc-only GOT symbols.  */
9483  mips_elf_link_hash_traverse (htab, mips_elf_count_got_symbols, info);
9484
9485  if (!mips_elf_resolve_final_got_entries (info, g))
9486    return FALSE;
9487
9488  /* Calculate the total loadable size of the output.  That
9489     will give us the maximum number of GOT_PAGE entries
9490     required.  */
9491  for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link.next)
9492    {
9493      asection *subsection;
9494
9495      for (subsection = ibfd->sections;
9496	   subsection;
9497	   subsection = subsection->next)
9498	{
9499	  if ((subsection->flags & SEC_ALLOC) == 0)
9500	    continue;
9501	  loadable_size += ((subsection->size + 0xf)
9502			    &~ (bfd_size_type) 0xf);
9503	}
9504    }
9505
9506  if (htab->is_vxworks)
9507    /* There's no need to allocate page entries for VxWorks; R_MIPS*_GOT16
9508       relocations against local symbols evaluate to "G", and the EABI does
9509       not include R_MIPS_GOT_PAGE.  */
9510    page_gotno = 0;
9511  else
9512    /* Assume there are two loadable segments consisting of contiguous
9513       sections.  Is 5 enough?  */
9514    page_gotno = (loadable_size >> 16) + 5;
9515
9516  /* Choose the smaller of the two page estimates; both are intended to be
9517     conservative.  */
9518  if (page_gotno > g->page_gotno)
9519    page_gotno = g->page_gotno;
9520
9521  g->local_gotno += page_gotno;
9522  g->assigned_high_gotno = g->local_gotno - 1;
9523
9524  s->size += g->local_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
9525  s->size += g->global_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
9526  s->size += g->tls_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
9527
9528  /* VxWorks does not support multiple GOTs.  It initializes $gp to
9529     __GOTT_BASE__[__GOTT_INDEX__], the value of which is set by the
9530     dynamic loader.  */
9531  if (!htab->is_vxworks && s->size > MIPS_ELF_GOT_MAX_SIZE (info))
9532    {
9533      if (!mips_elf_multi_got (output_bfd, info, s, page_gotno))
9534	return FALSE;
9535    }
9536  else
9537    {
9538      /* Record that all bfds use G.  This also has the effect of freeing
9539	 the per-bfd GOTs, which we no longer need.  */
9540      for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link.next)
9541	if (mips_elf_bfd_got (ibfd, FALSE))
9542	  mips_elf_replace_bfd_got (ibfd, g);
9543      mips_elf_replace_bfd_got (output_bfd, g);
9544
9545      /* Set up TLS entries.  */
9546      g->tls_assigned_gotno = g->global_gotno + g->local_gotno;
9547      tga.info = info;
9548      tga.g = g;
9549      tga.value = MIPS_ELF_GOT_SIZE (output_bfd);
9550      htab_traverse (g->got_entries, mips_elf_initialize_tls_index, &tga);
9551      if (!tga.g)
9552	return FALSE;
9553      BFD_ASSERT (g->tls_assigned_gotno
9554		  == g->global_gotno + g->local_gotno + g->tls_gotno);
9555
9556      /* Each VxWorks GOT entry needs an explicit relocation.  */
9557      if (htab->is_vxworks && bfd_link_pic (info))
9558	g->relocs += g->global_gotno + g->local_gotno - htab->reserved_gotno;
9559
9560      /* Allocate room for the TLS relocations.  */
9561      if (g->relocs)
9562	mips_elf_allocate_dynamic_relocations (dynobj, info, g->relocs);
9563    }
9564
9565  return TRUE;
9566}
9567
9568/* Estimate the size of the .MIPS.stubs section.  */
9569
9570static void
9571mips_elf_estimate_stub_size (bfd *output_bfd, struct bfd_link_info *info)
9572{
9573  struct mips_elf_link_hash_table *htab;
9574  bfd_size_type dynsymcount;
9575
9576  htab = mips_elf_hash_table (info);
9577  BFD_ASSERT (htab != NULL);
9578
9579  if (htab->lazy_stub_count == 0)
9580    return;
9581
9582  /* IRIX rld assumes that a function stub isn't at the end of the .text
9583     section, so add a dummy entry to the end.  */
9584  htab->lazy_stub_count++;
9585
9586  /* Get a worst-case estimate of the number of dynamic symbols needed.
9587     At this point, dynsymcount does not account for section symbols
9588     and count_section_dynsyms may overestimate the number that will
9589     be needed.  */
9590  dynsymcount = (elf_hash_table (info)->dynsymcount
9591		 + count_section_dynsyms (output_bfd, info));
9592
9593  /* Determine the size of one stub entry.  There's no disadvantage
9594     from using microMIPS code here, so for the sake of pure-microMIPS
9595     binaries we prefer it whenever there's any microMIPS code in
9596     output produced at all.  This has a benefit of stubs being
9597     shorter by 4 bytes each too, unless in the insn32 mode.  */
9598  if (!MICROMIPS_P (output_bfd))
9599    htab->function_stub_size = (dynsymcount > 0x10000
9600				? MIPS_FUNCTION_STUB_BIG_SIZE
9601				: MIPS_FUNCTION_STUB_NORMAL_SIZE);
9602  else if (htab->insn32)
9603    htab->function_stub_size = (dynsymcount > 0x10000
9604				? MICROMIPS_INSN32_FUNCTION_STUB_BIG_SIZE
9605				: MICROMIPS_INSN32_FUNCTION_STUB_NORMAL_SIZE);
9606  else
9607    htab->function_stub_size = (dynsymcount > 0x10000
9608				? MICROMIPS_FUNCTION_STUB_BIG_SIZE
9609				: MICROMIPS_FUNCTION_STUB_NORMAL_SIZE);
9610
9611  htab->sstubs->size = htab->lazy_stub_count * htab->function_stub_size;
9612}
9613
9614/* A mips_elf_link_hash_traverse callback for which DATA points to a
9615   mips_htab_traverse_info.  If H needs a traditional MIPS lazy-binding
9616   stub, allocate an entry in the stubs section.  */
9617
9618static bfd_boolean
9619mips_elf_allocate_lazy_stub (struct mips_elf_link_hash_entry *h, void *data)
9620{
9621  struct mips_htab_traverse_info *hti = data;
9622  struct mips_elf_link_hash_table *htab;
9623  struct bfd_link_info *info;
9624  bfd *output_bfd;
9625
9626  info = hti->info;
9627  output_bfd = hti->output_bfd;
9628  htab = mips_elf_hash_table (info);
9629  BFD_ASSERT (htab != NULL);
9630
9631  if (h->needs_lazy_stub)
9632    {
9633      bfd_boolean micromips_p = MICROMIPS_P (output_bfd);
9634      unsigned int other = micromips_p ? STO_MICROMIPS : 0;
9635      bfd_vma isa_bit = micromips_p;
9636
9637      BFD_ASSERT (htab->root.dynobj != NULL);
9638      if (h->root.plt.plist == NULL)
9639	h->root.plt.plist = mips_elf_make_plt_record (htab->sstubs->owner);
9640      if (h->root.plt.plist == NULL)
9641	{
9642	  hti->error = TRUE;
9643	  return FALSE;
9644	}
9645      h->root.root.u.def.section = htab->sstubs;
9646      h->root.root.u.def.value = htab->sstubs->size + isa_bit;
9647      h->root.plt.plist->stub_offset = htab->sstubs->size;
9648      h->root.other = other;
9649      htab->sstubs->size += htab->function_stub_size;
9650    }
9651  return TRUE;
9652}
9653
9654/* Allocate offsets in the stubs section to each symbol that needs one.
9655   Set the final size of the .MIPS.stub section.  */
9656
9657static bfd_boolean
9658mips_elf_lay_out_lazy_stubs (struct bfd_link_info *info)
9659{
9660  bfd *output_bfd = info->output_bfd;
9661  bfd_boolean micromips_p = MICROMIPS_P (output_bfd);
9662  unsigned int other = micromips_p ? STO_MICROMIPS : 0;
9663  bfd_vma isa_bit = micromips_p;
9664  struct mips_elf_link_hash_table *htab;
9665  struct mips_htab_traverse_info hti;
9666  struct elf_link_hash_entry *h;
9667  bfd *dynobj;
9668
9669  htab = mips_elf_hash_table (info);
9670  BFD_ASSERT (htab != NULL);
9671
9672  if (htab->lazy_stub_count == 0)
9673    return TRUE;
9674
9675  htab->sstubs->size = 0;
9676  hti.info = info;
9677  hti.output_bfd = output_bfd;
9678  hti.error = FALSE;
9679  mips_elf_link_hash_traverse (htab, mips_elf_allocate_lazy_stub, &hti);
9680  if (hti.error)
9681    return FALSE;
9682  htab->sstubs->size += htab->function_stub_size;
9683  BFD_ASSERT (htab->sstubs->size
9684	      == htab->lazy_stub_count * htab->function_stub_size);
9685
9686  dynobj = elf_hash_table (info)->dynobj;
9687  BFD_ASSERT (dynobj != NULL);
9688  h = _bfd_elf_define_linkage_sym (dynobj, info, htab->sstubs, "_MIPS_STUBS_");
9689  if (h == NULL)
9690    return FALSE;
9691  h->root.u.def.value = isa_bit;
9692  h->other = other;
9693  h->type = STT_FUNC;
9694
9695  return TRUE;
9696}
9697
9698/* A mips_elf_link_hash_traverse callback for which DATA points to a
9699   bfd_link_info.  If H uses the address of a PLT entry as the value
9700   of the symbol, then set the entry in the symbol table now.  Prefer
9701   a standard MIPS PLT entry.  */
9702
9703static bfd_boolean
9704mips_elf_set_plt_sym_value (struct mips_elf_link_hash_entry *h, void *data)
9705{
9706  struct bfd_link_info *info = data;
9707  bfd_boolean micromips_p = MICROMIPS_P (info->output_bfd);
9708  struct mips_elf_link_hash_table *htab;
9709  unsigned int other;
9710  bfd_vma isa_bit;
9711  bfd_vma val;
9712
9713  htab = mips_elf_hash_table (info);
9714  BFD_ASSERT (htab != NULL);
9715
9716  if (h->use_plt_entry)
9717    {
9718      BFD_ASSERT (h->root.plt.plist != NULL);
9719      BFD_ASSERT (h->root.plt.plist->mips_offset != MINUS_ONE
9720		  || h->root.plt.plist->comp_offset != MINUS_ONE);
9721
9722      val = htab->plt_header_size;
9723      if (h->root.plt.plist->mips_offset != MINUS_ONE)
9724	{
9725	  isa_bit = 0;
9726	  val += h->root.plt.plist->mips_offset;
9727	  other = 0;
9728	}
9729      else
9730	{
9731	  isa_bit = 1;
9732	  val += htab->plt_mips_offset + h->root.plt.plist->comp_offset;
9733	  other = micromips_p ? STO_MICROMIPS : STO_MIPS16;
9734	}
9735      val += isa_bit;
9736      /* For VxWorks, point at the PLT load stub rather than the lazy
9737         resolution stub; this stub will become the canonical function
9738         address.  */
9739      if (htab->is_vxworks)
9740	val += 8;
9741
9742      h->root.root.u.def.section = htab->root.splt;
9743      h->root.root.u.def.value = val;
9744      h->root.other = other;
9745    }
9746
9747  return TRUE;
9748}
9749
9750/* Set the sizes of the dynamic sections.  */
9751
9752bfd_boolean
9753_bfd_mips_elf_size_dynamic_sections (bfd *output_bfd,
9754				     struct bfd_link_info *info)
9755{
9756  bfd *dynobj;
9757  asection *s, *sreldyn;
9758  bfd_boolean reltext;
9759  struct mips_elf_link_hash_table *htab;
9760
9761  htab = mips_elf_hash_table (info);
9762  BFD_ASSERT (htab != NULL);
9763  dynobj = elf_hash_table (info)->dynobj;
9764  BFD_ASSERT (dynobj != NULL);
9765
9766  if (elf_hash_table (info)->dynamic_sections_created)
9767    {
9768      /* Set the contents of the .interp section to the interpreter.  */
9769      if (bfd_link_executable (info) && !info->nointerp)
9770	{
9771	  s = bfd_get_linker_section (dynobj, ".interp");
9772	  BFD_ASSERT (s != NULL);
9773	  s->size
9774	    = strlen (ELF_DYNAMIC_INTERPRETER (output_bfd)) + 1;
9775	  s->contents
9776	    = (bfd_byte *) ELF_DYNAMIC_INTERPRETER (output_bfd);
9777	}
9778
9779      /* Figure out the size of the PLT header if we know that we
9780         are using it.  For the sake of cache alignment always use
9781         a standard header whenever any standard entries are present
9782         even if microMIPS entries are present as well.  This also
9783         lets the microMIPS header rely on the value of $v0 only set
9784         by microMIPS entries, for a small size reduction.
9785
9786         Set symbol table entry values for symbols that use the
9787         address of their PLT entry now that we can calculate it.
9788
9789         Also create the _PROCEDURE_LINKAGE_TABLE_ symbol if we
9790         haven't already in _bfd_elf_create_dynamic_sections.  */
9791      if (htab->root.splt && htab->plt_mips_offset + htab->plt_comp_offset != 0)
9792	{
9793	  bfd_boolean micromips_p = (MICROMIPS_P (output_bfd)
9794				     && !htab->plt_mips_offset);
9795	  unsigned int other = micromips_p ? STO_MICROMIPS : 0;
9796	  bfd_vma isa_bit = micromips_p;
9797	  struct elf_link_hash_entry *h;
9798	  bfd_vma size;
9799
9800	  BFD_ASSERT (htab->use_plts_and_copy_relocs);
9801	  BFD_ASSERT (htab->root.sgotplt->size == 0);
9802	  BFD_ASSERT (htab->root.splt->size == 0);
9803
9804	  if (htab->is_vxworks && bfd_link_pic (info))
9805	    size = 4 * ARRAY_SIZE (mips_vxworks_shared_plt0_entry);
9806	  else if (htab->is_vxworks)
9807	    size = 4 * ARRAY_SIZE (mips_vxworks_exec_plt0_entry);
9808	  else if (ABI_64_P (output_bfd))
9809	    size = 4 * ARRAY_SIZE (mips_n64_exec_plt0_entry);
9810	  else if (ABI_N32_P (output_bfd))
9811	    size = 4 * ARRAY_SIZE (mips_n32_exec_plt0_entry);
9812	  else if (!micromips_p)
9813	    size = 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry);
9814	  else if (htab->insn32)
9815	    size = 2 * ARRAY_SIZE (micromips_insn32_o32_exec_plt0_entry);
9816	  else
9817	    size = 2 * ARRAY_SIZE (micromips_o32_exec_plt0_entry);
9818
9819	  htab->plt_header_is_comp = micromips_p;
9820	  htab->plt_header_size = size;
9821	  htab->root.splt->size = (size
9822				   + htab->plt_mips_offset
9823				   + htab->plt_comp_offset);
9824	  htab->root.sgotplt->size = (htab->plt_got_index
9825				      * MIPS_ELF_GOT_SIZE (dynobj));
9826
9827	  mips_elf_link_hash_traverse (htab, mips_elf_set_plt_sym_value, info);
9828
9829	  if (htab->root.hplt == NULL)
9830	    {
9831	      h = _bfd_elf_define_linkage_sym (dynobj, info, htab->root.splt,
9832					       "_PROCEDURE_LINKAGE_TABLE_");
9833	      htab->root.hplt = h;
9834	      if (h == NULL)
9835		return FALSE;
9836	    }
9837
9838	  h = htab->root.hplt;
9839	  h->root.u.def.value = isa_bit;
9840	  h->other = other;
9841	  h->type = STT_FUNC;
9842	}
9843    }
9844
9845  /* Allocate space for global sym dynamic relocs.  */
9846  elf_link_hash_traverse (&htab->root, allocate_dynrelocs, info);
9847
9848  mips_elf_estimate_stub_size (output_bfd, info);
9849
9850  if (!mips_elf_lay_out_got (output_bfd, info))
9851    return FALSE;
9852
9853  mips_elf_lay_out_lazy_stubs (info);
9854
9855  /* The check_relocs and adjust_dynamic_symbol entry points have
9856     determined the sizes of the various dynamic sections.  Allocate
9857     memory for them.  */
9858  reltext = FALSE;
9859  for (s = dynobj->sections; s != NULL; s = s->next)
9860    {
9861      const char *name;
9862
9863      /* It's OK to base decisions on the section name, because none
9864	 of the dynobj section names depend upon the input files.  */
9865      name = bfd_get_section_name (dynobj, s);
9866
9867      if ((s->flags & SEC_LINKER_CREATED) == 0)
9868	continue;
9869
9870      if (CONST_STRNEQ (name, ".rel"))
9871	{
9872	  if (s->size != 0)
9873	    {
9874	      const char *outname;
9875	      asection *target;
9876
9877	      /* If this relocation section applies to a read only
9878                 section, then we probably need a DT_TEXTREL entry.
9879                 If the relocation section is .rel(a).dyn, we always
9880                 assert a DT_TEXTREL entry rather than testing whether
9881                 there exists a relocation to a read only section or
9882                 not.  */
9883	      outname = bfd_get_section_name (output_bfd,
9884					      s->output_section);
9885	      target = bfd_get_section_by_name (output_bfd, outname + 4);
9886	      if ((target != NULL
9887		   && (target->flags & SEC_READONLY) != 0
9888		   && (target->flags & SEC_ALLOC) != 0)
9889		  || strcmp (outname, MIPS_ELF_REL_DYN_NAME (info)) == 0)
9890		reltext = TRUE;
9891
9892	      /* We use the reloc_count field as a counter if we need
9893		 to copy relocs into the output file.  */
9894	      if (strcmp (name, MIPS_ELF_REL_DYN_NAME (info)) != 0)
9895		s->reloc_count = 0;
9896
9897	      /* If combreloc is enabled, elf_link_sort_relocs() will
9898		 sort relocations, but in a different way than we do,
9899		 and before we're done creating relocations.  Also, it
9900		 will move them around between input sections'
9901		 relocation's contents, so our sorting would be
9902		 broken, so don't let it run.  */
9903	      info->combreloc = 0;
9904	    }
9905	}
9906      else if (bfd_link_executable (info)
9907	       && ! mips_elf_hash_table (info)->use_rld_obj_head
9908	       && CONST_STRNEQ (name, ".rld_map"))
9909	{
9910	  /* We add a room for __rld_map.  It will be filled in by the
9911	     rtld to contain a pointer to the _r_debug structure.  */
9912	  s->size += MIPS_ELF_RLD_MAP_SIZE (output_bfd);
9913	}
9914      else if (SGI_COMPAT (output_bfd)
9915	       && CONST_STRNEQ (name, ".compact_rel"))
9916	s->size += mips_elf_hash_table (info)->compact_rel_size;
9917      else if (s == htab->root.splt)
9918	{
9919	  /* If the last PLT entry has a branch delay slot, allocate
9920	     room for an extra nop to fill the delay slot.  This is
9921	     for CPUs without load interlocking.  */
9922	  if (! LOAD_INTERLOCKS_P (output_bfd)
9923	      && ! htab->is_vxworks && s->size > 0)
9924	    s->size += 4;
9925	}
9926      else if (! CONST_STRNEQ (name, ".init")
9927	       && s != htab->root.sgot
9928	       && s != htab->root.sgotplt
9929	       && s != htab->sstubs
9930	       && s != htab->root.sdynbss
9931	       && s != htab->root.sdynrelro)
9932	{
9933	  /* It's not one of our sections, so don't allocate space.  */
9934	  continue;
9935	}
9936
9937      if (s->size == 0)
9938	{
9939	  s->flags |= SEC_EXCLUDE;
9940	  continue;
9941	}
9942
9943      if ((s->flags & SEC_HAS_CONTENTS) == 0)
9944	continue;
9945
9946      /* Allocate memory for the section contents.  */
9947      s->contents = bfd_zalloc (dynobj, s->size);
9948      if (s->contents == NULL)
9949	{
9950	  bfd_set_error (bfd_error_no_memory);
9951	  return FALSE;
9952	}
9953    }
9954
9955  if (elf_hash_table (info)->dynamic_sections_created)
9956    {
9957      /* Add some entries to the .dynamic section.  We fill in the
9958	 values later, in _bfd_mips_elf_finish_dynamic_sections, but we
9959	 must add the entries now so that we get the correct size for
9960	 the .dynamic section.  */
9961
9962      /* SGI object has the equivalence of DT_DEBUG in the
9963	 DT_MIPS_RLD_MAP entry.  This must come first because glibc
9964	 only fills in DT_MIPS_RLD_MAP (not DT_DEBUG) and some tools
9965	 may only look at the first one they see.  */
9966      if (!bfd_link_pic (info)
9967	  && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_MAP, 0))
9968	return FALSE;
9969
9970      if (bfd_link_executable (info)
9971	  && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_MAP_REL, 0))
9972	return FALSE;
9973
9974      /* The DT_DEBUG entry may be filled in by the dynamic linker and
9975	 used by the debugger.  */
9976      if (bfd_link_executable (info)
9977	  && !SGI_COMPAT (output_bfd)
9978	  && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_DEBUG, 0))
9979	return FALSE;
9980
9981      if (reltext && (SGI_COMPAT (output_bfd) || htab->is_vxworks))
9982	info->flags |= DF_TEXTREL;
9983
9984      if ((info->flags & DF_TEXTREL) != 0)
9985	{
9986	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_TEXTREL, 0))
9987	    return FALSE;
9988
9989	  /* Clear the DF_TEXTREL flag.  It will be set again if we
9990	     write out an actual text relocation; we may not, because
9991	     at this point we do not know whether e.g. any .eh_frame
9992	     absolute relocations have been converted to PC-relative.  */
9993	  info->flags &= ~DF_TEXTREL;
9994	}
9995
9996      if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTGOT, 0))
9997	return FALSE;
9998
9999      sreldyn = mips_elf_rel_dyn_section (info, FALSE);
10000      if (htab->is_vxworks)
10001	{
10002	  /* VxWorks uses .rela.dyn instead of .rel.dyn.  It does not
10003	     use any of the DT_MIPS_* tags.  */
10004	  if (sreldyn && sreldyn->size > 0)
10005	    {
10006	      if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELA, 0))
10007		return FALSE;
10008
10009	      if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELASZ, 0))
10010		return FALSE;
10011
10012	      if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELAENT, 0))
10013		return FALSE;
10014	    }
10015	}
10016      else
10017	{
10018	  if (sreldyn && sreldyn->size > 0)
10019	    {
10020	      if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_REL, 0))
10021		return FALSE;
10022
10023	      if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELSZ, 0))
10024		return FALSE;
10025
10026	      if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELENT, 0))
10027		return FALSE;
10028	    }
10029
10030	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_VERSION, 0))
10031	    return FALSE;
10032
10033	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_FLAGS, 0))
10034	    return FALSE;
10035
10036	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_BASE_ADDRESS, 0))
10037	    return FALSE;
10038
10039	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_LOCAL_GOTNO, 0))
10040	    return FALSE;
10041
10042	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_SYMTABNO, 0))
10043	    return FALSE;
10044
10045	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_UNREFEXTNO, 0))
10046	    return FALSE;
10047
10048	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_GOTSYM, 0))
10049	    return FALSE;
10050
10051	  if (IRIX_COMPAT (dynobj) == ict_irix5
10052	      && ! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_HIPAGENO, 0))
10053	    return FALSE;
10054
10055	  if (IRIX_COMPAT (dynobj) == ict_irix6
10056	      && (bfd_get_section_by_name
10057		  (output_bfd, MIPS_ELF_OPTIONS_SECTION_NAME (dynobj)))
10058	      && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_OPTIONS, 0))
10059	    return FALSE;
10060	}
10061      if (htab->root.splt->size > 0)
10062	{
10063	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTREL, 0))
10064	    return FALSE;
10065
10066	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_JMPREL, 0))
10067	    return FALSE;
10068
10069	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTRELSZ, 0))
10070	    return FALSE;
10071
10072	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_PLTGOT, 0))
10073	    return FALSE;
10074	}
10075      if (htab->is_vxworks
10076	  && !elf_vxworks_add_dynamic_entries (output_bfd, info))
10077	return FALSE;
10078    }
10079
10080  return TRUE;
10081}
10082
10083/* REL is a relocation in INPUT_BFD that is being copied to OUTPUT_BFD.
10084   Adjust its R_ADDEND field so that it is correct for the output file.
10085   LOCAL_SYMS and LOCAL_SECTIONS are arrays of INPUT_BFD's local symbols
10086   and sections respectively; both use symbol indexes.  */
10087
10088static void
10089mips_elf_adjust_addend (bfd *output_bfd, struct bfd_link_info *info,
10090			bfd *input_bfd, Elf_Internal_Sym *local_syms,
10091			asection **local_sections, Elf_Internal_Rela *rel)
10092{
10093  unsigned int r_type, r_symndx;
10094  Elf_Internal_Sym *sym;
10095  asection *sec;
10096
10097  if (mips_elf_local_relocation_p (input_bfd, rel, local_sections))
10098    {
10099      r_type = ELF_R_TYPE (output_bfd, rel->r_info);
10100      if (gprel16_reloc_p (r_type)
10101	  || r_type == R_MIPS_GPREL32
10102	  || literal_reloc_p (r_type))
10103	{
10104	  rel->r_addend += _bfd_get_gp_value (input_bfd);
10105	  rel->r_addend -= _bfd_get_gp_value (output_bfd);
10106	}
10107
10108      r_symndx = ELF_R_SYM (output_bfd, rel->r_info);
10109      sym = local_syms + r_symndx;
10110
10111      /* Adjust REL's addend to account for section merging.  */
10112      if (!bfd_link_relocatable (info))
10113	{
10114	  sec = local_sections[r_symndx];
10115	  _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
10116	}
10117
10118      /* This would normally be done by the rela_normal code in elflink.c.  */
10119      if (ELF_ST_TYPE (sym->st_info) == STT_SECTION)
10120	rel->r_addend += local_sections[r_symndx]->output_offset;
10121    }
10122}
10123
10124/* Handle relocations against symbols from removed linkonce sections,
10125   or sections discarded by a linker script.  We use this wrapper around
10126   RELOC_AGAINST_DISCARDED_SECTION to handle triplets of compound relocs
10127   on 64-bit ELF targets.  In this case for any relocation handled, which
10128   always be the first in a triplet, the remaining two have to be processed
10129   together with the first, even if they are R_MIPS_NONE.  It is the symbol
10130   index referred by the first reloc that applies to all the three and the
10131   remaining two never refer to an object symbol.  And it is the final
10132   relocation (the last non-null one) that determines the output field of
10133   the whole relocation so retrieve the corresponding howto structure for
10134   the relocatable field to be cleared by RELOC_AGAINST_DISCARDED_SECTION.
10135
10136   Note that RELOC_AGAINST_DISCARDED_SECTION is a macro that uses "continue"
10137   and therefore requires to be pasted in a loop.  It also defines a block
10138   and does not protect any of its arguments, hence the extra brackets.  */
10139
10140static void
10141mips_reloc_against_discarded_section (bfd *output_bfd,
10142				      struct bfd_link_info *info,
10143				      bfd *input_bfd, asection *input_section,
10144				      Elf_Internal_Rela **rel,
10145				      const Elf_Internal_Rela **relend,
10146				      bfd_boolean rel_reloc,
10147				      reloc_howto_type *howto,
10148				      bfd_byte *contents)
10149{
10150  const struct elf_backend_data *bed = get_elf_backend_data (output_bfd);
10151  int count = bed->s->int_rels_per_ext_rel;
10152  unsigned int r_type;
10153  int i;
10154
10155  for (i = count - 1; i > 0; i--)
10156    {
10157      r_type = ELF_R_TYPE (output_bfd, (*rel)[i].r_info);
10158      if (r_type != R_MIPS_NONE)
10159	{
10160	  howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, r_type, !rel_reloc);
10161	  break;
10162	}
10163    }
10164  do
10165    {
10166       RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
10167					(*rel), count, (*relend),
10168					howto, i, contents);
10169    }
10170  while (0);
10171}
10172
10173/* Relocate a MIPS ELF section.  */
10174
10175bfd_boolean
10176_bfd_mips_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
10177				bfd *input_bfd, asection *input_section,
10178				bfd_byte *contents, Elf_Internal_Rela *relocs,
10179				Elf_Internal_Sym *local_syms,
10180				asection **local_sections)
10181{
10182  Elf_Internal_Rela *rel;
10183  const Elf_Internal_Rela *relend;
10184  bfd_vma addend = 0;
10185  bfd_boolean use_saved_addend_p = FALSE;
10186  const struct elf_backend_data *bed;
10187
10188  bed = get_elf_backend_data (output_bfd);
10189  relend = relocs + input_section->reloc_count * bed->s->int_rels_per_ext_rel;
10190  for (rel = relocs; rel < relend; ++rel)
10191    {
10192      const char *name;
10193      bfd_vma value = 0;
10194      reloc_howto_type *howto;
10195      bfd_boolean cross_mode_jump_p = FALSE;
10196      /* TRUE if the relocation is a RELA relocation, rather than a
10197         REL relocation.  */
10198      bfd_boolean rela_relocation_p = TRUE;
10199      unsigned int r_type = ELF_R_TYPE (output_bfd, rel->r_info);
10200      const char *msg;
10201      unsigned long r_symndx;
10202      asection *sec;
10203      Elf_Internal_Shdr *symtab_hdr;
10204      struct elf_link_hash_entry *h;
10205      bfd_boolean rel_reloc;
10206
10207      rel_reloc = (NEWABI_P (input_bfd)
10208		   && mips_elf_rel_relocation_p (input_bfd, input_section,
10209						 relocs, rel));
10210      /* Find the relocation howto for this relocation.  */
10211      howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, r_type, !rel_reloc);
10212
10213      r_symndx = ELF_R_SYM (input_bfd, rel->r_info);
10214      symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
10215      if (mips_elf_local_relocation_p (input_bfd, rel, local_sections))
10216	{
10217	  sec = local_sections[r_symndx];
10218	  h = NULL;
10219	}
10220      else
10221	{
10222	  unsigned long extsymoff;
10223
10224	  extsymoff = 0;
10225	  if (!elf_bad_symtab (input_bfd))
10226	    extsymoff = symtab_hdr->sh_info;
10227	  h = elf_sym_hashes (input_bfd) [r_symndx - extsymoff];
10228	  while (h->root.type == bfd_link_hash_indirect
10229		 || h->root.type == bfd_link_hash_warning)
10230	    h = (struct elf_link_hash_entry *) h->root.u.i.link;
10231
10232	  sec = NULL;
10233	  if (h->root.type == bfd_link_hash_defined
10234	      || h->root.type == bfd_link_hash_defweak)
10235	    sec = h->root.u.def.section;
10236	}
10237
10238      if (sec != NULL && discarded_section (sec))
10239	{
10240	  mips_reloc_against_discarded_section (output_bfd, info, input_bfd,
10241						input_section, &rel, &relend,
10242						rel_reloc, howto, contents);
10243	  continue;
10244	}
10245
10246      if (r_type == R_MIPS_64 && ! NEWABI_P (input_bfd))
10247	{
10248	  /* Some 32-bit code uses R_MIPS_64.  In particular, people use
10249	     64-bit code, but make sure all their addresses are in the
10250	     lowermost or uppermost 32-bit section of the 64-bit address
10251	     space.  Thus, when they use an R_MIPS_64 they mean what is
10252	     usually meant by R_MIPS_32, with the exception that the
10253	     stored value is sign-extended to 64 bits.  */
10254	  howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, R_MIPS_32, FALSE);
10255
10256	  /* On big-endian systems, we need to lie about the position
10257	     of the reloc.  */
10258	  if (bfd_big_endian (input_bfd))
10259	    rel->r_offset += 4;
10260	}
10261
10262      if (!use_saved_addend_p)
10263	{
10264	  /* If these relocations were originally of the REL variety,
10265	     we must pull the addend out of the field that will be
10266	     relocated.  Otherwise, we simply use the contents of the
10267	     RELA relocation.  */
10268	  if (mips_elf_rel_relocation_p (input_bfd, input_section,
10269					 relocs, rel))
10270	    {
10271	      rela_relocation_p = FALSE;
10272	      addend = mips_elf_read_rel_addend (input_bfd, rel,
10273						 howto, contents);
10274	      if (hi16_reloc_p (r_type)
10275		  || (got16_reloc_p (r_type)
10276		      && mips_elf_local_relocation_p (input_bfd, rel,
10277						      local_sections)))
10278		{
10279		  if (!mips_elf_add_lo16_rel_addend (input_bfd, rel, relend,
10280						     contents, &addend))
10281		    {
10282		      if (h)
10283			name = h->root.root.string;
10284		      else
10285			name = bfd_elf_sym_name (input_bfd, symtab_hdr,
10286						 local_syms + r_symndx,
10287						 sec);
10288		      _bfd_error_handler
10289			/* xgettext:c-format */
10290			(_("%B: Can't find matching LO16 reloc against `%s' for %s at 0x%lx in section `%A'"),
10291			 input_bfd, input_section, name, howto->name,
10292			 rel->r_offset);
10293		    }
10294		}
10295	      else
10296		addend <<= howto->rightshift;
10297	    }
10298	  else
10299	    addend = rel->r_addend;
10300	  mips_elf_adjust_addend (output_bfd, info, input_bfd,
10301				  local_syms, local_sections, rel);
10302	}
10303
10304      if (bfd_link_relocatable (info))
10305	{
10306	  if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd)
10307	      && bfd_big_endian (input_bfd))
10308	    rel->r_offset -= 4;
10309
10310	  if (!rela_relocation_p && rel->r_addend)
10311	    {
10312	      addend += rel->r_addend;
10313	      if (hi16_reloc_p (r_type) || got16_reloc_p (r_type))
10314		addend = mips_elf_high (addend);
10315	      else if (r_type == R_MIPS_HIGHER)
10316		addend = mips_elf_higher (addend);
10317	      else if (r_type == R_MIPS_HIGHEST)
10318		addend = mips_elf_highest (addend);
10319	      else
10320		addend >>= howto->rightshift;
10321
10322	      /* We use the source mask, rather than the destination
10323		 mask because the place to which we are writing will be
10324		 source of the addend in the final link.  */
10325	      addend &= howto->src_mask;
10326
10327	      if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd))
10328		/* See the comment above about using R_MIPS_64 in the 32-bit
10329		   ABI.  Here, we need to update the addend.  It would be
10330		   possible to get away with just using the R_MIPS_32 reloc
10331		   but for endianness.  */
10332		{
10333		  bfd_vma sign_bits;
10334		  bfd_vma low_bits;
10335		  bfd_vma high_bits;
10336
10337		  if (addend & ((bfd_vma) 1 << 31))
10338#ifdef BFD64
10339		    sign_bits = ((bfd_vma) 1 << 32) - 1;
10340#else
10341		    sign_bits = -1;
10342#endif
10343		  else
10344		    sign_bits = 0;
10345
10346		  /* If we don't know that we have a 64-bit type,
10347		     do two separate stores.  */
10348		  if (bfd_big_endian (input_bfd))
10349		    {
10350		      /* Store the sign-bits (which are most significant)
10351			 first.  */
10352		      low_bits = sign_bits;
10353		      high_bits = addend;
10354		    }
10355		  else
10356		    {
10357		      low_bits = addend;
10358		      high_bits = sign_bits;
10359		    }
10360		  bfd_put_32 (input_bfd, low_bits,
10361			      contents + rel->r_offset);
10362		  bfd_put_32 (input_bfd, high_bits,
10363			      contents + rel->r_offset + 4);
10364		  continue;
10365		}
10366
10367	      if (! mips_elf_perform_relocation (info, howto, rel, addend,
10368						 input_bfd, input_section,
10369						 contents, FALSE))
10370		return FALSE;
10371	    }
10372
10373	  /* Go on to the next relocation.  */
10374	  continue;
10375	}
10376
10377      /* In the N32 and 64-bit ABIs there may be multiple consecutive
10378	 relocations for the same offset.  In that case we are
10379	 supposed to treat the output of each relocation as the addend
10380	 for the next.  */
10381      if (rel + 1 < relend
10382	  && rel->r_offset == rel[1].r_offset
10383	  && ELF_R_TYPE (input_bfd, rel[1].r_info) != R_MIPS_NONE)
10384	use_saved_addend_p = TRUE;
10385      else
10386	use_saved_addend_p = FALSE;
10387
10388      /* Figure out what value we are supposed to relocate.  */
10389      switch (mips_elf_calculate_relocation (output_bfd, input_bfd,
10390					     input_section, info, rel,
10391					     addend, howto, local_syms,
10392					     local_sections, &value,
10393					     &name, &cross_mode_jump_p,
10394					     use_saved_addend_p))
10395	{
10396	case bfd_reloc_continue:
10397	  /* There's nothing to do.  */
10398	  continue;
10399
10400	case bfd_reloc_undefined:
10401	  /* mips_elf_calculate_relocation already called the
10402	     undefined_symbol callback.  There's no real point in
10403	     trying to perform the relocation at this point, so we
10404	     just skip ahead to the next relocation.  */
10405	  continue;
10406
10407	case bfd_reloc_notsupported:
10408	  msg = _("internal error: unsupported relocation error");
10409	  info->callbacks->warning
10410	    (info, msg, name, input_bfd, input_section, rel->r_offset);
10411	  return FALSE;
10412
10413	case bfd_reloc_overflow:
10414	  if (use_saved_addend_p)
10415	    /* Ignore overflow until we reach the last relocation for
10416	       a given location.  */
10417	    ;
10418	  else
10419	    {
10420	      struct mips_elf_link_hash_table *htab;
10421
10422	      htab = mips_elf_hash_table (info);
10423	      BFD_ASSERT (htab != NULL);
10424	      BFD_ASSERT (name != NULL);
10425	      if (!htab->small_data_overflow_reported
10426		  && (gprel16_reloc_p (howto->type)
10427		      || literal_reloc_p (howto->type)))
10428		{
10429		  msg = _("small-data section exceeds 64KB;"
10430			  " lower small-data size limit (see option -G)");
10431
10432		  htab->small_data_overflow_reported = TRUE;
10433		  (*info->callbacks->einfo) ("%P: %s\n", msg);
10434		}
10435	      (*info->callbacks->reloc_overflow)
10436		(info, NULL, name, howto->name, (bfd_vma) 0,
10437		 input_bfd, input_section, rel->r_offset);
10438	    }
10439	  break;
10440
10441	case bfd_reloc_ok:
10442	  break;
10443
10444	case bfd_reloc_outofrange:
10445	  msg = NULL;
10446	  if (jal_reloc_p (howto->type))
10447	    msg = (cross_mode_jump_p
10448		   ? _("Cannot convert a jump to JALX "
10449		       "for a non-word-aligned address")
10450		   : (howto->type == R_MIPS16_26
10451		      ? _("Jump to a non-word-aligned address")
10452		      : _("Jump to a non-instruction-aligned address")));
10453	  else if (b_reloc_p (howto->type))
10454	    msg = (cross_mode_jump_p
10455		   ? _("Cannot convert a branch to JALX "
10456		       "for a non-word-aligned address")
10457		   : _("Branch to a non-instruction-aligned address"));
10458	  else if (aligned_pcrel_reloc_p (howto->type))
10459	    msg = _("PC-relative load from unaligned address");
10460	  if (msg)
10461	    {
10462	      info->callbacks->einfo
10463		("%X%H: %s\n", input_bfd, input_section, rel->r_offset, msg);
10464	      break;
10465	    }
10466	  /* Fall through.  */
10467
10468	default:
10469	  abort ();
10470	  break;
10471	}
10472
10473      /* If we've got another relocation for the address, keep going
10474	 until we reach the last one.  */
10475      if (use_saved_addend_p)
10476	{
10477	  addend = value;
10478	  continue;
10479	}
10480
10481      if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd))
10482	/* See the comment above about using R_MIPS_64 in the 32-bit
10483	   ABI.  Until now, we've been using the HOWTO for R_MIPS_32;
10484	   that calculated the right value.  Now, however, we
10485	   sign-extend the 32-bit result to 64-bits, and store it as a
10486	   64-bit value.  We are especially generous here in that we
10487	   go to extreme lengths to support this usage on systems with
10488	   only a 32-bit VMA.  */
10489	{
10490	  bfd_vma sign_bits;
10491	  bfd_vma low_bits;
10492	  bfd_vma high_bits;
10493
10494	  if (value & ((bfd_vma) 1 << 31))
10495#ifdef BFD64
10496	    sign_bits = ((bfd_vma) 1 << 32) - 1;
10497#else
10498	    sign_bits = -1;
10499#endif
10500	  else
10501	    sign_bits = 0;
10502
10503	  /* If we don't know that we have a 64-bit type,
10504	     do two separate stores.  */
10505	  if (bfd_big_endian (input_bfd))
10506	    {
10507	      /* Undo what we did above.  */
10508	      rel->r_offset -= 4;
10509	      /* Store the sign-bits (which are most significant)
10510		 first.  */
10511	      low_bits = sign_bits;
10512	      high_bits = value;
10513	    }
10514	  else
10515	    {
10516	      low_bits = value;
10517	      high_bits = sign_bits;
10518	    }
10519	  bfd_put_32 (input_bfd, low_bits,
10520		      contents + rel->r_offset);
10521	  bfd_put_32 (input_bfd, high_bits,
10522		      contents + rel->r_offset + 4);
10523	  continue;
10524	}
10525
10526      /* Actually perform the relocation.  */
10527      if (! mips_elf_perform_relocation (info, howto, rel, value,
10528					 input_bfd, input_section,
10529					 contents, cross_mode_jump_p))
10530	return FALSE;
10531    }
10532
10533  return TRUE;
10534}
10535
10536/* A function that iterates over each entry in la25_stubs and fills
10537   in the code for each one.  DATA points to a mips_htab_traverse_info.  */
10538
10539static int
10540mips_elf_create_la25_stub (void **slot, void *data)
10541{
10542  struct mips_htab_traverse_info *hti;
10543  struct mips_elf_link_hash_table *htab;
10544  struct mips_elf_la25_stub *stub;
10545  asection *s;
10546  bfd_byte *loc;
10547  bfd_vma offset, target, target_high, target_low;
10548
10549  stub = (struct mips_elf_la25_stub *) *slot;
10550  hti = (struct mips_htab_traverse_info *) data;
10551  htab = mips_elf_hash_table (hti->info);
10552  BFD_ASSERT (htab != NULL);
10553
10554  /* Create the section contents, if we haven't already.  */
10555  s = stub->stub_section;
10556  loc = s->contents;
10557  if (loc == NULL)
10558    {
10559      loc = bfd_malloc (s->size);
10560      if (loc == NULL)
10561	{
10562	  hti->error = TRUE;
10563	  return FALSE;
10564	}
10565      s->contents = loc;
10566    }
10567
10568  /* Work out where in the section this stub should go.  */
10569  offset = stub->offset;
10570
10571  /* Work out the target address.  */
10572  target = mips_elf_get_la25_target (stub, &s);
10573  target += s->output_section->vma + s->output_offset;
10574
10575  target_high = ((target + 0x8000) >> 16) & 0xffff;
10576  target_low = (target & 0xffff);
10577
10578  if (stub->stub_section != htab->strampoline)
10579    {
10580      /* This is a simple LUI/ADDIU stub.  Zero out the beginning
10581	 of the section and write the two instructions at the end.  */
10582      memset (loc, 0, offset);
10583      loc += offset;
10584      if (ELF_ST_IS_MICROMIPS (stub->h->root.other))
10585	{
10586	  bfd_put_micromips_32 (hti->output_bfd,
10587				LA25_LUI_MICROMIPS (target_high),
10588				loc);
10589	  bfd_put_micromips_32 (hti->output_bfd,
10590				LA25_ADDIU_MICROMIPS (target_low),
10591				loc + 4);
10592	}
10593      else
10594	{
10595	  bfd_put_32 (hti->output_bfd, LA25_LUI (target_high), loc);
10596	  bfd_put_32 (hti->output_bfd, LA25_ADDIU (target_low), loc + 4);
10597	}
10598    }
10599  else
10600    {
10601      /* This is trampoline.  */
10602      loc += offset;
10603      if (ELF_ST_IS_MICROMIPS (stub->h->root.other))
10604	{
10605	  bfd_put_micromips_32 (hti->output_bfd,
10606				LA25_LUI_MICROMIPS (target_high), loc);
10607	  bfd_put_micromips_32 (hti->output_bfd,
10608				LA25_J_MICROMIPS (target), loc + 4);
10609	  bfd_put_micromips_32 (hti->output_bfd,
10610				LA25_ADDIU_MICROMIPS (target_low), loc + 8);
10611	  bfd_put_32 (hti->output_bfd, 0, loc + 12);
10612	}
10613      else
10614	{
10615	  bfd_put_32 (hti->output_bfd, LA25_LUI (target_high), loc);
10616	  bfd_put_32 (hti->output_bfd, LA25_J (target), loc + 4);
10617	  bfd_put_32 (hti->output_bfd, LA25_ADDIU (target_low), loc + 8);
10618	  bfd_put_32 (hti->output_bfd, 0, loc + 12);
10619	}
10620    }
10621  return TRUE;
10622}
10623
10624/* If NAME is one of the special IRIX6 symbols defined by the linker,
10625   adjust it appropriately now.  */
10626
10627static void
10628mips_elf_irix6_finish_dynamic_symbol (bfd *abfd ATTRIBUTE_UNUSED,
10629				      const char *name, Elf_Internal_Sym *sym)
10630{
10631  /* The linker script takes care of providing names and values for
10632     these, but we must place them into the right sections.  */
10633  static const char* const text_section_symbols[] = {
10634    "_ftext",
10635    "_etext",
10636    "__dso_displacement",
10637    "__elf_header",
10638    "__program_header_table",
10639    NULL
10640  };
10641
10642  static const char* const data_section_symbols[] = {
10643    "_fdata",
10644    "_edata",
10645    "_end",
10646    "_fbss",
10647    NULL
10648  };
10649
10650  const char* const *p;
10651  int i;
10652
10653  for (i = 0; i < 2; ++i)
10654    for (p = (i == 0) ? text_section_symbols : data_section_symbols;
10655	 *p;
10656	 ++p)
10657      if (strcmp (*p, name) == 0)
10658	{
10659	  /* All of these symbols are given type STT_SECTION by the
10660	     IRIX6 linker.  */
10661	  sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10662	  sym->st_other = STO_PROTECTED;
10663
10664	  /* The IRIX linker puts these symbols in special sections.  */
10665	  if (i == 0)
10666	    sym->st_shndx = SHN_MIPS_TEXT;
10667	  else
10668	    sym->st_shndx = SHN_MIPS_DATA;
10669
10670	  break;
10671	}
10672}
10673
10674/* Finish up dynamic symbol handling.  We set the contents of various
10675   dynamic sections here.  */
10676
10677bfd_boolean
10678_bfd_mips_elf_finish_dynamic_symbol (bfd *output_bfd,
10679				     struct bfd_link_info *info,
10680				     struct elf_link_hash_entry *h,
10681				     Elf_Internal_Sym *sym)
10682{
10683  bfd *dynobj;
10684  asection *sgot;
10685  struct mips_got_info *g, *gg;
10686  const char *name;
10687  int idx;
10688  struct mips_elf_link_hash_table *htab;
10689  struct mips_elf_link_hash_entry *hmips;
10690
10691  htab = mips_elf_hash_table (info);
10692  BFD_ASSERT (htab != NULL);
10693  dynobj = elf_hash_table (info)->dynobj;
10694  hmips = (struct mips_elf_link_hash_entry *) h;
10695
10696  BFD_ASSERT (!htab->is_vxworks);
10697
10698  if (h->plt.plist != NULL
10699      && (h->plt.plist->mips_offset != MINUS_ONE
10700	  || h->plt.plist->comp_offset != MINUS_ONE))
10701    {
10702      /* We've decided to create a PLT entry for this symbol.  */
10703      bfd_byte *loc;
10704      bfd_vma header_address, got_address;
10705      bfd_vma got_address_high, got_address_low, load;
10706      bfd_vma got_index;
10707      bfd_vma isa_bit;
10708
10709      got_index = h->plt.plist->gotplt_index;
10710
10711      BFD_ASSERT (htab->use_plts_and_copy_relocs);
10712      BFD_ASSERT (h->dynindx != -1);
10713      BFD_ASSERT (htab->root.splt != NULL);
10714      BFD_ASSERT (got_index != MINUS_ONE);
10715      BFD_ASSERT (!h->def_regular);
10716
10717      /* Calculate the address of the PLT header.  */
10718      isa_bit = htab->plt_header_is_comp;
10719      header_address = (htab->root.splt->output_section->vma
10720			+ htab->root.splt->output_offset + isa_bit);
10721
10722      /* Calculate the address of the .got.plt entry.  */
10723      got_address = (htab->root.sgotplt->output_section->vma
10724		     + htab->root.sgotplt->output_offset
10725		     + got_index * MIPS_ELF_GOT_SIZE (dynobj));
10726
10727      got_address_high = ((got_address + 0x8000) >> 16) & 0xffff;
10728      got_address_low = got_address & 0xffff;
10729
10730      /* Initially point the .got.plt entry at the PLT header.  */
10731      loc = (htab->root.sgotplt->contents + got_index * MIPS_ELF_GOT_SIZE (dynobj));
10732      if (ABI_64_P (output_bfd))
10733	bfd_put_64 (output_bfd, header_address, loc);
10734      else
10735	bfd_put_32 (output_bfd, header_address, loc);
10736
10737      /* Now handle the PLT itself.  First the standard entry (the order
10738         does not matter, we just have to pick one).  */
10739      if (h->plt.plist->mips_offset != MINUS_ONE)
10740	{
10741	  const bfd_vma *plt_entry;
10742	  bfd_vma plt_offset;
10743
10744	  plt_offset = htab->plt_header_size + h->plt.plist->mips_offset;
10745
10746	  BFD_ASSERT (plt_offset <= htab->root.splt->size);
10747
10748	  /* Find out where the .plt entry should go.  */
10749	  loc = htab->root.splt->contents + plt_offset;
10750
10751	  /* Pick the load opcode.  */
10752	  load = MIPS_ELF_LOAD_WORD (output_bfd);
10753
10754	  /* Fill in the PLT entry itself.  */
10755
10756	  if (MIPSR6_P (output_bfd))
10757	    plt_entry = mipsr6_exec_plt_entry;
10758	  else
10759	    plt_entry = mips_exec_plt_entry;
10760	  bfd_put_32 (output_bfd, plt_entry[0] | got_address_high, loc);
10761	  bfd_put_32 (output_bfd, plt_entry[1] | got_address_low | load,
10762		      loc + 4);
10763
10764	  if (! LOAD_INTERLOCKS_P (output_bfd))
10765	    {
10766	      bfd_put_32 (output_bfd, plt_entry[2] | got_address_low, loc + 8);
10767	      bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
10768	    }
10769	  else
10770	    {
10771	      bfd_put_32 (output_bfd, plt_entry[3], loc + 8);
10772	      bfd_put_32 (output_bfd, plt_entry[2] | got_address_low,
10773			  loc + 12);
10774	    }
10775	}
10776
10777      /* Now the compressed entry.  They come after any standard ones.  */
10778      if (h->plt.plist->comp_offset != MINUS_ONE)
10779	{
10780	  bfd_vma plt_offset;
10781
10782	  plt_offset = (htab->plt_header_size + htab->plt_mips_offset
10783			+ h->plt.plist->comp_offset);
10784
10785	  BFD_ASSERT (plt_offset <= htab->root.splt->size);
10786
10787	  /* Find out where the .plt entry should go.  */
10788	  loc = htab->root.splt->contents + plt_offset;
10789
10790	  /* Fill in the PLT entry itself.  */
10791	  if (!MICROMIPS_P (output_bfd))
10792	    {
10793	      const bfd_vma *plt_entry = mips16_o32_exec_plt_entry;
10794
10795	      bfd_put_16 (output_bfd, plt_entry[0], loc);
10796	      bfd_put_16 (output_bfd, plt_entry[1], loc + 2);
10797	      bfd_put_16 (output_bfd, plt_entry[2], loc + 4);
10798	      bfd_put_16 (output_bfd, plt_entry[3], loc + 6);
10799	      bfd_put_16 (output_bfd, plt_entry[4], loc + 8);
10800	      bfd_put_16 (output_bfd, plt_entry[5], loc + 10);
10801	      bfd_put_32 (output_bfd, got_address, loc + 12);
10802	    }
10803	  else if (htab->insn32)
10804	    {
10805	      const bfd_vma *plt_entry = micromips_insn32_o32_exec_plt_entry;
10806
10807	      bfd_put_16 (output_bfd, plt_entry[0], loc);
10808	      bfd_put_16 (output_bfd, got_address_high, loc + 2);
10809	      bfd_put_16 (output_bfd, plt_entry[2], loc + 4);
10810	      bfd_put_16 (output_bfd, got_address_low, loc + 6);
10811	      bfd_put_16 (output_bfd, plt_entry[4], loc + 8);
10812	      bfd_put_16 (output_bfd, plt_entry[5], loc + 10);
10813	      bfd_put_16 (output_bfd, plt_entry[6], loc + 12);
10814	      bfd_put_16 (output_bfd, got_address_low, loc + 14);
10815	    }
10816	  else
10817	    {
10818	      const bfd_vma *plt_entry = micromips_o32_exec_plt_entry;
10819	      bfd_signed_vma gotpc_offset;
10820	      bfd_vma loc_address;
10821
10822	      BFD_ASSERT (got_address % 4 == 0);
10823
10824	      loc_address = (htab->root.splt->output_section->vma
10825			     + htab->root.splt->output_offset + plt_offset);
10826	      gotpc_offset = got_address - ((loc_address | 3) ^ 3);
10827
10828	      /* ADDIUPC has a span of +/-16MB, check we're in range.  */
10829	      if (gotpc_offset + 0x1000000 >= 0x2000000)
10830		{
10831		  _bfd_error_handler
10832		    /* xgettext:c-format */
10833		    (_("%B: `%A' offset of %ld from `%A' "
10834		       "beyond the range of ADDIUPC"),
10835		     output_bfd,
10836		     htab->root.sgotplt->output_section,
10837		     htab->root.splt->output_section,
10838		     (long) gotpc_offset);
10839		  bfd_set_error (bfd_error_no_error);
10840		  return FALSE;
10841		}
10842	      bfd_put_16 (output_bfd,
10843			  plt_entry[0] | ((gotpc_offset >> 18) & 0x7f), loc);
10844	      bfd_put_16 (output_bfd, (gotpc_offset >> 2) & 0xffff, loc + 2);
10845	      bfd_put_16 (output_bfd, plt_entry[2], loc + 4);
10846	      bfd_put_16 (output_bfd, plt_entry[3], loc + 6);
10847	      bfd_put_16 (output_bfd, plt_entry[4], loc + 8);
10848	      bfd_put_16 (output_bfd, plt_entry[5], loc + 10);
10849	    }
10850	}
10851
10852      /* Emit an R_MIPS_JUMP_SLOT relocation against the .got.plt entry.  */
10853      mips_elf_output_dynamic_relocation (output_bfd, htab->root.srelplt,
10854					  got_index - 2, h->dynindx,
10855					  R_MIPS_JUMP_SLOT, got_address);
10856
10857      /* We distinguish between PLT entries and lazy-binding stubs by
10858	 giving the former an st_other value of STO_MIPS_PLT.  Set the
10859	 flag and leave the value if there are any relocations in the
10860	 binary where pointer equality matters.  */
10861      sym->st_shndx = SHN_UNDEF;
10862      if (h->pointer_equality_needed)
10863	sym->st_other = ELF_ST_SET_MIPS_PLT (sym->st_other);
10864      else
10865	{
10866	  sym->st_value = 0;
10867	  sym->st_other = 0;
10868	}
10869    }
10870
10871  if (h->plt.plist != NULL && h->plt.plist->stub_offset != MINUS_ONE)
10872    {
10873      /* We've decided to create a lazy-binding stub.  */
10874      bfd_boolean micromips_p = MICROMIPS_P (output_bfd);
10875      unsigned int other = micromips_p ? STO_MICROMIPS : 0;
10876      bfd_vma stub_size = htab->function_stub_size;
10877      bfd_byte stub[MIPS_FUNCTION_STUB_BIG_SIZE];
10878      bfd_vma isa_bit = micromips_p;
10879      bfd_vma stub_big_size;
10880
10881      if (!micromips_p)
10882	stub_big_size = MIPS_FUNCTION_STUB_BIG_SIZE;
10883      else if (htab->insn32)
10884	stub_big_size = MICROMIPS_INSN32_FUNCTION_STUB_BIG_SIZE;
10885      else
10886	stub_big_size = MICROMIPS_FUNCTION_STUB_BIG_SIZE;
10887
10888      /* This symbol has a stub.  Set it up.  */
10889
10890      BFD_ASSERT (h->dynindx != -1);
10891
10892      BFD_ASSERT (stub_size == stub_big_size || h->dynindx <= 0xffff);
10893
10894      /* Values up to 2^31 - 1 are allowed.  Larger values would cause
10895	 sign extension at runtime in the stub, resulting in a negative
10896	 index value.  */
10897      if (h->dynindx & ~0x7fffffff)
10898	return FALSE;
10899
10900      /* Fill the stub.  */
10901      if (micromips_p)
10902	{
10903	  idx = 0;
10904	  bfd_put_micromips_32 (output_bfd, STUB_LW_MICROMIPS (output_bfd),
10905				stub + idx);
10906	  idx += 4;
10907	  if (htab->insn32)
10908	    {
10909	      bfd_put_micromips_32 (output_bfd,
10910				    STUB_MOVE32_MICROMIPS, stub + idx);
10911	      idx += 4;
10912	    }
10913	  else
10914	    {
10915	      bfd_put_16 (output_bfd, STUB_MOVE_MICROMIPS, stub + idx);
10916	      idx += 2;
10917	    }
10918	  if (stub_size == stub_big_size)
10919	    {
10920	      long dynindx_hi = (h->dynindx >> 16) & 0x7fff;
10921
10922	      bfd_put_micromips_32 (output_bfd,
10923				    STUB_LUI_MICROMIPS (dynindx_hi),
10924				    stub + idx);
10925	      idx += 4;
10926	    }
10927	  if (htab->insn32)
10928	    {
10929	      bfd_put_micromips_32 (output_bfd, STUB_JALR32_MICROMIPS,
10930				    stub + idx);
10931	      idx += 4;
10932	    }
10933	  else
10934	    {
10935	      bfd_put_16 (output_bfd, STUB_JALR_MICROMIPS, stub + idx);
10936	      idx += 2;
10937	    }
10938
10939	  /* If a large stub is not required and sign extension is not a
10940	     problem, then use legacy code in the stub.  */
10941	  if (stub_size == stub_big_size)
10942	    bfd_put_micromips_32 (output_bfd,
10943				  STUB_ORI_MICROMIPS (h->dynindx & 0xffff),
10944				  stub + idx);
10945	  else if (h->dynindx & ~0x7fff)
10946	    bfd_put_micromips_32 (output_bfd,
10947				  STUB_LI16U_MICROMIPS (h->dynindx & 0xffff),
10948				  stub + idx);
10949	  else
10950	    bfd_put_micromips_32 (output_bfd,
10951				  STUB_LI16S_MICROMIPS (output_bfd,
10952							h->dynindx),
10953				  stub + idx);
10954	}
10955      else
10956	{
10957	  idx = 0;
10958	  bfd_put_32 (output_bfd, STUB_LW (output_bfd), stub + idx);
10959	  idx += 4;
10960	  bfd_put_32 (output_bfd, STUB_MOVE, stub + idx);
10961	  idx += 4;
10962	  if (stub_size == stub_big_size)
10963	    {
10964	      bfd_put_32 (output_bfd, STUB_LUI ((h->dynindx >> 16) & 0x7fff),
10965			  stub + idx);
10966	      idx += 4;
10967	    }
10968	  bfd_put_32 (output_bfd, STUB_JALR, stub + idx);
10969	  idx += 4;
10970
10971	  /* If a large stub is not required and sign extension is not a
10972	     problem, then use legacy code in the stub.  */
10973	  if (stub_size == stub_big_size)
10974	    bfd_put_32 (output_bfd, STUB_ORI (h->dynindx & 0xffff),
10975			stub + idx);
10976	  else if (h->dynindx & ~0x7fff)
10977	    bfd_put_32 (output_bfd, STUB_LI16U (h->dynindx & 0xffff),
10978			stub + idx);
10979	  else
10980	    bfd_put_32 (output_bfd, STUB_LI16S (output_bfd, h->dynindx),
10981			stub + idx);
10982	}
10983
10984      BFD_ASSERT (h->plt.plist->stub_offset <= htab->sstubs->size);
10985      memcpy (htab->sstubs->contents + h->plt.plist->stub_offset,
10986	      stub, stub_size);
10987
10988      /* Mark the symbol as undefined.  stub_offset != -1 occurs
10989	 only for the referenced symbol.  */
10990      sym->st_shndx = SHN_UNDEF;
10991
10992      /* The run-time linker uses the st_value field of the symbol
10993	 to reset the global offset table entry for this external
10994	 to its stub address when unlinking a shared object.  */
10995      sym->st_value = (htab->sstubs->output_section->vma
10996		       + htab->sstubs->output_offset
10997		       + h->plt.plist->stub_offset
10998		       + isa_bit);
10999      sym->st_other = other;
11000    }
11001
11002  /* If we have a MIPS16 function with a stub, the dynamic symbol must
11003     refer to the stub, since only the stub uses the standard calling
11004     conventions.  */
11005  if (h->dynindx != -1 && hmips->fn_stub != NULL)
11006    {
11007      BFD_ASSERT (hmips->need_fn_stub);
11008      sym->st_value = (hmips->fn_stub->output_section->vma
11009		       + hmips->fn_stub->output_offset);
11010      sym->st_size = hmips->fn_stub->size;
11011      sym->st_other = ELF_ST_VISIBILITY (sym->st_other);
11012    }
11013
11014  BFD_ASSERT (h->dynindx != -1
11015	      || h->forced_local);
11016
11017  sgot = htab->root.sgot;
11018  g = htab->got_info;
11019  BFD_ASSERT (g != NULL);
11020
11021  /* Run through the global symbol table, creating GOT entries for all
11022     the symbols that need them.  */
11023  if (hmips->global_got_area != GGA_NONE)
11024    {
11025      bfd_vma offset;
11026      bfd_vma value;
11027
11028      value = sym->st_value;
11029      offset = mips_elf_primary_global_got_index (output_bfd, info, h);
11030      MIPS_ELF_PUT_WORD (output_bfd, value, sgot->contents + offset);
11031    }
11032
11033  if (hmips->global_got_area != GGA_NONE && g->next)
11034    {
11035      struct mips_got_entry e, *p;
11036      bfd_vma entry;
11037      bfd_vma offset;
11038
11039      gg = g;
11040
11041      e.abfd = output_bfd;
11042      e.symndx = -1;
11043      e.d.h = hmips;
11044      e.tls_type = GOT_TLS_NONE;
11045
11046      for (g = g->next; g->next != gg; g = g->next)
11047	{
11048	  if (g->got_entries
11049	      && (p = (struct mips_got_entry *) htab_find (g->got_entries,
11050							   &e)))
11051	    {
11052	      offset = p->gotidx;
11053	      BFD_ASSERT (offset > 0 && offset < htab->root.sgot->size);
11054	      if (bfd_link_pic (info)
11055		  || (elf_hash_table (info)->dynamic_sections_created
11056		      && p->d.h != NULL
11057		      && p->d.h->root.def_dynamic
11058		      && !p->d.h->root.def_regular))
11059		{
11060		  /* Create an R_MIPS_REL32 relocation for this entry.  Due to
11061		     the various compatibility problems, it's easier to mock
11062		     up an R_MIPS_32 or R_MIPS_64 relocation and leave
11063		     mips_elf_create_dynamic_relocation to calculate the
11064		     appropriate addend.  */
11065		  Elf_Internal_Rela rel[3];
11066
11067		  memset (rel, 0, sizeof (rel));
11068		  if (ABI_64_P (output_bfd))
11069		    rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_64);
11070		  else
11071		    rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_32);
11072		  rel[0].r_offset = rel[1].r_offset = rel[2].r_offset = offset;
11073
11074		  entry = 0;
11075		  if (! (mips_elf_create_dynamic_relocation
11076			 (output_bfd, info, rel,
11077			  e.d.h, NULL, sym->st_value, &entry, sgot)))
11078		    return FALSE;
11079		}
11080	      else
11081		entry = sym->st_value;
11082	      MIPS_ELF_PUT_WORD (output_bfd, entry, sgot->contents + offset);
11083	    }
11084	}
11085    }
11086
11087  /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute.  */
11088  name = h->root.root.string;
11089  if (h == elf_hash_table (info)->hdynamic
11090      || h == elf_hash_table (info)->hgot)
11091    sym->st_shndx = SHN_ABS;
11092  else if (strcmp (name, "_DYNAMIC_LINK") == 0
11093	   || strcmp (name, "_DYNAMIC_LINKING") == 0)
11094    {
11095      sym->st_shndx = SHN_ABS;
11096      sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
11097      sym->st_value = 1;
11098    }
11099  else if (strcmp (name, "_gp_disp") == 0 && ! NEWABI_P (output_bfd))
11100    {
11101      sym->st_shndx = SHN_ABS;
11102      sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
11103      sym->st_value = elf_gp (output_bfd);
11104    }
11105  else if (SGI_COMPAT (output_bfd))
11106    {
11107      if (strcmp (name, mips_elf_dynsym_rtproc_names[0]) == 0
11108	  || strcmp (name, mips_elf_dynsym_rtproc_names[1]) == 0)
11109	{
11110	  sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
11111	  sym->st_other = STO_PROTECTED;
11112	  sym->st_value = 0;
11113	  sym->st_shndx = SHN_MIPS_DATA;
11114	}
11115      else if (strcmp (name, mips_elf_dynsym_rtproc_names[2]) == 0)
11116	{
11117	  sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
11118	  sym->st_other = STO_PROTECTED;
11119	  sym->st_value = mips_elf_hash_table (info)->procedure_count;
11120	  sym->st_shndx = SHN_ABS;
11121	}
11122      else if (sym->st_shndx != SHN_UNDEF && sym->st_shndx != SHN_ABS)
11123	{
11124	  if (h->type == STT_FUNC)
11125	    sym->st_shndx = SHN_MIPS_TEXT;
11126	  else if (h->type == STT_OBJECT)
11127	    sym->st_shndx = SHN_MIPS_DATA;
11128	}
11129    }
11130
11131  /* Emit a copy reloc, if needed.  */
11132  if (h->needs_copy)
11133    {
11134      asection *s;
11135      bfd_vma symval;
11136
11137      BFD_ASSERT (h->dynindx != -1);
11138      BFD_ASSERT (htab->use_plts_and_copy_relocs);
11139
11140      s = mips_elf_rel_dyn_section (info, FALSE);
11141      symval = (h->root.u.def.section->output_section->vma
11142		+ h->root.u.def.section->output_offset
11143		+ h->root.u.def.value);
11144      mips_elf_output_dynamic_relocation (output_bfd, s, s->reloc_count++,
11145					  h->dynindx, R_MIPS_COPY, symval);
11146    }
11147
11148  /* Handle the IRIX6-specific symbols.  */
11149  if (IRIX_COMPAT (output_bfd) == ict_irix6)
11150    mips_elf_irix6_finish_dynamic_symbol (output_bfd, name, sym);
11151
11152  /* Keep dynamic compressed symbols odd.  This allows the dynamic linker
11153     to treat compressed symbols like any other.  */
11154  if (ELF_ST_IS_MIPS16 (sym->st_other))
11155    {
11156      BFD_ASSERT (sym->st_value & 1);
11157      sym->st_other -= STO_MIPS16;
11158    }
11159  else if (ELF_ST_IS_MICROMIPS (sym->st_other))
11160    {
11161      BFD_ASSERT (sym->st_value & 1);
11162      sym->st_other -= STO_MICROMIPS;
11163    }
11164
11165  return TRUE;
11166}
11167
11168/* Likewise, for VxWorks.  */
11169
11170bfd_boolean
11171_bfd_mips_vxworks_finish_dynamic_symbol (bfd *output_bfd,
11172					 struct bfd_link_info *info,
11173					 struct elf_link_hash_entry *h,
11174					 Elf_Internal_Sym *sym)
11175{
11176  bfd *dynobj;
11177  asection *sgot;
11178  struct mips_got_info *g;
11179  struct mips_elf_link_hash_table *htab;
11180  struct mips_elf_link_hash_entry *hmips;
11181
11182  htab = mips_elf_hash_table (info);
11183  BFD_ASSERT (htab != NULL);
11184  dynobj = elf_hash_table (info)->dynobj;
11185  hmips = (struct mips_elf_link_hash_entry *) h;
11186
11187  if (h->plt.plist != NULL && h->plt.plist->mips_offset != MINUS_ONE)
11188    {
11189      bfd_byte *loc;
11190      bfd_vma plt_address, got_address, got_offset, branch_offset;
11191      Elf_Internal_Rela rel;
11192      static const bfd_vma *plt_entry;
11193      bfd_vma gotplt_index;
11194      bfd_vma plt_offset;
11195
11196      plt_offset = htab->plt_header_size + h->plt.plist->mips_offset;
11197      gotplt_index = h->plt.plist->gotplt_index;
11198
11199      BFD_ASSERT (h->dynindx != -1);
11200      BFD_ASSERT (htab->root.splt != NULL);
11201      BFD_ASSERT (gotplt_index != MINUS_ONE);
11202      BFD_ASSERT (plt_offset <= htab->root.splt->size);
11203
11204      /* Calculate the address of the .plt entry.  */
11205      plt_address = (htab->root.splt->output_section->vma
11206		     + htab->root.splt->output_offset
11207		     + plt_offset);
11208
11209      /* Calculate the address of the .got.plt entry.  */
11210      got_address = (htab->root.sgotplt->output_section->vma
11211		     + htab->root.sgotplt->output_offset
11212		     + gotplt_index * MIPS_ELF_GOT_SIZE (output_bfd));
11213
11214      /* Calculate the offset of the .got.plt entry from
11215	 _GLOBAL_OFFSET_TABLE_.  */
11216      got_offset = mips_elf_gotplt_index (info, h);
11217
11218      /* Calculate the offset for the branch at the start of the PLT
11219	 entry.  The branch jumps to the beginning of .plt.  */
11220      branch_offset = -(plt_offset / 4 + 1) & 0xffff;
11221
11222      /* Fill in the initial value of the .got.plt entry.  */
11223      bfd_put_32 (output_bfd, plt_address,
11224		  (htab->root.sgotplt->contents
11225		   + gotplt_index * MIPS_ELF_GOT_SIZE (output_bfd)));
11226
11227      /* Find out where the .plt entry should go.  */
11228      loc = htab->root.splt->contents + plt_offset;
11229
11230      if (bfd_link_pic (info))
11231	{
11232	  plt_entry = mips_vxworks_shared_plt_entry;
11233	  bfd_put_32 (output_bfd, plt_entry[0] | branch_offset, loc);
11234	  bfd_put_32 (output_bfd, plt_entry[1] | gotplt_index, loc + 4);
11235	}
11236      else
11237	{
11238	  bfd_vma got_address_high, got_address_low;
11239
11240	  plt_entry = mips_vxworks_exec_plt_entry;
11241	  got_address_high = ((got_address + 0x8000) >> 16) & 0xffff;
11242	  got_address_low = got_address & 0xffff;
11243
11244	  bfd_put_32 (output_bfd, plt_entry[0] | branch_offset, loc);
11245	  bfd_put_32 (output_bfd, plt_entry[1] | gotplt_index, loc + 4);
11246	  bfd_put_32 (output_bfd, plt_entry[2] | got_address_high, loc + 8);
11247	  bfd_put_32 (output_bfd, plt_entry[3] | got_address_low, loc + 12);
11248	  bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
11249	  bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
11250	  bfd_put_32 (output_bfd, plt_entry[6], loc + 24);
11251	  bfd_put_32 (output_bfd, plt_entry[7], loc + 28);
11252
11253	  loc = (htab->srelplt2->contents
11254		 + (gotplt_index * 3 + 2) * sizeof (Elf32_External_Rela));
11255
11256	  /* Emit a relocation for the .got.plt entry.  */
11257	  rel.r_offset = got_address;
11258	  rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_MIPS_32);
11259	  rel.r_addend = plt_offset;
11260	  bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11261
11262	  /* Emit a relocation for the lui of %hi(<.got.plt slot>).  */
11263	  loc += sizeof (Elf32_External_Rela);
11264	  rel.r_offset = plt_address + 8;
11265	  rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
11266	  rel.r_addend = got_offset;
11267	  bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11268
11269	  /* Emit a relocation for the addiu of %lo(<.got.plt slot>).  */
11270	  loc += sizeof (Elf32_External_Rela);
11271	  rel.r_offset += 4;
11272	  rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
11273	  bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11274	}
11275
11276      /* Emit an R_MIPS_JUMP_SLOT relocation against the .got.plt entry.  */
11277      loc = (htab->root.srelplt->contents
11278	     + gotplt_index * sizeof (Elf32_External_Rela));
11279      rel.r_offset = got_address;
11280      rel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_JUMP_SLOT);
11281      rel.r_addend = 0;
11282      bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11283
11284      if (!h->def_regular)
11285	sym->st_shndx = SHN_UNDEF;
11286    }
11287
11288  BFD_ASSERT (h->dynindx != -1 || h->forced_local);
11289
11290  sgot = htab->root.sgot;
11291  g = htab->got_info;
11292  BFD_ASSERT (g != NULL);
11293
11294  /* See if this symbol has an entry in the GOT.  */
11295  if (hmips->global_got_area != GGA_NONE)
11296    {
11297      bfd_vma offset;
11298      Elf_Internal_Rela outrel;
11299      bfd_byte *loc;
11300      asection *s;
11301
11302      /* Install the symbol value in the GOT.   */
11303      offset = mips_elf_primary_global_got_index (output_bfd, info, h);
11304      MIPS_ELF_PUT_WORD (output_bfd, sym->st_value, sgot->contents + offset);
11305
11306      /* Add a dynamic relocation for it.  */
11307      s = mips_elf_rel_dyn_section (info, FALSE);
11308      loc = s->contents + (s->reloc_count++ * sizeof (Elf32_External_Rela));
11309      outrel.r_offset = (sgot->output_section->vma
11310			 + sgot->output_offset
11311			 + offset);
11312      outrel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_32);
11313      outrel.r_addend = 0;
11314      bfd_elf32_swap_reloca_out (dynobj, &outrel, loc);
11315    }
11316
11317  /* Emit a copy reloc, if needed.  */
11318  if (h->needs_copy)
11319    {
11320      Elf_Internal_Rela rel;
11321      asection *srel;
11322      bfd_byte *loc;
11323
11324      BFD_ASSERT (h->dynindx != -1);
11325
11326      rel.r_offset = (h->root.u.def.section->output_section->vma
11327		      + h->root.u.def.section->output_offset
11328		      + h->root.u.def.value);
11329      rel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_COPY);
11330      rel.r_addend = 0;
11331      if (h->root.u.def.section == htab->root.sdynrelro)
11332	srel = htab->root.sreldynrelro;
11333      else
11334	srel = htab->root.srelbss;
11335      loc = srel->contents + srel->reloc_count * sizeof (Elf32_External_Rela);
11336      bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11337      ++srel->reloc_count;
11338    }
11339
11340  /* If this is a mips16/microMIPS symbol, force the value to be even.  */
11341  if (ELF_ST_IS_COMPRESSED (sym->st_other))
11342    sym->st_value &= ~1;
11343
11344  return TRUE;
11345}
11346
11347/* Write out a plt0 entry to the beginning of .plt.  */
11348
11349static bfd_boolean
11350mips_finish_exec_plt (bfd *output_bfd, struct bfd_link_info *info)
11351{
11352  bfd_byte *loc;
11353  bfd_vma gotplt_value, gotplt_value_high, gotplt_value_low;
11354  static const bfd_vma *plt_entry;
11355  struct mips_elf_link_hash_table *htab;
11356
11357  htab = mips_elf_hash_table (info);
11358  BFD_ASSERT (htab != NULL);
11359
11360  if (ABI_64_P (output_bfd))
11361    plt_entry = mips_n64_exec_plt0_entry;
11362  else if (ABI_N32_P (output_bfd))
11363    plt_entry = mips_n32_exec_plt0_entry;
11364  else if (!htab->plt_header_is_comp)
11365    plt_entry = mips_o32_exec_plt0_entry;
11366  else if (htab->insn32)
11367    plt_entry = micromips_insn32_o32_exec_plt0_entry;
11368  else
11369    plt_entry = micromips_o32_exec_plt0_entry;
11370
11371  /* Calculate the value of .got.plt.  */
11372  gotplt_value = (htab->root.sgotplt->output_section->vma
11373		  + htab->root.sgotplt->output_offset);
11374  gotplt_value_high = ((gotplt_value + 0x8000) >> 16) & 0xffff;
11375  gotplt_value_low = gotplt_value & 0xffff;
11376
11377  /* The PLT sequence is not safe for N64 if .got.plt's address can
11378     not be loaded in two instructions.  */
11379  BFD_ASSERT ((gotplt_value & ~(bfd_vma) 0x7fffffff) == 0
11380	      || ~(gotplt_value | 0x7fffffff) == 0);
11381
11382  /* Install the PLT header.  */
11383  loc = htab->root.splt->contents;
11384  if (plt_entry == micromips_o32_exec_plt0_entry)
11385    {
11386      bfd_vma gotpc_offset;
11387      bfd_vma loc_address;
11388      size_t i;
11389
11390      BFD_ASSERT (gotplt_value % 4 == 0);
11391
11392      loc_address = (htab->root.splt->output_section->vma
11393		     + htab->root.splt->output_offset);
11394      gotpc_offset = gotplt_value - ((loc_address | 3) ^ 3);
11395
11396      /* ADDIUPC has a span of +/-16MB, check we're in range.  */
11397      if (gotpc_offset + 0x1000000 >= 0x2000000)
11398	{
11399	  _bfd_error_handler
11400	    /* xgettext:c-format */
11401	    (_("%B: `%A' offset of %ld from `%A' beyond the range of ADDIUPC"),
11402	     output_bfd,
11403	     htab->root.sgotplt->output_section,
11404	     htab->root.splt->output_section,
11405	     (long) gotpc_offset);
11406	  bfd_set_error (bfd_error_no_error);
11407	  return FALSE;
11408	}
11409      bfd_put_16 (output_bfd,
11410		  plt_entry[0] | ((gotpc_offset >> 18) & 0x7f), loc);
11411      bfd_put_16 (output_bfd, (gotpc_offset >> 2) & 0xffff, loc + 2);
11412      for (i = 2; i < ARRAY_SIZE (micromips_o32_exec_plt0_entry); i++)
11413	bfd_put_16 (output_bfd, plt_entry[i], loc + (i * 2));
11414    }
11415  else if (plt_entry == micromips_insn32_o32_exec_plt0_entry)
11416    {
11417      size_t i;
11418
11419      bfd_put_16 (output_bfd, plt_entry[0], loc);
11420      bfd_put_16 (output_bfd, gotplt_value_high, loc + 2);
11421      bfd_put_16 (output_bfd, plt_entry[2], loc + 4);
11422      bfd_put_16 (output_bfd, gotplt_value_low, loc + 6);
11423      bfd_put_16 (output_bfd, plt_entry[4], loc + 8);
11424      bfd_put_16 (output_bfd, gotplt_value_low, loc + 10);
11425      for (i = 6; i < ARRAY_SIZE (micromips_insn32_o32_exec_plt0_entry); i++)
11426	bfd_put_16 (output_bfd, plt_entry[i], loc + (i * 2));
11427    }
11428  else
11429    {
11430      bfd_put_32 (output_bfd, plt_entry[0] | gotplt_value_high, loc);
11431      bfd_put_32 (output_bfd, plt_entry[1] | gotplt_value_low, loc + 4);
11432      bfd_put_32 (output_bfd, plt_entry[2] | gotplt_value_low, loc + 8);
11433      bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
11434      bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
11435      bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
11436      bfd_put_32 (output_bfd, plt_entry[6], loc + 24);
11437      bfd_put_32 (output_bfd, plt_entry[7], loc + 28);
11438    }
11439
11440  return TRUE;
11441}
11442
11443/* Install the PLT header for a VxWorks executable and finalize the
11444   contents of .rela.plt.unloaded.  */
11445
11446static void
11447mips_vxworks_finish_exec_plt (bfd *output_bfd, struct bfd_link_info *info)
11448{
11449  Elf_Internal_Rela rela;
11450  bfd_byte *loc;
11451  bfd_vma got_value, got_value_high, got_value_low, plt_address;
11452  static const bfd_vma *plt_entry;
11453  struct mips_elf_link_hash_table *htab;
11454
11455  htab = mips_elf_hash_table (info);
11456  BFD_ASSERT (htab != NULL);
11457
11458  plt_entry = mips_vxworks_exec_plt0_entry;
11459
11460  /* Calculate the value of _GLOBAL_OFFSET_TABLE_.  */
11461  got_value = (htab->root.hgot->root.u.def.section->output_section->vma
11462	       + htab->root.hgot->root.u.def.section->output_offset
11463	       + htab->root.hgot->root.u.def.value);
11464
11465  got_value_high = ((got_value + 0x8000) >> 16) & 0xffff;
11466  got_value_low = got_value & 0xffff;
11467
11468  /* Calculate the address of the PLT header.  */
11469  plt_address = (htab->root.splt->output_section->vma
11470		 + htab->root.splt->output_offset);
11471
11472  /* Install the PLT header.  */
11473  loc = htab->root.splt->contents;
11474  bfd_put_32 (output_bfd, plt_entry[0] | got_value_high, loc);
11475  bfd_put_32 (output_bfd, plt_entry[1] | got_value_low, loc + 4);
11476  bfd_put_32 (output_bfd, plt_entry[2], loc + 8);
11477  bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
11478  bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
11479  bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
11480
11481  /* Output the relocation for the lui of %hi(_GLOBAL_OFFSET_TABLE_).  */
11482  loc = htab->srelplt2->contents;
11483  rela.r_offset = plt_address;
11484  rela.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
11485  rela.r_addend = 0;
11486  bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
11487  loc += sizeof (Elf32_External_Rela);
11488
11489  /* Output the relocation for the following addiu of
11490     %lo(_GLOBAL_OFFSET_TABLE_).  */
11491  rela.r_offset += 4;
11492  rela.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
11493  bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
11494  loc += sizeof (Elf32_External_Rela);
11495
11496  /* Fix up the remaining relocations.  They may have the wrong
11497     symbol index for _G_O_T_ or _P_L_T_ depending on the order
11498     in which symbols were output.  */
11499  while (loc < htab->srelplt2->contents + htab->srelplt2->size)
11500    {
11501      Elf_Internal_Rela rel;
11502
11503      bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
11504      rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_MIPS_32);
11505      bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11506      loc += sizeof (Elf32_External_Rela);
11507
11508      bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
11509      rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
11510      bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11511      loc += sizeof (Elf32_External_Rela);
11512
11513      bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
11514      rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
11515      bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11516      loc += sizeof (Elf32_External_Rela);
11517    }
11518}
11519
11520/* Install the PLT header for a VxWorks shared library.  */
11521
11522static void
11523mips_vxworks_finish_shared_plt (bfd *output_bfd, struct bfd_link_info *info)
11524{
11525  unsigned int i;
11526  struct mips_elf_link_hash_table *htab;
11527
11528  htab = mips_elf_hash_table (info);
11529  BFD_ASSERT (htab != NULL);
11530
11531  /* We just need to copy the entry byte-by-byte.  */
11532  for (i = 0; i < ARRAY_SIZE (mips_vxworks_shared_plt0_entry); i++)
11533    bfd_put_32 (output_bfd, mips_vxworks_shared_plt0_entry[i],
11534		htab->root.splt->contents + i * 4);
11535}
11536
11537/* Finish up the dynamic sections.  */
11538
11539bfd_boolean
11540_bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd,
11541				       struct bfd_link_info *info)
11542{
11543  bfd *dynobj;
11544  asection *sdyn;
11545  asection *sgot;
11546  struct mips_got_info *gg, *g;
11547  struct mips_elf_link_hash_table *htab;
11548
11549  htab = mips_elf_hash_table (info);
11550  BFD_ASSERT (htab != NULL);
11551
11552  dynobj = elf_hash_table (info)->dynobj;
11553
11554  sdyn = bfd_get_linker_section (dynobj, ".dynamic");
11555
11556  sgot = htab->root.sgot;
11557  gg = htab->got_info;
11558
11559  if (elf_hash_table (info)->dynamic_sections_created)
11560    {
11561      bfd_byte *b;
11562      int dyn_to_skip = 0, dyn_skipped = 0;
11563
11564      BFD_ASSERT (sdyn != NULL);
11565      BFD_ASSERT (gg != NULL);
11566
11567      g = mips_elf_bfd_got (output_bfd, FALSE);
11568      BFD_ASSERT (g != NULL);
11569
11570      for (b = sdyn->contents;
11571	   b < sdyn->contents + sdyn->size;
11572	   b += MIPS_ELF_DYN_SIZE (dynobj))
11573	{
11574	  Elf_Internal_Dyn dyn;
11575	  const char *name;
11576	  size_t elemsize;
11577	  asection *s;
11578	  bfd_boolean swap_out_p;
11579
11580	  /* Read in the current dynamic entry.  */
11581	  (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
11582
11583	  /* Assume that we're going to modify it and write it out.  */
11584	  swap_out_p = TRUE;
11585
11586	  switch (dyn.d_tag)
11587	    {
11588	    case DT_RELENT:
11589	      dyn.d_un.d_val = MIPS_ELF_REL_SIZE (dynobj);
11590	      break;
11591
11592	    case DT_RELAENT:
11593	      BFD_ASSERT (htab->is_vxworks);
11594	      dyn.d_un.d_val = MIPS_ELF_RELA_SIZE (dynobj);
11595	      break;
11596
11597	    case DT_STRSZ:
11598	      /* Rewrite DT_STRSZ.  */
11599	      dyn.d_un.d_val =
11600		_bfd_elf_strtab_size (elf_hash_table (info)->dynstr);
11601	      break;
11602
11603	    case DT_PLTGOT:
11604	      s = htab->root.sgot;
11605	      dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
11606	      break;
11607
11608	    case DT_MIPS_PLTGOT:
11609	      s = htab->root.sgotplt;
11610	      dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
11611	      break;
11612
11613	    case DT_MIPS_RLD_VERSION:
11614	      dyn.d_un.d_val = 1; /* XXX */
11615	      break;
11616
11617	    case DT_MIPS_FLAGS:
11618	      dyn.d_un.d_val = RHF_NOTPOT; /* XXX */
11619	      break;
11620
11621	    case DT_MIPS_TIME_STAMP:
11622	      {
11623		time_t t;
11624		time (&t);
11625		dyn.d_un.d_val = t;
11626	      }
11627	      break;
11628
11629	    case DT_MIPS_ICHECKSUM:
11630	      /* XXX FIXME: */
11631	      swap_out_p = FALSE;
11632	      break;
11633
11634	    case DT_MIPS_IVERSION:
11635	      /* XXX FIXME: */
11636	      swap_out_p = FALSE;
11637	      break;
11638
11639	    case DT_MIPS_BASE_ADDRESS:
11640	      s = output_bfd->sections;
11641	      BFD_ASSERT (s != NULL);
11642	      dyn.d_un.d_ptr = s->vma & ~(bfd_vma) 0xffff;
11643	      break;
11644
11645	    case DT_MIPS_LOCAL_GOTNO:
11646	      dyn.d_un.d_val = g->local_gotno;
11647	      break;
11648
11649	    case DT_MIPS_UNREFEXTNO:
11650	      /* The index into the dynamic symbol table which is the
11651		 entry of the first external symbol that is not
11652		 referenced within the same object.  */
11653	      dyn.d_un.d_val = bfd_count_sections (output_bfd) + 1;
11654	      break;
11655
11656	    case DT_MIPS_GOTSYM:
11657	      if (htab->global_gotsym)
11658		{
11659		  dyn.d_un.d_val = htab->global_gotsym->dynindx;
11660		  break;
11661		}
11662	      /* In case if we don't have global got symbols we default
11663		 to setting DT_MIPS_GOTSYM to the same value as
11664		 DT_MIPS_SYMTABNO.  */
11665	      /* Fall through.  */
11666
11667	    case DT_MIPS_SYMTABNO:
11668	      name = ".dynsym";
11669	      elemsize = MIPS_ELF_SYM_SIZE (output_bfd);
11670	      s = bfd_get_linker_section (dynobj, name);
11671
11672	      if (s != NULL)
11673		dyn.d_un.d_val = s->size / elemsize;
11674	      else
11675		dyn.d_un.d_val = 0;
11676	      break;
11677
11678	    case DT_MIPS_HIPAGENO:
11679	      dyn.d_un.d_val = g->local_gotno - htab->reserved_gotno;
11680	      break;
11681
11682	    case DT_MIPS_RLD_MAP:
11683	      {
11684		struct elf_link_hash_entry *h;
11685		h = mips_elf_hash_table (info)->rld_symbol;
11686		if (!h)
11687		  {
11688		    dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
11689		    swap_out_p = FALSE;
11690		    break;
11691		  }
11692		s = h->root.u.def.section;
11693
11694		/* The MIPS_RLD_MAP tag stores the absolute address of the
11695		   debug pointer.  */
11696		dyn.d_un.d_ptr = (s->output_section->vma + s->output_offset
11697				  + h->root.u.def.value);
11698	      }
11699	      break;
11700
11701	    case DT_MIPS_RLD_MAP_REL:
11702	      {
11703		struct elf_link_hash_entry *h;
11704		bfd_vma dt_addr, rld_addr;
11705		h = mips_elf_hash_table (info)->rld_symbol;
11706		if (!h)
11707		  {
11708		    dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
11709		    swap_out_p = FALSE;
11710		    break;
11711		  }
11712		s = h->root.u.def.section;
11713
11714		/* The MIPS_RLD_MAP_REL tag stores the offset to the debug
11715		   pointer, relative to the address of the tag.  */
11716		dt_addr = (sdyn->output_section->vma + sdyn->output_offset
11717			   + (b - sdyn->contents));
11718		rld_addr = (s->output_section->vma + s->output_offset
11719			    + h->root.u.def.value);
11720		dyn.d_un.d_ptr = rld_addr - dt_addr;
11721	      }
11722	      break;
11723
11724	    case DT_MIPS_OPTIONS:
11725	      s = (bfd_get_section_by_name
11726		   (output_bfd, MIPS_ELF_OPTIONS_SECTION_NAME (output_bfd)));
11727	      dyn.d_un.d_ptr = s->vma;
11728	      break;
11729
11730	    case DT_PLTREL:
11731	      BFD_ASSERT (htab->use_plts_and_copy_relocs);
11732	      if (htab->is_vxworks)
11733		dyn.d_un.d_val = DT_RELA;
11734	      else
11735		dyn.d_un.d_val = DT_REL;
11736	      break;
11737
11738	    case DT_PLTRELSZ:
11739	      BFD_ASSERT (htab->use_plts_and_copy_relocs);
11740	      dyn.d_un.d_val = htab->root.srelplt->size;
11741	      break;
11742
11743	    case DT_JMPREL:
11744	      BFD_ASSERT (htab->use_plts_and_copy_relocs);
11745	      dyn.d_un.d_ptr = (htab->root.srelplt->output_section->vma
11746				+ htab->root.srelplt->output_offset);
11747	      break;
11748
11749	    case DT_TEXTREL:
11750	      /* If we didn't need any text relocations after all, delete
11751		 the dynamic tag.  */
11752	      if (!(info->flags & DF_TEXTREL))
11753		{
11754		  dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
11755		  swap_out_p = FALSE;
11756		}
11757	      break;
11758
11759	    case DT_FLAGS:
11760	      /* If we didn't need any text relocations after all, clear
11761		 DF_TEXTREL from DT_FLAGS.  */
11762	      if (!(info->flags & DF_TEXTREL))
11763		dyn.d_un.d_val &= ~DF_TEXTREL;
11764	      else
11765		swap_out_p = FALSE;
11766	      break;
11767
11768	    default:
11769	      swap_out_p = FALSE;
11770	      if (htab->is_vxworks
11771		  && elf_vxworks_finish_dynamic_entry (output_bfd, &dyn))
11772		swap_out_p = TRUE;
11773	      break;
11774	    }
11775
11776	  if (swap_out_p || dyn_skipped)
11777	    (*get_elf_backend_data (dynobj)->s->swap_dyn_out)
11778	      (dynobj, &dyn, b - dyn_skipped);
11779
11780	  if (dyn_to_skip)
11781	    {
11782	      dyn_skipped += dyn_to_skip;
11783	      dyn_to_skip = 0;
11784	    }
11785	}
11786
11787      /* Wipe out any trailing entries if we shifted down a dynamic tag.  */
11788      if (dyn_skipped > 0)
11789	memset (b - dyn_skipped, 0, dyn_skipped);
11790    }
11791
11792  if (sgot != NULL && sgot->size > 0
11793      && !bfd_is_abs_section (sgot->output_section))
11794    {
11795      if (htab->is_vxworks)
11796	{
11797	  /* The first entry of the global offset table points to the
11798	     ".dynamic" section.  The second is initialized by the
11799	     loader and contains the shared library identifier.
11800	     The third is also initialized by the loader and points
11801	     to the lazy resolution stub.  */
11802	  MIPS_ELF_PUT_WORD (output_bfd,
11803			     sdyn->output_offset + sdyn->output_section->vma,
11804			     sgot->contents);
11805	  MIPS_ELF_PUT_WORD (output_bfd, 0,
11806			     sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd));
11807	  MIPS_ELF_PUT_WORD (output_bfd, 0,
11808			     sgot->contents
11809			     + 2 * MIPS_ELF_GOT_SIZE (output_bfd));
11810	}
11811      else
11812	{
11813	  /* The first entry of the global offset table will be filled at
11814	     runtime. The second entry will be used by some runtime loaders.
11815	     This isn't the case of IRIX rld.  */
11816	  MIPS_ELF_PUT_WORD (output_bfd, (bfd_vma) 0, sgot->contents);
11817	  MIPS_ELF_PUT_WORD (output_bfd, MIPS_ELF_GNU_GOT1_MASK (output_bfd),
11818			     sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd));
11819	}
11820
11821      elf_section_data (sgot->output_section)->this_hdr.sh_entsize
11822	 = MIPS_ELF_GOT_SIZE (output_bfd);
11823    }
11824
11825  /* Generate dynamic relocations for the non-primary gots.  */
11826  if (gg != NULL && gg->next)
11827    {
11828      Elf_Internal_Rela rel[3];
11829      bfd_vma addend = 0;
11830
11831      memset (rel, 0, sizeof (rel));
11832      rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_REL32);
11833
11834      for (g = gg->next; g->next != gg; g = g->next)
11835	{
11836	  bfd_vma got_index = g->next->local_gotno + g->next->global_gotno
11837	    + g->next->tls_gotno;
11838
11839	  MIPS_ELF_PUT_WORD (output_bfd, 0, sgot->contents
11840			     + got_index++ * MIPS_ELF_GOT_SIZE (output_bfd));
11841	  MIPS_ELF_PUT_WORD (output_bfd, MIPS_ELF_GNU_GOT1_MASK (output_bfd),
11842			     sgot->contents
11843			     + got_index++ * MIPS_ELF_GOT_SIZE (output_bfd));
11844
11845	  if (! bfd_link_pic (info))
11846	    continue;
11847
11848	  for (; got_index < g->local_gotno; got_index++)
11849	    {
11850	      if (got_index >= g->assigned_low_gotno
11851		  && got_index <= g->assigned_high_gotno)
11852		continue;
11853
11854	      rel[0].r_offset = rel[1].r_offset = rel[2].r_offset
11855		= got_index * MIPS_ELF_GOT_SIZE (output_bfd);
11856	      if (!(mips_elf_create_dynamic_relocation
11857		    (output_bfd, info, rel, NULL,
11858		     bfd_abs_section_ptr,
11859		     0, &addend, sgot)))
11860		return FALSE;
11861	      BFD_ASSERT (addend == 0);
11862	    }
11863	}
11864    }
11865
11866  /* The generation of dynamic relocations for the non-primary gots
11867     adds more dynamic relocations.  We cannot count them until
11868     here.  */
11869
11870  if (elf_hash_table (info)->dynamic_sections_created)
11871    {
11872      bfd_byte *b;
11873      bfd_boolean swap_out_p;
11874
11875      BFD_ASSERT (sdyn != NULL);
11876
11877      for (b = sdyn->contents;
11878	   b < sdyn->contents + sdyn->size;
11879	   b += MIPS_ELF_DYN_SIZE (dynobj))
11880	{
11881	  Elf_Internal_Dyn dyn;
11882	  asection *s;
11883
11884	  /* Read in the current dynamic entry.  */
11885	  (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
11886
11887	  /* Assume that we're going to modify it and write it out.  */
11888	  swap_out_p = TRUE;
11889
11890	  switch (dyn.d_tag)
11891	    {
11892	    case DT_RELSZ:
11893	      /* Reduce DT_RELSZ to account for any relocations we
11894		 decided not to make.  This is for the n64 irix rld,
11895		 which doesn't seem to apply any relocations if there
11896		 are trailing null entries.  */
11897	      s = mips_elf_rel_dyn_section (info, FALSE);
11898	      dyn.d_un.d_val = (s->reloc_count
11899				* (ABI_64_P (output_bfd)
11900				   ? sizeof (Elf64_Mips_External_Rel)
11901				   : sizeof (Elf32_External_Rel)));
11902	      /* Adjust the section size too.  Tools like the prelinker
11903		 can reasonably expect the values to the same.  */
11904	      elf_section_data (s->output_section)->this_hdr.sh_size
11905		= dyn.d_un.d_val;
11906	      break;
11907
11908	    default:
11909	      swap_out_p = FALSE;
11910	      break;
11911	    }
11912
11913	  if (swap_out_p)
11914	    (*get_elf_backend_data (dynobj)->s->swap_dyn_out)
11915	      (dynobj, &dyn, b);
11916	}
11917    }
11918
11919  {
11920    asection *s;
11921    Elf32_compact_rel cpt;
11922
11923    if (SGI_COMPAT (output_bfd))
11924      {
11925	/* Write .compact_rel section out.  */
11926	s = bfd_get_linker_section (dynobj, ".compact_rel");
11927	if (s != NULL)
11928	  {
11929	    cpt.id1 = 1;
11930	    cpt.num = s->reloc_count;
11931	    cpt.id2 = 2;
11932	    cpt.offset = (s->output_section->filepos
11933			  + sizeof (Elf32_External_compact_rel));
11934	    cpt.reserved0 = 0;
11935	    cpt.reserved1 = 0;
11936	    bfd_elf32_swap_compact_rel_out (output_bfd, &cpt,
11937					    ((Elf32_External_compact_rel *)
11938					     s->contents));
11939
11940	    /* Clean up a dummy stub function entry in .text.  */
11941	    if (htab->sstubs != NULL)
11942	      {
11943		file_ptr dummy_offset;
11944
11945		BFD_ASSERT (htab->sstubs->size >= htab->function_stub_size);
11946		dummy_offset = htab->sstubs->size - htab->function_stub_size;
11947		memset (htab->sstubs->contents + dummy_offset, 0,
11948			htab->function_stub_size);
11949	      }
11950	  }
11951      }
11952
11953    /* The psABI says that the dynamic relocations must be sorted in
11954       increasing order of r_symndx.  The VxWorks EABI doesn't require
11955       this, and because the code below handles REL rather than RELA
11956       relocations, using it for VxWorks would be outright harmful.  */
11957    if (!htab->is_vxworks)
11958      {
11959	s = mips_elf_rel_dyn_section (info, FALSE);
11960	if (s != NULL
11961	    && s->size > (bfd_vma)2 * MIPS_ELF_REL_SIZE (output_bfd))
11962	  {
11963	    reldyn_sorting_bfd = output_bfd;
11964
11965	    if (ABI_64_P (output_bfd))
11966	      qsort ((Elf64_External_Rel *) s->contents + 1,
11967		     s->reloc_count - 1, sizeof (Elf64_Mips_External_Rel),
11968		     sort_dynamic_relocs_64);
11969	    else
11970	      qsort ((Elf32_External_Rel *) s->contents + 1,
11971		     s->reloc_count - 1, sizeof (Elf32_External_Rel),
11972		     sort_dynamic_relocs);
11973	  }
11974      }
11975  }
11976
11977  if (htab->root.splt && htab->root.splt->size > 0)
11978    {
11979      if (htab->is_vxworks)
11980	{
11981	  if (bfd_link_pic (info))
11982	    mips_vxworks_finish_shared_plt (output_bfd, info);
11983	  else
11984	    mips_vxworks_finish_exec_plt (output_bfd, info);
11985	}
11986      else
11987	{
11988	  BFD_ASSERT (!bfd_link_pic (info));
11989	  if (!mips_finish_exec_plt (output_bfd, info))
11990	    return FALSE;
11991	}
11992    }
11993  return TRUE;
11994}
11995
11996
11997/* Set ABFD's EF_MIPS_ARCH and EF_MIPS_MACH flags.  */
11998
11999static void
12000mips_set_isa_flags (bfd *abfd)
12001{
12002  flagword val;
12003
12004  switch (bfd_get_mach (abfd))
12005    {
12006    default:
12007    case bfd_mach_mips3000:
12008      val = E_MIPS_ARCH_1;
12009      break;
12010
12011    case bfd_mach_mips3900:
12012      val = E_MIPS_ARCH_1 | E_MIPS_MACH_3900;
12013      break;
12014
12015    case bfd_mach_mips6000:
12016      val = E_MIPS_ARCH_2;
12017      break;
12018
12019    case bfd_mach_mips4000:
12020    case bfd_mach_mips4300:
12021    case bfd_mach_mips4400:
12022    case bfd_mach_mips4600:
12023      val = E_MIPS_ARCH_3;
12024      break;
12025
12026    case bfd_mach_mips4010:
12027      val = E_MIPS_ARCH_3 | E_MIPS_MACH_4010;
12028      break;
12029
12030    case bfd_mach_mips4100:
12031      val = E_MIPS_ARCH_3 | E_MIPS_MACH_4100;
12032      break;
12033
12034    case bfd_mach_mips4111:
12035      val = E_MIPS_ARCH_3 | E_MIPS_MACH_4111;
12036      break;
12037
12038    case bfd_mach_mips4120:
12039      val = E_MIPS_ARCH_3 | E_MIPS_MACH_4120;
12040      break;
12041
12042    case bfd_mach_mips4650:
12043      val = E_MIPS_ARCH_3 | E_MIPS_MACH_4650;
12044      break;
12045
12046    case bfd_mach_mips5400:
12047      val = E_MIPS_ARCH_4 | E_MIPS_MACH_5400;
12048      break;
12049
12050    case bfd_mach_mips5500:
12051      val = E_MIPS_ARCH_4 | E_MIPS_MACH_5500;
12052      break;
12053
12054    case bfd_mach_mips5900:
12055      val = E_MIPS_ARCH_3 | E_MIPS_MACH_5900;
12056      break;
12057
12058    case bfd_mach_mips9000:
12059      val = E_MIPS_ARCH_4 | E_MIPS_MACH_9000;
12060      break;
12061
12062    case bfd_mach_mips5000:
12063    case bfd_mach_mips7000:
12064    case bfd_mach_mips8000:
12065    case bfd_mach_mips10000:
12066    case bfd_mach_mips12000:
12067    case bfd_mach_mips14000:
12068    case bfd_mach_mips16000:
12069      val = E_MIPS_ARCH_4;
12070      break;
12071
12072    case bfd_mach_mips5:
12073      val = E_MIPS_ARCH_5;
12074      break;
12075
12076    case bfd_mach_mips_loongson_2e:
12077      val = E_MIPS_ARCH_3 | E_MIPS_MACH_LS2E;
12078      break;
12079
12080    case bfd_mach_mips_loongson_2f:
12081      val = E_MIPS_ARCH_3 | E_MIPS_MACH_LS2F;
12082      break;
12083
12084    case bfd_mach_mips_sb1:
12085      val = E_MIPS_ARCH_64 | E_MIPS_MACH_SB1;
12086      break;
12087
12088    case bfd_mach_mips_loongson_3a:
12089      val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_LS3A;
12090      break;
12091
12092    case bfd_mach_mips_octeon:
12093    case bfd_mach_mips_octeonp:
12094      val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON;
12095      break;
12096
12097    case bfd_mach_mips_octeon3:
12098      val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON3;
12099      break;
12100
12101    case bfd_mach_mips_xlr:
12102      val = E_MIPS_ARCH_64 | E_MIPS_MACH_XLR;
12103      break;
12104
12105    case bfd_mach_mips_octeon2:
12106      val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON2;
12107      break;
12108
12109    case bfd_mach_mipsisa32:
12110      val = E_MIPS_ARCH_32;
12111      break;
12112
12113    case bfd_mach_mipsisa64:
12114      val = E_MIPS_ARCH_64;
12115      break;
12116
12117    case bfd_mach_mipsisa32r2:
12118    case bfd_mach_mipsisa32r3:
12119    case bfd_mach_mipsisa32r5:
12120      val = E_MIPS_ARCH_32R2;
12121      break;
12122
12123    case bfd_mach_mipsisa64r2:
12124    case bfd_mach_mipsisa64r3:
12125    case bfd_mach_mipsisa64r5:
12126      val = E_MIPS_ARCH_64R2;
12127      break;
12128
12129    case bfd_mach_mipsisa32r6:
12130      val = E_MIPS_ARCH_32R6;
12131      break;
12132
12133    case bfd_mach_mipsisa64r6:
12134      val = E_MIPS_ARCH_64R6;
12135      break;
12136    }
12137  elf_elfheader (abfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH);
12138  elf_elfheader (abfd)->e_flags |= val;
12139
12140}
12141
12142
12143/* Whether to sort relocs output by ld -r or ld --emit-relocs, by r_offset.
12144   Don't do so for code sections.  We want to keep ordering of HI16/LO16
12145   as is.  On the other hand, elf-eh-frame.c processing requires .eh_frame
12146   relocs to be sorted.  */
12147
12148bfd_boolean
12149_bfd_mips_elf_sort_relocs_p (asection *sec)
12150{
12151  return (sec->flags & SEC_CODE) == 0;
12152}
12153
12154
12155/* The final processing done just before writing out a MIPS ELF object
12156   file.  This gets the MIPS architecture right based on the machine
12157   number.  This is used by both the 32-bit and the 64-bit ABI.  */
12158
12159void
12160_bfd_mips_elf_final_write_processing (bfd *abfd,
12161				      bfd_boolean linker ATTRIBUTE_UNUSED)
12162{
12163  unsigned int i;
12164  Elf_Internal_Shdr **hdrpp;
12165  const char *name;
12166  asection *sec;
12167
12168  /* Keep the existing EF_MIPS_MACH and EF_MIPS_ARCH flags if the former
12169     is nonzero.  This is for compatibility with old objects, which used
12170     a combination of a 32-bit EF_MIPS_ARCH and a 64-bit EF_MIPS_MACH.  */
12171  if ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == 0)
12172    mips_set_isa_flags (abfd);
12173
12174  /* Set the sh_info field for .gptab sections and other appropriate
12175     info for each special section.  */
12176  for (i = 1, hdrpp = elf_elfsections (abfd) + 1;
12177       i < elf_numsections (abfd);
12178       i++, hdrpp++)
12179    {
12180      switch ((*hdrpp)->sh_type)
12181	{
12182	case SHT_MIPS_MSYM:
12183	case SHT_MIPS_LIBLIST:
12184	  sec = bfd_get_section_by_name (abfd, ".dynstr");
12185	  if (sec != NULL)
12186	    (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
12187	  break;
12188
12189	case SHT_MIPS_GPTAB:
12190	  BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
12191	  name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
12192	  BFD_ASSERT (name != NULL
12193		      && CONST_STRNEQ (name, ".gptab."));
12194	  sec = bfd_get_section_by_name (abfd, name + sizeof ".gptab" - 1);
12195	  BFD_ASSERT (sec != NULL);
12196	  (*hdrpp)->sh_info = elf_section_data (sec)->this_idx;
12197	  break;
12198
12199	case SHT_MIPS_CONTENT:
12200	  BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
12201	  name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
12202	  BFD_ASSERT (name != NULL
12203		      && CONST_STRNEQ (name, ".MIPS.content"));
12204	  sec = bfd_get_section_by_name (abfd,
12205					 name + sizeof ".MIPS.content" - 1);
12206	  BFD_ASSERT (sec != NULL);
12207	  (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
12208	  break;
12209
12210	case SHT_MIPS_SYMBOL_LIB:
12211	  sec = bfd_get_section_by_name (abfd, ".dynsym");
12212	  if (sec != NULL)
12213	    (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
12214	  sec = bfd_get_section_by_name (abfd, ".liblist");
12215	  if (sec != NULL)
12216	    (*hdrpp)->sh_info = elf_section_data (sec)->this_idx;
12217	  break;
12218
12219	case SHT_MIPS_EVENTS:
12220	  BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
12221	  name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
12222	  BFD_ASSERT (name != NULL);
12223	  if (CONST_STRNEQ (name, ".MIPS.events"))
12224	    sec = bfd_get_section_by_name (abfd,
12225					   name + sizeof ".MIPS.events" - 1);
12226	  else
12227	    {
12228	      BFD_ASSERT (CONST_STRNEQ (name, ".MIPS.post_rel"));
12229	      sec = bfd_get_section_by_name (abfd,
12230					     (name
12231					      + sizeof ".MIPS.post_rel" - 1));
12232	    }
12233	  BFD_ASSERT (sec != NULL);
12234	  (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
12235	  break;
12236
12237	}
12238    }
12239}
12240
12241/* When creating an IRIX5 executable, we need REGINFO and RTPROC
12242   segments.  */
12243
12244int
12245_bfd_mips_elf_additional_program_headers (bfd *abfd,
12246					  struct bfd_link_info *info ATTRIBUTE_UNUSED)
12247{
12248  asection *s;
12249  int ret = 0;
12250
12251  /* See if we need a PT_MIPS_REGINFO segment.  */
12252  s = bfd_get_section_by_name (abfd, ".reginfo");
12253  if (s && (s->flags & SEC_LOAD))
12254    ++ret;
12255
12256  /* See if we need a PT_MIPS_ABIFLAGS segment.  */
12257  if (bfd_get_section_by_name (abfd, ".MIPS.abiflags"))
12258    ++ret;
12259
12260  /* See if we need a PT_MIPS_OPTIONS segment.  */
12261  if (IRIX_COMPAT (abfd) == ict_irix6
12262      && bfd_get_section_by_name (abfd,
12263				  MIPS_ELF_OPTIONS_SECTION_NAME (abfd)))
12264    ++ret;
12265
12266  /* See if we need a PT_MIPS_RTPROC segment.  */
12267  if (IRIX_COMPAT (abfd) == ict_irix5
12268      && bfd_get_section_by_name (abfd, ".dynamic")
12269      && bfd_get_section_by_name (abfd, ".mdebug"))
12270    ++ret;
12271
12272  /* Allocate a PT_NULL header in dynamic objects.  See
12273     _bfd_mips_elf_modify_segment_map for details.  */
12274  if (!SGI_COMPAT (abfd)
12275      && bfd_get_section_by_name (abfd, ".dynamic"))
12276    ++ret;
12277
12278  return ret;
12279}
12280
12281/* Modify the segment map for an IRIX5 executable.  */
12282
12283bfd_boolean
12284_bfd_mips_elf_modify_segment_map (bfd *abfd,
12285				  struct bfd_link_info *info)
12286{
12287  asection *s;
12288  struct elf_segment_map *m, **pm;
12289  bfd_size_type amt;
12290
12291  /* If there is a .reginfo section, we need a PT_MIPS_REGINFO
12292     segment.  */
12293  s = bfd_get_section_by_name (abfd, ".reginfo");
12294  if (s != NULL && (s->flags & SEC_LOAD) != 0)
12295    {
12296      for (m = elf_seg_map (abfd); m != NULL; m = m->next)
12297	if (m->p_type == PT_MIPS_REGINFO)
12298	  break;
12299      if (m == NULL)
12300	{
12301	  amt = sizeof *m;
12302	  m = bfd_zalloc (abfd, amt);
12303	  if (m == NULL)
12304	    return FALSE;
12305
12306	  m->p_type = PT_MIPS_REGINFO;
12307	  m->count = 1;
12308	  m->sections[0] = s;
12309
12310	  /* We want to put it after the PHDR and INTERP segments.  */
12311	  pm = &elf_seg_map (abfd);
12312	  while (*pm != NULL
12313		 && ((*pm)->p_type == PT_PHDR
12314		     || (*pm)->p_type == PT_INTERP))
12315	    pm = &(*pm)->next;
12316
12317	  m->next = *pm;
12318	  *pm = m;
12319	}
12320    }
12321
12322  /* If there is a .MIPS.abiflags section, we need a PT_MIPS_ABIFLAGS
12323     segment.  */
12324  s = bfd_get_section_by_name (abfd, ".MIPS.abiflags");
12325  if (s != NULL && (s->flags & SEC_LOAD) != 0)
12326    {
12327      for (m = elf_seg_map (abfd); m != NULL; m = m->next)
12328	if (m->p_type == PT_MIPS_ABIFLAGS)
12329	  break;
12330      if (m == NULL)
12331	{
12332	  amt = sizeof *m;
12333	  m = bfd_zalloc (abfd, amt);
12334	  if (m == NULL)
12335	    return FALSE;
12336
12337	  m->p_type = PT_MIPS_ABIFLAGS;
12338	  m->count = 1;
12339	  m->sections[0] = s;
12340
12341	  /* We want to put it after the PHDR and INTERP segments.  */
12342	  pm = &elf_seg_map (abfd);
12343	  while (*pm != NULL
12344		 && ((*pm)->p_type == PT_PHDR
12345		     || (*pm)->p_type == PT_INTERP))
12346	    pm = &(*pm)->next;
12347
12348	  m->next = *pm;
12349	  *pm = m;
12350	}
12351    }
12352
12353  /* For IRIX 6, we don't have .mdebug sections, nor does anything but
12354     .dynamic end up in PT_DYNAMIC.  However, we do have to insert a
12355     PT_MIPS_OPTIONS segment immediately following the program header
12356     table.  */
12357  if (NEWABI_P (abfd)
12358      /* On non-IRIX6 new abi, we'll have already created a segment
12359	 for this section, so don't create another.  I'm not sure this
12360	 is not also the case for IRIX 6, but I can't test it right
12361	 now.  */
12362      && IRIX_COMPAT (abfd) == ict_irix6)
12363    {
12364      for (s = abfd->sections; s; s = s->next)
12365	if (elf_section_data (s)->this_hdr.sh_type == SHT_MIPS_OPTIONS)
12366	  break;
12367
12368      if (s)
12369	{
12370	  struct elf_segment_map *options_segment;
12371
12372	  pm = &elf_seg_map (abfd);
12373	  while (*pm != NULL
12374		 && ((*pm)->p_type == PT_PHDR
12375		     || (*pm)->p_type == PT_INTERP))
12376	    pm = &(*pm)->next;
12377
12378	  if (*pm == NULL || (*pm)->p_type != PT_MIPS_OPTIONS)
12379	    {
12380	      amt = sizeof (struct elf_segment_map);
12381	      options_segment = bfd_zalloc (abfd, amt);
12382	      options_segment->next = *pm;
12383	      options_segment->p_type = PT_MIPS_OPTIONS;
12384	      options_segment->p_flags = PF_R;
12385	      options_segment->p_flags_valid = TRUE;
12386	      options_segment->count = 1;
12387	      options_segment->sections[0] = s;
12388	      *pm = options_segment;
12389	    }
12390	}
12391    }
12392  else
12393    {
12394      if (IRIX_COMPAT (abfd) == ict_irix5)
12395	{
12396	  /* If there are .dynamic and .mdebug sections, we make a room
12397	     for the RTPROC header.  FIXME: Rewrite without section names.  */
12398	  if (bfd_get_section_by_name (abfd, ".interp") == NULL
12399	      && bfd_get_section_by_name (abfd, ".dynamic") != NULL
12400	      && bfd_get_section_by_name (abfd, ".mdebug") != NULL)
12401	    {
12402	      for (m = elf_seg_map (abfd); m != NULL; m = m->next)
12403		if (m->p_type == PT_MIPS_RTPROC)
12404		  break;
12405	      if (m == NULL)
12406		{
12407		  amt = sizeof *m;
12408		  m = bfd_zalloc (abfd, amt);
12409		  if (m == NULL)
12410		    return FALSE;
12411
12412		  m->p_type = PT_MIPS_RTPROC;
12413
12414		  s = bfd_get_section_by_name (abfd, ".rtproc");
12415		  if (s == NULL)
12416		    {
12417		      m->count = 0;
12418		      m->p_flags = 0;
12419		      m->p_flags_valid = 1;
12420		    }
12421		  else
12422		    {
12423		      m->count = 1;
12424		      m->sections[0] = s;
12425		    }
12426
12427		  /* We want to put it after the DYNAMIC segment.  */
12428		  pm = &elf_seg_map (abfd);
12429		  while (*pm != NULL && (*pm)->p_type != PT_DYNAMIC)
12430		    pm = &(*pm)->next;
12431		  if (*pm != NULL)
12432		    pm = &(*pm)->next;
12433
12434		  m->next = *pm;
12435		  *pm = m;
12436		}
12437	    }
12438	}
12439      /* On IRIX5, the PT_DYNAMIC segment includes the .dynamic,
12440	 .dynstr, .dynsym, and .hash sections, and everything in
12441	 between.  */
12442      for (pm = &elf_seg_map (abfd); *pm != NULL;
12443	   pm = &(*pm)->next)
12444	if ((*pm)->p_type == PT_DYNAMIC)
12445	  break;
12446      m = *pm;
12447      /* GNU/Linux binaries do not need the extended PT_DYNAMIC section.
12448	 glibc's dynamic linker has traditionally derived the number of
12449	 tags from the p_filesz field, and sometimes allocates stack
12450	 arrays of that size.  An overly-big PT_DYNAMIC segment can
12451	 be actively harmful in such cases.  Making PT_DYNAMIC contain
12452	 other sections can also make life hard for the prelinker,
12453	 which might move one of the other sections to a different
12454	 PT_LOAD segment.  */
12455      if (SGI_COMPAT (abfd)
12456	  && m != NULL
12457	  && m->count == 1
12458	  && strcmp (m->sections[0]->name, ".dynamic") == 0)
12459	{
12460	  static const char *sec_names[] =
12461	  {
12462	    ".dynamic", ".dynstr", ".dynsym", ".hash"
12463	  };
12464	  bfd_vma low, high;
12465	  unsigned int i, c;
12466	  struct elf_segment_map *n;
12467
12468	  low = ~(bfd_vma) 0;
12469	  high = 0;
12470	  for (i = 0; i < sizeof sec_names / sizeof sec_names[0]; i++)
12471	    {
12472	      s = bfd_get_section_by_name (abfd, sec_names[i]);
12473	      if (s != NULL && (s->flags & SEC_LOAD) != 0)
12474		{
12475		  bfd_size_type sz;
12476
12477		  if (low > s->vma)
12478		    low = s->vma;
12479		  sz = s->size;
12480		  if (high < s->vma + sz)
12481		    high = s->vma + sz;
12482		}
12483	    }
12484
12485	  c = 0;
12486	  for (s = abfd->sections; s != NULL; s = s->next)
12487	    if ((s->flags & SEC_LOAD) != 0
12488		&& s->vma >= low
12489		&& s->vma + s->size <= high)
12490	      ++c;
12491
12492	  amt = sizeof *n + (bfd_size_type) (c - 1) * sizeof (asection *);
12493	  n = bfd_zalloc (abfd, amt);
12494	  if (n == NULL)
12495	    return FALSE;
12496	  *n = *m;
12497	  n->count = c;
12498
12499	  i = 0;
12500	  for (s = abfd->sections; s != NULL; s = s->next)
12501	    {
12502	      if ((s->flags & SEC_LOAD) != 0
12503		  && s->vma >= low
12504		  && s->vma + s->size <= high)
12505		{
12506		  n->sections[i] = s;
12507		  ++i;
12508		}
12509	    }
12510
12511	  *pm = n;
12512	}
12513    }
12514
12515  /* Allocate a spare program header in dynamic objects so that tools
12516     like the prelinker can add an extra PT_LOAD entry.
12517
12518     If the prelinker needs to make room for a new PT_LOAD entry, its
12519     standard procedure is to move the first (read-only) sections into
12520     the new (writable) segment.  However, the MIPS ABI requires
12521     .dynamic to be in a read-only segment, and the section will often
12522     start within sizeof (ElfNN_Phdr) bytes of the last program header.
12523
12524     Although the prelinker could in principle move .dynamic to a
12525     writable segment, it seems better to allocate a spare program
12526     header instead, and avoid the need to move any sections.
12527     There is a long tradition of allocating spare dynamic tags,
12528     so allocating a spare program header seems like a natural
12529     extension.
12530
12531     If INFO is NULL, we may be copying an already prelinked binary
12532     with objcopy or strip, so do not add this header.  */
12533  if (info != NULL
12534      && !SGI_COMPAT (abfd)
12535      && bfd_get_section_by_name (abfd, ".dynamic"))
12536    {
12537      for (pm = &elf_seg_map (abfd); *pm != NULL; pm = &(*pm)->next)
12538	if ((*pm)->p_type == PT_NULL)
12539	  break;
12540      if (*pm == NULL)
12541	{
12542	  m = bfd_zalloc (abfd, sizeof (*m));
12543	  if (m == NULL)
12544	    return FALSE;
12545
12546	  m->p_type = PT_NULL;
12547	  *pm = m;
12548	}
12549    }
12550
12551  return TRUE;
12552}
12553
12554/* Return the section that should be marked against GC for a given
12555   relocation.  */
12556
12557asection *
12558_bfd_mips_elf_gc_mark_hook (asection *sec,
12559			    struct bfd_link_info *info,
12560			    Elf_Internal_Rela *rel,
12561			    struct elf_link_hash_entry *h,
12562			    Elf_Internal_Sym *sym)
12563{
12564  /* ??? Do mips16 stub sections need to be handled special?  */
12565
12566  if (h != NULL)
12567    switch (ELF_R_TYPE (sec->owner, rel->r_info))
12568      {
12569      case R_MIPS_GNU_VTINHERIT:
12570      case R_MIPS_GNU_VTENTRY:
12571	return NULL;
12572      }
12573
12574  return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
12575}
12576
12577/* Update the got entry reference counts for the section being removed.  */
12578
12579bfd_boolean
12580_bfd_mips_elf_gc_sweep_hook (bfd *abfd ATTRIBUTE_UNUSED,
12581			     struct bfd_link_info *info ATTRIBUTE_UNUSED,
12582			     asection *sec ATTRIBUTE_UNUSED,
12583			     const Elf_Internal_Rela *relocs ATTRIBUTE_UNUSED)
12584{
12585#if 0
12586  Elf_Internal_Shdr *symtab_hdr;
12587  struct elf_link_hash_entry **sym_hashes;
12588  bfd_signed_vma *local_got_refcounts;
12589  const Elf_Internal_Rela *rel, *relend;
12590  unsigned long r_symndx;
12591  struct elf_link_hash_entry *h;
12592
12593  if (bfd_link_relocatable (info))
12594    return TRUE;
12595
12596  symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
12597  sym_hashes = elf_sym_hashes (abfd);
12598  local_got_refcounts = elf_local_got_refcounts (abfd);
12599
12600  relend = relocs + sec->reloc_count;
12601  for (rel = relocs; rel < relend; rel++)
12602    switch (ELF_R_TYPE (abfd, rel->r_info))
12603      {
12604      case R_MIPS16_GOT16:
12605      case R_MIPS16_CALL16:
12606      case R_MIPS_GOT16:
12607      case R_MIPS_CALL16:
12608      case R_MIPS_CALL_HI16:
12609      case R_MIPS_CALL_LO16:
12610      case R_MIPS_GOT_HI16:
12611      case R_MIPS_GOT_LO16:
12612      case R_MIPS_GOT_DISP:
12613      case R_MIPS_GOT_PAGE:
12614      case R_MIPS_GOT_OFST:
12615      case R_MICROMIPS_GOT16:
12616      case R_MICROMIPS_CALL16:
12617      case R_MICROMIPS_CALL_HI16:
12618      case R_MICROMIPS_CALL_LO16:
12619      case R_MICROMIPS_GOT_HI16:
12620      case R_MICROMIPS_GOT_LO16:
12621      case R_MICROMIPS_GOT_DISP:
12622      case R_MICROMIPS_GOT_PAGE:
12623      case R_MICROMIPS_GOT_OFST:
12624	/* ??? It would seem that the existing MIPS code does no sort
12625	   of reference counting or whatnot on its GOT and PLT entries,
12626	   so it is not possible to garbage collect them at this time.  */
12627	break;
12628
12629      default:
12630	break;
12631      }
12632#endif
12633
12634  return TRUE;
12635}
12636
12637/* Prevent .MIPS.abiflags from being discarded with --gc-sections.  */
12638
12639bfd_boolean
12640_bfd_mips_elf_gc_mark_extra_sections (struct bfd_link_info *info,
12641				      elf_gc_mark_hook_fn gc_mark_hook)
12642{
12643  bfd *sub;
12644
12645  _bfd_elf_gc_mark_extra_sections (info, gc_mark_hook);
12646
12647  for (sub = info->input_bfds; sub != NULL; sub = sub->link.next)
12648    {
12649      asection *o;
12650
12651      if (! is_mips_elf (sub))
12652	continue;
12653
12654      for (o = sub->sections; o != NULL; o = o->next)
12655	if (!o->gc_mark
12656	    && MIPS_ELF_ABIFLAGS_SECTION_NAME_P
12657		 (bfd_get_section_name (sub, o)))
12658	  {
12659	    if (!_bfd_elf_gc_mark (info, o, gc_mark_hook))
12660	      return FALSE;
12661	  }
12662    }
12663
12664  return TRUE;
12665}
12666
12667/* Copy data from a MIPS ELF indirect symbol to its direct symbol,
12668   hiding the old indirect symbol.  Process additional relocation
12669   information.  Also called for weakdefs, in which case we just let
12670   _bfd_elf_link_hash_copy_indirect copy the flags for us.  */
12671
12672void
12673_bfd_mips_elf_copy_indirect_symbol (struct bfd_link_info *info,
12674				    struct elf_link_hash_entry *dir,
12675				    struct elf_link_hash_entry *ind)
12676{
12677  struct mips_elf_link_hash_entry *dirmips, *indmips;
12678
12679  _bfd_elf_link_hash_copy_indirect (info, dir, ind);
12680
12681  dirmips = (struct mips_elf_link_hash_entry *) dir;
12682  indmips = (struct mips_elf_link_hash_entry *) ind;
12683  /* Any absolute non-dynamic relocations against an indirect or weak
12684     definition will be against the target symbol.  */
12685  if (indmips->has_static_relocs)
12686    dirmips->has_static_relocs = TRUE;
12687
12688  if (ind->root.type != bfd_link_hash_indirect)
12689    return;
12690
12691  dirmips->possibly_dynamic_relocs += indmips->possibly_dynamic_relocs;
12692  if (indmips->readonly_reloc)
12693    dirmips->readonly_reloc = TRUE;
12694  if (indmips->no_fn_stub)
12695    dirmips->no_fn_stub = TRUE;
12696  if (indmips->fn_stub)
12697    {
12698      dirmips->fn_stub = indmips->fn_stub;
12699      indmips->fn_stub = NULL;
12700    }
12701  if (indmips->need_fn_stub)
12702    {
12703      dirmips->need_fn_stub = TRUE;
12704      indmips->need_fn_stub = FALSE;
12705    }
12706  if (indmips->call_stub)
12707    {
12708      dirmips->call_stub = indmips->call_stub;
12709      indmips->call_stub = NULL;
12710    }
12711  if (indmips->call_fp_stub)
12712    {
12713      dirmips->call_fp_stub = indmips->call_fp_stub;
12714      indmips->call_fp_stub = NULL;
12715    }
12716  if (indmips->global_got_area < dirmips->global_got_area)
12717    dirmips->global_got_area = indmips->global_got_area;
12718  if (indmips->global_got_area < GGA_NONE)
12719    indmips->global_got_area = GGA_NONE;
12720  if (indmips->has_nonpic_branches)
12721    dirmips->has_nonpic_branches = TRUE;
12722}
12723
12724#define PDR_SIZE 32
12725
12726bfd_boolean
12727_bfd_mips_elf_discard_info (bfd *abfd, struct elf_reloc_cookie *cookie,
12728			    struct bfd_link_info *info)
12729{
12730  asection *o;
12731  bfd_boolean ret = FALSE;
12732  unsigned char *tdata;
12733  size_t i, skip;
12734
12735  o = bfd_get_section_by_name (abfd, ".pdr");
12736  if (! o)
12737    return FALSE;
12738  if (o->size == 0)
12739    return FALSE;
12740  if (o->size % PDR_SIZE != 0)
12741    return FALSE;
12742  if (o->output_section != NULL
12743      && bfd_is_abs_section (o->output_section))
12744    return FALSE;
12745
12746  tdata = bfd_zmalloc (o->size / PDR_SIZE);
12747  if (! tdata)
12748    return FALSE;
12749
12750  cookie->rels = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
12751					    info->keep_memory);
12752  if (!cookie->rels)
12753    {
12754      free (tdata);
12755      return FALSE;
12756    }
12757
12758  cookie->rel = cookie->rels;
12759  cookie->relend = cookie->rels + o->reloc_count;
12760
12761  for (i = 0, skip = 0; i < o->size / PDR_SIZE; i ++)
12762    {
12763      if (bfd_elf_reloc_symbol_deleted_p (i * PDR_SIZE, cookie))
12764	{
12765	  tdata[i] = 1;
12766	  skip ++;
12767	}
12768    }
12769
12770  if (skip != 0)
12771    {
12772      mips_elf_section_data (o)->u.tdata = tdata;
12773      if (o->rawsize == 0)
12774	o->rawsize = o->size;
12775      o->size -= skip * PDR_SIZE;
12776      ret = TRUE;
12777    }
12778  else
12779    free (tdata);
12780
12781  if (! info->keep_memory)
12782    free (cookie->rels);
12783
12784  return ret;
12785}
12786
12787bfd_boolean
12788_bfd_mips_elf_ignore_discarded_relocs (asection *sec)
12789{
12790  if (strcmp (sec->name, ".pdr") == 0)
12791    return TRUE;
12792  return FALSE;
12793}
12794
12795bfd_boolean
12796_bfd_mips_elf_write_section (bfd *output_bfd,
12797			     struct bfd_link_info *link_info ATTRIBUTE_UNUSED,
12798                             asection *sec, bfd_byte *contents)
12799{
12800  bfd_byte *to, *from, *end;
12801  int i;
12802
12803  if (strcmp (sec->name, ".pdr") != 0)
12804    return FALSE;
12805
12806  if (mips_elf_section_data (sec)->u.tdata == NULL)
12807    return FALSE;
12808
12809  to = contents;
12810  end = contents + sec->size;
12811  for (from = contents, i = 0;
12812       from < end;
12813       from += PDR_SIZE, i++)
12814    {
12815      if ((mips_elf_section_data (sec)->u.tdata)[i] == 1)
12816	continue;
12817      if (to != from)
12818	memcpy (to, from, PDR_SIZE);
12819      to += PDR_SIZE;
12820    }
12821  bfd_set_section_contents (output_bfd, sec->output_section, contents,
12822			    sec->output_offset, sec->size);
12823  return TRUE;
12824}
12825
12826/* microMIPS code retains local labels for linker relaxation.  Omit them
12827   from output by default for clarity.  */
12828
12829bfd_boolean
12830_bfd_mips_elf_is_target_special_symbol (bfd *abfd, asymbol *sym)
12831{
12832  return _bfd_elf_is_local_label_name (abfd, sym->name);
12833}
12834
12835/* MIPS ELF uses a special find_nearest_line routine in order the
12836   handle the ECOFF debugging information.  */
12837
12838struct mips_elf_find_line
12839{
12840  struct ecoff_debug_info d;
12841  struct ecoff_find_line i;
12842};
12843
12844bfd_boolean
12845_bfd_mips_elf_find_nearest_line (bfd *abfd, asymbol **symbols,
12846				 asection *section, bfd_vma offset,
12847				 const char **filename_ptr,
12848				 const char **functionname_ptr,
12849				 unsigned int *line_ptr,
12850				 unsigned int *discriminator_ptr)
12851{
12852  asection *msec;
12853
12854  if (_bfd_dwarf2_find_nearest_line (abfd, symbols, NULL, section, offset,
12855				     filename_ptr, functionname_ptr,
12856				     line_ptr, discriminator_ptr,
12857				     dwarf_debug_sections,
12858				     ABI_64_P (abfd) ? 8 : 0,
12859				     &elf_tdata (abfd)->dwarf2_find_line_info))
12860    return TRUE;
12861
12862  if (_bfd_dwarf1_find_nearest_line (abfd, symbols, section, offset,
12863				     filename_ptr, functionname_ptr,
12864				     line_ptr))
12865    return TRUE;
12866
12867  msec = bfd_get_section_by_name (abfd, ".mdebug");
12868  if (msec != NULL)
12869    {
12870      flagword origflags;
12871      struct mips_elf_find_line *fi;
12872      const struct ecoff_debug_swap * const swap =
12873	get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
12874
12875      /* If we are called during a link, mips_elf_final_link may have
12876	 cleared the SEC_HAS_CONTENTS field.  We force it back on here
12877	 if appropriate (which it normally will be).  */
12878      origflags = msec->flags;
12879      if (elf_section_data (msec)->this_hdr.sh_type != SHT_NOBITS)
12880	msec->flags |= SEC_HAS_CONTENTS;
12881
12882      fi = mips_elf_tdata (abfd)->find_line_info;
12883      if (fi == NULL)
12884	{
12885	  bfd_size_type external_fdr_size;
12886	  char *fraw_src;
12887	  char *fraw_end;
12888	  struct fdr *fdr_ptr;
12889	  bfd_size_type amt = sizeof (struct mips_elf_find_line);
12890
12891	  fi = bfd_zalloc (abfd, amt);
12892	  if (fi == NULL)
12893	    {
12894	      msec->flags = origflags;
12895	      return FALSE;
12896	    }
12897
12898	  if (! _bfd_mips_elf_read_ecoff_info (abfd, msec, &fi->d))
12899	    {
12900	      msec->flags = origflags;
12901	      return FALSE;
12902	    }
12903
12904	  /* Swap in the FDR information.  */
12905	  amt = fi->d.symbolic_header.ifdMax * sizeof (struct fdr);
12906	  fi->d.fdr = bfd_alloc (abfd, amt);
12907	  if (fi->d.fdr == NULL)
12908	    {
12909	      msec->flags = origflags;
12910	      return FALSE;
12911	    }
12912	  external_fdr_size = swap->external_fdr_size;
12913	  fdr_ptr = fi->d.fdr;
12914	  fraw_src = (char *) fi->d.external_fdr;
12915	  fraw_end = (fraw_src
12916		      + fi->d.symbolic_header.ifdMax * external_fdr_size);
12917	  for (; fraw_src < fraw_end; fraw_src += external_fdr_size, fdr_ptr++)
12918	    (*swap->swap_fdr_in) (abfd, fraw_src, fdr_ptr);
12919
12920	  mips_elf_tdata (abfd)->find_line_info = fi;
12921
12922	  /* Note that we don't bother to ever free this information.
12923             find_nearest_line is either called all the time, as in
12924             objdump -l, so the information should be saved, or it is
12925             rarely called, as in ld error messages, so the memory
12926             wasted is unimportant.  Still, it would probably be a
12927             good idea for free_cached_info to throw it away.  */
12928	}
12929
12930      if (_bfd_ecoff_locate_line (abfd, section, offset, &fi->d, swap,
12931				  &fi->i, filename_ptr, functionname_ptr,
12932				  line_ptr))
12933	{
12934	  msec->flags = origflags;
12935	  return TRUE;
12936	}
12937
12938      msec->flags = origflags;
12939    }
12940
12941  /* Fall back on the generic ELF find_nearest_line routine.  */
12942
12943  return _bfd_elf_find_nearest_line (abfd, symbols, section, offset,
12944				     filename_ptr, functionname_ptr,
12945				     line_ptr, discriminator_ptr);
12946}
12947
12948bfd_boolean
12949_bfd_mips_elf_find_inliner_info (bfd *abfd,
12950				 const char **filename_ptr,
12951				 const char **functionname_ptr,
12952				 unsigned int *line_ptr)
12953{
12954  bfd_boolean found;
12955  found = _bfd_dwarf2_find_inliner_info (abfd, filename_ptr,
12956					 functionname_ptr, line_ptr,
12957					 & elf_tdata (abfd)->dwarf2_find_line_info);
12958  return found;
12959}
12960
12961
12962/* When are writing out the .options or .MIPS.options section,
12963   remember the bytes we are writing out, so that we can install the
12964   GP value in the section_processing routine.  */
12965
12966bfd_boolean
12967_bfd_mips_elf_set_section_contents (bfd *abfd, sec_ptr section,
12968				    const void *location,
12969				    file_ptr offset, bfd_size_type count)
12970{
12971  if (MIPS_ELF_OPTIONS_SECTION_NAME_P (section->name))
12972    {
12973      bfd_byte *c;
12974
12975      if (elf_section_data (section) == NULL)
12976	{
12977	  bfd_size_type amt = sizeof (struct bfd_elf_section_data);
12978	  section->used_by_bfd = bfd_zalloc (abfd, amt);
12979	  if (elf_section_data (section) == NULL)
12980	    return FALSE;
12981	}
12982      c = mips_elf_section_data (section)->u.tdata;
12983      if (c == NULL)
12984	{
12985	  c = bfd_zalloc (abfd, section->size);
12986	  if (c == NULL)
12987	    return FALSE;
12988	  mips_elf_section_data (section)->u.tdata = c;
12989	}
12990
12991      memcpy (c + offset, location, count);
12992    }
12993
12994  return _bfd_elf_set_section_contents (abfd, section, location, offset,
12995					count);
12996}
12997
12998/* This is almost identical to bfd_generic_get_... except that some
12999   MIPS relocations need to be handled specially.  Sigh.  */
13000
13001bfd_byte *
13002_bfd_elf_mips_get_relocated_section_contents
13003  (bfd *abfd,
13004   struct bfd_link_info *link_info,
13005   struct bfd_link_order *link_order,
13006   bfd_byte *data,
13007   bfd_boolean relocatable,
13008   asymbol **symbols)
13009{
13010  /* Get enough memory to hold the stuff */
13011  bfd *input_bfd = link_order->u.indirect.section->owner;
13012  asection *input_section = link_order->u.indirect.section;
13013  bfd_size_type sz;
13014
13015  long reloc_size = bfd_get_reloc_upper_bound (input_bfd, input_section);
13016  arelent **reloc_vector = NULL;
13017  long reloc_count;
13018
13019  if (reloc_size < 0)
13020    goto error_return;
13021
13022  reloc_vector = bfd_malloc (reloc_size);
13023  if (reloc_vector == NULL && reloc_size != 0)
13024    goto error_return;
13025
13026  /* read in the section */
13027  sz = input_section->rawsize ? input_section->rawsize : input_section->size;
13028  if (!bfd_get_section_contents (input_bfd, input_section, data, 0, sz))
13029    goto error_return;
13030
13031  reloc_count = bfd_canonicalize_reloc (input_bfd,
13032					input_section,
13033					reloc_vector,
13034					symbols);
13035  if (reloc_count < 0)
13036    goto error_return;
13037
13038  if (reloc_count > 0)
13039    {
13040      arelent **parent;
13041      /* for mips */
13042      int gp_found;
13043      bfd_vma gp = 0x12345678;	/* initialize just to shut gcc up */
13044
13045      {
13046	struct bfd_hash_entry *h;
13047	struct bfd_link_hash_entry *lh;
13048	/* Skip all this stuff if we aren't mixing formats.  */
13049	if (abfd && input_bfd
13050	    && abfd->xvec == input_bfd->xvec)
13051	  lh = 0;
13052	else
13053	  {
13054	    h = bfd_hash_lookup (&link_info->hash->table, "_gp", FALSE, FALSE);
13055	    lh = (struct bfd_link_hash_entry *) h;
13056	  }
13057      lookup:
13058	if (lh)
13059	  {
13060	    switch (lh->type)
13061	      {
13062	      case bfd_link_hash_undefined:
13063	      case bfd_link_hash_undefweak:
13064	      case bfd_link_hash_common:
13065		gp_found = 0;
13066		break;
13067	      case bfd_link_hash_defined:
13068	      case bfd_link_hash_defweak:
13069		gp_found = 1;
13070		gp = lh->u.def.value;
13071		break;
13072	      case bfd_link_hash_indirect:
13073	      case bfd_link_hash_warning:
13074		lh = lh->u.i.link;
13075		/* @@FIXME  ignoring warning for now */
13076		goto lookup;
13077	      case bfd_link_hash_new:
13078	      default:
13079		abort ();
13080	      }
13081	  }
13082	else
13083	  gp_found = 0;
13084      }
13085      /* end mips */
13086      for (parent = reloc_vector; *parent != NULL; parent++)
13087	{
13088	  char *error_message = NULL;
13089	  bfd_reloc_status_type r;
13090
13091	  /* Specific to MIPS: Deal with relocation types that require
13092	     knowing the gp of the output bfd.  */
13093	  asymbol *sym = *(*parent)->sym_ptr_ptr;
13094
13095	  /* If we've managed to find the gp and have a special
13096	     function for the relocation then go ahead, else default
13097	     to the generic handling.  */
13098	  if (gp_found
13099	      && (*parent)->howto->special_function
13100	      == _bfd_mips_elf32_gprel16_reloc)
13101	    r = _bfd_mips_elf_gprel16_with_gp (input_bfd, sym, *parent,
13102					       input_section, relocatable,
13103					       data, gp);
13104	  else
13105	    r = bfd_perform_relocation (input_bfd, *parent, data,
13106					input_section,
13107					relocatable ? abfd : NULL,
13108					&error_message);
13109
13110	  if (relocatable)
13111	    {
13112	      asection *os = input_section->output_section;
13113
13114	      /* A partial link, so keep the relocs */
13115	      os->orelocation[os->reloc_count] = *parent;
13116	      os->reloc_count++;
13117	    }
13118
13119	  if (r != bfd_reloc_ok)
13120	    {
13121	      switch (r)
13122		{
13123		case bfd_reloc_undefined:
13124		  (*link_info->callbacks->undefined_symbol)
13125		    (link_info, bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
13126		     input_bfd, input_section, (*parent)->address, TRUE);
13127		  break;
13128		case bfd_reloc_dangerous:
13129		  BFD_ASSERT (error_message != NULL);
13130		  (*link_info->callbacks->reloc_dangerous)
13131		    (link_info, error_message,
13132		     input_bfd, input_section, (*parent)->address);
13133		  break;
13134		case bfd_reloc_overflow:
13135		  (*link_info->callbacks->reloc_overflow)
13136		    (link_info, NULL,
13137		     bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
13138		     (*parent)->howto->name, (*parent)->addend,
13139		     input_bfd, input_section, (*parent)->address);
13140		  break;
13141		case bfd_reloc_outofrange:
13142		default:
13143		  abort ();
13144		  break;
13145		}
13146
13147	    }
13148	}
13149    }
13150  if (reloc_vector != NULL)
13151    free (reloc_vector);
13152  return data;
13153
13154error_return:
13155  if (reloc_vector != NULL)
13156    free (reloc_vector);
13157  return NULL;
13158}
13159
13160static bfd_boolean
13161mips_elf_relax_delete_bytes (bfd *abfd,
13162			     asection *sec, bfd_vma addr, int count)
13163{
13164  Elf_Internal_Shdr *symtab_hdr;
13165  unsigned int sec_shndx;
13166  bfd_byte *contents;
13167  Elf_Internal_Rela *irel, *irelend;
13168  Elf_Internal_Sym *isym;
13169  Elf_Internal_Sym *isymend;
13170  struct elf_link_hash_entry **sym_hashes;
13171  struct elf_link_hash_entry **end_hashes;
13172  struct elf_link_hash_entry **start_hashes;
13173  unsigned int symcount;
13174
13175  sec_shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
13176  contents = elf_section_data (sec)->this_hdr.contents;
13177
13178  irel = elf_section_data (sec)->relocs;
13179  irelend = irel + sec->reloc_count;
13180
13181  /* Actually delete the bytes.  */
13182  memmove (contents + addr, contents + addr + count,
13183	   (size_t) (sec->size - addr - count));
13184  sec->size -= count;
13185
13186  /* Adjust all the relocs.  */
13187  for (irel = elf_section_data (sec)->relocs; irel < irelend; irel++)
13188    {
13189      /* Get the new reloc address.  */
13190      if (irel->r_offset > addr)
13191	irel->r_offset -= count;
13192    }
13193
13194  BFD_ASSERT (addr % 2 == 0);
13195  BFD_ASSERT (count % 2 == 0);
13196
13197  /* Adjust the local symbols defined in this section.  */
13198  symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
13199  isym = (Elf_Internal_Sym *) symtab_hdr->contents;
13200  for (isymend = isym + symtab_hdr->sh_info; isym < isymend; isym++)
13201    if (isym->st_shndx == sec_shndx && isym->st_value > addr)
13202      isym->st_value -= count;
13203
13204  /* Now adjust the global symbols defined in this section.  */
13205  symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym)
13206	      - symtab_hdr->sh_info);
13207  sym_hashes = start_hashes = elf_sym_hashes (abfd);
13208  end_hashes = sym_hashes + symcount;
13209
13210  for (; sym_hashes < end_hashes; sym_hashes++)
13211    {
13212      struct elf_link_hash_entry *sym_hash = *sym_hashes;
13213
13214      if ((sym_hash->root.type == bfd_link_hash_defined
13215	   || sym_hash->root.type == bfd_link_hash_defweak)
13216	  && sym_hash->root.u.def.section == sec)
13217	{
13218	  bfd_vma value = sym_hash->root.u.def.value;
13219
13220	  if (ELF_ST_IS_MICROMIPS (sym_hash->other))
13221	    value &= MINUS_TWO;
13222	  if (value > addr)
13223	    sym_hash->root.u.def.value -= count;
13224	}
13225    }
13226
13227  return TRUE;
13228}
13229
13230
13231/* Opcodes needed for microMIPS relaxation as found in
13232   opcodes/micromips-opc.c.  */
13233
13234struct opcode_descriptor {
13235  unsigned long match;
13236  unsigned long mask;
13237};
13238
13239/* The $ra register aka $31.  */
13240
13241#define RA 31
13242
13243/* 32-bit instruction format register fields.  */
13244
13245#define OP32_SREG(opcode) (((opcode) >> 16) & 0x1f)
13246#define OP32_TREG(opcode) (((opcode) >> 21) & 0x1f)
13247
13248/* Check if a 5-bit register index can be abbreviated to 3 bits.  */
13249
13250#define OP16_VALID_REG(r) \
13251  ((2 <= (r) && (r) <= 7) || (16 <= (r) && (r) <= 17))
13252
13253
13254/* 32-bit and 16-bit branches.  */
13255
13256static const struct opcode_descriptor b_insns_32[] = {
13257  { /* "b",	"p",		*/ 0x40400000, 0xffff0000 }, /* bgez 0 */
13258  { /* "b",	"p",		*/ 0x94000000, 0xffff0000 }, /* beq 0, 0 */
13259  { 0, 0 }  /* End marker for find_match().  */
13260};
13261
13262static const struct opcode_descriptor bc_insn_32 =
13263  { /* "bc(1|2)(ft)", "N,p",	*/ 0x42800000, 0xfec30000 };
13264
13265static const struct opcode_descriptor bz_insn_32 =
13266  { /* "b(g|l)(e|t)z", "s,p",	*/ 0x40000000, 0xff200000 };
13267
13268static const struct opcode_descriptor bzal_insn_32 =
13269  { /* "b(ge|lt)zal", "s,p",	*/ 0x40200000, 0xffa00000 };
13270
13271static const struct opcode_descriptor beq_insn_32 =
13272  { /* "b(eq|ne)", "s,t,p",	*/ 0x94000000, 0xdc000000 };
13273
13274static const struct opcode_descriptor b_insn_16 =
13275  { /* "b",	"mD",		*/ 0xcc00,     0xfc00 };
13276
13277static const struct opcode_descriptor bz_insn_16 =
13278  { /* "b(eq|ne)z", "md,mE",	*/ 0x8c00,     0xdc00 };
13279
13280
13281/* 32-bit and 16-bit branch EQ and NE zero.  */
13282
13283/* NOTE: All opcode tables have BEQ/BNE in the same order: first the
13284   eq and second the ne.  This convention is used when replacing a
13285   32-bit BEQ/BNE with the 16-bit version.  */
13286
13287#define BZC32_REG_FIELD(r) (((r) & 0x1f) << 16)
13288
13289static const struct opcode_descriptor bz_rs_insns_32[] = {
13290  { /* "beqz",	"s,p",		*/ 0x94000000, 0xffe00000 },
13291  { /* "bnez",	"s,p",		*/ 0xb4000000, 0xffe00000 },
13292  { 0, 0 }  /* End marker for find_match().  */
13293};
13294
13295static const struct opcode_descriptor bz_rt_insns_32[] = {
13296  { /* "beqz",	"t,p",		*/ 0x94000000, 0xfc01f000 },
13297  { /* "bnez",	"t,p",		*/ 0xb4000000, 0xfc01f000 },
13298  { 0, 0 }  /* End marker for find_match().  */
13299};
13300
13301static const struct opcode_descriptor bzc_insns_32[] = {
13302  { /* "beqzc",	"s,p",		*/ 0x40e00000, 0xffe00000 },
13303  { /* "bnezc",	"s,p",		*/ 0x40a00000, 0xffe00000 },
13304  { 0, 0 }  /* End marker for find_match().  */
13305};
13306
13307static const struct opcode_descriptor bz_insns_16[] = {
13308  { /* "beqz",	"md,mE",	*/ 0x8c00,     0xfc00 },
13309  { /* "bnez",	"md,mE",	*/ 0xac00,     0xfc00 },
13310  { 0, 0 }  /* End marker for find_match().  */
13311};
13312
13313/* Switch between a 5-bit register index and its 3-bit shorthand.  */
13314
13315#define BZ16_REG(opcode) ((((((opcode) >> 7) & 7) + 0x1e) & 0xf) + 2)
13316#define BZ16_REG_FIELD(r) (((r) & 7) << 7)
13317
13318
13319/* 32-bit instructions with a delay slot.  */
13320
13321static const struct opcode_descriptor jal_insn_32_bd16 =
13322  { /* "jals",	"a",		*/ 0x74000000, 0xfc000000 };
13323
13324static const struct opcode_descriptor jal_insn_32_bd32 =
13325  { /* "jal",	"a",		*/ 0xf4000000, 0xfc000000 };
13326
13327static const struct opcode_descriptor jal_x_insn_32_bd32 =
13328  { /* "jal[x]", "a",		*/ 0xf0000000, 0xf8000000 };
13329
13330static const struct opcode_descriptor j_insn_32 =
13331  { /* "j",	"a",		*/ 0xd4000000, 0xfc000000 };
13332
13333static const struct opcode_descriptor jalr_insn_32 =
13334  { /* "jalr[.hb]", "t,s",	*/ 0x00000f3c, 0xfc00efff };
13335
13336/* This table can be compacted, because no opcode replacement is made.  */
13337
13338static const struct opcode_descriptor ds_insns_32_bd16[] = {
13339  { /* "jals",	"a",		*/ 0x74000000, 0xfc000000 },
13340
13341  { /* "jalrs[.hb]", "t,s",	*/ 0x00004f3c, 0xfc00efff },
13342  { /* "b(ge|lt)zals", "s,p",	*/ 0x42200000, 0xffa00000 },
13343
13344  { /* "b(g|l)(e|t)z", "s,p",	*/ 0x40000000, 0xff200000 },
13345  { /* "b(eq|ne)", "s,t,p",	*/ 0x94000000, 0xdc000000 },
13346  { /* "j",	"a",		*/ 0xd4000000, 0xfc000000 },
13347  { 0, 0 }  /* End marker for find_match().  */
13348};
13349
13350/* This table can be compacted, because no opcode replacement is made.  */
13351
13352static const struct opcode_descriptor ds_insns_32_bd32[] = {
13353  { /* "jal[x]", "a",		*/ 0xf0000000, 0xf8000000 },
13354
13355  { /* "jalr[.hb]", "t,s",	*/ 0x00000f3c, 0xfc00efff },
13356  { /* "b(ge|lt)zal", "s,p",	*/ 0x40200000, 0xffa00000 },
13357  { 0, 0 }  /* End marker for find_match().  */
13358};
13359
13360
13361/* 16-bit instructions with a delay slot.  */
13362
13363static const struct opcode_descriptor jalr_insn_16_bd16 =
13364  { /* "jalrs",	"my,mj",	*/ 0x45e0,     0xffe0 };
13365
13366static const struct opcode_descriptor jalr_insn_16_bd32 =
13367  { /* "jalr",	"my,mj",	*/ 0x45c0,     0xffe0 };
13368
13369static const struct opcode_descriptor jr_insn_16 =
13370  { /* "jr",	"mj",		*/ 0x4580,     0xffe0 };
13371
13372#define JR16_REG(opcode) ((opcode) & 0x1f)
13373
13374/* This table can be compacted, because no opcode replacement is made.  */
13375
13376static const struct opcode_descriptor ds_insns_16_bd16[] = {
13377  { /* "jalrs",	"my,mj",	*/ 0x45e0,     0xffe0 },
13378
13379  { /* "b",	"mD",		*/ 0xcc00,     0xfc00 },
13380  { /* "b(eq|ne)z", "md,mE",	*/ 0x8c00,     0xdc00 },
13381  { /* "jr",	"mj",		*/ 0x4580,     0xffe0 },
13382  { 0, 0 }  /* End marker for find_match().  */
13383};
13384
13385
13386/* LUI instruction.  */
13387
13388static const struct opcode_descriptor lui_insn =
13389 { /* "lui",	"s,u",		*/ 0x41a00000, 0xffe00000 };
13390
13391
13392/* ADDIU instruction.  */
13393
13394static const struct opcode_descriptor addiu_insn =
13395  { /* "addiu",	"t,r,j",	*/ 0x30000000, 0xfc000000 };
13396
13397static const struct opcode_descriptor addiupc_insn =
13398  { /* "addiu",	"mb,$pc,mQ",	*/ 0x78000000, 0xfc000000 };
13399
13400#define ADDIUPC_REG_FIELD(r) \
13401  (((2 <= (r) && (r) <= 7) ? (r) : ((r) - 16)) << 23)
13402
13403
13404/* Relaxable instructions in a JAL delay slot: MOVE.  */
13405
13406/* The 16-bit move has rd in 9:5 and rs in 4:0.  The 32-bit moves
13407   (ADDU, OR) have rd in 15:11 and rs in 10:16.  */
13408#define MOVE32_RD(opcode) (((opcode) >> 11) & 0x1f)
13409#define MOVE32_RS(opcode) (((opcode) >> 16) & 0x1f)
13410
13411#define MOVE16_RD_FIELD(r) (((r) & 0x1f) << 5)
13412#define MOVE16_RS_FIELD(r) (((r) & 0x1f)     )
13413
13414static const struct opcode_descriptor move_insns_32[] = {
13415  { /* "move",	"d,s",		*/ 0x00000290, 0xffe007ff }, /* or   d,s,$0 */
13416  { /* "move",	"d,s",		*/ 0x00000150, 0xffe007ff }, /* addu d,s,$0 */
13417  { 0, 0 }  /* End marker for find_match().  */
13418};
13419
13420static const struct opcode_descriptor move_insn_16 =
13421  { /* "move",	"mp,mj",	*/ 0x0c00,     0xfc00 };
13422
13423
13424/* NOP instructions.  */
13425
13426static const struct opcode_descriptor nop_insn_32 =
13427  { /* "nop",	"",		*/ 0x00000000, 0xffffffff };
13428
13429static const struct opcode_descriptor nop_insn_16 =
13430  { /* "nop",	"",		*/ 0x0c00,     0xffff };
13431
13432
13433/* Instruction match support.  */
13434
13435#define MATCH(opcode, insn) ((opcode & insn.mask) == insn.match)
13436
13437static int
13438find_match (unsigned long opcode, const struct opcode_descriptor insn[])
13439{
13440  unsigned long indx;
13441
13442  for (indx = 0; insn[indx].mask != 0; indx++)
13443    if (MATCH (opcode, insn[indx]))
13444      return indx;
13445
13446  return -1;
13447}
13448
13449
13450/* Branch and delay slot decoding support.  */
13451
13452/* If PTR points to what *might* be a 16-bit branch or jump, then
13453   return the minimum length of its delay slot, otherwise return 0.
13454   Non-zero results are not definitive as we might be checking against
13455   the second half of another instruction.  */
13456
13457static int
13458check_br16_dslot (bfd *abfd, bfd_byte *ptr)
13459{
13460  unsigned long opcode;
13461  int bdsize;
13462
13463  opcode = bfd_get_16 (abfd, ptr);
13464  if (MATCH (opcode, jalr_insn_16_bd32) != 0)
13465    /* 16-bit branch/jump with a 32-bit delay slot.  */
13466    bdsize = 4;
13467  else if (MATCH (opcode, jalr_insn_16_bd16) != 0
13468	   || find_match (opcode, ds_insns_16_bd16) >= 0)
13469    /* 16-bit branch/jump with a 16-bit delay slot.  */
13470    bdsize = 2;
13471  else
13472    /* No delay slot.  */
13473    bdsize = 0;
13474
13475  return bdsize;
13476}
13477
13478/* If PTR points to what *might* be a 32-bit branch or jump, then
13479   return the minimum length of its delay slot, otherwise return 0.
13480   Non-zero results are not definitive as we might be checking against
13481   the second half of another instruction.  */
13482
13483static int
13484check_br32_dslot (bfd *abfd, bfd_byte *ptr)
13485{
13486  unsigned long opcode;
13487  int bdsize;
13488
13489  opcode = bfd_get_micromips_32 (abfd, ptr);
13490  if (find_match (opcode, ds_insns_32_bd32) >= 0)
13491    /* 32-bit branch/jump with a 32-bit delay slot.  */
13492    bdsize = 4;
13493  else if (find_match (opcode, ds_insns_32_bd16) >= 0)
13494    /* 32-bit branch/jump with a 16-bit delay slot.  */
13495    bdsize = 2;
13496  else
13497    /* No delay slot.  */
13498    bdsize = 0;
13499
13500  return bdsize;
13501}
13502
13503/* If PTR points to a 16-bit branch or jump with a 32-bit delay slot
13504   that doesn't fiddle with REG, then return TRUE, otherwise FALSE.  */
13505
13506static bfd_boolean
13507check_br16 (bfd *abfd, bfd_byte *ptr, unsigned long reg)
13508{
13509  unsigned long opcode;
13510
13511  opcode = bfd_get_16 (abfd, ptr);
13512  if (MATCH (opcode, b_insn_16)
13513						/* B16  */
13514      || (MATCH (opcode, jr_insn_16) && reg != JR16_REG (opcode))
13515						/* JR16  */
13516      || (MATCH (opcode, bz_insn_16) && reg != BZ16_REG (opcode))
13517						/* BEQZ16, BNEZ16  */
13518      || (MATCH (opcode, jalr_insn_16_bd32)
13519						/* JALR16  */
13520	  && reg != JR16_REG (opcode) && reg != RA))
13521    return TRUE;
13522
13523  return FALSE;
13524}
13525
13526/* If PTR points to a 32-bit branch or jump that doesn't fiddle with REG,
13527   then return TRUE, otherwise FALSE.  */
13528
13529static bfd_boolean
13530check_br32 (bfd *abfd, bfd_byte *ptr, unsigned long reg)
13531{
13532  unsigned long opcode;
13533
13534  opcode = bfd_get_micromips_32 (abfd, ptr);
13535  if (MATCH (opcode, j_insn_32)
13536						/* J  */
13537      || MATCH (opcode, bc_insn_32)
13538						/* BC1F, BC1T, BC2F, BC2T  */
13539      || (MATCH (opcode, jal_x_insn_32_bd32) && reg != RA)
13540						/* JAL, JALX  */
13541      || (MATCH (opcode, bz_insn_32) && reg != OP32_SREG (opcode))
13542						/* BGEZ, BGTZ, BLEZ, BLTZ  */
13543      || (MATCH (opcode, bzal_insn_32)
13544						/* BGEZAL, BLTZAL  */
13545	  && reg != OP32_SREG (opcode) && reg != RA)
13546      || ((MATCH (opcode, jalr_insn_32) || MATCH (opcode, beq_insn_32))
13547						/* JALR, JALR.HB, BEQ, BNE  */
13548	  && reg != OP32_SREG (opcode) && reg != OP32_TREG (opcode)))
13549    return TRUE;
13550
13551  return FALSE;
13552}
13553
13554/* If the instruction encoding at PTR and relocations [INTERNAL_RELOCS,
13555   IRELEND) at OFFSET indicate that there must be a compact branch there,
13556   then return TRUE, otherwise FALSE.  */
13557
13558static bfd_boolean
13559check_relocated_bzc (bfd *abfd, const bfd_byte *ptr, bfd_vma offset,
13560		     const Elf_Internal_Rela *internal_relocs,
13561		     const Elf_Internal_Rela *irelend)
13562{
13563  const Elf_Internal_Rela *irel;
13564  unsigned long opcode;
13565
13566  opcode = bfd_get_micromips_32 (abfd, ptr);
13567  if (find_match (opcode, bzc_insns_32) < 0)
13568    return FALSE;
13569
13570  for (irel = internal_relocs; irel < irelend; irel++)
13571    if (irel->r_offset == offset
13572	&& ELF32_R_TYPE (irel->r_info) == R_MICROMIPS_PC16_S1)
13573      return TRUE;
13574
13575  return FALSE;
13576}
13577
13578/* Bitsize checking.  */
13579#define IS_BITSIZE(val, N)						\
13580  (((((val) & ((1ULL << (N)) - 1)) ^ (1ULL << ((N) - 1)))		\
13581    - (1ULL << ((N) - 1))) == (val))
13582
13583
13584bfd_boolean
13585_bfd_mips_elf_relax_section (bfd *abfd, asection *sec,
13586			     struct bfd_link_info *link_info,
13587			     bfd_boolean *again)
13588{
13589  bfd_boolean insn32 = mips_elf_hash_table (link_info)->insn32;
13590  Elf_Internal_Shdr *symtab_hdr;
13591  Elf_Internal_Rela *internal_relocs;
13592  Elf_Internal_Rela *irel, *irelend;
13593  bfd_byte *contents = NULL;
13594  Elf_Internal_Sym *isymbuf = NULL;
13595
13596  /* Assume nothing changes.  */
13597  *again = FALSE;
13598
13599  /* We don't have to do anything for a relocatable link, if
13600     this section does not have relocs, or if this is not a
13601     code section.  */
13602
13603  if (bfd_link_relocatable (link_info)
13604      || (sec->flags & SEC_RELOC) == 0
13605      || sec->reloc_count == 0
13606      || (sec->flags & SEC_CODE) == 0)
13607    return TRUE;
13608
13609  symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
13610
13611  /* Get a copy of the native relocations.  */
13612  internal_relocs = (_bfd_elf_link_read_relocs
13613		     (abfd, sec, NULL, (Elf_Internal_Rela *) NULL,
13614		      link_info->keep_memory));
13615  if (internal_relocs == NULL)
13616    goto error_return;
13617
13618  /* Walk through them looking for relaxing opportunities.  */
13619  irelend = internal_relocs + sec->reloc_count;
13620  for (irel = internal_relocs; irel < irelend; irel++)
13621    {
13622      unsigned long r_symndx = ELF32_R_SYM (irel->r_info);
13623      unsigned int r_type = ELF32_R_TYPE (irel->r_info);
13624      bfd_boolean target_is_micromips_code_p;
13625      unsigned long opcode;
13626      bfd_vma symval;
13627      bfd_vma pcrval;
13628      bfd_byte *ptr;
13629      int fndopc;
13630
13631      /* The number of bytes to delete for relaxation and from where
13632         to delete these bytes starting at irel->r_offset.  */
13633      int delcnt = 0;
13634      int deloff = 0;
13635
13636      /* If this isn't something that can be relaxed, then ignore
13637         this reloc.  */
13638      if (r_type != R_MICROMIPS_HI16
13639	  && r_type != R_MICROMIPS_PC16_S1
13640	  && r_type != R_MICROMIPS_26_S1)
13641	continue;
13642
13643      /* Get the section contents if we haven't done so already.  */
13644      if (contents == NULL)
13645	{
13646	  /* Get cached copy if it exists.  */
13647	  if (elf_section_data (sec)->this_hdr.contents != NULL)
13648	    contents = elf_section_data (sec)->this_hdr.contents;
13649	  /* Go get them off disk.  */
13650	  else if (!bfd_malloc_and_get_section (abfd, sec, &contents))
13651	    goto error_return;
13652	}
13653      ptr = contents + irel->r_offset;
13654
13655      /* Read this BFD's local symbols if we haven't done so already.  */
13656      if (isymbuf == NULL && symtab_hdr->sh_info != 0)
13657	{
13658	  isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
13659	  if (isymbuf == NULL)
13660	    isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
13661					    symtab_hdr->sh_info, 0,
13662					    NULL, NULL, NULL);
13663	  if (isymbuf == NULL)
13664	    goto error_return;
13665	}
13666
13667      /* Get the value of the symbol referred to by the reloc.  */
13668      if (r_symndx < symtab_hdr->sh_info)
13669	{
13670	  /* A local symbol.  */
13671	  Elf_Internal_Sym *isym;
13672	  asection *sym_sec;
13673
13674	  isym = isymbuf + r_symndx;
13675	  if (isym->st_shndx == SHN_UNDEF)
13676	    sym_sec = bfd_und_section_ptr;
13677	  else if (isym->st_shndx == SHN_ABS)
13678	    sym_sec = bfd_abs_section_ptr;
13679	  else if (isym->st_shndx == SHN_COMMON)
13680	    sym_sec = bfd_com_section_ptr;
13681	  else
13682	    sym_sec = bfd_section_from_elf_index (abfd, isym->st_shndx);
13683	  symval = (isym->st_value
13684		    + sym_sec->output_section->vma
13685		    + sym_sec->output_offset);
13686	  target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (isym->st_other);
13687	}
13688      else
13689	{
13690	  unsigned long indx;
13691	  struct elf_link_hash_entry *h;
13692
13693	  /* An external symbol.  */
13694	  indx = r_symndx - symtab_hdr->sh_info;
13695	  h = elf_sym_hashes (abfd)[indx];
13696	  BFD_ASSERT (h != NULL);
13697
13698	  if (h->root.type != bfd_link_hash_defined
13699	      && h->root.type != bfd_link_hash_defweak)
13700	    /* This appears to be a reference to an undefined
13701	       symbol.  Just ignore it -- it will be caught by the
13702	       regular reloc processing.  */
13703	    continue;
13704
13705	  symval = (h->root.u.def.value
13706		    + h->root.u.def.section->output_section->vma
13707		    + h->root.u.def.section->output_offset);
13708	  target_is_micromips_code_p = (!h->needs_plt
13709					&& ELF_ST_IS_MICROMIPS (h->other));
13710	}
13711
13712
13713      /* For simplicity of coding, we are going to modify the
13714         section contents, the section relocs, and the BFD symbol
13715         table.  We must tell the rest of the code not to free up this
13716         information.  It would be possible to instead create a table
13717         of changes which have to be made, as is done in coff-mips.c;
13718         that would be more work, but would require less memory when
13719         the linker is run.  */
13720
13721      /* Only 32-bit instructions relaxed.  */
13722      if (irel->r_offset + 4 > sec->size)
13723	continue;
13724
13725      opcode = bfd_get_micromips_32 (abfd, ptr);
13726
13727      /* This is the pc-relative distance from the instruction the
13728         relocation is applied to, to the symbol referred.  */
13729      pcrval = (symval
13730		- (sec->output_section->vma + sec->output_offset)
13731		- irel->r_offset);
13732
13733      /* R_MICROMIPS_HI16 / LUI relaxation to nil, performing relaxation
13734         of corresponding R_MICROMIPS_LO16 to R_MICROMIPS_HI0_LO16 or
13735         R_MICROMIPS_PC23_S2.  The R_MICROMIPS_PC23_S2 condition is
13736
13737           (symval % 4 == 0 && IS_BITSIZE (pcrval, 25))
13738
13739         where pcrval has first to be adjusted to apply against the LO16
13740         location (we make the adjustment later on, when we have figured
13741         out the offset).  */
13742      if (r_type == R_MICROMIPS_HI16 && MATCH (opcode, lui_insn))
13743	{
13744	  bfd_boolean bzc = FALSE;
13745	  unsigned long nextopc;
13746	  unsigned long reg;
13747	  bfd_vma offset;
13748
13749	  /* Give up if the previous reloc was a HI16 against this symbol
13750	     too.  */
13751	  if (irel > internal_relocs
13752	      && ELF32_R_TYPE (irel[-1].r_info) == R_MICROMIPS_HI16
13753	      && ELF32_R_SYM (irel[-1].r_info) == r_symndx)
13754	    continue;
13755
13756	  /* Or if the next reloc is not a LO16 against this symbol.  */
13757	  if (irel + 1 >= irelend
13758	      || ELF32_R_TYPE (irel[1].r_info) != R_MICROMIPS_LO16
13759	      || ELF32_R_SYM (irel[1].r_info) != r_symndx)
13760	    continue;
13761
13762	  /* Or if the second next reloc is a LO16 against this symbol too.  */
13763	  if (irel + 2 >= irelend
13764	      && ELF32_R_TYPE (irel[2].r_info) == R_MICROMIPS_LO16
13765	      && ELF32_R_SYM (irel[2].r_info) == r_symndx)
13766	    continue;
13767
13768	  /* See if the LUI instruction *might* be in a branch delay slot.
13769	     We check whether what looks like a 16-bit branch or jump is
13770	     actually an immediate argument to a compact branch, and let
13771	     it through if so.  */
13772	  if (irel->r_offset >= 2
13773	      && check_br16_dslot (abfd, ptr - 2)
13774	      && !(irel->r_offset >= 4
13775		   && (bzc = check_relocated_bzc (abfd,
13776						  ptr - 4, irel->r_offset - 4,
13777						  internal_relocs, irelend))))
13778	    continue;
13779	  if (irel->r_offset >= 4
13780	      && !bzc
13781	      && check_br32_dslot (abfd, ptr - 4))
13782	    continue;
13783
13784	  reg = OP32_SREG (opcode);
13785
13786	  /* We only relax adjacent instructions or ones separated with
13787	     a branch or jump that has a delay slot.  The branch or jump
13788	     must not fiddle with the register used to hold the address.
13789	     Subtract 4 for the LUI itself.  */
13790	  offset = irel[1].r_offset - irel[0].r_offset;
13791	  switch (offset - 4)
13792	    {
13793	    case 0:
13794	      break;
13795	    case 2:
13796	      if (check_br16 (abfd, ptr + 4, reg))
13797		break;
13798	      continue;
13799	    case 4:
13800	      if (check_br32 (abfd, ptr + 4, reg))
13801		break;
13802	      continue;
13803	    default:
13804	      continue;
13805	    }
13806
13807	  nextopc = bfd_get_micromips_32 (abfd, contents + irel[1].r_offset);
13808
13809	  /* Give up unless the same register is used with both
13810	     relocations.  */
13811	  if (OP32_SREG (nextopc) != reg)
13812	    continue;
13813
13814	  /* Now adjust pcrval, subtracting the offset to the LO16 reloc
13815	     and rounding up to take masking of the two LSBs into account.  */
13816	  pcrval = ((pcrval - offset + 3) | 3) ^ 3;
13817
13818	  /* R_MICROMIPS_LO16 relaxation to R_MICROMIPS_HI0_LO16.  */
13819	  if (IS_BITSIZE (symval, 16))
13820	    {
13821	      /* Fix the relocation's type.  */
13822	      irel[1].r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_HI0_LO16);
13823
13824	      /* Instructions using R_MICROMIPS_LO16 have the base or
13825	         source register in bits 20:16.  This register becomes $0
13826	         (zero) as the result of the R_MICROMIPS_HI16 being 0.  */
13827	      nextopc &= ~0x001f0000;
13828	      bfd_put_16 (abfd, (nextopc >> 16) & 0xffff,
13829			  contents + irel[1].r_offset);
13830	    }
13831
13832	  /* R_MICROMIPS_LO16 / ADDIU relaxation to R_MICROMIPS_PC23_S2.
13833	     We add 4 to take LUI deletion into account while checking
13834	     the PC-relative distance.  */
13835	  else if (symval % 4 == 0
13836		   && IS_BITSIZE (pcrval + 4, 25)
13837		   && MATCH (nextopc, addiu_insn)
13838		   && OP32_TREG (nextopc) == OP32_SREG (nextopc)
13839		   && OP16_VALID_REG (OP32_TREG (nextopc)))
13840	    {
13841	      /* Fix the relocation's type.  */
13842	      irel[1].r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC23_S2);
13843
13844	      /* Replace ADDIU with the ADDIUPC version.  */
13845	      nextopc = (addiupc_insn.match
13846			 | ADDIUPC_REG_FIELD (OP32_TREG (nextopc)));
13847
13848	      bfd_put_micromips_32 (abfd, nextopc,
13849				    contents + irel[1].r_offset);
13850	    }
13851
13852	  /* Can't do anything, give up, sigh...  */
13853	  else
13854	    continue;
13855
13856	  /* Fix the relocation's type.  */
13857	  irel->r_info = ELF32_R_INFO (r_symndx, R_MIPS_NONE);
13858
13859	  /* Delete the LUI instruction: 4 bytes at irel->r_offset.  */
13860	  delcnt = 4;
13861	  deloff = 0;
13862	}
13863
13864      /* Compact branch relaxation -- due to the multitude of macros
13865         employed by the compiler/assembler, compact branches are not
13866         always generated.  Obviously, this can/will be fixed elsewhere,
13867         but there is no drawback in double checking it here.  */
13868      else if (r_type == R_MICROMIPS_PC16_S1
13869	       && irel->r_offset + 5 < sec->size
13870	       && ((fndopc = find_match (opcode, bz_rs_insns_32)) >= 0
13871		   || (fndopc = find_match (opcode, bz_rt_insns_32)) >= 0)
13872	       && ((!insn32
13873		    && (delcnt = MATCH (bfd_get_16 (abfd, ptr + 4),
13874					nop_insn_16) ? 2 : 0))
13875		   || (irel->r_offset + 7 < sec->size
13876		       && (delcnt = MATCH (bfd_get_micromips_32 (abfd,
13877								 ptr + 4),
13878					   nop_insn_32) ? 4 : 0))))
13879	{
13880	  unsigned long reg;
13881
13882	  reg = OP32_SREG (opcode) ? OP32_SREG (opcode) : OP32_TREG (opcode);
13883
13884	  /* Replace BEQZ/BNEZ with the compact version.  */
13885	  opcode = (bzc_insns_32[fndopc].match
13886		    | BZC32_REG_FIELD (reg)
13887		    | (opcode & 0xffff));		/* Addend value.  */
13888
13889	  bfd_put_micromips_32 (abfd, opcode, ptr);
13890
13891	  /* Delete the delay slot NOP: two or four bytes from
13892	     irel->offset + 4; delcnt has already been set above.  */
13893	  deloff = 4;
13894	}
13895
13896      /* R_MICROMIPS_PC16_S1 relaxation to R_MICROMIPS_PC10_S1.  We need
13897         to check the distance from the next instruction, so subtract 2.  */
13898      else if (!insn32
13899	       && r_type == R_MICROMIPS_PC16_S1
13900	       && IS_BITSIZE (pcrval - 2, 11)
13901	       && find_match (opcode, b_insns_32) >= 0)
13902	{
13903	  /* Fix the relocation's type.  */
13904	  irel->r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC10_S1);
13905
13906	  /* Replace the 32-bit opcode with a 16-bit opcode.  */
13907	  bfd_put_16 (abfd,
13908		      (b_insn_16.match
13909		       | (opcode & 0x3ff)),		/* Addend value.  */
13910		      ptr);
13911
13912	  /* Delete 2 bytes from irel->r_offset + 2.  */
13913	  delcnt = 2;
13914	  deloff = 2;
13915	}
13916
13917      /* R_MICROMIPS_PC16_S1 relaxation to R_MICROMIPS_PC7_S1.  We need
13918         to check the distance from the next instruction, so subtract 2.  */
13919      else if (!insn32
13920	       && r_type == R_MICROMIPS_PC16_S1
13921	       && IS_BITSIZE (pcrval - 2, 8)
13922	       && (((fndopc = find_match (opcode, bz_rs_insns_32)) >= 0
13923		    && OP16_VALID_REG (OP32_SREG (opcode)))
13924		   || ((fndopc = find_match (opcode, bz_rt_insns_32)) >= 0
13925		       && OP16_VALID_REG (OP32_TREG (opcode)))))
13926	{
13927	  unsigned long reg;
13928
13929	  reg = OP32_SREG (opcode) ? OP32_SREG (opcode) : OP32_TREG (opcode);
13930
13931	  /* Fix the relocation's type.  */
13932	  irel->r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC7_S1);
13933
13934	  /* Replace the 32-bit opcode with a 16-bit opcode.  */
13935	  bfd_put_16 (abfd,
13936		      (bz_insns_16[fndopc].match
13937		       | BZ16_REG_FIELD (reg)
13938		       | (opcode & 0x7f)),		/* Addend value.  */
13939		      ptr);
13940
13941	  /* Delete 2 bytes from irel->r_offset + 2.  */
13942	  delcnt = 2;
13943	  deloff = 2;
13944	}
13945
13946      /* R_MICROMIPS_26_S1 -- JAL to JALS relaxation for microMIPS targets.  */
13947      else if (!insn32
13948	       && r_type == R_MICROMIPS_26_S1
13949	       && target_is_micromips_code_p
13950	       && irel->r_offset + 7 < sec->size
13951	       && MATCH (opcode, jal_insn_32_bd32))
13952	{
13953	  unsigned long n32opc;
13954	  bfd_boolean relaxed = FALSE;
13955
13956	  n32opc = bfd_get_micromips_32 (abfd, ptr + 4);
13957
13958	  if (MATCH (n32opc, nop_insn_32))
13959	    {
13960	      /* Replace delay slot 32-bit NOP with a 16-bit NOP.  */
13961	      bfd_put_16 (abfd, nop_insn_16.match, ptr + 4);
13962
13963	      relaxed = TRUE;
13964	    }
13965	  else if (find_match (n32opc, move_insns_32) >= 0)
13966	    {
13967	      /* Replace delay slot 32-bit MOVE with 16-bit MOVE.  */
13968	      bfd_put_16 (abfd,
13969			  (move_insn_16.match
13970			   | MOVE16_RD_FIELD (MOVE32_RD (n32opc))
13971			   | MOVE16_RS_FIELD (MOVE32_RS (n32opc))),
13972			  ptr + 4);
13973
13974	      relaxed = TRUE;
13975	    }
13976	  /* Other 32-bit instructions relaxable to 16-bit
13977	     instructions will be handled here later.  */
13978
13979	  if (relaxed)
13980	    {
13981	      /* JAL with 32-bit delay slot that is changed to a JALS
13982	         with 16-bit delay slot.  */
13983	      bfd_put_micromips_32 (abfd, jal_insn_32_bd16.match, ptr);
13984
13985	      /* Delete 2 bytes from irel->r_offset + 6.  */
13986	      delcnt = 2;
13987	      deloff = 6;
13988	    }
13989	}
13990
13991      if (delcnt != 0)
13992	{
13993	  /* Note that we've changed the relocs, section contents, etc.  */
13994	  elf_section_data (sec)->relocs = internal_relocs;
13995	  elf_section_data (sec)->this_hdr.contents = contents;
13996	  symtab_hdr->contents = (unsigned char *) isymbuf;
13997
13998	  /* Delete bytes depending on the delcnt and deloff.  */
13999	  if (!mips_elf_relax_delete_bytes (abfd, sec,
14000					    irel->r_offset + deloff, delcnt))
14001	    goto error_return;
14002
14003	  /* That will change things, so we should relax again.
14004	     Note that this is not required, and it may be slow.  */
14005	  *again = TRUE;
14006	}
14007    }
14008
14009  if (isymbuf != NULL
14010      && symtab_hdr->contents != (unsigned char *) isymbuf)
14011    {
14012      if (! link_info->keep_memory)
14013	free (isymbuf);
14014      else
14015	{
14016	  /* Cache the symbols for elf_link_input_bfd.  */
14017	  symtab_hdr->contents = (unsigned char *) isymbuf;
14018	}
14019    }
14020
14021  if (contents != NULL
14022      && elf_section_data (sec)->this_hdr.contents != contents)
14023    {
14024      if (! link_info->keep_memory)
14025	free (contents);
14026      else
14027	{
14028	  /* Cache the section contents for elf_link_input_bfd.  */
14029	  elf_section_data (sec)->this_hdr.contents = contents;
14030	}
14031    }
14032
14033  if (internal_relocs != NULL
14034      && elf_section_data (sec)->relocs != internal_relocs)
14035    free (internal_relocs);
14036
14037  return TRUE;
14038
14039 error_return:
14040  if (isymbuf != NULL
14041      && symtab_hdr->contents != (unsigned char *) isymbuf)
14042    free (isymbuf);
14043  if (contents != NULL
14044      && elf_section_data (sec)->this_hdr.contents != contents)
14045    free (contents);
14046  if (internal_relocs != NULL
14047      && elf_section_data (sec)->relocs != internal_relocs)
14048    free (internal_relocs);
14049
14050  return FALSE;
14051}
14052
14053/* Create a MIPS ELF linker hash table.  */
14054
14055struct bfd_link_hash_table *
14056_bfd_mips_elf_link_hash_table_create (bfd *abfd)
14057{
14058  struct mips_elf_link_hash_table *ret;
14059  bfd_size_type amt = sizeof (struct mips_elf_link_hash_table);
14060
14061  ret = bfd_zmalloc (amt);
14062  if (ret == NULL)
14063    return NULL;
14064
14065  if (!_bfd_elf_link_hash_table_init (&ret->root, abfd,
14066				      mips_elf_link_hash_newfunc,
14067				      sizeof (struct mips_elf_link_hash_entry),
14068				      MIPS_ELF_DATA))
14069    {
14070      free (ret);
14071      return NULL;
14072    }
14073  ret->root.init_plt_refcount.plist = NULL;
14074  ret->root.init_plt_offset.plist = NULL;
14075
14076  return &ret->root.root;
14077}
14078
14079/* Likewise, but indicate that the target is VxWorks.  */
14080
14081struct bfd_link_hash_table *
14082_bfd_mips_vxworks_link_hash_table_create (bfd *abfd)
14083{
14084  struct bfd_link_hash_table *ret;
14085
14086  ret = _bfd_mips_elf_link_hash_table_create (abfd);
14087  if (ret)
14088    {
14089      struct mips_elf_link_hash_table *htab;
14090
14091      htab = (struct mips_elf_link_hash_table *) ret;
14092      htab->use_plts_and_copy_relocs = TRUE;
14093      htab->is_vxworks = TRUE;
14094    }
14095  return ret;
14096}
14097
14098/* A function that the linker calls if we are allowed to use PLTs
14099   and copy relocs.  */
14100
14101void
14102_bfd_mips_elf_use_plts_and_copy_relocs (struct bfd_link_info *info)
14103{
14104  mips_elf_hash_table (info)->use_plts_and_copy_relocs = TRUE;
14105}
14106
14107/* A function that the linker calls to select between all or only
14108   32-bit microMIPS instructions, and between making or ignoring
14109   branch relocation checks for invalid transitions between ISA modes.  */
14110
14111void
14112_bfd_mips_elf_linker_flags (struct bfd_link_info *info, bfd_boolean insn32,
14113			    bfd_boolean ignore_branch_isa)
14114{
14115  mips_elf_hash_table (info)->insn32 = insn32;
14116  mips_elf_hash_table (info)->ignore_branch_isa = ignore_branch_isa;
14117}
14118
14119/* Structure for saying that BFD machine EXTENSION extends BASE.  */
14120
14121struct mips_mach_extension
14122{
14123  unsigned long extension, base;
14124};
14125
14126
14127/* An array describing how BFD machines relate to one another.  The entries
14128   are ordered topologically with MIPS I extensions listed last.  */
14129
14130static const struct mips_mach_extension mips_mach_extensions[] =
14131{
14132  /* MIPS64r2 extensions.  */
14133  { bfd_mach_mips_octeon3, bfd_mach_mips_octeon2 },
14134  { bfd_mach_mips_octeon2, bfd_mach_mips_octeonp },
14135  { bfd_mach_mips_octeonp, bfd_mach_mips_octeon },
14136  { bfd_mach_mips_octeon, bfd_mach_mipsisa64r2 },
14137  { bfd_mach_mips_loongson_3a, bfd_mach_mipsisa64r2 },
14138
14139  /* MIPS64 extensions.  */
14140  { bfd_mach_mipsisa64r2, bfd_mach_mipsisa64 },
14141  { bfd_mach_mips_sb1, bfd_mach_mipsisa64 },
14142  { bfd_mach_mips_xlr, bfd_mach_mipsisa64 },
14143
14144  /* MIPS V extensions.  */
14145  { bfd_mach_mipsisa64, bfd_mach_mips5 },
14146
14147  /* R10000 extensions.  */
14148  { bfd_mach_mips12000, bfd_mach_mips10000 },
14149  { bfd_mach_mips14000, bfd_mach_mips10000 },
14150  { bfd_mach_mips16000, bfd_mach_mips10000 },
14151
14152  /* R5000 extensions.  Note: the vr5500 ISA is an extension of the core
14153     vr5400 ISA, but doesn't include the multimedia stuff.  It seems
14154     better to allow vr5400 and vr5500 code to be merged anyway, since
14155     many libraries will just use the core ISA.  Perhaps we could add
14156     some sort of ASE flag if this ever proves a problem.  */
14157  { bfd_mach_mips5500, bfd_mach_mips5400 },
14158  { bfd_mach_mips5400, bfd_mach_mips5000 },
14159
14160  /* MIPS IV extensions.  */
14161  { bfd_mach_mips5, bfd_mach_mips8000 },
14162  { bfd_mach_mips10000, bfd_mach_mips8000 },
14163  { bfd_mach_mips5000, bfd_mach_mips8000 },
14164  { bfd_mach_mips7000, bfd_mach_mips8000 },
14165  { bfd_mach_mips9000, bfd_mach_mips8000 },
14166
14167  /* VR4100 extensions.  */
14168  { bfd_mach_mips4120, bfd_mach_mips4100 },
14169  { bfd_mach_mips4111, bfd_mach_mips4100 },
14170
14171  /* MIPS III extensions.  */
14172  { bfd_mach_mips_loongson_2e, bfd_mach_mips4000 },
14173  { bfd_mach_mips_loongson_2f, bfd_mach_mips4000 },
14174  { bfd_mach_mips8000, bfd_mach_mips4000 },
14175  { bfd_mach_mips4650, bfd_mach_mips4000 },
14176  { bfd_mach_mips4600, bfd_mach_mips4000 },
14177  { bfd_mach_mips4400, bfd_mach_mips4000 },
14178  { bfd_mach_mips4300, bfd_mach_mips4000 },
14179  { bfd_mach_mips4100, bfd_mach_mips4000 },
14180  { bfd_mach_mips4010, bfd_mach_mips4000 },
14181  { bfd_mach_mips5900, bfd_mach_mips4000 },
14182
14183  /* MIPS32 extensions.  */
14184  { bfd_mach_mipsisa32r2, bfd_mach_mipsisa32 },
14185
14186  /* MIPS II extensions.  */
14187  { bfd_mach_mips4000, bfd_mach_mips6000 },
14188  { bfd_mach_mipsisa32, bfd_mach_mips6000 },
14189
14190  /* MIPS I extensions.  */
14191  { bfd_mach_mips6000, bfd_mach_mips3000 },
14192  { bfd_mach_mips3900, bfd_mach_mips3000 }
14193};
14194
14195/* Return true if bfd machine EXTENSION is an extension of machine BASE.  */
14196
14197static bfd_boolean
14198mips_mach_extends_p (unsigned long base, unsigned long extension)
14199{
14200  size_t i;
14201
14202  if (extension == base)
14203    return TRUE;
14204
14205  if (base == bfd_mach_mipsisa32
14206      && mips_mach_extends_p (bfd_mach_mipsisa64, extension))
14207    return TRUE;
14208
14209  if (base == bfd_mach_mipsisa32r2
14210      && mips_mach_extends_p (bfd_mach_mipsisa64r2, extension))
14211    return TRUE;
14212
14213  for (i = 0; i < ARRAY_SIZE (mips_mach_extensions); i++)
14214    if (extension == mips_mach_extensions[i].extension)
14215      {
14216	extension = mips_mach_extensions[i].base;
14217	if (extension == base)
14218	  return TRUE;
14219      }
14220
14221  return FALSE;
14222}
14223
14224/* Return the BFD mach for each .MIPS.abiflags ISA Extension.  */
14225
14226static unsigned long
14227bfd_mips_isa_ext_mach (unsigned int isa_ext)
14228{
14229  switch (isa_ext)
14230    {
14231    case AFL_EXT_3900:        return bfd_mach_mips3900;
14232    case AFL_EXT_4010:        return bfd_mach_mips4010;
14233    case AFL_EXT_4100:        return bfd_mach_mips4100;
14234    case AFL_EXT_4111:        return bfd_mach_mips4111;
14235    case AFL_EXT_4120:        return bfd_mach_mips4120;
14236    case AFL_EXT_4650:        return bfd_mach_mips4650;
14237    case AFL_EXT_5400:        return bfd_mach_mips5400;
14238    case AFL_EXT_5500:        return bfd_mach_mips5500;
14239    case AFL_EXT_5900:        return bfd_mach_mips5900;
14240    case AFL_EXT_10000:       return bfd_mach_mips10000;
14241    case AFL_EXT_LOONGSON_2E: return bfd_mach_mips_loongson_2e;
14242    case AFL_EXT_LOONGSON_2F: return bfd_mach_mips_loongson_2f;
14243    case AFL_EXT_LOONGSON_3A: return bfd_mach_mips_loongson_3a;
14244    case AFL_EXT_SB1:         return bfd_mach_mips_sb1;
14245    case AFL_EXT_OCTEON:      return bfd_mach_mips_octeon;
14246    case AFL_EXT_OCTEONP:     return bfd_mach_mips_octeonp;
14247    case AFL_EXT_OCTEON2:     return bfd_mach_mips_octeon2;
14248    case AFL_EXT_XLR:         return bfd_mach_mips_xlr;
14249    default:                  return bfd_mach_mips3000;
14250    }
14251}
14252
14253/* Return the .MIPS.abiflags value representing each ISA Extension.  */
14254
14255unsigned int
14256bfd_mips_isa_ext (bfd *abfd)
14257{
14258  switch (bfd_get_mach (abfd))
14259    {
14260    case bfd_mach_mips3900:         return AFL_EXT_3900;
14261    case bfd_mach_mips4010:         return AFL_EXT_4010;
14262    case bfd_mach_mips4100:         return AFL_EXT_4100;
14263    case bfd_mach_mips4111:         return AFL_EXT_4111;
14264    case bfd_mach_mips4120:         return AFL_EXT_4120;
14265    case bfd_mach_mips4650:         return AFL_EXT_4650;
14266    case bfd_mach_mips5400:         return AFL_EXT_5400;
14267    case bfd_mach_mips5500:         return AFL_EXT_5500;
14268    case bfd_mach_mips5900:         return AFL_EXT_5900;
14269    case bfd_mach_mips10000:        return AFL_EXT_10000;
14270    case bfd_mach_mips_loongson_2e: return AFL_EXT_LOONGSON_2E;
14271    case bfd_mach_mips_loongson_2f: return AFL_EXT_LOONGSON_2F;
14272    case bfd_mach_mips_loongson_3a: return AFL_EXT_LOONGSON_3A;
14273    case bfd_mach_mips_sb1:         return AFL_EXT_SB1;
14274    case bfd_mach_mips_octeon:      return AFL_EXT_OCTEON;
14275    case bfd_mach_mips_octeonp:     return AFL_EXT_OCTEONP;
14276    case bfd_mach_mips_octeon3:     return AFL_EXT_OCTEON3;
14277    case bfd_mach_mips_octeon2:     return AFL_EXT_OCTEON2;
14278    case bfd_mach_mips_xlr:         return AFL_EXT_XLR;
14279    default:                        return 0;
14280    }
14281}
14282
14283/* Encode ISA level and revision as a single value.  */
14284#define LEVEL_REV(LEV,REV) ((LEV) << 3 | (REV))
14285
14286/* Decode a single value into level and revision.  */
14287#define ISA_LEVEL(LEVREV)  ((LEVREV) >> 3)
14288#define ISA_REV(LEVREV)    ((LEVREV) & 0x7)
14289
14290/* Update the isa_level, isa_rev, isa_ext fields of abiflags.  */
14291
14292static void
14293update_mips_abiflags_isa (bfd *abfd, Elf_Internal_ABIFlags_v0 *abiflags)
14294{
14295  int new_isa = 0;
14296  switch (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH)
14297    {
14298    case E_MIPS_ARCH_1:    new_isa = LEVEL_REV (1, 0); break;
14299    case E_MIPS_ARCH_2:    new_isa = LEVEL_REV (2, 0); break;
14300    case E_MIPS_ARCH_3:    new_isa = LEVEL_REV (3, 0); break;
14301    case E_MIPS_ARCH_4:    new_isa = LEVEL_REV (4, 0); break;
14302    case E_MIPS_ARCH_5:    new_isa = LEVEL_REV (5, 0); break;
14303    case E_MIPS_ARCH_32:   new_isa = LEVEL_REV (32, 1); break;
14304    case E_MIPS_ARCH_32R2: new_isa = LEVEL_REV (32, 2); break;
14305    case E_MIPS_ARCH_32R6: new_isa = LEVEL_REV (32, 6); break;
14306    case E_MIPS_ARCH_64:   new_isa = LEVEL_REV (64, 1); break;
14307    case E_MIPS_ARCH_64R2: new_isa = LEVEL_REV (64, 2); break;
14308    case E_MIPS_ARCH_64R6: new_isa = LEVEL_REV (64, 6); break;
14309    default:
14310      _bfd_error_handler
14311	/* xgettext:c-format */
14312	(_("%B: Unknown architecture %s"),
14313	 abfd, bfd_printable_name (abfd));
14314    }
14315
14316  if (new_isa > LEVEL_REV (abiflags->isa_level, abiflags->isa_rev))
14317    {
14318      abiflags->isa_level = ISA_LEVEL (new_isa);
14319      abiflags->isa_rev = ISA_REV (new_isa);
14320    }
14321
14322  /* Update the isa_ext if ABFD describes a further extension.  */
14323  if (mips_mach_extends_p (bfd_mips_isa_ext_mach (abiflags->isa_ext),
14324			   bfd_get_mach (abfd)))
14325    abiflags->isa_ext = bfd_mips_isa_ext (abfd);
14326}
14327
14328/* Return true if the given ELF header flags describe a 32-bit binary.  */
14329
14330static bfd_boolean
14331mips_32bit_flags_p (flagword flags)
14332{
14333  return ((flags & EF_MIPS_32BITMODE) != 0
14334	  || (flags & EF_MIPS_ABI) == E_MIPS_ABI_O32
14335	  || (flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32
14336	  || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1
14337	  || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2
14338	  || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32
14339	  || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2
14340	  || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R6);
14341}
14342
14343/* Infer the content of the ABI flags based on the elf header.  */
14344
14345static void
14346infer_mips_abiflags (bfd *abfd, Elf_Internal_ABIFlags_v0* abiflags)
14347{
14348  obj_attribute *in_attr;
14349
14350  memset (abiflags, 0, sizeof (Elf_Internal_ABIFlags_v0));
14351  update_mips_abiflags_isa (abfd, abiflags);
14352
14353  if (mips_32bit_flags_p (elf_elfheader (abfd)->e_flags))
14354    abiflags->gpr_size = AFL_REG_32;
14355  else
14356    abiflags->gpr_size = AFL_REG_64;
14357
14358  abiflags->cpr1_size = AFL_REG_NONE;
14359
14360  in_attr = elf_known_obj_attributes (abfd)[OBJ_ATTR_GNU];
14361  abiflags->fp_abi = in_attr[Tag_GNU_MIPS_ABI_FP].i;
14362
14363  if (abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_SINGLE
14364      || abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_XX
14365      || (abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_DOUBLE
14366	  && abiflags->gpr_size == AFL_REG_32))
14367    abiflags->cpr1_size = AFL_REG_32;
14368  else if (abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_DOUBLE
14369	   || abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_64
14370	   || abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_64A)
14371    abiflags->cpr1_size = AFL_REG_64;
14372
14373  abiflags->cpr2_size = AFL_REG_NONE;
14374
14375  if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MDMX)
14376    abiflags->ases |= AFL_ASE_MDMX;
14377  if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_M16)
14378    abiflags->ases |= AFL_ASE_MIPS16;
14379  if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MICROMIPS)
14380    abiflags->ases |= AFL_ASE_MICROMIPS;
14381
14382  if (abiflags->fp_abi != Val_GNU_MIPS_ABI_FP_ANY
14383      && abiflags->fp_abi != Val_GNU_MIPS_ABI_FP_SOFT
14384      && abiflags->fp_abi != Val_GNU_MIPS_ABI_FP_64A
14385      && abiflags->isa_level >= 32
14386      && abiflags->isa_ext != AFL_EXT_LOONGSON_3A)
14387    abiflags->flags1 |= AFL_FLAGS1_ODDSPREG;
14388}
14389
14390/* We need to use a special link routine to handle the .reginfo and
14391   the .mdebug sections.  We need to merge all instances of these
14392   sections together, not write them all out sequentially.  */
14393
14394bfd_boolean
14395_bfd_mips_elf_final_link (bfd *abfd, struct bfd_link_info *info)
14396{
14397  asection *o;
14398  struct bfd_link_order *p;
14399  asection *reginfo_sec, *mdebug_sec, *gptab_data_sec, *gptab_bss_sec;
14400  asection *rtproc_sec, *abiflags_sec;
14401  Elf32_RegInfo reginfo;
14402  struct ecoff_debug_info debug;
14403  struct mips_htab_traverse_info hti;
14404  const struct elf_backend_data *bed = get_elf_backend_data (abfd);
14405  const struct ecoff_debug_swap *swap = bed->elf_backend_ecoff_debug_swap;
14406  HDRR *symhdr = &debug.symbolic_header;
14407  void *mdebug_handle = NULL;
14408  asection *s;
14409  EXTR esym;
14410  unsigned int i;
14411  bfd_size_type amt;
14412  struct mips_elf_link_hash_table *htab;
14413
14414  static const char * const secname[] =
14415  {
14416    ".text", ".init", ".fini", ".data",
14417    ".rodata", ".sdata", ".sbss", ".bss"
14418  };
14419  static const int sc[] =
14420  {
14421    scText, scInit, scFini, scData,
14422    scRData, scSData, scSBss, scBss
14423  };
14424
14425  /* Sort the dynamic symbols so that those with GOT entries come after
14426     those without.  */
14427  htab = mips_elf_hash_table (info);
14428  BFD_ASSERT (htab != NULL);
14429
14430  if (!mips_elf_sort_hash_table (abfd, info))
14431    return FALSE;
14432
14433  /* Create any scheduled LA25 stubs.  */
14434  hti.info = info;
14435  hti.output_bfd = abfd;
14436  hti.error = FALSE;
14437  htab_traverse (htab->la25_stubs, mips_elf_create_la25_stub, &hti);
14438  if (hti.error)
14439    return FALSE;
14440
14441  /* Get a value for the GP register.  */
14442  if (elf_gp (abfd) == 0)
14443    {
14444      struct bfd_link_hash_entry *h;
14445
14446      h = bfd_link_hash_lookup (info->hash, "_gp", FALSE, FALSE, TRUE);
14447      if (h != NULL && h->type == bfd_link_hash_defined)
14448	elf_gp (abfd) = (h->u.def.value
14449			 + h->u.def.section->output_section->vma
14450			 + h->u.def.section->output_offset);
14451      else if (htab->is_vxworks
14452	       && (h = bfd_link_hash_lookup (info->hash,
14453					     "_GLOBAL_OFFSET_TABLE_",
14454					     FALSE, FALSE, TRUE))
14455	       && h->type == bfd_link_hash_defined)
14456	elf_gp (abfd) = (h->u.def.section->output_section->vma
14457			 + h->u.def.section->output_offset
14458			 + h->u.def.value);
14459      else if (bfd_link_relocatable (info))
14460	{
14461	  bfd_vma lo = MINUS_ONE;
14462
14463	  /* Find the GP-relative section with the lowest offset.  */
14464	  for (o = abfd->sections; o != NULL; o = o->next)
14465	    if (o->vma < lo
14466		&& (elf_section_data (o)->this_hdr.sh_flags & SHF_MIPS_GPREL))
14467	      lo = o->vma;
14468
14469	  /* And calculate GP relative to that.  */
14470	  elf_gp (abfd) = lo + ELF_MIPS_GP_OFFSET (info);
14471	}
14472      else
14473	{
14474	  /* If the relocate_section function needs to do a reloc
14475	     involving the GP value, it should make a reloc_dangerous
14476	     callback to warn that GP is not defined.  */
14477	}
14478    }
14479
14480  /* Go through the sections and collect the .reginfo and .mdebug
14481     information.  */
14482  abiflags_sec = NULL;
14483  reginfo_sec = NULL;
14484  mdebug_sec = NULL;
14485  gptab_data_sec = NULL;
14486  gptab_bss_sec = NULL;
14487  for (o = abfd->sections; o != NULL; o = o->next)
14488    {
14489      if (strcmp (o->name, ".MIPS.abiflags") == 0)
14490	{
14491	  /* We have found the .MIPS.abiflags section in the output file.
14492	     Look through all the link_orders comprising it and remove them.
14493	     The data is merged in _bfd_mips_elf_merge_private_bfd_data.  */
14494	  for (p = o->map_head.link_order; p != NULL; p = p->next)
14495	    {
14496	      asection *input_section;
14497
14498	      if (p->type != bfd_indirect_link_order)
14499		{
14500		  if (p->type == bfd_data_link_order)
14501		    continue;
14502		  abort ();
14503		}
14504
14505	      input_section = p->u.indirect.section;
14506
14507	      /* Hack: reset the SEC_HAS_CONTENTS flag so that
14508		 elf_link_input_bfd ignores this section.  */
14509	      input_section->flags &= ~SEC_HAS_CONTENTS;
14510	    }
14511
14512	  /* Size has been set in _bfd_mips_elf_always_size_sections.  */
14513	  BFD_ASSERT(o->size == sizeof (Elf_External_ABIFlags_v0));
14514
14515	  /* Skip this section later on (I don't think this currently
14516	     matters, but someday it might).  */
14517	  o->map_head.link_order = NULL;
14518
14519	  abiflags_sec = o;
14520	}
14521
14522      if (strcmp (o->name, ".reginfo") == 0)
14523	{
14524	  memset (&reginfo, 0, sizeof reginfo);
14525
14526	  /* We have found the .reginfo section in the output file.
14527	     Look through all the link_orders comprising it and merge
14528	     the information together.  */
14529	  for (p = o->map_head.link_order; p != NULL; p = p->next)
14530	    {
14531	      asection *input_section;
14532	      bfd *input_bfd;
14533	      Elf32_External_RegInfo ext;
14534	      Elf32_RegInfo sub;
14535
14536	      if (p->type != bfd_indirect_link_order)
14537		{
14538		  if (p->type == bfd_data_link_order)
14539		    continue;
14540		  abort ();
14541		}
14542
14543	      input_section = p->u.indirect.section;
14544	      input_bfd = input_section->owner;
14545
14546	      if (! bfd_get_section_contents (input_bfd, input_section,
14547					      &ext, 0, sizeof ext))
14548		return FALSE;
14549
14550	      bfd_mips_elf32_swap_reginfo_in (input_bfd, &ext, &sub);
14551
14552	      reginfo.ri_gprmask |= sub.ri_gprmask;
14553	      reginfo.ri_cprmask[0] |= sub.ri_cprmask[0];
14554	      reginfo.ri_cprmask[1] |= sub.ri_cprmask[1];
14555	      reginfo.ri_cprmask[2] |= sub.ri_cprmask[2];
14556	      reginfo.ri_cprmask[3] |= sub.ri_cprmask[3];
14557
14558	      /* ri_gp_value is set by the function
14559		 mips_elf32_section_processing when the section is
14560		 finally written out.  */
14561
14562	      /* Hack: reset the SEC_HAS_CONTENTS flag so that
14563		 elf_link_input_bfd ignores this section.  */
14564	      input_section->flags &= ~SEC_HAS_CONTENTS;
14565	    }
14566
14567	  /* Size has been set in _bfd_mips_elf_always_size_sections.  */
14568	  BFD_ASSERT(o->size == sizeof (Elf32_External_RegInfo));
14569
14570	  /* Skip this section later on (I don't think this currently
14571	     matters, but someday it might).  */
14572	  o->map_head.link_order = NULL;
14573
14574	  reginfo_sec = o;
14575	}
14576
14577      if (strcmp (o->name, ".mdebug") == 0)
14578	{
14579	  struct extsym_info einfo;
14580	  bfd_vma last;
14581
14582	  /* We have found the .mdebug section in the output file.
14583	     Look through all the link_orders comprising it and merge
14584	     the information together.  */
14585	  symhdr->magic = swap->sym_magic;
14586	  /* FIXME: What should the version stamp be?  */
14587	  symhdr->vstamp = 0;
14588	  symhdr->ilineMax = 0;
14589	  symhdr->cbLine = 0;
14590	  symhdr->idnMax = 0;
14591	  symhdr->ipdMax = 0;
14592	  symhdr->isymMax = 0;
14593	  symhdr->ioptMax = 0;
14594	  symhdr->iauxMax = 0;
14595	  symhdr->issMax = 0;
14596	  symhdr->issExtMax = 0;
14597	  symhdr->ifdMax = 0;
14598	  symhdr->crfd = 0;
14599	  symhdr->iextMax = 0;
14600
14601	  /* We accumulate the debugging information itself in the
14602	     debug_info structure.  */
14603	  debug.line = NULL;
14604	  debug.external_dnr = NULL;
14605	  debug.external_pdr = NULL;
14606	  debug.external_sym = NULL;
14607	  debug.external_opt = NULL;
14608	  debug.external_aux = NULL;
14609	  debug.ss = NULL;
14610	  debug.ssext = debug.ssext_end = NULL;
14611	  debug.external_fdr = NULL;
14612	  debug.external_rfd = NULL;
14613	  debug.external_ext = debug.external_ext_end = NULL;
14614
14615	  mdebug_handle = bfd_ecoff_debug_init (abfd, &debug, swap, info);
14616	  if (mdebug_handle == NULL)
14617	    return FALSE;
14618
14619	  esym.jmptbl = 0;
14620	  esym.cobol_main = 0;
14621	  esym.weakext = 0;
14622	  esym.reserved = 0;
14623	  esym.ifd = ifdNil;
14624	  esym.asym.iss = issNil;
14625	  esym.asym.st = stLocal;
14626	  esym.asym.reserved = 0;
14627	  esym.asym.index = indexNil;
14628	  last = 0;
14629	  for (i = 0; i < sizeof (secname) / sizeof (secname[0]); i++)
14630	    {
14631	      esym.asym.sc = sc[i];
14632	      s = bfd_get_section_by_name (abfd, secname[i]);
14633	      if (s != NULL)
14634		{
14635		  esym.asym.value = s->vma;
14636		  last = s->vma + s->size;
14637		}
14638	      else
14639		esym.asym.value = last;
14640	      if (!bfd_ecoff_debug_one_external (abfd, &debug, swap,
14641						 secname[i], &esym))
14642		return FALSE;
14643	    }
14644
14645	  for (p = o->map_head.link_order; p != NULL; p = p->next)
14646	    {
14647	      asection *input_section;
14648	      bfd *input_bfd;
14649	      const struct ecoff_debug_swap *input_swap;
14650	      struct ecoff_debug_info input_debug;
14651	      char *eraw_src;
14652	      char *eraw_end;
14653
14654	      if (p->type != bfd_indirect_link_order)
14655		{
14656		  if (p->type == bfd_data_link_order)
14657		    continue;
14658		  abort ();
14659		}
14660
14661	      input_section = p->u.indirect.section;
14662	      input_bfd = input_section->owner;
14663
14664	      if (!is_mips_elf (input_bfd))
14665		{
14666		  /* I don't know what a non MIPS ELF bfd would be
14667		     doing with a .mdebug section, but I don't really
14668		     want to deal with it.  */
14669		  continue;
14670		}
14671
14672	      input_swap = (get_elf_backend_data (input_bfd)
14673			    ->elf_backend_ecoff_debug_swap);
14674
14675	      BFD_ASSERT (p->size == input_section->size);
14676
14677	      /* The ECOFF linking code expects that we have already
14678		 read in the debugging information and set up an
14679		 ecoff_debug_info structure, so we do that now.  */
14680	      if (! _bfd_mips_elf_read_ecoff_info (input_bfd, input_section,
14681						   &input_debug))
14682		return FALSE;
14683
14684	      if (! (bfd_ecoff_debug_accumulate
14685		     (mdebug_handle, abfd, &debug, swap, input_bfd,
14686		      &input_debug, input_swap, info)))
14687		return FALSE;
14688
14689	      /* Loop through the external symbols.  For each one with
14690		 interesting information, try to find the symbol in
14691		 the linker global hash table and save the information
14692		 for the output external symbols.  */
14693	      eraw_src = input_debug.external_ext;
14694	      eraw_end = (eraw_src
14695			  + (input_debug.symbolic_header.iextMax
14696			     * input_swap->external_ext_size));
14697	      for (;
14698		   eraw_src < eraw_end;
14699		   eraw_src += input_swap->external_ext_size)
14700		{
14701		  EXTR ext;
14702		  const char *name;
14703		  struct mips_elf_link_hash_entry *h;
14704
14705		  (*input_swap->swap_ext_in) (input_bfd, eraw_src, &ext);
14706		  if (ext.asym.sc == scNil
14707		      || ext.asym.sc == scUndefined
14708		      || ext.asym.sc == scSUndefined)
14709		    continue;
14710
14711		  name = input_debug.ssext + ext.asym.iss;
14712		  h = mips_elf_link_hash_lookup (mips_elf_hash_table (info),
14713						 name, FALSE, FALSE, TRUE);
14714		  if (h == NULL || h->esym.ifd != -2)
14715		    continue;
14716
14717		  if (ext.ifd != -1)
14718		    {
14719		      BFD_ASSERT (ext.ifd
14720				  < input_debug.symbolic_header.ifdMax);
14721		      ext.ifd = input_debug.ifdmap[ext.ifd];
14722		    }
14723
14724		  h->esym = ext;
14725		}
14726
14727	      /* Free up the information we just read.  */
14728	      free (input_debug.line);
14729	      free (input_debug.external_dnr);
14730	      free (input_debug.external_pdr);
14731	      free (input_debug.external_sym);
14732	      free (input_debug.external_opt);
14733	      free (input_debug.external_aux);
14734	      free (input_debug.ss);
14735	      free (input_debug.ssext);
14736	      free (input_debug.external_fdr);
14737	      free (input_debug.external_rfd);
14738	      free (input_debug.external_ext);
14739
14740	      /* Hack: reset the SEC_HAS_CONTENTS flag so that
14741		 elf_link_input_bfd ignores this section.  */
14742	      input_section->flags &= ~SEC_HAS_CONTENTS;
14743	    }
14744
14745	  if (SGI_COMPAT (abfd) && bfd_link_pic (info))
14746	    {
14747	      /* Create .rtproc section.  */
14748	      rtproc_sec = bfd_get_linker_section (abfd, ".rtproc");
14749	      if (rtproc_sec == NULL)
14750		{
14751		  flagword flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY
14752				    | SEC_LINKER_CREATED | SEC_READONLY);
14753
14754		  rtproc_sec = bfd_make_section_anyway_with_flags (abfd,
14755								   ".rtproc",
14756								   flags);
14757		  if (rtproc_sec == NULL
14758		      || ! bfd_set_section_alignment (abfd, rtproc_sec, 4))
14759		    return FALSE;
14760		}
14761
14762	      if (! mips_elf_create_procedure_table (mdebug_handle, abfd,
14763						     info, rtproc_sec,
14764						     &debug))
14765		return FALSE;
14766	    }
14767
14768	  /* Build the external symbol information.  */
14769	  einfo.abfd = abfd;
14770	  einfo.info = info;
14771	  einfo.debug = &debug;
14772	  einfo.swap = swap;
14773	  einfo.failed = FALSE;
14774	  mips_elf_link_hash_traverse (mips_elf_hash_table (info),
14775				       mips_elf_output_extsym, &einfo);
14776	  if (einfo.failed)
14777	    return FALSE;
14778
14779	  /* Set the size of the .mdebug section.  */
14780	  o->size = bfd_ecoff_debug_size (abfd, &debug, swap);
14781
14782	  /* Skip this section later on (I don't think this currently
14783	     matters, but someday it might).  */
14784	  o->map_head.link_order = NULL;
14785
14786	  mdebug_sec = o;
14787	}
14788
14789      if (CONST_STRNEQ (o->name, ".gptab."))
14790	{
14791	  const char *subname;
14792	  unsigned int c;
14793	  Elf32_gptab *tab;
14794	  Elf32_External_gptab *ext_tab;
14795	  unsigned int j;
14796
14797	  /* The .gptab.sdata and .gptab.sbss sections hold
14798	     information describing how the small data area would
14799	     change depending upon the -G switch.  These sections
14800	     not used in executables files.  */
14801	  if (! bfd_link_relocatable (info))
14802	    {
14803	      for (p = o->map_head.link_order; p != NULL; p = p->next)
14804		{
14805		  asection *input_section;
14806
14807		  if (p->type != bfd_indirect_link_order)
14808		    {
14809		      if (p->type == bfd_data_link_order)
14810			continue;
14811		      abort ();
14812		    }
14813
14814		  input_section = p->u.indirect.section;
14815
14816		  /* Hack: reset the SEC_HAS_CONTENTS flag so that
14817		     elf_link_input_bfd ignores this section.  */
14818		  input_section->flags &= ~SEC_HAS_CONTENTS;
14819		}
14820
14821	      /* Skip this section later on (I don't think this
14822		 currently matters, but someday it might).  */
14823	      o->map_head.link_order = NULL;
14824
14825	      /* Really remove the section.  */
14826	      bfd_section_list_remove (abfd, o);
14827	      --abfd->section_count;
14828
14829	      continue;
14830	    }
14831
14832	  /* There is one gptab for initialized data, and one for
14833	     uninitialized data.  */
14834	  if (strcmp (o->name, ".gptab.sdata") == 0)
14835	    gptab_data_sec = o;
14836	  else if (strcmp (o->name, ".gptab.sbss") == 0)
14837	    gptab_bss_sec = o;
14838	  else
14839	    {
14840	      _bfd_error_handler
14841		/* xgettext:c-format */
14842		(_("%s: illegal section name `%s'"),
14843		 bfd_get_filename (abfd), o->name);
14844	      bfd_set_error (bfd_error_nonrepresentable_section);
14845	      return FALSE;
14846	    }
14847
14848	  /* The linker script always combines .gptab.data and
14849	     .gptab.sdata into .gptab.sdata, and likewise for
14850	     .gptab.bss and .gptab.sbss.  It is possible that there is
14851	     no .sdata or .sbss section in the output file, in which
14852	     case we must change the name of the output section.  */
14853	  subname = o->name + sizeof ".gptab" - 1;
14854	  if (bfd_get_section_by_name (abfd, subname) == NULL)
14855	    {
14856	      if (o == gptab_data_sec)
14857		o->name = ".gptab.data";
14858	      else
14859		o->name = ".gptab.bss";
14860	      subname = o->name + sizeof ".gptab" - 1;
14861	      BFD_ASSERT (bfd_get_section_by_name (abfd, subname) != NULL);
14862	    }
14863
14864	  /* Set up the first entry.  */
14865	  c = 1;
14866	  amt = c * sizeof (Elf32_gptab);
14867	  tab = bfd_malloc (amt);
14868	  if (tab == NULL)
14869	    return FALSE;
14870	  tab[0].gt_header.gt_current_g_value = elf_gp_size (abfd);
14871	  tab[0].gt_header.gt_unused = 0;
14872
14873	  /* Combine the input sections.  */
14874	  for (p = o->map_head.link_order; p != NULL; p = p->next)
14875	    {
14876	      asection *input_section;
14877	      bfd *input_bfd;
14878	      bfd_size_type size;
14879	      unsigned long last;
14880	      bfd_size_type gpentry;
14881
14882	      if (p->type != bfd_indirect_link_order)
14883		{
14884		  if (p->type == bfd_data_link_order)
14885		    continue;
14886		  abort ();
14887		}
14888
14889	      input_section = p->u.indirect.section;
14890	      input_bfd = input_section->owner;
14891
14892	      /* Combine the gptab entries for this input section one
14893		 by one.  We know that the input gptab entries are
14894		 sorted by ascending -G value.  */
14895	      size = input_section->size;
14896	      last = 0;
14897	      for (gpentry = sizeof (Elf32_External_gptab);
14898		   gpentry < size;
14899		   gpentry += sizeof (Elf32_External_gptab))
14900		{
14901		  Elf32_External_gptab ext_gptab;
14902		  Elf32_gptab int_gptab;
14903		  unsigned long val;
14904		  unsigned long add;
14905		  bfd_boolean exact;
14906		  unsigned int look;
14907
14908		  if (! (bfd_get_section_contents
14909			 (input_bfd, input_section, &ext_gptab, gpentry,
14910			  sizeof (Elf32_External_gptab))))
14911		    {
14912		      free (tab);
14913		      return FALSE;
14914		    }
14915
14916		  bfd_mips_elf32_swap_gptab_in (input_bfd, &ext_gptab,
14917						&int_gptab);
14918		  val = int_gptab.gt_entry.gt_g_value;
14919		  add = int_gptab.gt_entry.gt_bytes - last;
14920
14921		  exact = FALSE;
14922		  for (look = 1; look < c; look++)
14923		    {
14924		      if (tab[look].gt_entry.gt_g_value >= val)
14925			tab[look].gt_entry.gt_bytes += add;
14926
14927		      if (tab[look].gt_entry.gt_g_value == val)
14928			exact = TRUE;
14929		    }
14930
14931		  if (! exact)
14932		    {
14933		      Elf32_gptab *new_tab;
14934		      unsigned int max;
14935
14936		      /* We need a new table entry.  */
14937		      amt = (bfd_size_type) (c + 1) * sizeof (Elf32_gptab);
14938		      new_tab = bfd_realloc (tab, amt);
14939		      if (new_tab == NULL)
14940			{
14941			  free (tab);
14942			  return FALSE;
14943			}
14944		      tab = new_tab;
14945		      tab[c].gt_entry.gt_g_value = val;
14946		      tab[c].gt_entry.gt_bytes = add;
14947
14948		      /* Merge in the size for the next smallest -G
14949			 value, since that will be implied by this new
14950			 value.  */
14951		      max = 0;
14952		      for (look = 1; look < c; look++)
14953			{
14954			  if (tab[look].gt_entry.gt_g_value < val
14955			      && (max == 0
14956				  || (tab[look].gt_entry.gt_g_value
14957				      > tab[max].gt_entry.gt_g_value)))
14958			    max = look;
14959			}
14960		      if (max != 0)
14961			tab[c].gt_entry.gt_bytes +=
14962			  tab[max].gt_entry.gt_bytes;
14963
14964		      ++c;
14965		    }
14966
14967		  last = int_gptab.gt_entry.gt_bytes;
14968		}
14969
14970	      /* Hack: reset the SEC_HAS_CONTENTS flag so that
14971		 elf_link_input_bfd ignores this section.  */
14972	      input_section->flags &= ~SEC_HAS_CONTENTS;
14973	    }
14974
14975	  /* The table must be sorted by -G value.  */
14976	  if (c > 2)
14977	    qsort (tab + 1, c - 1, sizeof (tab[0]), gptab_compare);
14978
14979	  /* Swap out the table.  */
14980	  amt = (bfd_size_type) c * sizeof (Elf32_External_gptab);
14981	  ext_tab = bfd_alloc (abfd, amt);
14982	  if (ext_tab == NULL)
14983	    {
14984	      free (tab);
14985	      return FALSE;
14986	    }
14987
14988	  for (j = 0; j < c; j++)
14989	    bfd_mips_elf32_swap_gptab_out (abfd, tab + j, ext_tab + j);
14990	  free (tab);
14991
14992	  o->size = c * sizeof (Elf32_External_gptab);
14993	  o->contents = (bfd_byte *) ext_tab;
14994
14995	  /* Skip this section later on (I don't think this currently
14996	     matters, but someday it might).  */
14997	  o->map_head.link_order = NULL;
14998	}
14999    }
15000
15001  /* Invoke the regular ELF backend linker to do all the work.  */
15002  if (!bfd_elf_final_link (abfd, info))
15003    return FALSE;
15004
15005  /* Now write out the computed sections.  */
15006
15007  if (abiflags_sec != NULL)
15008    {
15009      Elf_External_ABIFlags_v0 ext;
15010      Elf_Internal_ABIFlags_v0 *abiflags;
15011
15012      abiflags = &mips_elf_tdata (abfd)->abiflags;
15013
15014      /* Set up the abiflags if no valid input sections were found.  */
15015      if (!mips_elf_tdata (abfd)->abiflags_valid)
15016	{
15017	  infer_mips_abiflags (abfd, abiflags);
15018	  mips_elf_tdata (abfd)->abiflags_valid = TRUE;
15019	}
15020      bfd_mips_elf_swap_abiflags_v0_out (abfd, abiflags, &ext);
15021      if (! bfd_set_section_contents (abfd, abiflags_sec, &ext, 0, sizeof ext))
15022	return FALSE;
15023    }
15024
15025  if (reginfo_sec != NULL)
15026    {
15027      Elf32_External_RegInfo ext;
15028
15029      bfd_mips_elf32_swap_reginfo_out (abfd, &reginfo, &ext);
15030      if (! bfd_set_section_contents (abfd, reginfo_sec, &ext, 0, sizeof ext))
15031	return FALSE;
15032    }
15033
15034  if (mdebug_sec != NULL)
15035    {
15036      BFD_ASSERT (abfd->output_has_begun);
15037      if (! bfd_ecoff_write_accumulated_debug (mdebug_handle, abfd, &debug,
15038					       swap, info,
15039					       mdebug_sec->filepos))
15040	return FALSE;
15041
15042      bfd_ecoff_debug_free (mdebug_handle, abfd, &debug, swap, info);
15043    }
15044
15045  if (gptab_data_sec != NULL)
15046    {
15047      if (! bfd_set_section_contents (abfd, gptab_data_sec,
15048				      gptab_data_sec->contents,
15049				      0, gptab_data_sec->size))
15050	return FALSE;
15051    }
15052
15053  if (gptab_bss_sec != NULL)
15054    {
15055      if (! bfd_set_section_contents (abfd, gptab_bss_sec,
15056				      gptab_bss_sec->contents,
15057				      0, gptab_bss_sec->size))
15058	return FALSE;
15059    }
15060
15061  if (SGI_COMPAT (abfd))
15062    {
15063      rtproc_sec = bfd_get_section_by_name (abfd, ".rtproc");
15064      if (rtproc_sec != NULL)
15065	{
15066	  if (! bfd_set_section_contents (abfd, rtproc_sec,
15067					  rtproc_sec->contents,
15068					  0, rtproc_sec->size))
15069	    return FALSE;
15070	}
15071    }
15072
15073  return TRUE;
15074}
15075
15076/* Merge object file header flags from IBFD into OBFD.  Raise an error
15077   if there are conflicting settings.  */
15078
15079static bfd_boolean
15080mips_elf_merge_obj_e_flags (bfd *ibfd, struct bfd_link_info *info)
15081{
15082  bfd *obfd = info->output_bfd;
15083  struct mips_elf_obj_tdata *out_tdata = mips_elf_tdata (obfd);
15084  flagword old_flags;
15085  flagword new_flags;
15086  bfd_boolean ok;
15087
15088  new_flags = elf_elfheader (ibfd)->e_flags;
15089  elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_NOREORDER;
15090  old_flags = elf_elfheader (obfd)->e_flags;
15091
15092  /* Check flag compatibility.  */
15093
15094  new_flags &= ~EF_MIPS_NOREORDER;
15095  old_flags &= ~EF_MIPS_NOREORDER;
15096
15097  /* Some IRIX 6 BSD-compatibility objects have this bit set.  It
15098     doesn't seem to matter.  */
15099  new_flags &= ~EF_MIPS_XGOT;
15100  old_flags &= ~EF_MIPS_XGOT;
15101
15102  /* MIPSpro generates ucode info in n64 objects.  Again, we should
15103     just be able to ignore this.  */
15104  new_flags &= ~EF_MIPS_UCODE;
15105  old_flags &= ~EF_MIPS_UCODE;
15106
15107  /* DSOs should only be linked with CPIC code.  */
15108  if ((ibfd->flags & DYNAMIC) != 0)
15109    new_flags |= EF_MIPS_PIC | EF_MIPS_CPIC;
15110
15111  if (new_flags == old_flags)
15112    return TRUE;
15113
15114  ok = TRUE;
15115
15116  if (((new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0)
15117      != ((old_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0))
15118    {
15119      _bfd_error_handler
15120	(_("%B: warning: linking abicalls files with non-abicalls files"),
15121	 ibfd);
15122      ok = TRUE;
15123    }
15124
15125  if (new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC))
15126    elf_elfheader (obfd)->e_flags |= EF_MIPS_CPIC;
15127  if (! (new_flags & EF_MIPS_PIC))
15128    elf_elfheader (obfd)->e_flags &= ~EF_MIPS_PIC;
15129
15130  new_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC);
15131  old_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC);
15132
15133  /* Compare the ISAs.  */
15134  if (mips_32bit_flags_p (old_flags) != mips_32bit_flags_p (new_flags))
15135    {
15136      _bfd_error_handler
15137	(_("%B: linking 32-bit code with 64-bit code"),
15138	 ibfd);
15139      ok = FALSE;
15140    }
15141  else if (!mips_mach_extends_p (bfd_get_mach (ibfd), bfd_get_mach (obfd)))
15142    {
15143      /* OBFD's ISA isn't the same as, or an extension of, IBFD's.  */
15144      if (mips_mach_extends_p (bfd_get_mach (obfd), bfd_get_mach (ibfd)))
15145	{
15146	  /* Copy the architecture info from IBFD to OBFD.  Also copy
15147	     the 32-bit flag (if set) so that we continue to recognise
15148	     OBFD as a 32-bit binary.  */
15149	  bfd_set_arch_info (obfd, bfd_get_arch_info (ibfd));
15150	  elf_elfheader (obfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH);
15151	  elf_elfheader (obfd)->e_flags
15152	    |= new_flags & (EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
15153
15154	  /* Update the ABI flags isa_level, isa_rev, isa_ext fields.  */
15155	  update_mips_abiflags_isa (obfd, &out_tdata->abiflags);
15156
15157	  /* Copy across the ABI flags if OBFD doesn't use them
15158	     and if that was what caused us to treat IBFD as 32-bit.  */
15159	  if ((old_flags & EF_MIPS_ABI) == 0
15160	      && mips_32bit_flags_p (new_flags)
15161	      && !mips_32bit_flags_p (new_flags & ~EF_MIPS_ABI))
15162	    elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ABI;
15163	}
15164      else
15165	{
15166	  /* The ISAs aren't compatible.  */
15167	  _bfd_error_handler
15168	    /* xgettext:c-format */
15169	    (_("%B: linking %s module with previous %s modules"),
15170	     ibfd,
15171	     bfd_printable_name (ibfd),
15172	     bfd_printable_name (obfd));
15173	  ok = FALSE;
15174	}
15175    }
15176
15177  new_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
15178  old_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
15179
15180  /* Compare ABIs.  The 64-bit ABI does not use EF_MIPS_ABI.  But, it
15181     does set EI_CLASS differently from any 32-bit ABI.  */
15182  if ((new_flags & EF_MIPS_ABI) != (old_flags & EF_MIPS_ABI)
15183      || (elf_elfheader (ibfd)->e_ident[EI_CLASS]
15184	  != elf_elfheader (obfd)->e_ident[EI_CLASS]))
15185    {
15186      /* Only error if both are set (to different values).  */
15187      if (((new_flags & EF_MIPS_ABI) && (old_flags & EF_MIPS_ABI))
15188	  || (elf_elfheader (ibfd)->e_ident[EI_CLASS]
15189	      != elf_elfheader (obfd)->e_ident[EI_CLASS]))
15190	{
15191	  _bfd_error_handler
15192	    /* xgettext:c-format */
15193	    (_("%B: ABI mismatch: linking %s module with previous %s modules"),
15194	     ibfd,
15195	     elf_mips_abi_name (ibfd),
15196	     elf_mips_abi_name (obfd));
15197	  ok = FALSE;
15198	}
15199      new_flags &= ~EF_MIPS_ABI;
15200      old_flags &= ~EF_MIPS_ABI;
15201    }
15202
15203  /* Compare ASEs.  Forbid linking MIPS16 and microMIPS ASE modules together
15204     and allow arbitrary mixing of the remaining ASEs (retain the union).  */
15205  if ((new_flags & EF_MIPS_ARCH_ASE) != (old_flags & EF_MIPS_ARCH_ASE))
15206    {
15207      int old_micro = old_flags & EF_MIPS_ARCH_ASE_MICROMIPS;
15208      int new_micro = new_flags & EF_MIPS_ARCH_ASE_MICROMIPS;
15209      int old_m16 = old_flags & EF_MIPS_ARCH_ASE_M16;
15210      int new_m16 = new_flags & EF_MIPS_ARCH_ASE_M16;
15211      int micro_mis = old_m16 && new_micro;
15212      int m16_mis = old_micro && new_m16;
15213
15214      if (m16_mis || micro_mis)
15215	{
15216	  _bfd_error_handler
15217	    /* xgettext:c-format */
15218	    (_("%B: ASE mismatch: linking %s module with previous %s modules"),
15219	     ibfd,
15220	     m16_mis ? "MIPS16" : "microMIPS",
15221	     m16_mis ? "microMIPS" : "MIPS16");
15222	  ok = FALSE;
15223	}
15224
15225      elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ARCH_ASE;
15226
15227      new_flags &= ~ EF_MIPS_ARCH_ASE;
15228      old_flags &= ~ EF_MIPS_ARCH_ASE;
15229    }
15230
15231  /* Compare NaN encodings.  */
15232  if ((new_flags & EF_MIPS_NAN2008) != (old_flags & EF_MIPS_NAN2008))
15233    {
15234      /* xgettext:c-format */
15235      _bfd_error_handler (_("%B: linking %s module with previous %s modules"),
15236			  ibfd,
15237			  (new_flags & EF_MIPS_NAN2008
15238			   ? "-mnan=2008" : "-mnan=legacy"),
15239			  (old_flags & EF_MIPS_NAN2008
15240			   ? "-mnan=2008" : "-mnan=legacy"));
15241      ok = FALSE;
15242      new_flags &= ~EF_MIPS_NAN2008;
15243      old_flags &= ~EF_MIPS_NAN2008;
15244    }
15245
15246  /* Compare FP64 state.  */
15247  if ((new_flags & EF_MIPS_FP64) != (old_flags & EF_MIPS_FP64))
15248    {
15249      /* xgettext:c-format */
15250      _bfd_error_handler (_("%B: linking %s module with previous %s modules"),
15251			  ibfd,
15252			  (new_flags & EF_MIPS_FP64
15253			   ? "-mfp64" : "-mfp32"),
15254			  (old_flags & EF_MIPS_FP64
15255			   ? "-mfp64" : "-mfp32"));
15256      ok = FALSE;
15257      new_flags &= ~EF_MIPS_FP64;
15258      old_flags &= ~EF_MIPS_FP64;
15259    }
15260
15261  /* Warn about any other mismatches */
15262  if (new_flags != old_flags)
15263    {
15264      /* xgettext:c-format */
15265      _bfd_error_handler
15266	(_("%B: uses different e_flags (0x%lx) fields than previous modules "
15267	   "(0x%lx)"),
15268	 ibfd, (unsigned long) new_flags,
15269	 (unsigned long) old_flags);
15270      ok = FALSE;
15271    }
15272
15273  return ok;
15274}
15275
15276/* Merge object attributes from IBFD into OBFD.  Raise an error if
15277   there are conflicting attributes.  */
15278static bfd_boolean
15279mips_elf_merge_obj_attributes (bfd *ibfd, struct bfd_link_info *info)
15280{
15281  bfd *obfd = info->output_bfd;
15282  obj_attribute *in_attr;
15283  obj_attribute *out_attr;
15284  bfd *abi_fp_bfd;
15285  bfd *abi_msa_bfd;
15286
15287  abi_fp_bfd = mips_elf_tdata (obfd)->abi_fp_bfd;
15288  in_attr = elf_known_obj_attributes (ibfd)[OBJ_ATTR_GNU];
15289  if (!abi_fp_bfd && in_attr[Tag_GNU_MIPS_ABI_FP].i != Val_GNU_MIPS_ABI_FP_ANY)
15290    mips_elf_tdata (obfd)->abi_fp_bfd = ibfd;
15291
15292  abi_msa_bfd = mips_elf_tdata (obfd)->abi_msa_bfd;
15293  if (!abi_msa_bfd
15294      && in_attr[Tag_GNU_MIPS_ABI_MSA].i != Val_GNU_MIPS_ABI_MSA_ANY)
15295    mips_elf_tdata (obfd)->abi_msa_bfd = ibfd;
15296
15297  if (!elf_known_obj_attributes_proc (obfd)[0].i)
15298    {
15299      /* This is the first object.  Copy the attributes.  */
15300      _bfd_elf_copy_obj_attributes (ibfd, obfd);
15301
15302      /* Use the Tag_null value to indicate the attributes have been
15303	 initialized.  */
15304      elf_known_obj_attributes_proc (obfd)[0].i = 1;
15305
15306      return TRUE;
15307    }
15308
15309  /* Check for conflicting Tag_GNU_MIPS_ABI_FP attributes and merge
15310     non-conflicting ones.  */
15311  out_attr = elf_known_obj_attributes (obfd)[OBJ_ATTR_GNU];
15312  if (in_attr[Tag_GNU_MIPS_ABI_FP].i != out_attr[Tag_GNU_MIPS_ABI_FP].i)
15313    {
15314      int out_fp, in_fp;
15315
15316      out_fp = out_attr[Tag_GNU_MIPS_ABI_FP].i;
15317      in_fp = in_attr[Tag_GNU_MIPS_ABI_FP].i;
15318      out_attr[Tag_GNU_MIPS_ABI_FP].type = 1;
15319      if (out_fp == Val_GNU_MIPS_ABI_FP_ANY)
15320	out_attr[Tag_GNU_MIPS_ABI_FP].i = in_fp;
15321      else if (out_fp == Val_GNU_MIPS_ABI_FP_XX
15322	       && (in_fp == Val_GNU_MIPS_ABI_FP_DOUBLE
15323		   || in_fp == Val_GNU_MIPS_ABI_FP_64
15324		   || in_fp == Val_GNU_MIPS_ABI_FP_64A))
15325	{
15326	  mips_elf_tdata (obfd)->abi_fp_bfd = ibfd;
15327	  out_attr[Tag_GNU_MIPS_ABI_FP].i = in_attr[Tag_GNU_MIPS_ABI_FP].i;
15328	}
15329      else if (in_fp == Val_GNU_MIPS_ABI_FP_XX
15330	       && (out_fp == Val_GNU_MIPS_ABI_FP_DOUBLE
15331		   || out_fp == Val_GNU_MIPS_ABI_FP_64
15332		   || out_fp == Val_GNU_MIPS_ABI_FP_64A))
15333	/* Keep the current setting.  */;
15334      else if (out_fp == Val_GNU_MIPS_ABI_FP_64A
15335	       && in_fp == Val_GNU_MIPS_ABI_FP_64)
15336	{
15337	  mips_elf_tdata (obfd)->abi_fp_bfd = ibfd;
15338	  out_attr[Tag_GNU_MIPS_ABI_FP].i = in_attr[Tag_GNU_MIPS_ABI_FP].i;
15339	}
15340      else if (in_fp == Val_GNU_MIPS_ABI_FP_64A
15341	       && out_fp == Val_GNU_MIPS_ABI_FP_64)
15342	/* Keep the current setting.  */;
15343      else if (in_fp != Val_GNU_MIPS_ABI_FP_ANY)
15344	{
15345	  const char *out_string, *in_string;
15346
15347	  out_string = _bfd_mips_fp_abi_string (out_fp);
15348	  in_string = _bfd_mips_fp_abi_string (in_fp);
15349	  /* First warn about cases involving unrecognised ABIs.  */
15350	  if (!out_string && !in_string)
15351	    /* xgettext:c-format */
15352	    _bfd_error_handler
15353	      (_("Warning: %B uses unknown floating point ABI %d "
15354		 "(set by %B), %B uses unknown floating point ABI %d"),
15355	       obfd, abi_fp_bfd, ibfd, out_fp, in_fp);
15356	  else if (!out_string)
15357	    _bfd_error_handler
15358	      /* xgettext:c-format */
15359	      (_("Warning: %B uses unknown floating point ABI %d "
15360		 "(set by %B), %B uses %s"),
15361	       obfd, abi_fp_bfd, ibfd, out_fp, in_string);
15362	  else if (!in_string)
15363	    _bfd_error_handler
15364	      /* xgettext:c-format */
15365	      (_("Warning: %B uses %s (set by %B), "
15366		 "%B uses unknown floating point ABI %d"),
15367	       obfd, abi_fp_bfd, ibfd, out_string, in_fp);
15368	  else
15369	    {
15370	      /* If one of the bfds is soft-float, the other must be
15371		 hard-float.  The exact choice of hard-float ABI isn't
15372		 really relevant to the error message.  */
15373	      if (in_fp == Val_GNU_MIPS_ABI_FP_SOFT)
15374		out_string = "-mhard-float";
15375	      else if (out_fp == Val_GNU_MIPS_ABI_FP_SOFT)
15376		in_string = "-mhard-float";
15377	      _bfd_error_handler
15378		/* xgettext:c-format */
15379		(_("Warning: %B uses %s (set by %B), %B uses %s"),
15380		 obfd, abi_fp_bfd, ibfd, out_string, in_string);
15381	    }
15382	}
15383    }
15384
15385  /* Check for conflicting Tag_GNU_MIPS_ABI_MSA attributes and merge
15386     non-conflicting ones.  */
15387  if (in_attr[Tag_GNU_MIPS_ABI_MSA].i != out_attr[Tag_GNU_MIPS_ABI_MSA].i)
15388    {
15389      out_attr[Tag_GNU_MIPS_ABI_MSA].type = 1;
15390      if (out_attr[Tag_GNU_MIPS_ABI_MSA].i == Val_GNU_MIPS_ABI_MSA_ANY)
15391	out_attr[Tag_GNU_MIPS_ABI_MSA].i = in_attr[Tag_GNU_MIPS_ABI_MSA].i;
15392      else if (in_attr[Tag_GNU_MIPS_ABI_MSA].i != Val_GNU_MIPS_ABI_MSA_ANY)
15393	switch (out_attr[Tag_GNU_MIPS_ABI_MSA].i)
15394	  {
15395	  case Val_GNU_MIPS_ABI_MSA_128:
15396	    _bfd_error_handler
15397	      /* xgettext:c-format */
15398	      (_("Warning: %B uses %s (set by %B), "
15399		 "%B uses unknown MSA ABI %d"),
15400	       obfd, abi_msa_bfd, ibfd,
15401	       "-mmsa", in_attr[Tag_GNU_MIPS_ABI_MSA].i);
15402	    break;
15403
15404	  default:
15405	    switch (in_attr[Tag_GNU_MIPS_ABI_MSA].i)
15406	      {
15407	      case Val_GNU_MIPS_ABI_MSA_128:
15408		_bfd_error_handler
15409		  /* xgettext:c-format */
15410		  (_("Warning: %B uses unknown MSA ABI %d "
15411		     "(set by %B), %B uses %s"),
15412		     obfd, abi_msa_bfd, ibfd,
15413		     out_attr[Tag_GNU_MIPS_ABI_MSA].i, "-mmsa");
15414		  break;
15415
15416	      default:
15417		_bfd_error_handler
15418		  /* xgettext:c-format */
15419		  (_("Warning: %B uses unknown MSA ABI %d "
15420		     "(set by %B), %B uses unknown MSA ABI %d"),
15421		   obfd, abi_msa_bfd, ibfd,
15422		   out_attr[Tag_GNU_MIPS_ABI_MSA].i,
15423		   in_attr[Tag_GNU_MIPS_ABI_MSA].i);
15424		break;
15425	      }
15426	  }
15427    }
15428
15429  /* Merge Tag_compatibility attributes and any common GNU ones.  */
15430  return _bfd_elf_merge_object_attributes (ibfd, info);
15431}
15432
15433/* Merge object ABI flags from IBFD into OBFD.  Raise an error if
15434   there are conflicting settings.  */
15435
15436static bfd_boolean
15437mips_elf_merge_obj_abiflags (bfd *ibfd, bfd *obfd)
15438{
15439  obj_attribute *out_attr = elf_known_obj_attributes (obfd)[OBJ_ATTR_GNU];
15440  struct mips_elf_obj_tdata *out_tdata = mips_elf_tdata (obfd);
15441  struct mips_elf_obj_tdata *in_tdata = mips_elf_tdata (ibfd);
15442
15443  /* Update the output abiflags fp_abi using the computed fp_abi.  */
15444  out_tdata->abiflags.fp_abi = out_attr[Tag_GNU_MIPS_ABI_FP].i;
15445
15446#define max(a, b) ((a) > (b) ? (a) : (b))
15447  /* Merge abiflags.  */
15448  out_tdata->abiflags.isa_level = max (out_tdata->abiflags.isa_level,
15449				       in_tdata->abiflags.isa_level);
15450  out_tdata->abiflags.isa_rev = max (out_tdata->abiflags.isa_rev,
15451				     in_tdata->abiflags.isa_rev);
15452  out_tdata->abiflags.gpr_size = max (out_tdata->abiflags.gpr_size,
15453				      in_tdata->abiflags.gpr_size);
15454  out_tdata->abiflags.cpr1_size = max (out_tdata->abiflags.cpr1_size,
15455				       in_tdata->abiflags.cpr1_size);
15456  out_tdata->abiflags.cpr2_size = max (out_tdata->abiflags.cpr2_size,
15457				       in_tdata->abiflags.cpr2_size);
15458#undef max
15459  out_tdata->abiflags.ases |= in_tdata->abiflags.ases;
15460  out_tdata->abiflags.flags1 |= in_tdata->abiflags.flags1;
15461
15462  return TRUE;
15463}
15464
15465/* Merge backend specific data from an object file to the output
15466   object file when linking.  */
15467
15468bfd_boolean
15469_bfd_mips_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
15470{
15471  bfd *obfd = info->output_bfd;
15472  struct mips_elf_obj_tdata *out_tdata;
15473  struct mips_elf_obj_tdata *in_tdata;
15474  bfd_boolean null_input_bfd = TRUE;
15475  asection *sec;
15476  bfd_boolean ok;
15477
15478  /* Check if we have the same endianness.  */
15479  if (! _bfd_generic_verify_endian_match (ibfd, info))
15480    {
15481      _bfd_error_handler
15482	(_("%B: endianness incompatible with that of the selected emulation"),
15483	 ibfd);
15484      return FALSE;
15485    }
15486
15487  if (!is_mips_elf (ibfd) || !is_mips_elf (obfd))
15488    return TRUE;
15489
15490  in_tdata = mips_elf_tdata (ibfd);
15491  out_tdata = mips_elf_tdata (obfd);
15492
15493  if (strcmp (bfd_get_target (ibfd), bfd_get_target (obfd)) != 0)
15494    {
15495      _bfd_error_handler
15496	(_("%B: ABI is incompatible with that of the selected emulation"),
15497	 ibfd);
15498      return FALSE;
15499    }
15500
15501  /* Check to see if the input BFD actually contains any sections.  If not,
15502     then it has no attributes, and its flags may not have been initialized
15503     either, but it cannot actually cause any incompatibility.  */
15504  for (sec = ibfd->sections; sec != NULL; sec = sec->next)
15505    {
15506      /* Ignore synthetic sections and empty .text, .data and .bss sections
15507	 which are automatically generated by gas.  Also ignore fake
15508	 (s)common sections, since merely defining a common symbol does
15509	 not affect compatibility.  */
15510      if ((sec->flags & SEC_IS_COMMON) == 0
15511	  && strcmp (sec->name, ".reginfo")
15512	  && strcmp (sec->name, ".mdebug")
15513	  && (sec->size != 0
15514	      || (strcmp (sec->name, ".text")
15515		  && strcmp (sec->name, ".data")
15516		  && strcmp (sec->name, ".bss"))))
15517	{
15518	  null_input_bfd = FALSE;
15519	  break;
15520	}
15521    }
15522  if (null_input_bfd)
15523    return TRUE;
15524
15525  /* Populate abiflags using existing information.  */
15526  if (in_tdata->abiflags_valid)
15527    {
15528      obj_attribute *in_attr = elf_known_obj_attributes (ibfd)[OBJ_ATTR_GNU];
15529      Elf_Internal_ABIFlags_v0 in_abiflags;
15530      Elf_Internal_ABIFlags_v0 abiflags;
15531
15532      /* Set up the FP ABI attribute from the abiflags if it is not already
15533         set.  */
15534      if (in_attr[Tag_GNU_MIPS_ABI_FP].i == Val_GNU_MIPS_ABI_FP_ANY)
15535        in_attr[Tag_GNU_MIPS_ABI_FP].i = in_tdata->abiflags.fp_abi;
15536
15537      infer_mips_abiflags (ibfd, &abiflags);
15538      in_abiflags = in_tdata->abiflags;
15539
15540      /* It is not possible to infer the correct ISA revision
15541         for R3 or R5 so drop down to R2 for the checks.  */
15542      if (in_abiflags.isa_rev == 3 || in_abiflags.isa_rev == 5)
15543	in_abiflags.isa_rev = 2;
15544
15545      if (LEVEL_REV (in_abiflags.isa_level, in_abiflags.isa_rev)
15546	  < LEVEL_REV (abiflags.isa_level, abiflags.isa_rev))
15547	_bfd_error_handler
15548	  (_("%B: warning: Inconsistent ISA between e_flags and "
15549	     ".MIPS.abiflags"), ibfd);
15550      if (abiflags.fp_abi != Val_GNU_MIPS_ABI_FP_ANY
15551	  && in_abiflags.fp_abi != abiflags.fp_abi)
15552	_bfd_error_handler
15553	  (_("%B: warning: Inconsistent FP ABI between .gnu.attributes and "
15554	     ".MIPS.abiflags"), ibfd);
15555      if ((in_abiflags.ases & abiflags.ases) != abiflags.ases)
15556	_bfd_error_handler
15557	  (_("%B: warning: Inconsistent ASEs between e_flags and "
15558	     ".MIPS.abiflags"), ibfd);
15559      /* The isa_ext is allowed to be an extension of what can be inferred
15560	 from e_flags.  */
15561      if (!mips_mach_extends_p (bfd_mips_isa_ext_mach (abiflags.isa_ext),
15562				bfd_mips_isa_ext_mach (in_abiflags.isa_ext)))
15563	_bfd_error_handler
15564	  (_("%B: warning: Inconsistent ISA extensions between e_flags and "
15565	     ".MIPS.abiflags"), ibfd);
15566      if (in_abiflags.flags2 != 0)
15567	_bfd_error_handler
15568	  (_("%B: warning: Unexpected flag in the flags2 field of "
15569	     ".MIPS.abiflags (0x%lx)"), ibfd,
15570	   (unsigned long) in_abiflags.flags2);
15571    }
15572  else
15573    {
15574      infer_mips_abiflags (ibfd, &in_tdata->abiflags);
15575      in_tdata->abiflags_valid = TRUE;
15576    }
15577
15578  if (!out_tdata->abiflags_valid)
15579    {
15580      /* Copy input abiflags if output abiflags are not already valid.  */
15581      out_tdata->abiflags = in_tdata->abiflags;
15582      out_tdata->abiflags_valid = TRUE;
15583    }
15584
15585  if (! elf_flags_init (obfd))
15586    {
15587      elf_flags_init (obfd) = TRUE;
15588      elf_elfheader (obfd)->e_flags = elf_elfheader (ibfd)->e_flags;
15589      elf_elfheader (obfd)->e_ident[EI_CLASS]
15590	= elf_elfheader (ibfd)->e_ident[EI_CLASS];
15591
15592      if (bfd_get_arch (obfd) == bfd_get_arch (ibfd)
15593	  && (bfd_get_arch_info (obfd)->the_default
15594	      || mips_mach_extends_p (bfd_get_mach (obfd),
15595				      bfd_get_mach (ibfd))))
15596	{
15597	  if (! bfd_set_arch_mach (obfd, bfd_get_arch (ibfd),
15598				   bfd_get_mach (ibfd)))
15599	    return FALSE;
15600
15601	  /* Update the ABI flags isa_level, isa_rev and isa_ext fields.  */
15602	  update_mips_abiflags_isa (obfd, &out_tdata->abiflags);
15603	}
15604
15605      ok = TRUE;
15606    }
15607  else
15608    ok = mips_elf_merge_obj_e_flags (ibfd, info);
15609
15610  ok = mips_elf_merge_obj_attributes (ibfd, info) && ok;
15611
15612  ok = mips_elf_merge_obj_abiflags (ibfd, obfd) && ok;
15613
15614  if (!ok)
15615    {
15616      bfd_set_error (bfd_error_bad_value);
15617      return FALSE;
15618    }
15619
15620  return TRUE;
15621}
15622
15623/* Function to keep MIPS specific file flags like as EF_MIPS_PIC.  */
15624
15625bfd_boolean
15626_bfd_mips_elf_set_private_flags (bfd *abfd, flagword flags)
15627{
15628  BFD_ASSERT (!elf_flags_init (abfd)
15629	      || elf_elfheader (abfd)->e_flags == flags);
15630
15631  elf_elfheader (abfd)->e_flags = flags;
15632  elf_flags_init (abfd) = TRUE;
15633  return TRUE;
15634}
15635
15636char *
15637_bfd_mips_elf_get_target_dtag (bfd_vma dtag)
15638{
15639  switch (dtag)
15640    {
15641    default: return "";
15642    case DT_MIPS_RLD_VERSION:
15643      return "MIPS_RLD_VERSION";
15644    case DT_MIPS_TIME_STAMP:
15645      return "MIPS_TIME_STAMP";
15646    case DT_MIPS_ICHECKSUM:
15647      return "MIPS_ICHECKSUM";
15648    case DT_MIPS_IVERSION:
15649      return "MIPS_IVERSION";
15650    case DT_MIPS_FLAGS:
15651      return "MIPS_FLAGS";
15652    case DT_MIPS_BASE_ADDRESS:
15653      return "MIPS_BASE_ADDRESS";
15654    case DT_MIPS_MSYM:
15655      return "MIPS_MSYM";
15656    case DT_MIPS_CONFLICT:
15657      return "MIPS_CONFLICT";
15658    case DT_MIPS_LIBLIST:
15659      return "MIPS_LIBLIST";
15660    case DT_MIPS_LOCAL_GOTNO:
15661      return "MIPS_LOCAL_GOTNO";
15662    case DT_MIPS_CONFLICTNO:
15663      return "MIPS_CONFLICTNO";
15664    case DT_MIPS_LIBLISTNO:
15665      return "MIPS_LIBLISTNO";
15666    case DT_MIPS_SYMTABNO:
15667      return "MIPS_SYMTABNO";
15668    case DT_MIPS_UNREFEXTNO:
15669      return "MIPS_UNREFEXTNO";
15670    case DT_MIPS_GOTSYM:
15671      return "MIPS_GOTSYM";
15672    case DT_MIPS_HIPAGENO:
15673      return "MIPS_HIPAGENO";
15674    case DT_MIPS_RLD_MAP:
15675      return "MIPS_RLD_MAP";
15676    case DT_MIPS_RLD_MAP_REL:
15677      return "MIPS_RLD_MAP_REL";
15678    case DT_MIPS_DELTA_CLASS:
15679      return "MIPS_DELTA_CLASS";
15680    case DT_MIPS_DELTA_CLASS_NO:
15681      return "MIPS_DELTA_CLASS_NO";
15682    case DT_MIPS_DELTA_INSTANCE:
15683      return "MIPS_DELTA_INSTANCE";
15684    case DT_MIPS_DELTA_INSTANCE_NO:
15685      return "MIPS_DELTA_INSTANCE_NO";
15686    case DT_MIPS_DELTA_RELOC:
15687      return "MIPS_DELTA_RELOC";
15688    case DT_MIPS_DELTA_RELOC_NO:
15689      return "MIPS_DELTA_RELOC_NO";
15690    case DT_MIPS_DELTA_SYM:
15691      return "MIPS_DELTA_SYM";
15692    case DT_MIPS_DELTA_SYM_NO:
15693      return "MIPS_DELTA_SYM_NO";
15694    case DT_MIPS_DELTA_CLASSSYM:
15695      return "MIPS_DELTA_CLASSSYM";
15696    case DT_MIPS_DELTA_CLASSSYM_NO:
15697      return "MIPS_DELTA_CLASSSYM_NO";
15698    case DT_MIPS_CXX_FLAGS:
15699      return "MIPS_CXX_FLAGS";
15700    case DT_MIPS_PIXIE_INIT:
15701      return "MIPS_PIXIE_INIT";
15702    case DT_MIPS_SYMBOL_LIB:
15703      return "MIPS_SYMBOL_LIB";
15704    case DT_MIPS_LOCALPAGE_GOTIDX:
15705      return "MIPS_LOCALPAGE_GOTIDX";
15706    case DT_MIPS_LOCAL_GOTIDX:
15707      return "MIPS_LOCAL_GOTIDX";
15708    case DT_MIPS_HIDDEN_GOTIDX:
15709      return "MIPS_HIDDEN_GOTIDX";
15710    case DT_MIPS_PROTECTED_GOTIDX:
15711      return "MIPS_PROTECTED_GOT_IDX";
15712    case DT_MIPS_OPTIONS:
15713      return "MIPS_OPTIONS";
15714    case DT_MIPS_INTERFACE:
15715      return "MIPS_INTERFACE";
15716    case DT_MIPS_DYNSTR_ALIGN:
15717      return "DT_MIPS_DYNSTR_ALIGN";
15718    case DT_MIPS_INTERFACE_SIZE:
15719      return "DT_MIPS_INTERFACE_SIZE";
15720    case DT_MIPS_RLD_TEXT_RESOLVE_ADDR:
15721      return "DT_MIPS_RLD_TEXT_RESOLVE_ADDR";
15722    case DT_MIPS_PERF_SUFFIX:
15723      return "DT_MIPS_PERF_SUFFIX";
15724    case DT_MIPS_COMPACT_SIZE:
15725      return "DT_MIPS_COMPACT_SIZE";
15726    case DT_MIPS_GP_VALUE:
15727      return "DT_MIPS_GP_VALUE";
15728    case DT_MIPS_AUX_DYNAMIC:
15729      return "DT_MIPS_AUX_DYNAMIC";
15730    case DT_MIPS_PLTGOT:
15731      return "DT_MIPS_PLTGOT";
15732    case DT_MIPS_RWPLT:
15733      return "DT_MIPS_RWPLT";
15734    }
15735}
15736
15737/* Return the meaning of Tag_GNU_MIPS_ABI_FP value FP, or null if
15738   not known.  */
15739
15740const char *
15741_bfd_mips_fp_abi_string (int fp)
15742{
15743  switch (fp)
15744    {
15745      /* These strings aren't translated because they're simply
15746	 option lists.  */
15747    case Val_GNU_MIPS_ABI_FP_DOUBLE:
15748      return "-mdouble-float";
15749
15750    case Val_GNU_MIPS_ABI_FP_SINGLE:
15751      return "-msingle-float";
15752
15753    case Val_GNU_MIPS_ABI_FP_SOFT:
15754      return "-msoft-float";
15755
15756    case Val_GNU_MIPS_ABI_FP_OLD_64:
15757      return _("-mips32r2 -mfp64 (12 callee-saved)");
15758
15759    case Val_GNU_MIPS_ABI_FP_XX:
15760      return "-mfpxx";
15761
15762    case Val_GNU_MIPS_ABI_FP_64:
15763      return "-mgp32 -mfp64";
15764
15765    case Val_GNU_MIPS_ABI_FP_64A:
15766      return "-mgp32 -mfp64 -mno-odd-spreg";
15767
15768    default:
15769      return 0;
15770    }
15771}
15772
15773static void
15774print_mips_ases (FILE *file, unsigned int mask)
15775{
15776  if (mask & AFL_ASE_DSP)
15777    fputs ("\n\tDSP ASE", file);
15778  if (mask & AFL_ASE_DSPR2)
15779    fputs ("\n\tDSP R2 ASE", file);
15780  if (mask & AFL_ASE_DSPR3)
15781    fputs ("\n\tDSP R3 ASE", file);
15782  if (mask & AFL_ASE_EVA)
15783    fputs ("\n\tEnhanced VA Scheme", file);
15784  if (mask & AFL_ASE_MCU)
15785    fputs ("\n\tMCU (MicroController) ASE", file);
15786  if (mask & AFL_ASE_MDMX)
15787    fputs ("\n\tMDMX ASE", file);
15788  if (mask & AFL_ASE_MIPS3D)
15789    fputs ("\n\tMIPS-3D ASE", file);
15790  if (mask & AFL_ASE_MT)
15791    fputs ("\n\tMT ASE", file);
15792  if (mask & AFL_ASE_SMARTMIPS)
15793    fputs ("\n\tSmartMIPS ASE", file);
15794  if (mask & AFL_ASE_VIRT)
15795    fputs ("\n\tVZ ASE", file);
15796  if (mask & AFL_ASE_MSA)
15797    fputs ("\n\tMSA ASE", file);
15798  if (mask & AFL_ASE_MIPS16)
15799    fputs ("\n\tMIPS16 ASE", file);
15800  if (mask & AFL_ASE_MICROMIPS)
15801    fputs ("\n\tMICROMIPS ASE", file);
15802  if (mask & AFL_ASE_XPA)
15803    fputs ("\n\tXPA ASE", file);
15804  if (mask == 0)
15805    fprintf (file, "\n\t%s", _("None"));
15806  else if ((mask & ~AFL_ASE_MASK) != 0)
15807    fprintf (stdout, "\n\t%s (%x)", _("Unknown"), mask & ~AFL_ASE_MASK);
15808}
15809
15810static void
15811print_mips_isa_ext (FILE *file, unsigned int isa_ext)
15812{
15813  switch (isa_ext)
15814    {
15815    case 0:
15816      fputs (_("None"), file);
15817      break;
15818    case AFL_EXT_XLR:
15819      fputs ("RMI XLR", file);
15820      break;
15821    case AFL_EXT_OCTEON3:
15822      fputs ("Cavium Networks Octeon3", file);
15823      break;
15824    case AFL_EXT_OCTEON2:
15825      fputs ("Cavium Networks Octeon2", file);
15826      break;
15827    case AFL_EXT_OCTEONP:
15828      fputs ("Cavium Networks OcteonP", file);
15829      break;
15830    case AFL_EXT_LOONGSON_3A:
15831      fputs ("Loongson 3A", file);
15832      break;
15833    case AFL_EXT_OCTEON:
15834      fputs ("Cavium Networks Octeon", file);
15835      break;
15836    case AFL_EXT_5900:
15837      fputs ("Toshiba R5900", file);
15838      break;
15839    case AFL_EXT_4650:
15840      fputs ("MIPS R4650", file);
15841      break;
15842    case AFL_EXT_4010:
15843      fputs ("LSI R4010", file);
15844      break;
15845    case AFL_EXT_4100:
15846      fputs ("NEC VR4100", file);
15847      break;
15848    case AFL_EXT_3900:
15849      fputs ("Toshiba R3900", file);
15850      break;
15851    case AFL_EXT_10000:
15852      fputs ("MIPS R10000", file);
15853      break;
15854    case AFL_EXT_SB1:
15855      fputs ("Broadcom SB-1", file);
15856      break;
15857    case AFL_EXT_4111:
15858      fputs ("NEC VR4111/VR4181", file);
15859      break;
15860    case AFL_EXT_4120:
15861      fputs ("NEC VR4120", file);
15862      break;
15863    case AFL_EXT_5400:
15864      fputs ("NEC VR5400", file);
15865      break;
15866    case AFL_EXT_5500:
15867      fputs ("NEC VR5500", file);
15868      break;
15869    case AFL_EXT_LOONGSON_2E:
15870      fputs ("ST Microelectronics Loongson 2E", file);
15871      break;
15872    case AFL_EXT_LOONGSON_2F:
15873      fputs ("ST Microelectronics Loongson 2F", file);
15874      break;
15875    default:
15876      fprintf (file, "%s (%d)", _("Unknown"), isa_ext);
15877      break;
15878    }
15879}
15880
15881static void
15882print_mips_fp_abi_value (FILE *file, int val)
15883{
15884  switch (val)
15885    {
15886    case Val_GNU_MIPS_ABI_FP_ANY:
15887      fprintf (file, _("Hard or soft float\n"));
15888      break;
15889    case Val_GNU_MIPS_ABI_FP_DOUBLE:
15890      fprintf (file, _("Hard float (double precision)\n"));
15891      break;
15892    case Val_GNU_MIPS_ABI_FP_SINGLE:
15893      fprintf (file, _("Hard float (single precision)\n"));
15894      break;
15895    case Val_GNU_MIPS_ABI_FP_SOFT:
15896      fprintf (file, _("Soft float\n"));
15897      break;
15898    case Val_GNU_MIPS_ABI_FP_OLD_64:
15899      fprintf (file, _("Hard float (MIPS32r2 64-bit FPU 12 callee-saved)\n"));
15900      break;
15901    case Val_GNU_MIPS_ABI_FP_XX:
15902      fprintf (file, _("Hard float (32-bit CPU, Any FPU)\n"));
15903      break;
15904    case Val_GNU_MIPS_ABI_FP_64:
15905      fprintf (file, _("Hard float (32-bit CPU, 64-bit FPU)\n"));
15906      break;
15907    case Val_GNU_MIPS_ABI_FP_64A:
15908      fprintf (file, _("Hard float compat (32-bit CPU, 64-bit FPU)\n"));
15909      break;
15910    default:
15911      fprintf (file, "??? (%d)\n", val);
15912      break;
15913    }
15914}
15915
15916static int
15917get_mips_reg_size (int reg_size)
15918{
15919  return (reg_size == AFL_REG_NONE) ? 0
15920	 : (reg_size == AFL_REG_32) ? 32
15921	 : (reg_size == AFL_REG_64) ? 64
15922	 : (reg_size == AFL_REG_128) ? 128
15923	 : -1;
15924}
15925
15926bfd_boolean
15927_bfd_mips_elf_print_private_bfd_data (bfd *abfd, void *ptr)
15928{
15929  FILE *file = ptr;
15930
15931  BFD_ASSERT (abfd != NULL && ptr != NULL);
15932
15933  /* Print normal ELF private data.  */
15934  _bfd_elf_print_private_bfd_data (abfd, ptr);
15935
15936  /* xgettext:c-format */
15937  fprintf (file, _("private flags = %lx:"), elf_elfheader (abfd)->e_flags);
15938
15939  if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O32)
15940    fprintf (file, _(" [abi=O32]"));
15941  else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O64)
15942    fprintf (file, _(" [abi=O64]"));
15943  else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32)
15944    fprintf (file, _(" [abi=EABI32]"));
15945  else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI64)
15946    fprintf (file, _(" [abi=EABI64]"));
15947  else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI))
15948    fprintf (file, _(" [abi unknown]"));
15949  else if (ABI_N32_P (abfd))
15950    fprintf (file, _(" [abi=N32]"));
15951  else if (ABI_64_P (abfd))
15952    fprintf (file, _(" [abi=64]"));
15953  else
15954    fprintf (file, _(" [no abi set]"));
15955
15956  if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1)
15957    fprintf (file, " [mips1]");
15958  else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2)
15959    fprintf (file, " [mips2]");
15960  else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_3)
15961    fprintf (file, " [mips3]");
15962  else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_4)
15963    fprintf (file, " [mips4]");
15964  else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_5)
15965    fprintf (file, " [mips5]");
15966  else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32)
15967    fprintf (file, " [mips32]");
15968  else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64)
15969    fprintf (file, " [mips64]");
15970  else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2)
15971    fprintf (file, " [mips32r2]");
15972  else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64R2)
15973    fprintf (file, " [mips64r2]");
15974  else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R6)
15975    fprintf (file, " [mips32r6]");
15976  else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64R6)
15977    fprintf (file, " [mips64r6]");
15978  else
15979    fprintf (file, _(" [unknown ISA]"));
15980
15981  if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MDMX)
15982    fprintf (file, " [mdmx]");
15983
15984  if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_M16)
15985    fprintf (file, " [mips16]");
15986
15987  if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MICROMIPS)
15988    fprintf (file, " [micromips]");
15989
15990  if (elf_elfheader (abfd)->e_flags & EF_MIPS_NAN2008)
15991    fprintf (file, " [nan2008]");
15992
15993  if (elf_elfheader (abfd)->e_flags & EF_MIPS_FP64)
15994    fprintf (file, " [old fp64]");
15995
15996  if (elf_elfheader (abfd)->e_flags & EF_MIPS_32BITMODE)
15997    fprintf (file, " [32bitmode]");
15998  else
15999    fprintf (file, _(" [not 32bitmode]"));
16000
16001  if (elf_elfheader (abfd)->e_flags & EF_MIPS_NOREORDER)
16002    fprintf (file, " [noreorder]");
16003
16004  if (elf_elfheader (abfd)->e_flags & EF_MIPS_PIC)
16005    fprintf (file, " [PIC]");
16006
16007  if (elf_elfheader (abfd)->e_flags & EF_MIPS_CPIC)
16008    fprintf (file, " [CPIC]");
16009
16010  if (elf_elfheader (abfd)->e_flags & EF_MIPS_XGOT)
16011    fprintf (file, " [XGOT]");
16012
16013  if (elf_elfheader (abfd)->e_flags & EF_MIPS_UCODE)
16014    fprintf (file, " [UCODE]");
16015
16016  fputc ('\n', file);
16017
16018  if (mips_elf_tdata (abfd)->abiflags_valid)
16019    {
16020      Elf_Internal_ABIFlags_v0 *abiflags = &mips_elf_tdata (abfd)->abiflags;
16021      fprintf (file, "\nMIPS ABI Flags Version: %d\n", abiflags->version);
16022      fprintf (file, "\nISA: MIPS%d", abiflags->isa_level);
16023      if (abiflags->isa_rev > 1)
16024	fprintf (file, "r%d", abiflags->isa_rev);
16025      fprintf (file, "\nGPR size: %d",
16026	       get_mips_reg_size (abiflags->gpr_size));
16027      fprintf (file, "\nCPR1 size: %d",
16028	       get_mips_reg_size (abiflags->cpr1_size));
16029      fprintf (file, "\nCPR2 size: %d",
16030	       get_mips_reg_size (abiflags->cpr2_size));
16031      fputs ("\nFP ABI: ", file);
16032      print_mips_fp_abi_value (file, abiflags->fp_abi);
16033      fputs ("ISA Extension: ", file);
16034      print_mips_isa_ext (file, abiflags->isa_ext);
16035      fputs ("\nASEs:", file);
16036      print_mips_ases (file, abiflags->ases);
16037      fprintf (file, "\nFLAGS 1: %8.8lx", abiflags->flags1);
16038      fprintf (file, "\nFLAGS 2: %8.8lx", abiflags->flags2);
16039      fputc ('\n', file);
16040    }
16041
16042  return TRUE;
16043}
16044
16045const struct bfd_elf_special_section _bfd_mips_elf_special_sections[] =
16046{
16047  { STRING_COMMA_LEN (".lit4"),   0, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
16048  { STRING_COMMA_LEN (".lit8"),   0, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
16049  { STRING_COMMA_LEN (".mdebug"), 0, SHT_MIPS_DEBUG, 0 },
16050  { STRING_COMMA_LEN (".sbss"),  -2, SHT_NOBITS,     SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
16051  { STRING_COMMA_LEN (".sdata"), -2, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
16052  { STRING_COMMA_LEN (".ucode"),  0, SHT_MIPS_UCODE, 0 },
16053  { NULL,                     0,  0, 0,              0 }
16054};
16055
16056/* Merge non visibility st_other attributes.  Ensure that the
16057   STO_OPTIONAL flag is copied into h->other, even if this is not a
16058   definiton of the symbol.  */
16059void
16060_bfd_mips_elf_merge_symbol_attribute (struct elf_link_hash_entry *h,
16061				      const Elf_Internal_Sym *isym,
16062				      bfd_boolean definition,
16063				      bfd_boolean dynamic ATTRIBUTE_UNUSED)
16064{
16065  if ((isym->st_other & ~ELF_ST_VISIBILITY (-1)) != 0)
16066    {
16067      unsigned char other;
16068
16069      other = (definition ? isym->st_other : h->other);
16070      other &= ~ELF_ST_VISIBILITY (-1);
16071      h->other = other | ELF_ST_VISIBILITY (h->other);
16072    }
16073
16074  if (!definition
16075      && ELF_MIPS_IS_OPTIONAL (isym->st_other))
16076    h->other |= STO_OPTIONAL;
16077}
16078
16079/* Decide whether an undefined symbol is special and can be ignored.
16080   This is the case for OPTIONAL symbols on IRIX.  */
16081bfd_boolean
16082_bfd_mips_elf_ignore_undef_symbol (struct elf_link_hash_entry *h)
16083{
16084  return ELF_MIPS_IS_OPTIONAL (h->other) ? TRUE : FALSE;
16085}
16086
16087bfd_boolean
16088_bfd_mips_elf_common_definition (Elf_Internal_Sym *sym)
16089{
16090  return (sym->st_shndx == SHN_COMMON
16091	  || sym->st_shndx == SHN_MIPS_ACOMMON
16092	  || sym->st_shndx == SHN_MIPS_SCOMMON);
16093}
16094
16095/* Return address for Ith PLT stub in section PLT, for relocation REL
16096   or (bfd_vma) -1 if it should not be included.  */
16097
16098bfd_vma
16099_bfd_mips_elf_plt_sym_val (bfd_vma i, const asection *plt,
16100			   const arelent *rel ATTRIBUTE_UNUSED)
16101{
16102  return (plt->vma
16103	  + 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry)
16104	  + i * 4 * ARRAY_SIZE (mips_exec_plt_entry));
16105}
16106
16107/* Build a table of synthetic symbols to represent the PLT.  As with MIPS16
16108   and microMIPS PLT slots we may have a many-to-one mapping between .plt
16109   and .got.plt and also the slots may be of a different size each we walk
16110   the PLT manually fetching instructions and matching them against known
16111   patterns.  To make things easier standard MIPS slots, if any, always come
16112   first.  As we don't create proper ELF symbols we use the UDATA.I member
16113   of ASYMBOL to carry ISA annotation.  The encoding used is the same as
16114   with the ST_OTHER member of the ELF symbol.  */
16115
16116long
16117_bfd_mips_elf_get_synthetic_symtab (bfd *abfd,
16118				    long symcount ATTRIBUTE_UNUSED,
16119				    asymbol **syms ATTRIBUTE_UNUSED,
16120				    long dynsymcount, asymbol **dynsyms,
16121				    asymbol **ret)
16122{
16123  static const char pltname[] = "_PROCEDURE_LINKAGE_TABLE_";
16124  static const char microsuffix[] = "@micromipsplt";
16125  static const char m16suffix[] = "@mips16plt";
16126  static const char mipssuffix[] = "@plt";
16127
16128  bfd_boolean (*slurp_relocs) (bfd *, asection *, asymbol **, bfd_boolean);
16129  const struct elf_backend_data *bed = get_elf_backend_data (abfd);
16130  bfd_boolean micromips_p = MICROMIPS_P (abfd);
16131  Elf_Internal_Shdr *hdr;
16132  bfd_byte *plt_data;
16133  bfd_vma plt_offset;
16134  unsigned int other;
16135  bfd_vma entry_size;
16136  bfd_vma plt0_size;
16137  asection *relplt;
16138  bfd_vma opcode;
16139  asection *plt;
16140  asymbol *send;
16141  size_t size;
16142  char *names;
16143  long counti;
16144  arelent *p;
16145  asymbol *s;
16146  char *nend;
16147  long count;
16148  long pi;
16149  long i;
16150  long n;
16151
16152  *ret = NULL;
16153
16154  if ((abfd->flags & (DYNAMIC | EXEC_P)) == 0 || dynsymcount <= 0)
16155    return 0;
16156
16157  relplt = bfd_get_section_by_name (abfd, ".rel.plt");
16158  if (relplt == NULL)
16159    return 0;
16160
16161  hdr = &elf_section_data (relplt)->this_hdr;
16162  if (hdr->sh_link != elf_dynsymtab (abfd) || hdr->sh_type != SHT_REL)
16163    return 0;
16164
16165  plt = bfd_get_section_by_name (abfd, ".plt");
16166  if (plt == NULL)
16167    return 0;
16168
16169  slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
16170  if (!(*slurp_relocs) (abfd, relplt, dynsyms, TRUE))
16171    return -1;
16172  p = relplt->relocation;
16173
16174  /* Calculating the exact amount of space required for symbols would
16175     require two passes over the PLT, so just pessimise assuming two
16176     PLT slots per relocation.  */
16177  count = relplt->size / hdr->sh_entsize;
16178  counti = count * bed->s->int_rels_per_ext_rel;
16179  size = 2 * count * sizeof (asymbol);
16180  size += count * (sizeof (mipssuffix) +
16181		   (micromips_p ? sizeof (microsuffix) : sizeof (m16suffix)));
16182  for (pi = 0; pi < counti; pi += bed->s->int_rels_per_ext_rel)
16183    size += 2 * strlen ((*p[pi].sym_ptr_ptr)->name);
16184
16185  /* Add the size of "_PROCEDURE_LINKAGE_TABLE_" too.  */
16186  size += sizeof (asymbol) + sizeof (pltname);
16187
16188  if (!bfd_malloc_and_get_section (abfd, plt, &plt_data))
16189    return -1;
16190
16191  if (plt->size < 16)
16192    return -1;
16193
16194  s = *ret = bfd_malloc (size);
16195  if (s == NULL)
16196    return -1;
16197  send = s + 2 * count + 1;
16198
16199  names = (char *) send;
16200  nend = (char *) s + size;
16201  n = 0;
16202
16203  opcode = bfd_get_micromips_32 (abfd, plt_data + 12);
16204  if (opcode == 0x3302fffe)
16205    {
16206      if (!micromips_p)
16207	return -1;
16208      plt0_size = 2 * ARRAY_SIZE (micromips_o32_exec_plt0_entry);
16209      other = STO_MICROMIPS;
16210    }
16211  else if (opcode == 0x0398c1d0)
16212    {
16213      if (!micromips_p)
16214	return -1;
16215      plt0_size = 2 * ARRAY_SIZE (micromips_insn32_o32_exec_plt0_entry);
16216      other = STO_MICROMIPS;
16217    }
16218  else
16219    {
16220      plt0_size = 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry);
16221      other = 0;
16222    }
16223
16224  s->the_bfd = abfd;
16225  s->flags = BSF_SYNTHETIC | BSF_FUNCTION | BSF_LOCAL;
16226  s->section = plt;
16227  s->value = 0;
16228  s->name = names;
16229  s->udata.i = other;
16230  memcpy (names, pltname, sizeof (pltname));
16231  names += sizeof (pltname);
16232  ++s, ++n;
16233
16234  pi = 0;
16235  for (plt_offset = plt0_size;
16236       plt_offset + 8 <= plt->size && s < send;
16237       plt_offset += entry_size)
16238    {
16239      bfd_vma gotplt_addr;
16240      const char *suffix;
16241      bfd_vma gotplt_hi;
16242      bfd_vma gotplt_lo;
16243      size_t suffixlen;
16244
16245      opcode = bfd_get_micromips_32 (abfd, plt_data + plt_offset + 4);
16246
16247      /* Check if the second word matches the expected MIPS16 instruction.  */
16248      if (opcode == 0x651aeb00)
16249	{
16250	  if (micromips_p)
16251	    return -1;
16252	  /* Truncated table???  */
16253	  if (plt_offset + 16 > plt->size)
16254	    break;
16255	  gotplt_addr = bfd_get_32 (abfd, plt_data + plt_offset + 12);
16256	  entry_size = 2 * ARRAY_SIZE (mips16_o32_exec_plt_entry);
16257	  suffixlen = sizeof (m16suffix);
16258	  suffix = m16suffix;
16259	  other = STO_MIPS16;
16260	}
16261      /* Likewise the expected microMIPS instruction (no insn32 mode).  */
16262      else if (opcode == 0xff220000)
16263	{
16264	  if (!micromips_p)
16265	    return -1;
16266	  gotplt_hi = bfd_get_16 (abfd, plt_data + plt_offset) & 0x7f;
16267	  gotplt_lo = bfd_get_16 (abfd, plt_data + plt_offset + 2) & 0xffff;
16268	  gotplt_hi = ((gotplt_hi ^ 0x40) - 0x40) << 18;
16269	  gotplt_lo <<= 2;
16270	  gotplt_addr = gotplt_hi + gotplt_lo;
16271	  gotplt_addr += ((plt->vma + plt_offset) | 3) ^ 3;
16272	  entry_size = 2 * ARRAY_SIZE (micromips_o32_exec_plt_entry);
16273	  suffixlen = sizeof (microsuffix);
16274	  suffix = microsuffix;
16275	  other = STO_MICROMIPS;
16276	}
16277      /* Likewise the expected microMIPS instruction (insn32 mode).  */
16278      else if ((opcode & 0xffff0000) == 0xff2f0000)
16279	{
16280	  gotplt_hi = bfd_get_16 (abfd, plt_data + plt_offset + 2) & 0xffff;
16281	  gotplt_lo = bfd_get_16 (abfd, plt_data + plt_offset + 6) & 0xffff;
16282	  gotplt_hi = ((gotplt_hi ^ 0x8000) - 0x8000) << 16;
16283	  gotplt_lo = (gotplt_lo ^ 0x8000) - 0x8000;
16284	  gotplt_addr = gotplt_hi + gotplt_lo;
16285	  entry_size = 2 * ARRAY_SIZE (micromips_insn32_o32_exec_plt_entry);
16286	  suffixlen = sizeof (microsuffix);
16287	  suffix = microsuffix;
16288	  other = STO_MICROMIPS;
16289	}
16290      /* Otherwise assume standard MIPS code.  */
16291      else
16292	{
16293	  gotplt_hi = bfd_get_32 (abfd, plt_data + plt_offset) & 0xffff;
16294	  gotplt_lo = bfd_get_32 (abfd, plt_data + plt_offset + 4) & 0xffff;
16295	  gotplt_hi = ((gotplt_hi ^ 0x8000) - 0x8000) << 16;
16296	  gotplt_lo = (gotplt_lo ^ 0x8000) - 0x8000;
16297	  gotplt_addr = gotplt_hi + gotplt_lo;
16298	  entry_size = 4 * ARRAY_SIZE (mips_exec_plt_entry);
16299	  suffixlen = sizeof (mipssuffix);
16300	  suffix = mipssuffix;
16301	  other = 0;
16302	}
16303      /* Truncated table???  */
16304      if (plt_offset + entry_size > plt->size)
16305	break;
16306
16307      for (i = 0;
16308	   i < count && p[pi].address != gotplt_addr;
16309	   i++, pi = (pi + bed->s->int_rels_per_ext_rel) % counti);
16310
16311      if (i < count)
16312	{
16313	  size_t namelen;
16314	  size_t len;
16315
16316	  *s = **p[pi].sym_ptr_ptr;
16317	  /* Undefined syms won't have BSF_LOCAL or BSF_GLOBAL set.  Since
16318	     we are defining a symbol, ensure one of them is set.  */
16319	  if ((s->flags & BSF_LOCAL) == 0)
16320	    s->flags |= BSF_GLOBAL;
16321	  s->flags |= BSF_SYNTHETIC;
16322	  s->section = plt;
16323	  s->value = plt_offset;
16324	  s->name = names;
16325	  s->udata.i = other;
16326
16327	  len = strlen ((*p[pi].sym_ptr_ptr)->name);
16328	  namelen = len + suffixlen;
16329	  if (names + namelen > nend)
16330	    break;
16331
16332	  memcpy (names, (*p[pi].sym_ptr_ptr)->name, len);
16333	  names += len;
16334	  memcpy (names, suffix, suffixlen);
16335	  names += suffixlen;
16336
16337	  ++s, ++n;
16338	  pi = (pi + bed->s->int_rels_per_ext_rel) % counti;
16339	}
16340    }
16341
16342  free (plt_data);
16343
16344  return n;
16345}
16346
16347/* Return the ABI flags associated with ABFD if available.  */
16348
16349Elf_Internal_ABIFlags_v0 *
16350bfd_mips_elf_get_abiflags (bfd *abfd)
16351{
16352  struct mips_elf_obj_tdata *tdata = mips_elf_tdata (abfd);
16353
16354  return tdata->abiflags_valid ? &tdata->abiflags : NULL;
16355}
16356
16357void
16358_bfd_mips_post_process_headers (bfd *abfd, struct bfd_link_info *link_info)
16359{
16360  struct mips_elf_link_hash_table *htab;
16361  Elf_Internal_Ehdr *i_ehdrp;
16362
16363  i_ehdrp = elf_elfheader (abfd);
16364  if (link_info)
16365    {
16366      htab = mips_elf_hash_table (link_info);
16367      BFD_ASSERT (htab != NULL);
16368
16369      if (htab->use_plts_and_copy_relocs && !htab->is_vxworks)
16370	i_ehdrp->e_ident[EI_ABIVERSION] = 1;
16371    }
16372
16373  _bfd_elf_post_process_headers (abfd, link_info);
16374
16375  if (mips_elf_tdata (abfd)->abiflags.fp_abi == Val_GNU_MIPS_ABI_FP_64
16376      || mips_elf_tdata (abfd)->abiflags.fp_abi == Val_GNU_MIPS_ABI_FP_64A)
16377    i_ehdrp->e_ident[EI_ABIVERSION] = 3;
16378}
16379
16380int
16381_bfd_mips_elf_compact_eh_encoding (struct bfd_link_info *link_info ATTRIBUTE_UNUSED)
16382{
16383  return DW_EH_PE_pcrel | DW_EH_PE_sdata4;
16384}
16385
16386/* Return the opcode for can't unwind.  */
16387
16388int
16389_bfd_mips_elf_cant_unwind_opcode (struct bfd_link_info *link_info ATTRIBUTE_UNUSED)
16390{
16391  return COMPACT_EH_CANT_UNWIND_OPCODE;
16392}
16393