xref: /netbsd-src/external/gpl3/gdb/dist/bfd/elfxx-mips.c (revision 413d532bcc3f62d122e56d92e13ac64825a40baf)
1 /* MIPS-specific support for ELF
2    Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
3    2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
4    Free Software Foundation, Inc.
5 
6    Most of the information added by Ian Lance Taylor, Cygnus Support,
7    <ian@cygnus.com>.
8    N32/64 ABI support added by Mark Mitchell, CodeSourcery, LLC.
9    <mark@codesourcery.com>
10    Traditional MIPS targets support added by Koundinya.K, Dansk Data
11    Elektronik & Operations Research Group. <kk@ddeorg.soft.net>
12 
13    This file is part of BFD, the Binary File Descriptor library.
14 
15    This program is free software; you can redistribute it and/or modify
16    it under the terms of the GNU General Public License as published by
17    the Free Software Foundation; either version 3 of the License, or
18    (at your option) any later version.
19 
20    This program is distributed in the hope that it will be useful,
21    but WITHOUT ANY WARRANTY; without even the implied warranty of
22    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
23    GNU General Public License for more details.
24 
25    You should have received a copy of the GNU General Public License
26    along with this program; if not, write to the Free Software
27    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
28    MA 02110-1301, USA.  */
29 
30 
31 /* This file handles functionality common to the different MIPS ABI's.  */
32 
33 #include "sysdep.h"
34 #include "bfd.h"
35 #include "libbfd.h"
36 #include "libiberty.h"
37 #include "elf-bfd.h"
38 #include "elfxx-mips.h"
39 #include "elf/mips.h"
40 #include "elf-vxworks.h"
41 
42 /* Get the ECOFF swapping routines.  */
43 #include "coff/sym.h"
44 #include "coff/symconst.h"
45 #include "coff/ecoff.h"
46 #include "coff/mips.h"
47 
48 #include "hashtab.h"
49 
50 /* Types of TLS GOT entry.  */
51 enum mips_got_tls_type {
52   GOT_TLS_NONE,
53   GOT_TLS_GD,
54   GOT_TLS_LDM,
55   GOT_TLS_IE
56 };
57 
58 /* This structure is used to hold information about one GOT entry.
59    There are four types of entry:
60 
61       (1) an absolute address
62 	    requires: abfd == NULL
63 	    fields: d.address
64 
65       (2) a SYMBOL + OFFSET address, where SYMBOL is local to an input bfd
66 	    requires: abfd != NULL, symndx >= 0, tls_type != GOT_TLS_LDM
67 	    fields: abfd, symndx, d.addend, tls_type
68 
69       (3) a SYMBOL address, where SYMBOL is not local to an input bfd
70 	    requires: abfd != NULL, symndx == -1
71 	    fields: d.h, tls_type
72 
73       (4) a TLS LDM slot
74 	    requires: abfd != NULL, symndx == 0, tls_type == GOT_TLS_LDM
75 	    fields: none; there's only one of these per GOT.  */
76 struct mips_got_entry
77 {
78   /* One input bfd that needs the GOT entry.  */
79   bfd *abfd;
80   /* The index of the symbol, as stored in the relocation r_info, if
81      we have a local symbol; -1 otherwise.  */
82   long symndx;
83   union
84   {
85     /* If abfd == NULL, an address that must be stored in the got.  */
86     bfd_vma address;
87     /* If abfd != NULL && symndx != -1, the addend of the relocation
88        that should be added to the symbol value.  */
89     bfd_vma addend;
90     /* If abfd != NULL && symndx == -1, the hash table entry
91        corresponding to a symbol in the GOT.  The symbol's entry
92        is in the local area if h->global_got_area is GGA_NONE,
93        otherwise it is in the global area.  */
94     struct mips_elf_link_hash_entry *h;
95   } d;
96 
97   /* The TLS type of this GOT entry.  An LDM GOT entry will be a local
98      symbol entry with r_symndx == 0.  */
99   unsigned char tls_type;
100 
101   /* True if we have filled in the GOT contents for a TLS entry,
102      and created the associated relocations.  */
103   unsigned char tls_initialized;
104 
105   /* The offset from the beginning of the .got section to the entry
106      corresponding to this symbol+addend.  If it's a global symbol
107      whose offset is yet to be decided, it's going to be -1.  */
108   long gotidx;
109 };
110 
111 /* This structure represents a GOT page reference from an input bfd.
112    Each instance represents a symbol + ADDEND, where the representation
113    of the symbol depends on whether it is local to the input bfd.
114    If it is, then SYMNDX >= 0, and the symbol has index SYMNDX in U.ABFD.
115    Otherwise, SYMNDX < 0 and U.H points to the symbol's hash table entry.
116 
117    Page references with SYMNDX >= 0 always become page references
118    in the output.  Page references with SYMNDX < 0 only become page
119    references if the symbol binds locally; in other cases, the page
120    reference decays to a global GOT reference.  */
121 struct mips_got_page_ref
122 {
123   long symndx;
124   union
125   {
126     struct mips_elf_link_hash_entry *h;
127     bfd *abfd;
128   } u;
129   bfd_vma addend;
130 };
131 
132 /* This structure describes a range of addends: [MIN_ADDEND, MAX_ADDEND].
133    The structures form a non-overlapping list that is sorted by increasing
134    MIN_ADDEND.  */
135 struct mips_got_page_range
136 {
137   struct mips_got_page_range *next;
138   bfd_signed_vma min_addend;
139   bfd_signed_vma max_addend;
140 };
141 
142 /* This structure describes the range of addends that are applied to page
143    relocations against a given section.  */
144 struct mips_got_page_entry
145 {
146   /* The section that these entries are based on.  */
147   asection *sec;
148   /* The ranges for this page entry.  */
149   struct mips_got_page_range *ranges;
150   /* The maximum number of page entries needed for RANGES.  */
151   bfd_vma num_pages;
152 };
153 
154 /* This structure is used to hold .got information when linking.  */
155 
156 struct mips_got_info
157 {
158   /* The number of global .got entries.  */
159   unsigned int global_gotno;
160   /* The number of global .got entries that are in the GGA_RELOC_ONLY area.  */
161   unsigned int reloc_only_gotno;
162   /* The number of .got slots used for TLS.  */
163   unsigned int tls_gotno;
164   /* The first unused TLS .got entry.  Used only during
165      mips_elf_initialize_tls_index.  */
166   unsigned int tls_assigned_gotno;
167   /* The number of local .got entries, eventually including page entries.  */
168   unsigned int local_gotno;
169   /* The maximum number of page entries needed.  */
170   unsigned int page_gotno;
171   /* The number of relocations needed for the GOT entries.  */
172   unsigned int relocs;
173   /* The number of local .got entries we have used.  */
174   unsigned int assigned_gotno;
175   /* A hash table holding members of the got.  */
176   struct htab *got_entries;
177   /* A hash table holding mips_got_page_ref structures.  */
178   struct htab *got_page_refs;
179   /* A hash table of mips_got_page_entry structures.  */
180   struct htab *got_page_entries;
181   /* In multi-got links, a pointer to the next got (err, rather, most
182      of the time, it points to the previous got).  */
183   struct mips_got_info *next;
184 };
185 
186 /* Structure passed when merging bfds' gots.  */
187 
188 struct mips_elf_got_per_bfd_arg
189 {
190   /* The output bfd.  */
191   bfd *obfd;
192   /* The link information.  */
193   struct bfd_link_info *info;
194   /* A pointer to the primary got, i.e., the one that's going to get
195      the implicit relocations from DT_MIPS_LOCAL_GOTNO and
196      DT_MIPS_GOTSYM.  */
197   struct mips_got_info *primary;
198   /* A non-primary got we're trying to merge with other input bfd's
199      gots.  */
200   struct mips_got_info *current;
201   /* The maximum number of got entries that can be addressed with a
202      16-bit offset.  */
203   unsigned int max_count;
204   /* The maximum number of page entries needed by each got.  */
205   unsigned int max_pages;
206   /* The total number of global entries which will live in the
207      primary got and be automatically relocated.  This includes
208      those not referenced by the primary GOT but included in
209      the "master" GOT.  */
210   unsigned int global_count;
211 };
212 
213 /* A structure used to pass information to htab_traverse callbacks
214    when laying out the GOT.  */
215 
216 struct mips_elf_traverse_got_arg
217 {
218   struct bfd_link_info *info;
219   struct mips_got_info *g;
220   int value;
221 };
222 
223 struct _mips_elf_section_data
224 {
225   struct bfd_elf_section_data elf;
226   union
227   {
228     bfd_byte *tdata;
229   } u;
230 };
231 
232 #define mips_elf_section_data(sec) \
233   ((struct _mips_elf_section_data *) elf_section_data (sec))
234 
235 #define is_mips_elf(bfd)				\
236   (bfd_get_flavour (bfd) == bfd_target_elf_flavour	\
237    && elf_tdata (bfd) != NULL				\
238    && elf_object_id (bfd) == MIPS_ELF_DATA)
239 
240 /* The ABI says that every symbol used by dynamic relocations must have
241    a global GOT entry.  Among other things, this provides the dynamic
242    linker with a free, directly-indexed cache.  The GOT can therefore
243    contain symbols that are not referenced by GOT relocations themselves
244    (in other words, it may have symbols that are not referenced by things
245    like R_MIPS_GOT16 and R_MIPS_GOT_PAGE).
246 
247    GOT relocations are less likely to overflow if we put the associated
248    GOT entries towards the beginning.  We therefore divide the global
249    GOT entries into two areas: "normal" and "reloc-only".  Entries in
250    the first area can be used for both dynamic relocations and GP-relative
251    accesses, while those in the "reloc-only" area are for dynamic
252    relocations only.
253 
254    These GGA_* ("Global GOT Area") values are organised so that lower
255    values are more general than higher values.  Also, non-GGA_NONE
256    values are ordered by the position of the area in the GOT.  */
257 #define GGA_NORMAL 0
258 #define GGA_RELOC_ONLY 1
259 #define GGA_NONE 2
260 
261 /* Information about a non-PIC interface to a PIC function.  There are
262    two ways of creating these interfaces.  The first is to add:
263 
264 	lui	$25,%hi(func)
265 	addiu	$25,$25,%lo(func)
266 
267    immediately before a PIC function "func".  The second is to add:
268 
269 	lui	$25,%hi(func)
270 	j	func
271 	addiu	$25,$25,%lo(func)
272 
273    to a separate trampoline section.
274 
275    Stubs of the first kind go in a new section immediately before the
276    target function.  Stubs of the second kind go in a single section
277    pointed to by the hash table's "strampoline" field.  */
278 struct mips_elf_la25_stub {
279   /* The generated section that contains this stub.  */
280   asection *stub_section;
281 
282   /* The offset of the stub from the start of STUB_SECTION.  */
283   bfd_vma offset;
284 
285   /* One symbol for the original function.  Its location is available
286      in H->root.root.u.def.  */
287   struct mips_elf_link_hash_entry *h;
288 };
289 
290 /* Macros for populating a mips_elf_la25_stub.  */
291 
292 #define LA25_LUI(VAL) (0x3c190000 | (VAL))	/* lui t9,VAL */
293 #define LA25_J(VAL) (0x08000000 | (((VAL) >> 2) & 0x3ffffff)) /* j VAL */
294 #define LA25_ADDIU(VAL) (0x27390000 | (VAL))	/* addiu t9,t9,VAL */
295 #define LA25_LUI_MICROMIPS(VAL)						\
296   (0x41b90000 | (VAL))				/* lui t9,VAL */
297 #define LA25_J_MICROMIPS(VAL)						\
298   (0xd4000000 | (((VAL) >> 1) & 0x3ffffff))	/* j VAL */
299 #define LA25_ADDIU_MICROMIPS(VAL)					\
300   (0x33390000 | (VAL))				/* addiu t9,t9,VAL */
301 
302 /* This structure is passed to mips_elf_sort_hash_table_f when sorting
303    the dynamic symbols.  */
304 
305 struct mips_elf_hash_sort_data
306 {
307   /* The symbol in the global GOT with the lowest dynamic symbol table
308      index.  */
309   struct elf_link_hash_entry *low;
310   /* The least dynamic symbol table index corresponding to a non-TLS
311      symbol with a GOT entry.  */
312   long min_got_dynindx;
313   /* The greatest dynamic symbol table index corresponding to a symbol
314      with a GOT entry that is not referenced (e.g., a dynamic symbol
315      with dynamic relocations pointing to it from non-primary GOTs).  */
316   long max_unref_got_dynindx;
317   /* The greatest dynamic symbol table index not corresponding to a
318      symbol without a GOT entry.  */
319   long max_non_got_dynindx;
320 };
321 
322 /* The MIPS ELF linker needs additional information for each symbol in
323    the global hash table.  */
324 
325 struct mips_elf_link_hash_entry
326 {
327   struct elf_link_hash_entry root;
328 
329   /* External symbol information.  */
330   EXTR esym;
331 
332   /* The la25 stub we have created for ths symbol, if any.  */
333   struct mips_elf_la25_stub *la25_stub;
334 
335   /* Number of R_MIPS_32, R_MIPS_REL32, or R_MIPS_64 relocs against
336      this symbol.  */
337   unsigned int possibly_dynamic_relocs;
338 
339   /* If there is a stub that 32 bit functions should use to call this
340      16 bit function, this points to the section containing the stub.  */
341   asection *fn_stub;
342 
343   /* If there is a stub that 16 bit functions should use to call this
344      32 bit function, this points to the section containing the stub.  */
345   asection *call_stub;
346 
347   /* This is like the call_stub field, but it is used if the function
348      being called returns a floating point value.  */
349   asection *call_fp_stub;
350 
351   /* The highest GGA_* value that satisfies all references to this symbol.  */
352   unsigned int global_got_area : 2;
353 
354   /* True if all GOT relocations against this symbol are for calls.  This is
355      a looser condition than no_fn_stub below, because there may be other
356      non-call non-GOT relocations against the symbol.  */
357   unsigned int got_only_for_calls : 1;
358 
359   /* True if one of the relocations described by possibly_dynamic_relocs
360      is against a readonly section.  */
361   unsigned int readonly_reloc : 1;
362 
363   /* True if there is a relocation against this symbol that must be
364      resolved by the static linker (in other words, if the relocation
365      cannot possibly be made dynamic).  */
366   unsigned int has_static_relocs : 1;
367 
368   /* True if we must not create a .MIPS.stubs entry for this symbol.
369      This is set, for example, if there are relocations related to
370      taking the function's address, i.e. any but R_MIPS_CALL*16 ones.
371      See "MIPS ABI Supplement, 3rd Edition", p. 4-20.  */
372   unsigned int no_fn_stub : 1;
373 
374   /* Whether we need the fn_stub; this is true if this symbol appears
375      in any relocs other than a 16 bit call.  */
376   unsigned int need_fn_stub : 1;
377 
378   /* True if this symbol is referenced by branch relocations from
379      any non-PIC input file.  This is used to determine whether an
380      la25 stub is required.  */
381   unsigned int has_nonpic_branches : 1;
382 
383   /* Does this symbol need a traditional MIPS lazy-binding stub
384      (as opposed to a PLT entry)?  */
385   unsigned int needs_lazy_stub : 1;
386 };
387 
388 /* MIPS ELF linker hash table.  */
389 
390 struct mips_elf_link_hash_table
391 {
392   struct elf_link_hash_table root;
393 
394   /* The number of .rtproc entries.  */
395   bfd_size_type procedure_count;
396 
397   /* The size of the .compact_rel section (if SGI_COMPAT).  */
398   bfd_size_type compact_rel_size;
399 
400   /* This flag indicates that the value of DT_MIPS_RLD_MAP dynamic entry
401      is set to the address of __rld_obj_head as in IRIX5 and IRIX6.  */
402   bfd_boolean use_rld_obj_head;
403 
404   /* The  __rld_map or __rld_obj_head symbol. */
405   struct elf_link_hash_entry *rld_symbol;
406 
407   /* This is set if we see any mips16 stub sections.  */
408   bfd_boolean mips16_stubs_seen;
409 
410   /* True if we can generate copy relocs and PLTs.  */
411   bfd_boolean use_plts_and_copy_relocs;
412 
413   /* True if we're generating code for VxWorks.  */
414   bfd_boolean is_vxworks;
415 
416   /* True if we already reported the small-data section overflow.  */
417   bfd_boolean small_data_overflow_reported;
418 
419   /* Shortcuts to some dynamic sections, or NULL if they are not
420      being used.  */
421   asection *srelbss;
422   asection *sdynbss;
423   asection *srelplt;
424   asection *srelplt2;
425   asection *sgotplt;
426   asection *splt;
427   asection *sstubs;
428   asection *sgot;
429 
430   /* The master GOT information.  */
431   struct mips_got_info *got_info;
432 
433   /* The global symbol in the GOT with the lowest index in the dynamic
434      symbol table.  */
435   struct elf_link_hash_entry *global_gotsym;
436 
437   /* The size of the PLT header in bytes.  */
438   bfd_vma plt_header_size;
439 
440   /* The size of a PLT entry in bytes.  */
441   bfd_vma plt_entry_size;
442 
443   /* The number of functions that need a lazy-binding stub.  */
444   bfd_vma lazy_stub_count;
445 
446   /* The size of a function stub entry in bytes.  */
447   bfd_vma function_stub_size;
448 
449   /* The number of reserved entries at the beginning of the GOT.  */
450   unsigned int reserved_gotno;
451 
452   /* The section used for mips_elf_la25_stub trampolines.
453      See the comment above that structure for details.  */
454   asection *strampoline;
455 
456   /* A table of mips_elf_la25_stubs, indexed by (input_section, offset)
457      pairs.  */
458   htab_t la25_stubs;
459 
460   /* A function FN (NAME, IS, OS) that creates a new input section
461      called NAME and links it to output section OS.  If IS is nonnull,
462      the new section should go immediately before it, otherwise it
463      should go at the (current) beginning of OS.
464 
465      The function returns the new section on success, otherwise it
466      returns null.  */
467   asection *(*add_stub_section) (const char *, asection *, asection *);
468 
469   /* Small local sym cache.  */
470   struct sym_cache sym_cache;
471 };
472 
473 /* Get the MIPS ELF linker hash table from a link_info structure.  */
474 
475 #define mips_elf_hash_table(p) \
476   (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
477   == MIPS_ELF_DATA ? ((struct mips_elf_link_hash_table *) ((p)->hash)) : NULL)
478 
479 /* A structure used to communicate with htab_traverse callbacks.  */
480 struct mips_htab_traverse_info
481 {
482   /* The usual link-wide information.  */
483   struct bfd_link_info *info;
484   bfd *output_bfd;
485 
486   /* Starts off FALSE and is set to TRUE if the link should be aborted.  */
487   bfd_boolean error;
488 };
489 
490 /* MIPS ELF private object data.  */
491 
492 struct mips_elf_obj_tdata
493 {
494   /* Generic ELF private object data.  */
495   struct elf_obj_tdata root;
496 
497   /* Input BFD providing Tag_GNU_MIPS_ABI_FP attribute for output.  */
498   bfd *abi_fp_bfd;
499 
500   /* The GOT requirements of input bfds.  */
501   struct mips_got_info *got;
502 
503   /* Used by _bfd_mips_elf_find_nearest_line.  The structure could be
504      included directly in this one, but there's no point to wasting
505      the memory just for the infrequently called find_nearest_line.  */
506   struct mips_elf_find_line *find_line_info;
507 
508   /* An array of stub sections indexed by symbol number.  */
509   asection **local_stubs;
510   asection **local_call_stubs;
511 
512   /* The Irix 5 support uses two virtual sections, which represent
513      text/data symbols defined in dynamic objects.  */
514   asymbol *elf_data_symbol;
515   asymbol *elf_text_symbol;
516   asection *elf_data_section;
517   asection *elf_text_section;
518 };
519 
520 /* Get MIPS ELF private object data from BFD's tdata.  */
521 
522 #define mips_elf_tdata(bfd) \
523   ((struct mips_elf_obj_tdata *) (bfd)->tdata.any)
524 
525 #define TLS_RELOC_P(r_type) \
526   (r_type == R_MIPS_TLS_DTPMOD32		\
527    || r_type == R_MIPS_TLS_DTPMOD64		\
528    || r_type == R_MIPS_TLS_DTPREL32		\
529    || r_type == R_MIPS_TLS_DTPREL64		\
530    || r_type == R_MIPS_TLS_GD			\
531    || r_type == R_MIPS_TLS_LDM			\
532    || r_type == R_MIPS_TLS_DTPREL_HI16		\
533    || r_type == R_MIPS_TLS_DTPREL_LO16		\
534    || r_type == R_MIPS_TLS_GOTTPREL		\
535    || r_type == R_MIPS_TLS_TPREL32		\
536    || r_type == R_MIPS_TLS_TPREL64		\
537    || r_type == R_MIPS_TLS_TPREL_HI16		\
538    || r_type == R_MIPS_TLS_TPREL_LO16		\
539    || r_type == R_MIPS16_TLS_GD			\
540    || r_type == R_MIPS16_TLS_LDM		\
541    || r_type == R_MIPS16_TLS_DTPREL_HI16	\
542    || r_type == R_MIPS16_TLS_DTPREL_LO16	\
543    || r_type == R_MIPS16_TLS_GOTTPREL		\
544    || r_type == R_MIPS16_TLS_TPREL_HI16		\
545    || r_type == R_MIPS16_TLS_TPREL_LO16		\
546    || r_type == R_MICROMIPS_TLS_GD		\
547    || r_type == R_MICROMIPS_TLS_LDM		\
548    || r_type == R_MICROMIPS_TLS_DTPREL_HI16	\
549    || r_type == R_MICROMIPS_TLS_DTPREL_LO16	\
550    || r_type == R_MICROMIPS_TLS_GOTTPREL	\
551    || r_type == R_MICROMIPS_TLS_TPREL_HI16	\
552    || r_type == R_MICROMIPS_TLS_TPREL_LO16)
553 
554 /* Structure used to pass information to mips_elf_output_extsym.  */
555 
556 struct extsym_info
557 {
558   bfd *abfd;
559   struct bfd_link_info *info;
560   struct ecoff_debug_info *debug;
561   const struct ecoff_debug_swap *swap;
562   bfd_boolean failed;
563 };
564 
565 /* The names of the runtime procedure table symbols used on IRIX5.  */
566 
567 static const char * const mips_elf_dynsym_rtproc_names[] =
568 {
569   "_procedure_table",
570   "_procedure_string_table",
571   "_procedure_table_size",
572   NULL
573 };
574 
575 /* These structures are used to generate the .compact_rel section on
576    IRIX5.  */
577 
578 typedef struct
579 {
580   unsigned long id1;		/* Always one?  */
581   unsigned long num;		/* Number of compact relocation entries.  */
582   unsigned long id2;		/* Always two?  */
583   unsigned long offset;		/* The file offset of the first relocation.  */
584   unsigned long reserved0;	/* Zero?  */
585   unsigned long reserved1;	/* Zero?  */
586 } Elf32_compact_rel;
587 
588 typedef struct
589 {
590   bfd_byte id1[4];
591   bfd_byte num[4];
592   bfd_byte id2[4];
593   bfd_byte offset[4];
594   bfd_byte reserved0[4];
595   bfd_byte reserved1[4];
596 } Elf32_External_compact_rel;
597 
598 typedef struct
599 {
600   unsigned int ctype : 1;	/* 1: long 0: short format. See below.  */
601   unsigned int rtype : 4;	/* Relocation types. See below.  */
602   unsigned int dist2to : 8;
603   unsigned int relvaddr : 19;	/* (VADDR - vaddr of the previous entry)/ 4 */
604   unsigned long konst;		/* KONST field. See below.  */
605   unsigned long vaddr;		/* VADDR to be relocated.  */
606 } Elf32_crinfo;
607 
608 typedef struct
609 {
610   unsigned int ctype : 1;	/* 1: long 0: short format. See below.  */
611   unsigned int rtype : 4;	/* Relocation types. See below.  */
612   unsigned int dist2to : 8;
613   unsigned int relvaddr : 19;	/* (VADDR - vaddr of the previous entry)/ 4 */
614   unsigned long konst;		/* KONST field. See below.  */
615 } Elf32_crinfo2;
616 
617 typedef struct
618 {
619   bfd_byte info[4];
620   bfd_byte konst[4];
621   bfd_byte vaddr[4];
622 } Elf32_External_crinfo;
623 
624 typedef struct
625 {
626   bfd_byte info[4];
627   bfd_byte konst[4];
628 } Elf32_External_crinfo2;
629 
630 /* These are the constants used to swap the bitfields in a crinfo.  */
631 
632 #define CRINFO_CTYPE (0x1)
633 #define CRINFO_CTYPE_SH (31)
634 #define CRINFO_RTYPE (0xf)
635 #define CRINFO_RTYPE_SH (27)
636 #define CRINFO_DIST2TO (0xff)
637 #define CRINFO_DIST2TO_SH (19)
638 #define CRINFO_RELVADDR (0x7ffff)
639 #define CRINFO_RELVADDR_SH (0)
640 
641 /* A compact relocation info has long (3 words) or short (2 words)
642    formats.  A short format doesn't have VADDR field and relvaddr
643    fields contains ((VADDR - vaddr of the previous entry) >> 2).  */
644 #define CRF_MIPS_LONG			1
645 #define CRF_MIPS_SHORT			0
646 
647 /* There are 4 types of compact relocation at least. The value KONST
648    has different meaning for each type:
649 
650    (type)		(konst)
651    CT_MIPS_REL32	Address in data
652    CT_MIPS_WORD		Address in word (XXX)
653    CT_MIPS_GPHI_LO	GP - vaddr
654    CT_MIPS_JMPAD	Address to jump
655    */
656 
657 #define CRT_MIPS_REL32			0xa
658 #define CRT_MIPS_WORD			0xb
659 #define CRT_MIPS_GPHI_LO		0xc
660 #define CRT_MIPS_JMPAD			0xd
661 
662 #define mips_elf_set_cr_format(x,format)	((x).ctype = (format))
663 #define mips_elf_set_cr_type(x,type)		((x).rtype = (type))
664 #define mips_elf_set_cr_dist2to(x,v)		((x).dist2to = (v))
665 #define mips_elf_set_cr_relvaddr(x,d)		((x).relvaddr = (d)<<2)
666 
667 /* The structure of the runtime procedure descriptor created by the
668    loader for use by the static exception system.  */
669 
670 typedef struct runtime_pdr {
671 	bfd_vma	adr;		/* Memory address of start of procedure.  */
672 	long	regmask;	/* Save register mask.  */
673 	long	regoffset;	/* Save register offset.  */
674 	long	fregmask;	/* Save floating point register mask.  */
675 	long	fregoffset;	/* Save floating point register offset.  */
676 	long	frameoffset;	/* Frame size.  */
677 	short	framereg;	/* Frame pointer register.  */
678 	short	pcreg;		/* Offset or reg of return pc.  */
679 	long	irpss;		/* Index into the runtime string table.  */
680 	long	reserved;
681 	struct exception_info *exception_info;/* Pointer to exception array.  */
682 } RPDR, *pRPDR;
683 #define cbRPDR sizeof (RPDR)
684 #define rpdNil ((pRPDR) 0)
685 
686 static struct mips_got_entry *mips_elf_create_local_got_entry
687   (bfd *, struct bfd_link_info *, bfd *, bfd_vma, unsigned long,
688    struct mips_elf_link_hash_entry *, int);
689 static bfd_boolean mips_elf_sort_hash_table_f
690   (struct mips_elf_link_hash_entry *, void *);
691 static bfd_vma mips_elf_high
692   (bfd_vma);
693 static bfd_boolean mips_elf_create_dynamic_relocation
694   (bfd *, struct bfd_link_info *, const Elf_Internal_Rela *,
695    struct mips_elf_link_hash_entry *, asection *, bfd_vma,
696    bfd_vma *, asection *);
697 static bfd_vma mips_elf_adjust_gp
698   (bfd *, struct mips_got_info *, bfd *);
699 
700 /* This will be used when we sort the dynamic relocation records.  */
701 static bfd *reldyn_sorting_bfd;
702 
703 /* True if ABFD is for CPUs with load interlocking that include
704    non-MIPS1 CPUs and R3900.  */
705 #define LOAD_INTERLOCKS_P(abfd) \
706   (   ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) != E_MIPS_ARCH_1) \
707    || ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == E_MIPS_MACH_3900))
708 
709 /* True if ABFD is for CPUs that are faster if JAL is converted to BAL.
710    This should be safe for all architectures.  We enable this predicate
711    for RM9000 for now.  */
712 #define JAL_TO_BAL_P(abfd) \
713   ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == E_MIPS_MACH_9000)
714 
715 /* True if ABFD is for CPUs that are faster if JALR is converted to BAL.
716    This should be safe for all architectures.  We enable this predicate for
717    all CPUs.  */
718 #define JALR_TO_BAL_P(abfd) 1
719 
720 /* True if ABFD is for CPUs that are faster if JR is converted to B.
721    This should be safe for all architectures.  We enable this predicate for
722    all CPUs.  */
723 #define JR_TO_B_P(abfd) 1
724 
725 /* True if ABFD is a PIC object.  */
726 #define PIC_OBJECT_P(abfd) \
727   ((elf_elfheader (abfd)->e_flags & EF_MIPS_PIC) != 0)
728 
729 /* Nonzero if ABFD is using the N32 ABI.  */
730 #define ABI_N32_P(abfd) \
731   ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI2) != 0)
732 
733 /* Nonzero if ABFD is using the N64 ABI.  */
734 #define ABI_64_P(abfd) \
735   (get_elf_backend_data (abfd)->s->elfclass == ELFCLASS64)
736 
737 /* Nonzero if ABFD is using NewABI conventions.  */
738 #define NEWABI_P(abfd) (ABI_N32_P (abfd) || ABI_64_P (abfd))
739 
740 /* Nonzero if ABFD has microMIPS code.  */
741 #define MICROMIPS_P(abfd) \
742   ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MICROMIPS) != 0)
743 
744 /* The IRIX compatibility level we are striving for.  */
745 #define IRIX_COMPAT(abfd) \
746   (get_elf_backend_data (abfd)->elf_backend_mips_irix_compat (abfd))
747 
748 /* Whether we are trying to be compatible with IRIX at all.  */
749 #define SGI_COMPAT(abfd) \
750   (IRIX_COMPAT (abfd) != ict_none)
751 
752 /* The name of the options section.  */
753 #define MIPS_ELF_OPTIONS_SECTION_NAME(abfd) \
754   (NEWABI_P (abfd) ? ".MIPS.options" : ".options")
755 
756 /* True if NAME is the recognized name of any SHT_MIPS_OPTIONS section.
757    Some IRIX system files do not use MIPS_ELF_OPTIONS_SECTION_NAME.  */
758 #define MIPS_ELF_OPTIONS_SECTION_NAME_P(NAME) \
759   (strcmp (NAME, ".MIPS.options") == 0 || strcmp (NAME, ".options") == 0)
760 
761 /* Whether the section is readonly.  */
762 #define MIPS_ELF_READONLY_SECTION(sec) \
763   ((sec->flags & (SEC_ALLOC | SEC_LOAD | SEC_READONLY))		\
764    == (SEC_ALLOC | SEC_LOAD | SEC_READONLY))
765 
766 /* The name of the stub section.  */
767 #define MIPS_ELF_STUB_SECTION_NAME(abfd) ".MIPS.stubs"
768 
769 /* The size of an external REL relocation.  */
770 #define MIPS_ELF_REL_SIZE(abfd) \
771   (get_elf_backend_data (abfd)->s->sizeof_rel)
772 
773 /* The size of an external RELA relocation.  */
774 #define MIPS_ELF_RELA_SIZE(abfd) \
775   (get_elf_backend_data (abfd)->s->sizeof_rela)
776 
777 /* The size of an external dynamic table entry.  */
778 #define MIPS_ELF_DYN_SIZE(abfd) \
779   (get_elf_backend_data (abfd)->s->sizeof_dyn)
780 
781 /* The size of a GOT entry.  */
782 #define MIPS_ELF_GOT_SIZE(abfd) \
783   (get_elf_backend_data (abfd)->s->arch_size / 8)
784 
785 /* The size of the .rld_map section. */
786 #define MIPS_ELF_RLD_MAP_SIZE(abfd) \
787   (get_elf_backend_data (abfd)->s->arch_size / 8)
788 
789 /* The size of a symbol-table entry.  */
790 #define MIPS_ELF_SYM_SIZE(abfd) \
791   (get_elf_backend_data (abfd)->s->sizeof_sym)
792 
793 /* The default alignment for sections, as a power of two.  */
794 #define MIPS_ELF_LOG_FILE_ALIGN(abfd)				\
795   (get_elf_backend_data (abfd)->s->log_file_align)
796 
797 /* Get word-sized data.  */
798 #define MIPS_ELF_GET_WORD(abfd, ptr) \
799   (ABI_64_P (abfd) ? bfd_get_64 (abfd, ptr) : bfd_get_32 (abfd, ptr))
800 
801 /* Put out word-sized data.  */
802 #define MIPS_ELF_PUT_WORD(abfd, val, ptr)	\
803   (ABI_64_P (abfd) 				\
804    ? bfd_put_64 (abfd, val, ptr) 		\
805    : bfd_put_32 (abfd, val, ptr))
806 
807 /* The opcode for word-sized loads (LW or LD).  */
808 #define MIPS_ELF_LOAD_WORD(abfd) \
809   (ABI_64_P (abfd) ? 0xdc000000 : 0x8c000000)
810 
811 /* Add a dynamic symbol table-entry.  */
812 #define MIPS_ELF_ADD_DYNAMIC_ENTRY(info, tag, val)	\
813   _bfd_elf_add_dynamic_entry (info, tag, val)
814 
815 #define MIPS_ELF_RTYPE_TO_HOWTO(abfd, rtype, rela)			\
816   (get_elf_backend_data (abfd)->elf_backend_mips_rtype_to_howto (rtype, rela))
817 
818 /* The name of the dynamic relocation section.  */
819 #define MIPS_ELF_REL_DYN_NAME(INFO) \
820   (mips_elf_hash_table (INFO)->is_vxworks ? ".rela.dyn" : ".rel.dyn")
821 
822 /* In case we're on a 32-bit machine, construct a 64-bit "-1" value
823    from smaller values.  Start with zero, widen, *then* decrement.  */
824 #define MINUS_ONE	(((bfd_vma)0) - 1)
825 #define MINUS_TWO	(((bfd_vma)0) - 2)
826 
827 /* The value to write into got[1] for SVR4 targets, to identify it is
828    a GNU object.  The dynamic linker can then use got[1] to store the
829    module pointer.  */
830 #define MIPS_ELF_GNU_GOT1_MASK(abfd) \
831   ((bfd_vma) 1 << (ABI_64_P (abfd) ? 63 : 31))
832 
833 /* The offset of $gp from the beginning of the .got section.  */
834 #define ELF_MIPS_GP_OFFSET(INFO) \
835   (mips_elf_hash_table (INFO)->is_vxworks ? 0x0 : 0x7ff0)
836 
837 /* The maximum size of the GOT for it to be addressable using 16-bit
838    offsets from $gp.  */
839 #define MIPS_ELF_GOT_MAX_SIZE(INFO) (ELF_MIPS_GP_OFFSET (INFO) + 0x7fff)
840 
841 /* Instructions which appear in a stub.  */
842 #define STUB_LW(abfd)							\
843   ((ABI_64_P (abfd)							\
844     ? 0xdf998010				/* ld t9,0x8010(gp) */	\
845     : 0x8f998010))              		/* lw t9,0x8010(gp) */
846 #define STUB_MOVE(abfd)							\
847    ((ABI_64_P (abfd)							\
848      ? 0x03e0782d				/* daddu t7,ra */	\
849      : 0x03e07821))				/* addu t7,ra */
850 #define STUB_LUI(VAL) (0x3c180000 + (VAL))	/* lui t8,VAL */
851 #define STUB_JALR 0x0320f809			/* jalr t9,ra */
852 #define STUB_ORI(VAL) (0x37180000 + (VAL))	/* ori t8,t8,VAL */
853 #define STUB_LI16U(VAL) (0x34180000 + (VAL))	/* ori t8,zero,VAL unsigned */
854 #define STUB_LI16S(abfd, VAL)						\
855    ((ABI_64_P (abfd)							\
856     ? (0x64180000 + (VAL))	/* daddiu t8,zero,VAL sign extended */	\
857     : (0x24180000 + (VAL))))	/* addiu t8,zero,VAL sign extended */
858 
859 #define MIPS_FUNCTION_STUB_NORMAL_SIZE 16
860 #define MIPS_FUNCTION_STUB_BIG_SIZE 20
861 
862 /* The name of the dynamic interpreter.  This is put in the .interp
863    section.  */
864 
865 #define ELF_DYNAMIC_INTERPRETER(abfd) 		\
866    (ABI_N32_P (abfd) ? "/usr/lib32/libc.so.1" 	\
867     : ABI_64_P (abfd) ? "/usr/lib64/libc.so.1" 	\
868     : "/usr/lib/libc.so.1")
869 
870 #ifdef BFD64
871 #define MNAME(bfd,pre,pos) \
872   (ABI_64_P (bfd) ? CONCAT4 (pre,64,_,pos) : CONCAT4 (pre,32,_,pos))
873 #define ELF_R_SYM(bfd, i)					\
874   (ABI_64_P (bfd) ? ELF64_R_SYM (i) : ELF32_R_SYM (i))
875 #define ELF_R_TYPE(bfd, i)					\
876   (ABI_64_P (bfd) ? ELF64_MIPS_R_TYPE (i) : ELF32_R_TYPE (i))
877 #define ELF_R_INFO(bfd, s, t)					\
878   (ABI_64_P (bfd) ? ELF64_R_INFO (s, t) : ELF32_R_INFO (s, t))
879 #else
880 #define MNAME(bfd,pre,pos) CONCAT4 (pre,32,_,pos)
881 #define ELF_R_SYM(bfd, i)					\
882   (ELF32_R_SYM (i))
883 #define ELF_R_TYPE(bfd, i)					\
884   (ELF32_R_TYPE (i))
885 #define ELF_R_INFO(bfd, s, t)					\
886   (ELF32_R_INFO (s, t))
887 #endif
888 
889   /* The mips16 compiler uses a couple of special sections to handle
890      floating point arguments.
891 
892      Section names that look like .mips16.fn.FNNAME contain stubs that
893      copy floating point arguments from the fp regs to the gp regs and
894      then jump to FNNAME.  If any 32 bit function calls FNNAME, the
895      call should be redirected to the stub instead.  If no 32 bit
896      function calls FNNAME, the stub should be discarded.  We need to
897      consider any reference to the function, not just a call, because
898      if the address of the function is taken we will need the stub,
899      since the address might be passed to a 32 bit function.
900 
901      Section names that look like .mips16.call.FNNAME contain stubs
902      that copy floating point arguments from the gp regs to the fp
903      regs and then jump to FNNAME.  If FNNAME is a 32 bit function,
904      then any 16 bit function that calls FNNAME should be redirected
905      to the stub instead.  If FNNAME is not a 32 bit function, the
906      stub should be discarded.
907 
908      .mips16.call.fp.FNNAME sections are similar, but contain stubs
909      which call FNNAME and then copy the return value from the fp regs
910      to the gp regs.  These stubs store the return value in $18 while
911      calling FNNAME; any function which might call one of these stubs
912      must arrange to save $18 around the call.  (This case is not
913      needed for 32 bit functions that call 16 bit functions, because
914      16 bit functions always return floating point values in both
915      $f0/$f1 and $2/$3.)
916 
917      Note that in all cases FNNAME might be defined statically.
918      Therefore, FNNAME is not used literally.  Instead, the relocation
919      information will indicate which symbol the section is for.
920 
921      We record any stubs that we find in the symbol table.  */
922 
923 #define FN_STUB ".mips16.fn."
924 #define CALL_STUB ".mips16.call."
925 #define CALL_FP_STUB ".mips16.call.fp."
926 
927 #define FN_STUB_P(name) CONST_STRNEQ (name, FN_STUB)
928 #define CALL_STUB_P(name) CONST_STRNEQ (name, CALL_STUB)
929 #define CALL_FP_STUB_P(name) CONST_STRNEQ (name, CALL_FP_STUB)
930 
931 /* The format of the first PLT entry in an O32 executable.  */
932 static const bfd_vma mips_o32_exec_plt0_entry[] =
933 {
934   0x3c1c0000,	/* lui $28, %hi(&GOTPLT[0])				*/
935   0x8f990000,	/* lw $25, %lo(&GOTPLT[0])($28)				*/
936   0x279c0000,	/* addiu $28, $28, %lo(&GOTPLT[0])			*/
937   0x031cc023,	/* subu $24, $24, $28					*/
938   0x03e07821,	/* move $15, $31	# 32-bit move (addu)		*/
939   0x0018c082,	/* srl $24, $24, 2					*/
940   0x0320f809,	/* jalr $25						*/
941   0x2718fffe	/* subu $24, $24, 2					*/
942 };
943 
944 /* The format of the first PLT entry in an N32 executable.  Different
945    because gp ($28) is not available; we use t2 ($14) instead.  */
946 static const bfd_vma mips_n32_exec_plt0_entry[] =
947 {
948   0x3c0e0000,	/* lui $14, %hi(&GOTPLT[0])				*/
949   0x8dd90000,	/* lw $25, %lo(&GOTPLT[0])($14)				*/
950   0x25ce0000,	/* addiu $14, $14, %lo(&GOTPLT[0])			*/
951   0x030ec023,	/* subu $24, $24, $14					*/
952   0x03e07821,	/* move $15, $31	# 32-bit move (addu)		*/
953   0x0018c082,	/* srl $24, $24, 2					*/
954   0x0320f809,	/* jalr $25						*/
955   0x2718fffe	/* subu $24, $24, 2					*/
956 };
957 
958 /* The format of the first PLT entry in an N64 executable.  Different
959    from N32 because of the increased size of GOT entries.  */
960 static const bfd_vma mips_n64_exec_plt0_entry[] =
961 {
962   0x3c0e0000,	/* lui $14, %hi(&GOTPLT[0])				*/
963   0xddd90000,	/* ld $25, %lo(&GOTPLT[0])($14)				*/
964   0x25ce0000,	/* addiu $14, $14, %lo(&GOTPLT[0])			*/
965   0x030ec023,	/* subu $24, $24, $14					*/
966   0x03e0782d,	/* move $15, $31	# 64-bit move (daddu)		*/
967   0x0018c0c2,	/* srl $24, $24, 3					*/
968   0x0320f809,	/* jalr $25						*/
969   0x2718fffe	/* subu $24, $24, 2					*/
970 };
971 
972 /* The format of subsequent PLT entries.  */
973 static const bfd_vma mips_exec_plt_entry[] =
974 {
975   0x3c0f0000,	/* lui $15, %hi(.got.plt entry)			*/
976   0x01f90000,	/* l[wd] $25, %lo(.got.plt entry)($15)		*/
977   0x25f80000,	/* addiu $24, $15, %lo(.got.plt entry)		*/
978   0x03200008	/* jr $25					*/
979 };
980 
981 /* The format of the first PLT entry in a VxWorks executable.  */
982 static const bfd_vma mips_vxworks_exec_plt0_entry[] =
983 {
984   0x3c190000,	/* lui t9, %hi(_GLOBAL_OFFSET_TABLE_)		*/
985   0x27390000,	/* addiu t9, t9, %lo(_GLOBAL_OFFSET_TABLE_)	*/
986   0x8f390008,	/* lw t9, 8(t9)					*/
987   0x00000000,	/* nop						*/
988   0x03200008,	/* jr t9					*/
989   0x00000000	/* nop						*/
990 };
991 
992 /* The format of subsequent PLT entries.  */
993 static const bfd_vma mips_vxworks_exec_plt_entry[] =
994 {
995   0x10000000,	/* b .PLT_resolver			*/
996   0x24180000,	/* li t8, <pltindex>			*/
997   0x3c190000,	/* lui t9, %hi(<.got.plt slot>)		*/
998   0x27390000,	/* addiu t9, t9, %lo(<.got.plt slot>)	*/
999   0x8f390000,	/* lw t9, 0(t9)				*/
1000   0x00000000,	/* nop					*/
1001   0x03200008,	/* jr t9				*/
1002   0x00000000	/* nop					*/
1003 };
1004 
1005 /* The format of the first PLT entry in a VxWorks shared object.  */
1006 static const bfd_vma mips_vxworks_shared_plt0_entry[] =
1007 {
1008   0x8f990008,	/* lw t9, 8(gp)		*/
1009   0x00000000,	/* nop			*/
1010   0x03200008,	/* jr t9		*/
1011   0x00000000,	/* nop			*/
1012   0x00000000,	/* nop			*/
1013   0x00000000	/* nop			*/
1014 };
1015 
1016 /* The format of subsequent PLT entries.  */
1017 static const bfd_vma mips_vxworks_shared_plt_entry[] =
1018 {
1019   0x10000000,	/* b .PLT_resolver	*/
1020   0x24180000	/* li t8, <pltindex>	*/
1021 };
1022 
1023 /* microMIPS 32-bit opcode helper installer.  */
1024 
1025 static void
1026 bfd_put_micromips_32 (const bfd *abfd, bfd_vma opcode, bfd_byte *ptr)
1027 {
1028   bfd_put_16 (abfd, (opcode >> 16) & 0xffff, ptr);
1029   bfd_put_16 (abfd,  opcode        & 0xffff, ptr + 2);
1030 }
1031 
1032 /* microMIPS 32-bit opcode helper retriever.  */
1033 
1034 static bfd_vma
1035 bfd_get_micromips_32 (const bfd *abfd, const bfd_byte *ptr)
1036 {
1037   return (bfd_get_16 (abfd, ptr) << 16) | bfd_get_16 (abfd, ptr + 2);
1038 }
1039 
1040 /* Look up an entry in a MIPS ELF linker hash table.  */
1041 
1042 #define mips_elf_link_hash_lookup(table, string, create, copy, follow)	\
1043   ((struct mips_elf_link_hash_entry *)					\
1044    elf_link_hash_lookup (&(table)->root, (string), (create),		\
1045 			 (copy), (follow)))
1046 
1047 /* Traverse a MIPS ELF linker hash table.  */
1048 
1049 #define mips_elf_link_hash_traverse(table, func, info)			\
1050   (elf_link_hash_traverse						\
1051    (&(table)->root,							\
1052     (bfd_boolean (*) (struct elf_link_hash_entry *, void *)) (func),	\
1053     (info)))
1054 
1055 /* Find the base offsets for thread-local storage in this object,
1056    for GD/LD and IE/LE respectively.  */
1057 
1058 #define TP_OFFSET 0x7000
1059 #define DTP_OFFSET 0x8000
1060 
1061 static bfd_vma
1062 dtprel_base (struct bfd_link_info *info)
1063 {
1064   /* If tls_sec is NULL, we should have signalled an error already.  */
1065   if (elf_hash_table (info)->tls_sec == NULL)
1066     return 0;
1067   return elf_hash_table (info)->tls_sec->vma + DTP_OFFSET;
1068 }
1069 
1070 static bfd_vma
1071 tprel_base (struct bfd_link_info *info)
1072 {
1073   /* If tls_sec is NULL, we should have signalled an error already.  */
1074   if (elf_hash_table (info)->tls_sec == NULL)
1075     return 0;
1076   return elf_hash_table (info)->tls_sec->vma + TP_OFFSET;
1077 }
1078 
1079 /* Create an entry in a MIPS ELF linker hash table.  */
1080 
1081 static struct bfd_hash_entry *
1082 mips_elf_link_hash_newfunc (struct bfd_hash_entry *entry,
1083 			    struct bfd_hash_table *table, const char *string)
1084 {
1085   struct mips_elf_link_hash_entry *ret =
1086     (struct mips_elf_link_hash_entry *) entry;
1087 
1088   /* Allocate the structure if it has not already been allocated by a
1089      subclass.  */
1090   if (ret == NULL)
1091     ret = bfd_hash_allocate (table, sizeof (struct mips_elf_link_hash_entry));
1092   if (ret == NULL)
1093     return (struct bfd_hash_entry *) ret;
1094 
1095   /* Call the allocation method of the superclass.  */
1096   ret = ((struct mips_elf_link_hash_entry *)
1097 	 _bfd_elf_link_hash_newfunc ((struct bfd_hash_entry *) ret,
1098 				     table, string));
1099   if (ret != NULL)
1100     {
1101       /* Set local fields.  */
1102       memset (&ret->esym, 0, sizeof (EXTR));
1103       /* We use -2 as a marker to indicate that the information has
1104 	 not been set.  -1 means there is no associated ifd.  */
1105       ret->esym.ifd = -2;
1106       ret->la25_stub = 0;
1107       ret->possibly_dynamic_relocs = 0;
1108       ret->fn_stub = NULL;
1109       ret->call_stub = NULL;
1110       ret->call_fp_stub = NULL;
1111       ret->global_got_area = GGA_NONE;
1112       ret->got_only_for_calls = TRUE;
1113       ret->readonly_reloc = FALSE;
1114       ret->has_static_relocs = FALSE;
1115       ret->no_fn_stub = FALSE;
1116       ret->need_fn_stub = FALSE;
1117       ret->has_nonpic_branches = FALSE;
1118       ret->needs_lazy_stub = FALSE;
1119     }
1120 
1121   return (struct bfd_hash_entry *) ret;
1122 }
1123 
1124 /* Allocate MIPS ELF private object data.  */
1125 
1126 bfd_boolean
1127 _bfd_mips_elf_mkobject (bfd *abfd)
1128 {
1129   return bfd_elf_allocate_object (abfd, sizeof (struct mips_elf_obj_tdata),
1130 				  MIPS_ELF_DATA);
1131 }
1132 
1133 bfd_boolean
1134 _bfd_mips_elf_new_section_hook (bfd *abfd, asection *sec)
1135 {
1136   if (!sec->used_by_bfd)
1137     {
1138       struct _mips_elf_section_data *sdata;
1139       bfd_size_type amt = sizeof (*sdata);
1140 
1141       sdata = bfd_zalloc (abfd, amt);
1142       if (sdata == NULL)
1143 	return FALSE;
1144       sec->used_by_bfd = sdata;
1145     }
1146 
1147   return _bfd_elf_new_section_hook (abfd, sec);
1148 }
1149 
1150 /* Read ECOFF debugging information from a .mdebug section into a
1151    ecoff_debug_info structure.  */
1152 
1153 bfd_boolean
1154 _bfd_mips_elf_read_ecoff_info (bfd *abfd, asection *section,
1155 			       struct ecoff_debug_info *debug)
1156 {
1157   HDRR *symhdr;
1158   const struct ecoff_debug_swap *swap;
1159   char *ext_hdr;
1160 
1161   swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
1162   memset (debug, 0, sizeof (*debug));
1163 
1164   ext_hdr = bfd_malloc (swap->external_hdr_size);
1165   if (ext_hdr == NULL && swap->external_hdr_size != 0)
1166     goto error_return;
1167 
1168   if (! bfd_get_section_contents (abfd, section, ext_hdr, 0,
1169 				  swap->external_hdr_size))
1170     goto error_return;
1171 
1172   symhdr = &debug->symbolic_header;
1173   (*swap->swap_hdr_in) (abfd, ext_hdr, symhdr);
1174 
1175   /* The symbolic header contains absolute file offsets and sizes to
1176      read.  */
1177 #define READ(ptr, offset, count, size, type)				\
1178   if (symhdr->count == 0)						\
1179     debug->ptr = NULL;							\
1180   else									\
1181     {									\
1182       bfd_size_type amt = (bfd_size_type) size * symhdr->count;		\
1183       debug->ptr = bfd_malloc (amt);					\
1184       if (debug->ptr == NULL)						\
1185 	goto error_return;						\
1186       if (bfd_seek (abfd, symhdr->offset, SEEK_SET) != 0		\
1187 	  || bfd_bread (debug->ptr, amt, abfd) != amt)			\
1188 	goto error_return;						\
1189     }
1190 
1191   READ (line, cbLineOffset, cbLine, sizeof (unsigned char), unsigned char *);
1192   READ (external_dnr, cbDnOffset, idnMax, swap->external_dnr_size, void *);
1193   READ (external_pdr, cbPdOffset, ipdMax, swap->external_pdr_size, void *);
1194   READ (external_sym, cbSymOffset, isymMax, swap->external_sym_size, void *);
1195   READ (external_opt, cbOptOffset, ioptMax, swap->external_opt_size, void *);
1196   READ (external_aux, cbAuxOffset, iauxMax, sizeof (union aux_ext),
1197 	union aux_ext *);
1198   READ (ss, cbSsOffset, issMax, sizeof (char), char *);
1199   READ (ssext, cbSsExtOffset, issExtMax, sizeof (char), char *);
1200   READ (external_fdr, cbFdOffset, ifdMax, swap->external_fdr_size, void *);
1201   READ (external_rfd, cbRfdOffset, crfd, swap->external_rfd_size, void *);
1202   READ (external_ext, cbExtOffset, iextMax, swap->external_ext_size, void *);
1203 #undef READ
1204 
1205   debug->fdr = NULL;
1206 
1207   return TRUE;
1208 
1209  error_return:
1210   if (ext_hdr != NULL)
1211     free (ext_hdr);
1212   if (debug->line != NULL)
1213     free (debug->line);
1214   if (debug->external_dnr != NULL)
1215     free (debug->external_dnr);
1216   if (debug->external_pdr != NULL)
1217     free (debug->external_pdr);
1218   if (debug->external_sym != NULL)
1219     free (debug->external_sym);
1220   if (debug->external_opt != NULL)
1221     free (debug->external_opt);
1222   if (debug->external_aux != NULL)
1223     free (debug->external_aux);
1224   if (debug->ss != NULL)
1225     free (debug->ss);
1226   if (debug->ssext != NULL)
1227     free (debug->ssext);
1228   if (debug->external_fdr != NULL)
1229     free (debug->external_fdr);
1230   if (debug->external_rfd != NULL)
1231     free (debug->external_rfd);
1232   if (debug->external_ext != NULL)
1233     free (debug->external_ext);
1234   return FALSE;
1235 }
1236 
1237 /* Swap RPDR (runtime procedure table entry) for output.  */
1238 
1239 static void
1240 ecoff_swap_rpdr_out (bfd *abfd, const RPDR *in, struct rpdr_ext *ex)
1241 {
1242   H_PUT_S32 (abfd, in->adr, ex->p_adr);
1243   H_PUT_32 (abfd, in->regmask, ex->p_regmask);
1244   H_PUT_32 (abfd, in->regoffset, ex->p_regoffset);
1245   H_PUT_32 (abfd, in->fregmask, ex->p_fregmask);
1246   H_PUT_32 (abfd, in->fregoffset, ex->p_fregoffset);
1247   H_PUT_32 (abfd, in->frameoffset, ex->p_frameoffset);
1248 
1249   H_PUT_16 (abfd, in->framereg, ex->p_framereg);
1250   H_PUT_16 (abfd, in->pcreg, ex->p_pcreg);
1251 
1252   H_PUT_32 (abfd, in->irpss, ex->p_irpss);
1253 }
1254 
1255 /* Create a runtime procedure table from the .mdebug section.  */
1256 
1257 static bfd_boolean
1258 mips_elf_create_procedure_table (void *handle, bfd *abfd,
1259 				 struct bfd_link_info *info, asection *s,
1260 				 struct ecoff_debug_info *debug)
1261 {
1262   const struct ecoff_debug_swap *swap;
1263   HDRR *hdr = &debug->symbolic_header;
1264   RPDR *rpdr, *rp;
1265   struct rpdr_ext *erp;
1266   void *rtproc;
1267   struct pdr_ext *epdr;
1268   struct sym_ext *esym;
1269   char *ss, **sv;
1270   char *str;
1271   bfd_size_type size;
1272   bfd_size_type count;
1273   unsigned long sindex;
1274   unsigned long i;
1275   PDR pdr;
1276   SYMR sym;
1277   const char *no_name_func = _("static procedure (no name)");
1278 
1279   epdr = NULL;
1280   rpdr = NULL;
1281   esym = NULL;
1282   ss = NULL;
1283   sv = NULL;
1284 
1285   swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
1286 
1287   sindex = strlen (no_name_func) + 1;
1288   count = hdr->ipdMax;
1289   if (count > 0)
1290     {
1291       size = swap->external_pdr_size;
1292 
1293       epdr = bfd_malloc (size * count);
1294       if (epdr == NULL)
1295 	goto error_return;
1296 
1297       if (! _bfd_ecoff_get_accumulated_pdr (handle, (bfd_byte *) epdr))
1298 	goto error_return;
1299 
1300       size = sizeof (RPDR);
1301       rp = rpdr = bfd_malloc (size * count);
1302       if (rpdr == NULL)
1303 	goto error_return;
1304 
1305       size = sizeof (char *);
1306       sv = bfd_malloc (size * count);
1307       if (sv == NULL)
1308 	goto error_return;
1309 
1310       count = hdr->isymMax;
1311       size = swap->external_sym_size;
1312       esym = bfd_malloc (size * count);
1313       if (esym == NULL)
1314 	goto error_return;
1315 
1316       if (! _bfd_ecoff_get_accumulated_sym (handle, (bfd_byte *) esym))
1317 	goto error_return;
1318 
1319       count = hdr->issMax;
1320       ss = bfd_malloc (count);
1321       if (ss == NULL)
1322 	goto error_return;
1323       if (! _bfd_ecoff_get_accumulated_ss (handle, (bfd_byte *) ss))
1324 	goto error_return;
1325 
1326       count = hdr->ipdMax;
1327       for (i = 0; i < (unsigned long) count; i++, rp++)
1328 	{
1329 	  (*swap->swap_pdr_in) (abfd, epdr + i, &pdr);
1330 	  (*swap->swap_sym_in) (abfd, &esym[pdr.isym], &sym);
1331 	  rp->adr = sym.value;
1332 	  rp->regmask = pdr.regmask;
1333 	  rp->regoffset = pdr.regoffset;
1334 	  rp->fregmask = pdr.fregmask;
1335 	  rp->fregoffset = pdr.fregoffset;
1336 	  rp->frameoffset = pdr.frameoffset;
1337 	  rp->framereg = pdr.framereg;
1338 	  rp->pcreg = pdr.pcreg;
1339 	  rp->irpss = sindex;
1340 	  sv[i] = ss + sym.iss;
1341 	  sindex += strlen (sv[i]) + 1;
1342 	}
1343     }
1344 
1345   size = sizeof (struct rpdr_ext) * (count + 2) + sindex;
1346   size = BFD_ALIGN (size, 16);
1347   rtproc = bfd_alloc (abfd, size);
1348   if (rtproc == NULL)
1349     {
1350       mips_elf_hash_table (info)->procedure_count = 0;
1351       goto error_return;
1352     }
1353 
1354   mips_elf_hash_table (info)->procedure_count = count + 2;
1355 
1356   erp = rtproc;
1357   memset (erp, 0, sizeof (struct rpdr_ext));
1358   erp++;
1359   str = (char *) rtproc + sizeof (struct rpdr_ext) * (count + 2);
1360   strcpy (str, no_name_func);
1361   str += strlen (no_name_func) + 1;
1362   for (i = 0; i < count; i++)
1363     {
1364       ecoff_swap_rpdr_out (abfd, rpdr + i, erp + i);
1365       strcpy (str, sv[i]);
1366       str += strlen (sv[i]) + 1;
1367     }
1368   H_PUT_S32 (abfd, -1, (erp + count)->p_adr);
1369 
1370   /* Set the size and contents of .rtproc section.  */
1371   s->size = size;
1372   s->contents = rtproc;
1373 
1374   /* Skip this section later on (I don't think this currently
1375      matters, but someday it might).  */
1376   s->map_head.link_order = NULL;
1377 
1378   if (epdr != NULL)
1379     free (epdr);
1380   if (rpdr != NULL)
1381     free (rpdr);
1382   if (esym != NULL)
1383     free (esym);
1384   if (ss != NULL)
1385     free (ss);
1386   if (sv != NULL)
1387     free (sv);
1388 
1389   return TRUE;
1390 
1391  error_return:
1392   if (epdr != NULL)
1393     free (epdr);
1394   if (rpdr != NULL)
1395     free (rpdr);
1396   if (esym != NULL)
1397     free (esym);
1398   if (ss != NULL)
1399     free (ss);
1400   if (sv != NULL)
1401     free (sv);
1402   return FALSE;
1403 }
1404 
1405 /* We're going to create a stub for H.  Create a symbol for the stub's
1406    value and size, to help make the disassembly easier to read.  */
1407 
1408 static bfd_boolean
1409 mips_elf_create_stub_symbol (struct bfd_link_info *info,
1410 			     struct mips_elf_link_hash_entry *h,
1411 			     const char *prefix, asection *s, bfd_vma value,
1412 			     bfd_vma size)
1413 {
1414   struct bfd_link_hash_entry *bh;
1415   struct elf_link_hash_entry *elfh;
1416   const char *name;
1417 
1418   if (ELF_ST_IS_MICROMIPS (h->root.other))
1419     value |= 1;
1420 
1421   /* Create a new symbol.  */
1422   name = ACONCAT ((prefix, h->root.root.root.string, NULL));
1423   bh = NULL;
1424   if (!_bfd_generic_link_add_one_symbol (info, s->owner, name,
1425 					 BSF_LOCAL, s, value, NULL,
1426 					 TRUE, FALSE, &bh))
1427     return FALSE;
1428 
1429   /* Make it a local function.  */
1430   elfh = (struct elf_link_hash_entry *) bh;
1431   elfh->type = ELF_ST_INFO (STB_LOCAL, STT_FUNC);
1432   elfh->size = size;
1433   elfh->forced_local = 1;
1434   return TRUE;
1435 }
1436 
1437 /* We're about to redefine H.  Create a symbol to represent H's
1438    current value and size, to help make the disassembly easier
1439    to read.  */
1440 
1441 static bfd_boolean
1442 mips_elf_create_shadow_symbol (struct bfd_link_info *info,
1443 			       struct mips_elf_link_hash_entry *h,
1444 			       const char *prefix)
1445 {
1446   struct bfd_link_hash_entry *bh;
1447   struct elf_link_hash_entry *elfh;
1448   const char *name;
1449   asection *s;
1450   bfd_vma value;
1451 
1452   /* Read the symbol's value.  */
1453   BFD_ASSERT (h->root.root.type == bfd_link_hash_defined
1454 	      || h->root.root.type == bfd_link_hash_defweak);
1455   s = h->root.root.u.def.section;
1456   value = h->root.root.u.def.value;
1457 
1458   /* Create a new symbol.  */
1459   name = ACONCAT ((prefix, h->root.root.root.string, NULL));
1460   bh = NULL;
1461   if (!_bfd_generic_link_add_one_symbol (info, s->owner, name,
1462 					 BSF_LOCAL, s, value, NULL,
1463 					 TRUE, FALSE, &bh))
1464     return FALSE;
1465 
1466   /* Make it local and copy the other attributes from H.  */
1467   elfh = (struct elf_link_hash_entry *) bh;
1468   elfh->type = ELF_ST_INFO (STB_LOCAL, ELF_ST_TYPE (h->root.type));
1469   elfh->other = h->root.other;
1470   elfh->size = h->root.size;
1471   elfh->forced_local = 1;
1472   return TRUE;
1473 }
1474 
1475 /* Return TRUE if relocations in SECTION can refer directly to a MIPS16
1476    function rather than to a hard-float stub.  */
1477 
1478 static bfd_boolean
1479 section_allows_mips16_refs_p (asection *section)
1480 {
1481   const char *name;
1482 
1483   name = bfd_get_section_name (section->owner, section);
1484   return (FN_STUB_P (name)
1485 	  || CALL_STUB_P (name)
1486 	  || CALL_FP_STUB_P (name)
1487 	  || strcmp (name, ".pdr") == 0);
1488 }
1489 
1490 /* [RELOCS, RELEND) are the relocations against SEC, which is a MIPS16
1491    stub section of some kind.  Return the R_SYMNDX of the target
1492    function, or 0 if we can't decide which function that is.  */
1493 
1494 static unsigned long
1495 mips16_stub_symndx (const struct elf_backend_data *bed,
1496 		    asection *sec ATTRIBUTE_UNUSED,
1497 		    const Elf_Internal_Rela *relocs,
1498 		    const Elf_Internal_Rela *relend)
1499 {
1500   int int_rels_per_ext_rel = bed->s->int_rels_per_ext_rel;
1501   const Elf_Internal_Rela *rel;
1502 
1503   /* Trust the first R_MIPS_NONE relocation, if any, but not a subsequent
1504      one in a compound relocation.  */
1505   for (rel = relocs; rel < relend; rel += int_rels_per_ext_rel)
1506     if (ELF_R_TYPE (sec->owner, rel->r_info) == R_MIPS_NONE)
1507       return ELF_R_SYM (sec->owner, rel->r_info);
1508 
1509   /* Otherwise trust the first relocation, whatever its kind.  This is
1510      the traditional behavior.  */
1511   if (relocs < relend)
1512     return ELF_R_SYM (sec->owner, relocs->r_info);
1513 
1514   return 0;
1515 }
1516 
1517 /* Check the mips16 stubs for a particular symbol, and see if we can
1518    discard them.  */
1519 
1520 static void
1521 mips_elf_check_mips16_stubs (struct bfd_link_info *info,
1522 			     struct mips_elf_link_hash_entry *h)
1523 {
1524   /* Dynamic symbols must use the standard call interface, in case other
1525      objects try to call them.  */
1526   if (h->fn_stub != NULL
1527       && h->root.dynindx != -1)
1528     {
1529       mips_elf_create_shadow_symbol (info, h, ".mips16.");
1530       h->need_fn_stub = TRUE;
1531     }
1532 
1533   if (h->fn_stub != NULL
1534       && ! h->need_fn_stub)
1535     {
1536       /* We don't need the fn_stub; the only references to this symbol
1537          are 16 bit calls.  Clobber the size to 0 to prevent it from
1538          being included in the link.  */
1539       h->fn_stub->size = 0;
1540       h->fn_stub->flags &= ~SEC_RELOC;
1541       h->fn_stub->reloc_count = 0;
1542       h->fn_stub->flags |= SEC_EXCLUDE;
1543     }
1544 
1545   if (h->call_stub != NULL
1546       && ELF_ST_IS_MIPS16 (h->root.other))
1547     {
1548       /* We don't need the call_stub; this is a 16 bit function, so
1549          calls from other 16 bit functions are OK.  Clobber the size
1550          to 0 to prevent it from being included in the link.  */
1551       h->call_stub->size = 0;
1552       h->call_stub->flags &= ~SEC_RELOC;
1553       h->call_stub->reloc_count = 0;
1554       h->call_stub->flags |= SEC_EXCLUDE;
1555     }
1556 
1557   if (h->call_fp_stub != NULL
1558       && ELF_ST_IS_MIPS16 (h->root.other))
1559     {
1560       /* We don't need the call_stub; this is a 16 bit function, so
1561          calls from other 16 bit functions are OK.  Clobber the size
1562          to 0 to prevent it from being included in the link.  */
1563       h->call_fp_stub->size = 0;
1564       h->call_fp_stub->flags &= ~SEC_RELOC;
1565       h->call_fp_stub->reloc_count = 0;
1566       h->call_fp_stub->flags |= SEC_EXCLUDE;
1567     }
1568 }
1569 
1570 /* Hashtable callbacks for mips_elf_la25_stubs.  */
1571 
1572 static hashval_t
1573 mips_elf_la25_stub_hash (const void *entry_)
1574 {
1575   const struct mips_elf_la25_stub *entry;
1576 
1577   entry = (struct mips_elf_la25_stub *) entry_;
1578   return entry->h->root.root.u.def.section->id
1579     + entry->h->root.root.u.def.value;
1580 }
1581 
1582 static int
1583 mips_elf_la25_stub_eq (const void *entry1_, const void *entry2_)
1584 {
1585   const struct mips_elf_la25_stub *entry1, *entry2;
1586 
1587   entry1 = (struct mips_elf_la25_stub *) entry1_;
1588   entry2 = (struct mips_elf_la25_stub *) entry2_;
1589   return ((entry1->h->root.root.u.def.section
1590 	   == entry2->h->root.root.u.def.section)
1591 	  && (entry1->h->root.root.u.def.value
1592 	      == entry2->h->root.root.u.def.value));
1593 }
1594 
1595 /* Called by the linker to set up the la25 stub-creation code.  FN is
1596    the linker's implementation of add_stub_function.  Return true on
1597    success.  */
1598 
1599 bfd_boolean
1600 _bfd_mips_elf_init_stubs (struct bfd_link_info *info,
1601 			  asection *(*fn) (const char *, asection *,
1602 					   asection *))
1603 {
1604   struct mips_elf_link_hash_table *htab;
1605 
1606   htab = mips_elf_hash_table (info);
1607   if (htab == NULL)
1608     return FALSE;
1609 
1610   htab->add_stub_section = fn;
1611   htab->la25_stubs = htab_try_create (1, mips_elf_la25_stub_hash,
1612 				      mips_elf_la25_stub_eq, NULL);
1613   if (htab->la25_stubs == NULL)
1614     return FALSE;
1615 
1616   return TRUE;
1617 }
1618 
1619 /* Return true if H is a locally-defined PIC function, in the sense
1620    that it or its fn_stub might need $25 to be valid on entry.
1621    Note that MIPS16 functions set up $gp using PC-relative instructions,
1622    so they themselves never need $25 to be valid.  Only non-MIPS16
1623    entry points are of interest here.  */
1624 
1625 static bfd_boolean
1626 mips_elf_local_pic_function_p (struct mips_elf_link_hash_entry *h)
1627 {
1628   return ((h->root.root.type == bfd_link_hash_defined
1629 	   || h->root.root.type == bfd_link_hash_defweak)
1630 	  && h->root.def_regular
1631 	  && !bfd_is_abs_section (h->root.root.u.def.section)
1632 	  && (!ELF_ST_IS_MIPS16 (h->root.other)
1633 	      || (h->fn_stub && h->need_fn_stub))
1634 	  && (PIC_OBJECT_P (h->root.root.u.def.section->owner)
1635 	      || ELF_ST_IS_MIPS_PIC (h->root.other)));
1636 }
1637 
1638 /* Set *SEC to the input section that contains the target of STUB.
1639    Return the offset of the target from the start of that section.  */
1640 
1641 static bfd_vma
1642 mips_elf_get_la25_target (struct mips_elf_la25_stub *stub,
1643 			  asection **sec)
1644 {
1645   if (ELF_ST_IS_MIPS16 (stub->h->root.other))
1646     {
1647       BFD_ASSERT (stub->h->need_fn_stub);
1648       *sec = stub->h->fn_stub;
1649       return 0;
1650     }
1651   else
1652     {
1653       *sec = stub->h->root.root.u.def.section;
1654       return stub->h->root.root.u.def.value;
1655     }
1656 }
1657 
1658 /* STUB describes an la25 stub that we have decided to implement
1659    by inserting an LUI/ADDIU pair before the target function.
1660    Create the section and redirect the function symbol to it.  */
1661 
1662 static bfd_boolean
1663 mips_elf_add_la25_intro (struct mips_elf_la25_stub *stub,
1664 			 struct bfd_link_info *info)
1665 {
1666   struct mips_elf_link_hash_table *htab;
1667   char *name;
1668   asection *s, *input_section;
1669   unsigned int align;
1670 
1671   htab = mips_elf_hash_table (info);
1672   if (htab == NULL)
1673     return FALSE;
1674 
1675   /* Create a unique name for the new section.  */
1676   name = bfd_malloc (11 + sizeof (".text.stub."));
1677   if (name == NULL)
1678     return FALSE;
1679   sprintf (name, ".text.stub.%d", (int) htab_elements (htab->la25_stubs));
1680 
1681   /* Create the section.  */
1682   mips_elf_get_la25_target (stub, &input_section);
1683   s = htab->add_stub_section (name, input_section,
1684 			      input_section->output_section);
1685   if (s == NULL)
1686     return FALSE;
1687 
1688   /* Make sure that any padding goes before the stub.  */
1689   align = input_section->alignment_power;
1690   if (!bfd_set_section_alignment (s->owner, s, align))
1691     return FALSE;
1692   if (align > 3)
1693     s->size = (1 << align) - 8;
1694 
1695   /* Create a symbol for the stub.  */
1696   mips_elf_create_stub_symbol (info, stub->h, ".pic.", s, s->size, 8);
1697   stub->stub_section = s;
1698   stub->offset = s->size;
1699 
1700   /* Allocate room for it.  */
1701   s->size += 8;
1702   return TRUE;
1703 }
1704 
1705 /* STUB describes an la25 stub that we have decided to implement
1706    with a separate trampoline.  Allocate room for it and redirect
1707    the function symbol to it.  */
1708 
1709 static bfd_boolean
1710 mips_elf_add_la25_trampoline (struct mips_elf_la25_stub *stub,
1711 			      struct bfd_link_info *info)
1712 {
1713   struct mips_elf_link_hash_table *htab;
1714   asection *s;
1715 
1716   htab = mips_elf_hash_table (info);
1717   if (htab == NULL)
1718     return FALSE;
1719 
1720   /* Create a trampoline section, if we haven't already.  */
1721   s = htab->strampoline;
1722   if (s == NULL)
1723     {
1724       asection *input_section = stub->h->root.root.u.def.section;
1725       s = htab->add_stub_section (".text", NULL,
1726 				  input_section->output_section);
1727       if (s == NULL || !bfd_set_section_alignment (s->owner, s, 4))
1728 	return FALSE;
1729       htab->strampoline = s;
1730     }
1731 
1732   /* Create a symbol for the stub.  */
1733   mips_elf_create_stub_symbol (info, stub->h, ".pic.", s, s->size, 16);
1734   stub->stub_section = s;
1735   stub->offset = s->size;
1736 
1737   /* Allocate room for it.  */
1738   s->size += 16;
1739   return TRUE;
1740 }
1741 
1742 /* H describes a symbol that needs an la25 stub.  Make sure that an
1743    appropriate stub exists and point H at it.  */
1744 
1745 static bfd_boolean
1746 mips_elf_add_la25_stub (struct bfd_link_info *info,
1747 			struct mips_elf_link_hash_entry *h)
1748 {
1749   struct mips_elf_link_hash_table *htab;
1750   struct mips_elf_la25_stub search, *stub;
1751   bfd_boolean use_trampoline_p;
1752   asection *s;
1753   bfd_vma value;
1754   void **slot;
1755 
1756   /* Describe the stub we want.  */
1757   search.stub_section = NULL;
1758   search.offset = 0;
1759   search.h = h;
1760 
1761   /* See if we've already created an equivalent stub.  */
1762   htab = mips_elf_hash_table (info);
1763   if (htab == NULL)
1764     return FALSE;
1765 
1766   slot = htab_find_slot (htab->la25_stubs, &search, INSERT);
1767   if (slot == NULL)
1768     return FALSE;
1769 
1770   stub = (struct mips_elf_la25_stub *) *slot;
1771   if (stub != NULL)
1772     {
1773       /* We can reuse the existing stub.  */
1774       h->la25_stub = stub;
1775       return TRUE;
1776     }
1777 
1778   /* Create a permanent copy of ENTRY and add it to the hash table.  */
1779   stub = bfd_malloc (sizeof (search));
1780   if (stub == NULL)
1781     return FALSE;
1782   *stub = search;
1783   *slot = stub;
1784 
1785   /* Prefer to use LUI/ADDIU stubs if the function is at the beginning
1786      of the section and if we would need no more than 2 nops.  */
1787   value = mips_elf_get_la25_target (stub, &s);
1788   use_trampoline_p = (value != 0 || s->alignment_power > 4);
1789 
1790   h->la25_stub = stub;
1791   return (use_trampoline_p
1792 	  ? mips_elf_add_la25_trampoline (stub, info)
1793 	  : mips_elf_add_la25_intro (stub, info));
1794 }
1795 
1796 /* A mips_elf_link_hash_traverse callback that is called before sizing
1797    sections.  DATA points to a mips_htab_traverse_info structure.  */
1798 
1799 static bfd_boolean
1800 mips_elf_check_symbols (struct mips_elf_link_hash_entry *h, void *data)
1801 {
1802   struct mips_htab_traverse_info *hti;
1803 
1804   hti = (struct mips_htab_traverse_info *) data;
1805   if (!hti->info->relocatable)
1806     mips_elf_check_mips16_stubs (hti->info, h);
1807 
1808   if (mips_elf_local_pic_function_p (h))
1809     {
1810       /* PR 12845: If H is in a section that has been garbage
1811 	 collected it will have its output section set to *ABS*.  */
1812       if (bfd_is_abs_section (h->root.root.u.def.section->output_section))
1813 	return TRUE;
1814 
1815       /* H is a function that might need $25 to be valid on entry.
1816 	 If we're creating a non-PIC relocatable object, mark H as
1817 	 being PIC.  If we're creating a non-relocatable object with
1818 	 non-PIC branches and jumps to H, make sure that H has an la25
1819 	 stub.  */
1820       if (hti->info->relocatable)
1821 	{
1822 	  if (!PIC_OBJECT_P (hti->output_bfd))
1823 	    h->root.other = ELF_ST_SET_MIPS_PIC (h->root.other);
1824 	}
1825       else if (h->has_nonpic_branches && !mips_elf_add_la25_stub (hti->info, h))
1826 	{
1827 	  hti->error = TRUE;
1828 	  return FALSE;
1829 	}
1830     }
1831   return TRUE;
1832 }
1833 
1834 /* R_MIPS16_26 is used for the mips16 jal and jalx instructions.
1835    Most mips16 instructions are 16 bits, but these instructions
1836    are 32 bits.
1837 
1838    The format of these instructions is:
1839 
1840    +--------------+--------------------------------+
1841    |     JALX     | X|   Imm 20:16  |   Imm 25:21  |
1842    +--------------+--------------------------------+
1843    |                Immediate  15:0                |
1844    +-----------------------------------------------+
1845 
1846    JALX is the 5-bit value 00011.  X is 0 for jal, 1 for jalx.
1847    Note that the immediate value in the first word is swapped.
1848 
1849    When producing a relocatable object file, R_MIPS16_26 is
1850    handled mostly like R_MIPS_26.  In particular, the addend is
1851    stored as a straight 26-bit value in a 32-bit instruction.
1852    (gas makes life simpler for itself by never adjusting a
1853    R_MIPS16_26 reloc to be against a section, so the addend is
1854    always zero).  However, the 32 bit instruction is stored as 2
1855    16-bit values, rather than a single 32-bit value.  In a
1856    big-endian file, the result is the same; in a little-endian
1857    file, the two 16-bit halves of the 32 bit value are swapped.
1858    This is so that a disassembler can recognize the jal
1859    instruction.
1860 
1861    When doing a final link, R_MIPS16_26 is treated as a 32 bit
1862    instruction stored as two 16-bit values.  The addend A is the
1863    contents of the targ26 field.  The calculation is the same as
1864    R_MIPS_26.  When storing the calculated value, reorder the
1865    immediate value as shown above, and don't forget to store the
1866    value as two 16-bit values.
1867 
1868    To put it in MIPS ABI terms, the relocation field is T-targ26-16,
1869    defined as
1870 
1871    big-endian:
1872    +--------+----------------------+
1873    |        |                      |
1874    |        |    targ26-16         |
1875    |31    26|25                   0|
1876    +--------+----------------------+
1877 
1878    little-endian:
1879    +----------+------+-------------+
1880    |          |      |             |
1881    |  sub1    |      |     sub2    |
1882    |0        9|10  15|16         31|
1883    +----------+--------------------+
1884    where targ26-16 is sub1 followed by sub2 (i.e., the addend field A is
1885    ((sub1 << 16) | sub2)).
1886 
1887    When producing a relocatable object file, the calculation is
1888    (((A < 2) | ((P + 4) & 0xf0000000) + S) >> 2)
1889    When producing a fully linked file, the calculation is
1890    let R = (((A < 2) | ((P + 4) & 0xf0000000) + S) >> 2)
1891    ((R & 0x1f0000) << 5) | ((R & 0x3e00000) >> 5) | (R & 0xffff)
1892 
1893    The table below lists the other MIPS16 instruction relocations.
1894    Each one is calculated in the same way as the non-MIPS16 relocation
1895    given on the right, but using the extended MIPS16 layout of 16-bit
1896    immediate fields:
1897 
1898 	R_MIPS16_GPREL		R_MIPS_GPREL16
1899 	R_MIPS16_GOT16		R_MIPS_GOT16
1900 	R_MIPS16_CALL16		R_MIPS_CALL16
1901 	R_MIPS16_HI16		R_MIPS_HI16
1902 	R_MIPS16_LO16		R_MIPS_LO16
1903 
1904    A typical instruction will have a format like this:
1905 
1906    +--------------+--------------------------------+
1907    |    EXTEND    |     Imm 10:5    |   Imm 15:11  |
1908    +--------------+--------------------------------+
1909    |    Major     |   rx   |   ry   |   Imm  4:0   |
1910    +--------------+--------------------------------+
1911 
1912    EXTEND is the five bit value 11110.  Major is the instruction
1913    opcode.
1914 
1915    All we need to do here is shuffle the bits appropriately.
1916    As above, the two 16-bit halves must be swapped on a
1917    little-endian system.  */
1918 
1919 static inline bfd_boolean
1920 mips16_reloc_p (int r_type)
1921 {
1922   switch (r_type)
1923     {
1924     case R_MIPS16_26:
1925     case R_MIPS16_GPREL:
1926     case R_MIPS16_GOT16:
1927     case R_MIPS16_CALL16:
1928     case R_MIPS16_HI16:
1929     case R_MIPS16_LO16:
1930     case R_MIPS16_TLS_GD:
1931     case R_MIPS16_TLS_LDM:
1932     case R_MIPS16_TLS_DTPREL_HI16:
1933     case R_MIPS16_TLS_DTPREL_LO16:
1934     case R_MIPS16_TLS_GOTTPREL:
1935     case R_MIPS16_TLS_TPREL_HI16:
1936     case R_MIPS16_TLS_TPREL_LO16:
1937       return TRUE;
1938 
1939     default:
1940       return FALSE;
1941     }
1942 }
1943 
1944 /* Check if a microMIPS reloc.  */
1945 
1946 static inline bfd_boolean
1947 micromips_reloc_p (unsigned int r_type)
1948 {
1949   return r_type >= R_MICROMIPS_min && r_type < R_MICROMIPS_max;
1950 }
1951 
1952 /* Similar to MIPS16, the two 16-bit halves in microMIPS must be swapped
1953    on a little-endian system.  This does not apply to R_MICROMIPS_PC7_S1
1954    and R_MICROMIPS_PC10_S1 relocs that apply to 16-bit instructions.  */
1955 
1956 static inline bfd_boolean
1957 micromips_reloc_shuffle_p (unsigned int r_type)
1958 {
1959   return (micromips_reloc_p (r_type)
1960 	  && r_type != R_MICROMIPS_PC7_S1
1961 	  && r_type != R_MICROMIPS_PC10_S1);
1962 }
1963 
1964 static inline bfd_boolean
1965 got16_reloc_p (int r_type)
1966 {
1967   return (r_type == R_MIPS_GOT16
1968 	  || r_type == R_MIPS16_GOT16
1969 	  || r_type == R_MICROMIPS_GOT16);
1970 }
1971 
1972 static inline bfd_boolean
1973 call16_reloc_p (int r_type)
1974 {
1975   return (r_type == R_MIPS_CALL16
1976 	  || r_type == R_MIPS16_CALL16
1977 	  || r_type == R_MICROMIPS_CALL16);
1978 }
1979 
1980 static inline bfd_boolean
1981 got_disp_reloc_p (unsigned int r_type)
1982 {
1983   return r_type == R_MIPS_GOT_DISP || r_type == R_MICROMIPS_GOT_DISP;
1984 }
1985 
1986 static inline bfd_boolean
1987 got_page_reloc_p (unsigned int r_type)
1988 {
1989   return r_type == R_MIPS_GOT_PAGE || r_type == R_MICROMIPS_GOT_PAGE;
1990 }
1991 
1992 static inline bfd_boolean
1993 got_ofst_reloc_p (unsigned int r_type)
1994 {
1995   return r_type == R_MIPS_GOT_OFST || r_type == R_MICROMIPS_GOT_OFST;
1996 }
1997 
1998 static inline bfd_boolean
1999 got_hi16_reloc_p (unsigned int r_type)
2000 {
2001   return r_type == R_MIPS_GOT_HI16 || r_type == R_MICROMIPS_GOT_HI16;
2002 }
2003 
2004 static inline bfd_boolean
2005 got_lo16_reloc_p (unsigned int r_type)
2006 {
2007   return r_type == R_MIPS_GOT_LO16 || r_type == R_MICROMIPS_GOT_LO16;
2008 }
2009 
2010 static inline bfd_boolean
2011 call_hi16_reloc_p (unsigned int r_type)
2012 {
2013   return r_type == R_MIPS_CALL_HI16 || r_type == R_MICROMIPS_CALL_HI16;
2014 }
2015 
2016 static inline bfd_boolean
2017 call_lo16_reloc_p (unsigned int r_type)
2018 {
2019   return r_type == R_MIPS_CALL_LO16 || r_type == R_MICROMIPS_CALL_LO16;
2020 }
2021 
2022 static inline bfd_boolean
2023 hi16_reloc_p (int r_type)
2024 {
2025   return (r_type == R_MIPS_HI16
2026 	  || r_type == R_MIPS16_HI16
2027 	  || r_type == R_MICROMIPS_HI16);
2028 }
2029 
2030 static inline bfd_boolean
2031 lo16_reloc_p (int r_type)
2032 {
2033   return (r_type == R_MIPS_LO16
2034 	  || r_type == R_MIPS16_LO16
2035 	  || r_type == R_MICROMIPS_LO16);
2036 }
2037 
2038 static inline bfd_boolean
2039 mips16_call_reloc_p (int r_type)
2040 {
2041   return r_type == R_MIPS16_26 || r_type == R_MIPS16_CALL16;
2042 }
2043 
2044 static inline bfd_boolean
2045 jal_reloc_p (int r_type)
2046 {
2047   return (r_type == R_MIPS_26
2048 	  || r_type == R_MIPS16_26
2049 	  || r_type == R_MICROMIPS_26_S1);
2050 }
2051 
2052 static inline bfd_boolean
2053 micromips_branch_reloc_p (int r_type)
2054 {
2055   return (r_type == R_MICROMIPS_26_S1
2056 	  || r_type == R_MICROMIPS_PC16_S1
2057 	  || r_type == R_MICROMIPS_PC10_S1
2058 	  || r_type == R_MICROMIPS_PC7_S1);
2059 }
2060 
2061 static inline bfd_boolean
2062 tls_gd_reloc_p (unsigned int r_type)
2063 {
2064   return (r_type == R_MIPS_TLS_GD
2065 	  || r_type == R_MIPS16_TLS_GD
2066 	  || r_type == R_MICROMIPS_TLS_GD);
2067 }
2068 
2069 static inline bfd_boolean
2070 tls_ldm_reloc_p (unsigned int r_type)
2071 {
2072   return (r_type == R_MIPS_TLS_LDM
2073 	  || r_type == R_MIPS16_TLS_LDM
2074 	  || r_type == R_MICROMIPS_TLS_LDM);
2075 }
2076 
2077 static inline bfd_boolean
2078 tls_gottprel_reloc_p (unsigned int r_type)
2079 {
2080   return (r_type == R_MIPS_TLS_GOTTPREL
2081 	  || r_type == R_MIPS16_TLS_GOTTPREL
2082 	  || r_type == R_MICROMIPS_TLS_GOTTPREL);
2083 }
2084 
2085 void
2086 _bfd_mips_elf_reloc_unshuffle (bfd *abfd, int r_type,
2087 			       bfd_boolean jal_shuffle, bfd_byte *data)
2088 {
2089   bfd_vma first, second, val;
2090 
2091   if (!mips16_reloc_p (r_type) && !micromips_reloc_shuffle_p (r_type))
2092     return;
2093 
2094   /* Pick up the first and second halfwords of the instruction.  */
2095   first = bfd_get_16 (abfd, data);
2096   second = bfd_get_16 (abfd, data + 2);
2097   if (micromips_reloc_p (r_type) || (r_type == R_MIPS16_26 && !jal_shuffle))
2098     val = first << 16 | second;
2099   else if (r_type != R_MIPS16_26)
2100     val = (((first & 0xf800) << 16) | ((second & 0xffe0) << 11)
2101 	   | ((first & 0x1f) << 11) | (first & 0x7e0) | (second & 0x1f));
2102   else
2103     val = (((first & 0xfc00) << 16) | ((first & 0x3e0) << 11)
2104 	   | ((first & 0x1f) << 21) | second);
2105   bfd_put_32 (abfd, val, data);
2106 }
2107 
2108 void
2109 _bfd_mips_elf_reloc_shuffle (bfd *abfd, int r_type,
2110 			     bfd_boolean jal_shuffle, bfd_byte *data)
2111 {
2112   bfd_vma first, second, val;
2113 
2114   if (!mips16_reloc_p (r_type) && !micromips_reloc_shuffle_p (r_type))
2115     return;
2116 
2117   val = bfd_get_32 (abfd, data);
2118   if (micromips_reloc_p (r_type) || (r_type == R_MIPS16_26 && !jal_shuffle))
2119     {
2120       second = val & 0xffff;
2121       first = val >> 16;
2122     }
2123   else if (r_type != R_MIPS16_26)
2124     {
2125       second = ((val >> 11) & 0xffe0) | (val & 0x1f);
2126       first = ((val >> 16) & 0xf800) | ((val >> 11) & 0x1f) | (val & 0x7e0);
2127     }
2128   else
2129     {
2130       second = val & 0xffff;
2131       first = ((val >> 16) & 0xfc00) | ((val >> 11) & 0x3e0)
2132 	       | ((val >> 21) & 0x1f);
2133     }
2134   bfd_put_16 (abfd, second, data + 2);
2135   bfd_put_16 (abfd, first, data);
2136 }
2137 
2138 bfd_reloc_status_type
2139 _bfd_mips_elf_gprel16_with_gp (bfd *abfd, asymbol *symbol,
2140 			       arelent *reloc_entry, asection *input_section,
2141 			       bfd_boolean relocatable, void *data, bfd_vma gp)
2142 {
2143   bfd_vma relocation;
2144   bfd_signed_vma val;
2145   bfd_reloc_status_type status;
2146 
2147   if (bfd_is_com_section (symbol->section))
2148     relocation = 0;
2149   else
2150     relocation = symbol->value;
2151 
2152   relocation += symbol->section->output_section->vma;
2153   relocation += symbol->section->output_offset;
2154 
2155   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2156     return bfd_reloc_outofrange;
2157 
2158   /* Set val to the offset into the section or symbol.  */
2159   val = reloc_entry->addend;
2160 
2161   _bfd_mips_elf_sign_extend (val, 16);
2162 
2163   /* Adjust val for the final section location and GP value.  If we
2164      are producing relocatable output, we don't want to do this for
2165      an external symbol.  */
2166   if (! relocatable
2167       || (symbol->flags & BSF_SECTION_SYM) != 0)
2168     val += relocation - gp;
2169 
2170   if (reloc_entry->howto->partial_inplace)
2171     {
2172       status = _bfd_relocate_contents (reloc_entry->howto, abfd, val,
2173 				       (bfd_byte *) data
2174 				       + reloc_entry->address);
2175       if (status != bfd_reloc_ok)
2176 	return status;
2177     }
2178   else
2179     reloc_entry->addend = val;
2180 
2181   if (relocatable)
2182     reloc_entry->address += input_section->output_offset;
2183 
2184   return bfd_reloc_ok;
2185 }
2186 
2187 /* Used to store a REL high-part relocation such as R_MIPS_HI16 or
2188    R_MIPS_GOT16.  REL is the relocation, INPUT_SECTION is the section
2189    that contains the relocation field and DATA points to the start of
2190    INPUT_SECTION.  */
2191 
2192 struct mips_hi16
2193 {
2194   struct mips_hi16 *next;
2195   bfd_byte *data;
2196   asection *input_section;
2197   arelent rel;
2198 };
2199 
2200 /* FIXME: This should not be a static variable.  */
2201 
2202 static struct mips_hi16 *mips_hi16_list;
2203 
2204 /* A howto special_function for REL *HI16 relocations.  We can only
2205    calculate the correct value once we've seen the partnering
2206    *LO16 relocation, so just save the information for later.
2207 
2208    The ABI requires that the *LO16 immediately follow the *HI16.
2209    However, as a GNU extension, we permit an arbitrary number of
2210    *HI16s to be associated with a single *LO16.  This significantly
2211    simplies the relocation handling in gcc.  */
2212 
2213 bfd_reloc_status_type
2214 _bfd_mips_elf_hi16_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry,
2215 			  asymbol *symbol ATTRIBUTE_UNUSED, void *data,
2216 			  asection *input_section, bfd *output_bfd,
2217 			  char **error_message ATTRIBUTE_UNUSED)
2218 {
2219   struct mips_hi16 *n;
2220 
2221   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2222     return bfd_reloc_outofrange;
2223 
2224   n = bfd_malloc (sizeof *n);
2225   if (n == NULL)
2226     return bfd_reloc_outofrange;
2227 
2228   n->next = mips_hi16_list;
2229   n->data = data;
2230   n->input_section = input_section;
2231   n->rel = *reloc_entry;
2232   mips_hi16_list = n;
2233 
2234   if (output_bfd != NULL)
2235     reloc_entry->address += input_section->output_offset;
2236 
2237   return bfd_reloc_ok;
2238 }
2239 
2240 /* A howto special_function for REL R_MIPS*_GOT16 relocations.  This is just
2241    like any other 16-bit relocation when applied to global symbols, but is
2242    treated in the same as R_MIPS_HI16 when applied to local symbols.  */
2243 
2244 bfd_reloc_status_type
2245 _bfd_mips_elf_got16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2246 			   void *data, asection *input_section,
2247 			   bfd *output_bfd, char **error_message)
2248 {
2249   if ((symbol->flags & (BSF_GLOBAL | BSF_WEAK)) != 0
2250       || bfd_is_und_section (bfd_get_section (symbol))
2251       || bfd_is_com_section (bfd_get_section (symbol)))
2252     /* The relocation is against a global symbol.  */
2253     return _bfd_mips_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2254 					input_section, output_bfd,
2255 					error_message);
2256 
2257   return _bfd_mips_elf_hi16_reloc (abfd, reloc_entry, symbol, data,
2258 				   input_section, output_bfd, error_message);
2259 }
2260 
2261 /* A howto special_function for REL *LO16 relocations.  The *LO16 itself
2262    is a straightforward 16 bit inplace relocation, but we must deal with
2263    any partnering high-part relocations as well.  */
2264 
2265 bfd_reloc_status_type
2266 _bfd_mips_elf_lo16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2267 			  void *data, asection *input_section,
2268 			  bfd *output_bfd, char **error_message)
2269 {
2270   bfd_vma vallo;
2271   bfd_byte *location = (bfd_byte *) data + reloc_entry->address;
2272 
2273   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2274     return bfd_reloc_outofrange;
2275 
2276   _bfd_mips_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, FALSE,
2277 				 location);
2278   vallo = bfd_get_32 (abfd, location);
2279   _bfd_mips_elf_reloc_shuffle (abfd, reloc_entry->howto->type, FALSE,
2280 			       location);
2281 
2282   while (mips_hi16_list != NULL)
2283     {
2284       bfd_reloc_status_type ret;
2285       struct mips_hi16 *hi;
2286 
2287       hi = mips_hi16_list;
2288 
2289       /* R_MIPS*_GOT16 relocations are something of a special case.  We
2290 	 want to install the addend in the same way as for a R_MIPS*_HI16
2291 	 relocation (with a rightshift of 16).  However, since GOT16
2292 	 relocations can also be used with global symbols, their howto
2293 	 has a rightshift of 0.  */
2294       if (hi->rel.howto->type == R_MIPS_GOT16)
2295 	hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MIPS_HI16, FALSE);
2296       else if (hi->rel.howto->type == R_MIPS16_GOT16)
2297 	hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MIPS16_HI16, FALSE);
2298       else if (hi->rel.howto->type == R_MICROMIPS_GOT16)
2299 	hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MICROMIPS_HI16, FALSE);
2300 
2301       /* VALLO is a signed 16-bit number.  Bias it by 0x8000 so that any
2302 	 carry or borrow will induce a change of +1 or -1 in the high part.  */
2303       hi->rel.addend += (vallo + 0x8000) & 0xffff;
2304 
2305       ret = _bfd_mips_elf_generic_reloc (abfd, &hi->rel, symbol, hi->data,
2306 					 hi->input_section, output_bfd,
2307 					 error_message);
2308       if (ret != bfd_reloc_ok)
2309 	return ret;
2310 
2311       mips_hi16_list = hi->next;
2312       free (hi);
2313     }
2314 
2315   return _bfd_mips_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2316 				      input_section, output_bfd,
2317 				      error_message);
2318 }
2319 
2320 /* A generic howto special_function.  This calculates and installs the
2321    relocation itself, thus avoiding the oft-discussed problems in
2322    bfd_perform_relocation and bfd_install_relocation.  */
2323 
2324 bfd_reloc_status_type
2325 _bfd_mips_elf_generic_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry,
2326 			     asymbol *symbol, void *data ATTRIBUTE_UNUSED,
2327 			     asection *input_section, bfd *output_bfd,
2328 			     char **error_message ATTRIBUTE_UNUSED)
2329 {
2330   bfd_signed_vma val;
2331   bfd_reloc_status_type status;
2332   bfd_boolean relocatable;
2333 
2334   relocatable = (output_bfd != NULL);
2335 
2336   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2337     return bfd_reloc_outofrange;
2338 
2339   /* Build up the field adjustment in VAL.  */
2340   val = 0;
2341   if (!relocatable || (symbol->flags & BSF_SECTION_SYM) != 0)
2342     {
2343       /* Either we're calculating the final field value or we have a
2344 	 relocation against a section symbol.  Add in the section's
2345 	 offset or address.  */
2346       val += symbol->section->output_section->vma;
2347       val += symbol->section->output_offset;
2348     }
2349 
2350   if (!relocatable)
2351     {
2352       /* We're calculating the final field value.  Add in the symbol's value
2353 	 and, if pc-relative, subtract the address of the field itself.  */
2354       val += symbol->value;
2355       if (reloc_entry->howto->pc_relative)
2356 	{
2357 	  val -= input_section->output_section->vma;
2358 	  val -= input_section->output_offset;
2359 	  val -= reloc_entry->address;
2360 	}
2361     }
2362 
2363   /* VAL is now the final adjustment.  If we're keeping this relocation
2364      in the output file, and if the relocation uses a separate addend,
2365      we just need to add VAL to that addend.  Otherwise we need to add
2366      VAL to the relocation field itself.  */
2367   if (relocatable && !reloc_entry->howto->partial_inplace)
2368     reloc_entry->addend += val;
2369   else
2370     {
2371       bfd_byte *location = (bfd_byte *) data + reloc_entry->address;
2372 
2373       /* Add in the separate addend, if any.  */
2374       val += reloc_entry->addend;
2375 
2376       /* Add VAL to the relocation field.  */
2377       _bfd_mips_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, FALSE,
2378 				     location);
2379       status = _bfd_relocate_contents (reloc_entry->howto, abfd, val,
2380 				       location);
2381       _bfd_mips_elf_reloc_shuffle (abfd, reloc_entry->howto->type, FALSE,
2382 				   location);
2383 
2384       if (status != bfd_reloc_ok)
2385 	return status;
2386     }
2387 
2388   if (relocatable)
2389     reloc_entry->address += input_section->output_offset;
2390 
2391   return bfd_reloc_ok;
2392 }
2393 
2394 /* Swap an entry in a .gptab section.  Note that these routines rely
2395    on the equivalence of the two elements of the union.  */
2396 
2397 static void
2398 bfd_mips_elf32_swap_gptab_in (bfd *abfd, const Elf32_External_gptab *ex,
2399 			      Elf32_gptab *in)
2400 {
2401   in->gt_entry.gt_g_value = H_GET_32 (abfd, ex->gt_entry.gt_g_value);
2402   in->gt_entry.gt_bytes = H_GET_32 (abfd, ex->gt_entry.gt_bytes);
2403 }
2404 
2405 static void
2406 bfd_mips_elf32_swap_gptab_out (bfd *abfd, const Elf32_gptab *in,
2407 			       Elf32_External_gptab *ex)
2408 {
2409   H_PUT_32 (abfd, in->gt_entry.gt_g_value, ex->gt_entry.gt_g_value);
2410   H_PUT_32 (abfd, in->gt_entry.gt_bytes, ex->gt_entry.gt_bytes);
2411 }
2412 
2413 static void
2414 bfd_elf32_swap_compact_rel_out (bfd *abfd, const Elf32_compact_rel *in,
2415 				Elf32_External_compact_rel *ex)
2416 {
2417   H_PUT_32 (abfd, in->id1, ex->id1);
2418   H_PUT_32 (abfd, in->num, ex->num);
2419   H_PUT_32 (abfd, in->id2, ex->id2);
2420   H_PUT_32 (abfd, in->offset, ex->offset);
2421   H_PUT_32 (abfd, in->reserved0, ex->reserved0);
2422   H_PUT_32 (abfd, in->reserved1, ex->reserved1);
2423 }
2424 
2425 static void
2426 bfd_elf32_swap_crinfo_out (bfd *abfd, const Elf32_crinfo *in,
2427 			   Elf32_External_crinfo *ex)
2428 {
2429   unsigned long l;
2430 
2431   l = (((in->ctype & CRINFO_CTYPE) << CRINFO_CTYPE_SH)
2432        | ((in->rtype & CRINFO_RTYPE) << CRINFO_RTYPE_SH)
2433        | ((in->dist2to & CRINFO_DIST2TO) << CRINFO_DIST2TO_SH)
2434        | ((in->relvaddr & CRINFO_RELVADDR) << CRINFO_RELVADDR_SH));
2435   H_PUT_32 (abfd, l, ex->info);
2436   H_PUT_32 (abfd, in->konst, ex->konst);
2437   H_PUT_32 (abfd, in->vaddr, ex->vaddr);
2438 }
2439 
2440 /* A .reginfo section holds a single Elf32_RegInfo structure.  These
2441    routines swap this structure in and out.  They are used outside of
2442    BFD, so they are globally visible.  */
2443 
2444 void
2445 bfd_mips_elf32_swap_reginfo_in (bfd *abfd, const Elf32_External_RegInfo *ex,
2446 				Elf32_RegInfo *in)
2447 {
2448   in->ri_gprmask = H_GET_32 (abfd, ex->ri_gprmask);
2449   in->ri_cprmask[0] = H_GET_32 (abfd, ex->ri_cprmask[0]);
2450   in->ri_cprmask[1] = H_GET_32 (abfd, ex->ri_cprmask[1]);
2451   in->ri_cprmask[2] = H_GET_32 (abfd, ex->ri_cprmask[2]);
2452   in->ri_cprmask[3] = H_GET_32 (abfd, ex->ri_cprmask[3]);
2453   in->ri_gp_value = H_GET_32 (abfd, ex->ri_gp_value);
2454 }
2455 
2456 void
2457 bfd_mips_elf32_swap_reginfo_out (bfd *abfd, const Elf32_RegInfo *in,
2458 				 Elf32_External_RegInfo *ex)
2459 {
2460   H_PUT_32 (abfd, in->ri_gprmask, ex->ri_gprmask);
2461   H_PUT_32 (abfd, in->ri_cprmask[0], ex->ri_cprmask[0]);
2462   H_PUT_32 (abfd, in->ri_cprmask[1], ex->ri_cprmask[1]);
2463   H_PUT_32 (abfd, in->ri_cprmask[2], ex->ri_cprmask[2]);
2464   H_PUT_32 (abfd, in->ri_cprmask[3], ex->ri_cprmask[3]);
2465   H_PUT_32 (abfd, in->ri_gp_value, ex->ri_gp_value);
2466 }
2467 
2468 /* In the 64 bit ABI, the .MIPS.options section holds register
2469    information in an Elf64_Reginfo structure.  These routines swap
2470    them in and out.  They are globally visible because they are used
2471    outside of BFD.  These routines are here so that gas can call them
2472    without worrying about whether the 64 bit ABI has been included.  */
2473 
2474 void
2475 bfd_mips_elf64_swap_reginfo_in (bfd *abfd, const Elf64_External_RegInfo *ex,
2476 				Elf64_Internal_RegInfo *in)
2477 {
2478   in->ri_gprmask = H_GET_32 (abfd, ex->ri_gprmask);
2479   in->ri_pad = H_GET_32 (abfd, ex->ri_pad);
2480   in->ri_cprmask[0] = H_GET_32 (abfd, ex->ri_cprmask[0]);
2481   in->ri_cprmask[1] = H_GET_32 (abfd, ex->ri_cprmask[1]);
2482   in->ri_cprmask[2] = H_GET_32 (abfd, ex->ri_cprmask[2]);
2483   in->ri_cprmask[3] = H_GET_32 (abfd, ex->ri_cprmask[3]);
2484   in->ri_gp_value = H_GET_64 (abfd, ex->ri_gp_value);
2485 }
2486 
2487 void
2488 bfd_mips_elf64_swap_reginfo_out (bfd *abfd, const Elf64_Internal_RegInfo *in,
2489 				 Elf64_External_RegInfo *ex)
2490 {
2491   H_PUT_32 (abfd, in->ri_gprmask, ex->ri_gprmask);
2492   H_PUT_32 (abfd, in->ri_pad, ex->ri_pad);
2493   H_PUT_32 (abfd, in->ri_cprmask[0], ex->ri_cprmask[0]);
2494   H_PUT_32 (abfd, in->ri_cprmask[1], ex->ri_cprmask[1]);
2495   H_PUT_32 (abfd, in->ri_cprmask[2], ex->ri_cprmask[2]);
2496   H_PUT_32 (abfd, in->ri_cprmask[3], ex->ri_cprmask[3]);
2497   H_PUT_64 (abfd, in->ri_gp_value, ex->ri_gp_value);
2498 }
2499 
2500 /* Swap in an options header.  */
2501 
2502 void
2503 bfd_mips_elf_swap_options_in (bfd *abfd, const Elf_External_Options *ex,
2504 			      Elf_Internal_Options *in)
2505 {
2506   in->kind = H_GET_8 (abfd, ex->kind);
2507   in->size = H_GET_8 (abfd, ex->size);
2508   in->section = H_GET_16 (abfd, ex->section);
2509   in->info = H_GET_32 (abfd, ex->info);
2510 }
2511 
2512 /* Swap out an options header.  */
2513 
2514 void
2515 bfd_mips_elf_swap_options_out (bfd *abfd, const Elf_Internal_Options *in,
2516 			       Elf_External_Options *ex)
2517 {
2518   H_PUT_8 (abfd, in->kind, ex->kind);
2519   H_PUT_8 (abfd, in->size, ex->size);
2520   H_PUT_16 (abfd, in->section, ex->section);
2521   H_PUT_32 (abfd, in->info, ex->info);
2522 }
2523 
2524 /* This function is called via qsort() to sort the dynamic relocation
2525    entries by increasing r_symndx value.  */
2526 
2527 static int
2528 sort_dynamic_relocs (const void *arg1, const void *arg2)
2529 {
2530   Elf_Internal_Rela int_reloc1;
2531   Elf_Internal_Rela int_reloc2;
2532   int diff;
2533 
2534   bfd_elf32_swap_reloc_in (reldyn_sorting_bfd, arg1, &int_reloc1);
2535   bfd_elf32_swap_reloc_in (reldyn_sorting_bfd, arg2, &int_reloc2);
2536 
2537   diff = ELF32_R_SYM (int_reloc1.r_info) - ELF32_R_SYM (int_reloc2.r_info);
2538   if (diff != 0)
2539     return diff;
2540 
2541   if (int_reloc1.r_offset < int_reloc2.r_offset)
2542     return -1;
2543   if (int_reloc1.r_offset > int_reloc2.r_offset)
2544     return 1;
2545   return 0;
2546 }
2547 
2548 /* Like sort_dynamic_relocs, but used for elf64 relocations.  */
2549 
2550 static int
2551 sort_dynamic_relocs_64 (const void *arg1 ATTRIBUTE_UNUSED,
2552 			const void *arg2 ATTRIBUTE_UNUSED)
2553 {
2554 #ifdef BFD64
2555   Elf_Internal_Rela int_reloc1[3];
2556   Elf_Internal_Rela int_reloc2[3];
2557 
2558   (*get_elf_backend_data (reldyn_sorting_bfd)->s->swap_reloc_in)
2559     (reldyn_sorting_bfd, arg1, int_reloc1);
2560   (*get_elf_backend_data (reldyn_sorting_bfd)->s->swap_reloc_in)
2561     (reldyn_sorting_bfd, arg2, int_reloc2);
2562 
2563   if (ELF64_R_SYM (int_reloc1[0].r_info) < ELF64_R_SYM (int_reloc2[0].r_info))
2564     return -1;
2565   if (ELF64_R_SYM (int_reloc1[0].r_info) > ELF64_R_SYM (int_reloc2[0].r_info))
2566     return 1;
2567 
2568   if (int_reloc1[0].r_offset < int_reloc2[0].r_offset)
2569     return -1;
2570   if (int_reloc1[0].r_offset > int_reloc2[0].r_offset)
2571     return 1;
2572   return 0;
2573 #else
2574   abort ();
2575 #endif
2576 }
2577 
2578 
2579 /* This routine is used to write out ECOFF debugging external symbol
2580    information.  It is called via mips_elf_link_hash_traverse.  The
2581    ECOFF external symbol information must match the ELF external
2582    symbol information.  Unfortunately, at this point we don't know
2583    whether a symbol is required by reloc information, so the two
2584    tables may wind up being different.  We must sort out the external
2585    symbol information before we can set the final size of the .mdebug
2586    section, and we must set the size of the .mdebug section before we
2587    can relocate any sections, and we can't know which symbols are
2588    required by relocation until we relocate the sections.
2589    Fortunately, it is relatively unlikely that any symbol will be
2590    stripped but required by a reloc.  In particular, it can not happen
2591    when generating a final executable.  */
2592 
2593 static bfd_boolean
2594 mips_elf_output_extsym (struct mips_elf_link_hash_entry *h, void *data)
2595 {
2596   struct extsym_info *einfo = data;
2597   bfd_boolean strip;
2598   asection *sec, *output_section;
2599 
2600   if (h->root.indx == -2)
2601     strip = FALSE;
2602   else if ((h->root.def_dynamic
2603 	    || h->root.ref_dynamic
2604 	    || h->root.type == bfd_link_hash_new)
2605 	   && !h->root.def_regular
2606 	   && !h->root.ref_regular)
2607     strip = TRUE;
2608   else if (einfo->info->strip == strip_all
2609 	   || (einfo->info->strip == strip_some
2610 	       && bfd_hash_lookup (einfo->info->keep_hash,
2611 				   h->root.root.root.string,
2612 				   FALSE, FALSE) == NULL))
2613     strip = TRUE;
2614   else
2615     strip = FALSE;
2616 
2617   if (strip)
2618     return TRUE;
2619 
2620   if (h->esym.ifd == -2)
2621     {
2622       h->esym.jmptbl = 0;
2623       h->esym.cobol_main = 0;
2624       h->esym.weakext = 0;
2625       h->esym.reserved = 0;
2626       h->esym.ifd = ifdNil;
2627       h->esym.asym.value = 0;
2628       h->esym.asym.st = stGlobal;
2629 
2630       if (h->root.root.type == bfd_link_hash_undefined
2631 	  || h->root.root.type == bfd_link_hash_undefweak)
2632 	{
2633 	  const char *name;
2634 
2635 	  /* Use undefined class.  Also, set class and type for some
2636              special symbols.  */
2637 	  name = h->root.root.root.string;
2638 	  if (strcmp (name, mips_elf_dynsym_rtproc_names[0]) == 0
2639 	      || strcmp (name, mips_elf_dynsym_rtproc_names[1]) == 0)
2640 	    {
2641 	      h->esym.asym.sc = scData;
2642 	      h->esym.asym.st = stLabel;
2643 	      h->esym.asym.value = 0;
2644 	    }
2645 	  else if (strcmp (name, mips_elf_dynsym_rtproc_names[2]) == 0)
2646 	    {
2647 	      h->esym.asym.sc = scAbs;
2648 	      h->esym.asym.st = stLabel;
2649 	      h->esym.asym.value =
2650 		mips_elf_hash_table (einfo->info)->procedure_count;
2651 	    }
2652 	  else if (strcmp (name, "_gp_disp") == 0 && ! NEWABI_P (einfo->abfd))
2653 	    {
2654 	      h->esym.asym.sc = scAbs;
2655 	      h->esym.asym.st = stLabel;
2656 	      h->esym.asym.value = elf_gp (einfo->abfd);
2657 	    }
2658 	  else
2659 	    h->esym.asym.sc = scUndefined;
2660 	}
2661       else if (h->root.root.type != bfd_link_hash_defined
2662 	  && h->root.root.type != bfd_link_hash_defweak)
2663 	h->esym.asym.sc = scAbs;
2664       else
2665 	{
2666 	  const char *name;
2667 
2668 	  sec = h->root.root.u.def.section;
2669 	  output_section = sec->output_section;
2670 
2671 	  /* When making a shared library and symbol h is the one from
2672 	     the another shared library, OUTPUT_SECTION may be null.  */
2673 	  if (output_section == NULL)
2674 	    h->esym.asym.sc = scUndefined;
2675 	  else
2676 	    {
2677 	      name = bfd_section_name (output_section->owner, output_section);
2678 
2679 	      if (strcmp (name, ".text") == 0)
2680 		h->esym.asym.sc = scText;
2681 	      else if (strcmp (name, ".data") == 0)
2682 		h->esym.asym.sc = scData;
2683 	      else if (strcmp (name, ".sdata") == 0)
2684 		h->esym.asym.sc = scSData;
2685 	      else if (strcmp (name, ".rodata") == 0
2686 		       || strcmp (name, ".rdata") == 0)
2687 		h->esym.asym.sc = scRData;
2688 	      else if (strcmp (name, ".bss") == 0)
2689 		h->esym.asym.sc = scBss;
2690 	      else if (strcmp (name, ".sbss") == 0)
2691 		h->esym.asym.sc = scSBss;
2692 	      else if (strcmp (name, ".init") == 0)
2693 		h->esym.asym.sc = scInit;
2694 	      else if (strcmp (name, ".fini") == 0)
2695 		h->esym.asym.sc = scFini;
2696 	      else
2697 		h->esym.asym.sc = scAbs;
2698 	    }
2699 	}
2700 
2701       h->esym.asym.reserved = 0;
2702       h->esym.asym.index = indexNil;
2703     }
2704 
2705   if (h->root.root.type == bfd_link_hash_common)
2706     h->esym.asym.value = h->root.root.u.c.size;
2707   else if (h->root.root.type == bfd_link_hash_defined
2708 	   || h->root.root.type == bfd_link_hash_defweak)
2709     {
2710       if (h->esym.asym.sc == scCommon)
2711 	h->esym.asym.sc = scBss;
2712       else if (h->esym.asym.sc == scSCommon)
2713 	h->esym.asym.sc = scSBss;
2714 
2715       sec = h->root.root.u.def.section;
2716       output_section = sec->output_section;
2717       if (output_section != NULL)
2718 	h->esym.asym.value = (h->root.root.u.def.value
2719 			      + sec->output_offset
2720 			      + output_section->vma);
2721       else
2722 	h->esym.asym.value = 0;
2723     }
2724   else
2725     {
2726       struct mips_elf_link_hash_entry *hd = h;
2727 
2728       while (hd->root.root.type == bfd_link_hash_indirect)
2729 	hd = (struct mips_elf_link_hash_entry *)h->root.root.u.i.link;
2730 
2731       if (hd->needs_lazy_stub)
2732 	{
2733 	  /* Set type and value for a symbol with a function stub.  */
2734 	  h->esym.asym.st = stProc;
2735 	  sec = hd->root.root.u.def.section;
2736 	  if (sec == NULL)
2737 	    h->esym.asym.value = 0;
2738 	  else
2739 	    {
2740 	      output_section = sec->output_section;
2741 	      if (output_section != NULL)
2742 		h->esym.asym.value = (hd->root.plt.offset
2743 				      + sec->output_offset
2744 				      + output_section->vma);
2745 	      else
2746 		h->esym.asym.value = 0;
2747 	    }
2748 	}
2749     }
2750 
2751   if (! bfd_ecoff_debug_one_external (einfo->abfd, einfo->debug, einfo->swap,
2752 				      h->root.root.root.string,
2753 				      &h->esym))
2754     {
2755       einfo->failed = TRUE;
2756       return FALSE;
2757     }
2758 
2759   return TRUE;
2760 }
2761 
2762 /* A comparison routine used to sort .gptab entries.  */
2763 
2764 static int
2765 gptab_compare (const void *p1, const void *p2)
2766 {
2767   const Elf32_gptab *a1 = p1;
2768   const Elf32_gptab *a2 = p2;
2769 
2770   return a1->gt_entry.gt_g_value - a2->gt_entry.gt_g_value;
2771 }
2772 
2773 /* Functions to manage the got entry hash table.  */
2774 
2775 /* Use all 64 bits of a bfd_vma for the computation of a 32-bit
2776    hash number.  */
2777 
2778 static INLINE hashval_t
2779 mips_elf_hash_bfd_vma (bfd_vma addr)
2780 {
2781 #ifdef BFD64
2782   return addr + (addr >> 32);
2783 #else
2784   return addr;
2785 #endif
2786 }
2787 
2788 static hashval_t
2789 mips_elf_got_entry_hash (const void *entry_)
2790 {
2791   const struct mips_got_entry *entry = (struct mips_got_entry *)entry_;
2792 
2793   return (entry->symndx
2794 	  + ((entry->tls_type == GOT_TLS_LDM) << 18)
2795 	  + (entry->tls_type == GOT_TLS_LDM ? 0
2796 	     : !entry->abfd ? mips_elf_hash_bfd_vma (entry->d.address)
2797 	     : entry->symndx >= 0 ? (entry->abfd->id
2798 				     + mips_elf_hash_bfd_vma (entry->d.addend))
2799 	     : entry->d.h->root.root.root.hash));
2800 }
2801 
2802 static int
2803 mips_elf_got_entry_eq (const void *entry1, const void *entry2)
2804 {
2805   const struct mips_got_entry *e1 = (struct mips_got_entry *)entry1;
2806   const struct mips_got_entry *e2 = (struct mips_got_entry *)entry2;
2807 
2808   return (e1->symndx == e2->symndx
2809 	  && e1->tls_type == e2->tls_type
2810 	  && (e1->tls_type == GOT_TLS_LDM ? TRUE
2811 	      : !e1->abfd ? !e2->abfd && e1->d.address == e2->d.address
2812 	      : e1->symndx >= 0 ? (e1->abfd == e2->abfd
2813 				   && e1->d.addend == e2->d.addend)
2814 	      : e2->abfd && e1->d.h == e2->d.h));
2815 }
2816 
2817 static hashval_t
2818 mips_got_page_ref_hash (const void *ref_)
2819 {
2820   const struct mips_got_page_ref *ref;
2821 
2822   ref = (const struct mips_got_page_ref *) ref_;
2823   return ((ref->symndx >= 0
2824 	   ? (hashval_t) (ref->u.abfd->id + ref->symndx)
2825 	   : ref->u.h->root.root.root.hash)
2826 	  + mips_elf_hash_bfd_vma (ref->addend));
2827 }
2828 
2829 static int
2830 mips_got_page_ref_eq (const void *ref1_, const void *ref2_)
2831 {
2832   const struct mips_got_page_ref *ref1, *ref2;
2833 
2834   ref1 = (const struct mips_got_page_ref *) ref1_;
2835   ref2 = (const struct mips_got_page_ref *) ref2_;
2836   return (ref1->symndx == ref2->symndx
2837 	  && (ref1->symndx < 0
2838 	      ? ref1->u.h == ref2->u.h
2839 	      : ref1->u.abfd == ref2->u.abfd)
2840 	  && ref1->addend == ref2->addend);
2841 }
2842 
2843 static hashval_t
2844 mips_got_page_entry_hash (const void *entry_)
2845 {
2846   const struct mips_got_page_entry *entry;
2847 
2848   entry = (const struct mips_got_page_entry *) entry_;
2849   return entry->sec->id;
2850 }
2851 
2852 static int
2853 mips_got_page_entry_eq (const void *entry1_, const void *entry2_)
2854 {
2855   const struct mips_got_page_entry *entry1, *entry2;
2856 
2857   entry1 = (const struct mips_got_page_entry *) entry1_;
2858   entry2 = (const struct mips_got_page_entry *) entry2_;
2859   return entry1->sec == entry2->sec;
2860 }
2861 
2862 /* Create and return a new mips_got_info structure.  */
2863 
2864 static struct mips_got_info *
2865 mips_elf_create_got_info (bfd *abfd)
2866 {
2867   struct mips_got_info *g;
2868 
2869   g = bfd_zalloc (abfd, sizeof (struct mips_got_info));
2870   if (g == NULL)
2871     return NULL;
2872 
2873   g->got_entries = htab_try_create (1, mips_elf_got_entry_hash,
2874 				    mips_elf_got_entry_eq, NULL);
2875   if (g->got_entries == NULL)
2876     return NULL;
2877 
2878   g->got_page_refs = htab_try_create (1, mips_got_page_ref_hash,
2879 				      mips_got_page_ref_eq, NULL);
2880   if (g->got_page_refs == NULL)
2881     return NULL;
2882 
2883   return g;
2884 }
2885 
2886 /* Return the GOT info for input bfd ABFD, trying to create a new one if
2887    CREATE_P and if ABFD doesn't already have a GOT.  */
2888 
2889 static struct mips_got_info *
2890 mips_elf_bfd_got (bfd *abfd, bfd_boolean create_p)
2891 {
2892   struct mips_elf_obj_tdata *tdata;
2893 
2894   if (!is_mips_elf (abfd))
2895     return NULL;
2896 
2897   tdata = mips_elf_tdata (abfd);
2898   if (!tdata->got && create_p)
2899     tdata->got = mips_elf_create_got_info (abfd);
2900   return tdata->got;
2901 }
2902 
2903 /* Record that ABFD should use output GOT G.  */
2904 
2905 static void
2906 mips_elf_replace_bfd_got (bfd *abfd, struct mips_got_info *g)
2907 {
2908   struct mips_elf_obj_tdata *tdata;
2909 
2910   BFD_ASSERT (is_mips_elf (abfd));
2911   tdata = mips_elf_tdata (abfd);
2912   if (tdata->got)
2913     {
2914       /* The GOT structure itself and the hash table entries are
2915 	 allocated to a bfd, but the hash tables aren't.  */
2916       htab_delete (tdata->got->got_entries);
2917       htab_delete (tdata->got->got_page_refs);
2918       if (tdata->got->got_page_entries)
2919 	htab_delete (tdata->got->got_page_entries);
2920     }
2921   tdata->got = g;
2922 }
2923 
2924 /* Return the dynamic relocation section.  If it doesn't exist, try to
2925    create a new it if CREATE_P, otherwise return NULL.  Also return NULL
2926    if creation fails.  */
2927 
2928 static asection *
2929 mips_elf_rel_dyn_section (struct bfd_link_info *info, bfd_boolean create_p)
2930 {
2931   const char *dname;
2932   asection *sreloc;
2933   bfd *dynobj;
2934 
2935   dname = MIPS_ELF_REL_DYN_NAME (info);
2936   dynobj = elf_hash_table (info)->dynobj;
2937   sreloc = bfd_get_linker_section (dynobj, dname);
2938   if (sreloc == NULL && create_p)
2939     {
2940       sreloc = bfd_make_section_anyway_with_flags (dynobj, dname,
2941 						   (SEC_ALLOC
2942 						    | SEC_LOAD
2943 						    | SEC_HAS_CONTENTS
2944 						    | SEC_IN_MEMORY
2945 						    | SEC_LINKER_CREATED
2946 						    | SEC_READONLY));
2947       if (sreloc == NULL
2948 	  || ! bfd_set_section_alignment (dynobj, sreloc,
2949 					  MIPS_ELF_LOG_FILE_ALIGN (dynobj)))
2950 	return NULL;
2951     }
2952   return sreloc;
2953 }
2954 
2955 /* Return the GOT_TLS_* type required by relocation type R_TYPE.  */
2956 
2957 static int
2958 mips_elf_reloc_tls_type (unsigned int r_type)
2959 {
2960   if (tls_gd_reloc_p (r_type))
2961     return GOT_TLS_GD;
2962 
2963   if (tls_ldm_reloc_p (r_type))
2964     return GOT_TLS_LDM;
2965 
2966   if (tls_gottprel_reloc_p (r_type))
2967     return GOT_TLS_IE;
2968 
2969   return GOT_TLS_NONE;
2970 }
2971 
2972 /* Return the number of GOT slots needed for GOT TLS type TYPE.  */
2973 
2974 static int
2975 mips_tls_got_entries (unsigned int type)
2976 {
2977   switch (type)
2978     {
2979     case GOT_TLS_GD:
2980     case GOT_TLS_LDM:
2981       return 2;
2982 
2983     case GOT_TLS_IE:
2984       return 1;
2985 
2986     case GOT_TLS_NONE:
2987       return 0;
2988     }
2989   abort ();
2990 }
2991 
2992 /* Count the number of relocations needed for a TLS GOT entry, with
2993    access types from TLS_TYPE, and symbol H (or a local symbol if H
2994    is NULL).  */
2995 
2996 static int
2997 mips_tls_got_relocs (struct bfd_link_info *info, unsigned char tls_type,
2998 		     struct elf_link_hash_entry *h)
2999 {
3000   int indx = 0;
3001   bfd_boolean need_relocs = FALSE;
3002   bfd_boolean dyn = elf_hash_table (info)->dynamic_sections_created;
3003 
3004   if (h && WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h)
3005       && (!info->shared || !SYMBOL_REFERENCES_LOCAL (info, h)))
3006     indx = h->dynindx;
3007 
3008   if ((info->shared || indx != 0)
3009       && (h == NULL
3010 	  || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
3011 	  || h->root.type != bfd_link_hash_undefweak))
3012     need_relocs = TRUE;
3013 
3014   if (!need_relocs)
3015     return 0;
3016 
3017   switch (tls_type)
3018     {
3019     case GOT_TLS_GD:
3020       return indx != 0 ? 2 : 1;
3021 
3022     case GOT_TLS_IE:
3023       return 1;
3024 
3025     case GOT_TLS_LDM:
3026       return info->shared ? 1 : 0;
3027 
3028     default:
3029       return 0;
3030     }
3031 }
3032 
3033 /* Add the number of GOT entries and TLS relocations required by ENTRY
3034    to G.  */
3035 
3036 static void
3037 mips_elf_count_got_entry (struct bfd_link_info *info,
3038 			  struct mips_got_info *g,
3039 			  struct mips_got_entry *entry)
3040 {
3041   if (entry->tls_type)
3042     {
3043       g->tls_gotno += mips_tls_got_entries (entry->tls_type);
3044       g->relocs += mips_tls_got_relocs (info, entry->tls_type,
3045 					entry->symndx < 0
3046 					? &entry->d.h->root : NULL);
3047     }
3048   else if (entry->symndx >= 0 || entry->d.h->global_got_area == GGA_NONE)
3049     g->local_gotno += 1;
3050   else
3051     g->global_gotno += 1;
3052 }
3053 
3054 /* Output a simple dynamic relocation into SRELOC.  */
3055 
3056 static void
3057 mips_elf_output_dynamic_relocation (bfd *output_bfd,
3058 				    asection *sreloc,
3059 				    unsigned long reloc_index,
3060 				    unsigned long indx,
3061 				    int r_type,
3062 				    bfd_vma offset)
3063 {
3064   Elf_Internal_Rela rel[3];
3065 
3066   memset (rel, 0, sizeof (rel));
3067 
3068   rel[0].r_info = ELF_R_INFO (output_bfd, indx, r_type);
3069   rel[0].r_offset = rel[1].r_offset = rel[2].r_offset = offset;
3070 
3071   if (ABI_64_P (output_bfd))
3072     {
3073       (*get_elf_backend_data (output_bfd)->s->swap_reloc_out)
3074 	(output_bfd, &rel[0],
3075 	 (sreloc->contents
3076 	  + reloc_index * sizeof (Elf64_Mips_External_Rel)));
3077     }
3078   else
3079     bfd_elf32_swap_reloc_out
3080       (output_bfd, &rel[0],
3081        (sreloc->contents
3082 	+ reloc_index * sizeof (Elf32_External_Rel)));
3083 }
3084 
3085 /* Initialize a set of TLS GOT entries for one symbol.  */
3086 
3087 static void
3088 mips_elf_initialize_tls_slots (bfd *abfd, struct bfd_link_info *info,
3089 			       struct mips_got_entry *entry,
3090 			       struct mips_elf_link_hash_entry *h,
3091 			       bfd_vma value)
3092 {
3093   struct mips_elf_link_hash_table *htab;
3094   int indx;
3095   asection *sreloc, *sgot;
3096   bfd_vma got_offset, got_offset2;
3097   bfd_boolean need_relocs = FALSE;
3098 
3099   htab = mips_elf_hash_table (info);
3100   if (htab == NULL)
3101     return;
3102 
3103   sgot = htab->sgot;
3104 
3105   indx = 0;
3106   if (h != NULL)
3107     {
3108       bfd_boolean dyn = elf_hash_table (info)->dynamic_sections_created;
3109 
3110       if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, &h->root)
3111 	  && (!info->shared || !SYMBOL_REFERENCES_LOCAL (info, &h->root)))
3112 	indx = h->root.dynindx;
3113     }
3114 
3115   if (entry->tls_initialized)
3116     return;
3117 
3118   if ((info->shared || indx != 0)
3119       && (h == NULL
3120 	  || ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT
3121 	  || h->root.type != bfd_link_hash_undefweak))
3122     need_relocs = TRUE;
3123 
3124   /* MINUS_ONE means the symbol is not defined in this object.  It may not
3125      be defined at all; assume that the value doesn't matter in that
3126      case.  Otherwise complain if we would use the value.  */
3127   BFD_ASSERT (value != MINUS_ONE || (indx != 0 && need_relocs)
3128 	      || h->root.root.type == bfd_link_hash_undefweak);
3129 
3130   /* Emit necessary relocations.  */
3131   sreloc = mips_elf_rel_dyn_section (info, FALSE);
3132   got_offset = entry->gotidx;
3133 
3134   switch (entry->tls_type)
3135     {
3136     case GOT_TLS_GD:
3137       /* General Dynamic.  */
3138       got_offset2 = got_offset + MIPS_ELF_GOT_SIZE (abfd);
3139 
3140       if (need_relocs)
3141 	{
3142 	  mips_elf_output_dynamic_relocation
3143 	    (abfd, sreloc, sreloc->reloc_count++, indx,
3144 	     ABI_64_P (abfd) ? R_MIPS_TLS_DTPMOD64 : R_MIPS_TLS_DTPMOD32,
3145 	     sgot->output_offset + sgot->output_section->vma + got_offset);
3146 
3147 	  if (indx)
3148 	    mips_elf_output_dynamic_relocation
3149 	      (abfd, sreloc, sreloc->reloc_count++, indx,
3150 	       ABI_64_P (abfd) ? R_MIPS_TLS_DTPREL64 : R_MIPS_TLS_DTPREL32,
3151 	       sgot->output_offset + sgot->output_section->vma + got_offset2);
3152 	  else
3153 	    MIPS_ELF_PUT_WORD (abfd, value - dtprel_base (info),
3154 			       sgot->contents + got_offset2);
3155 	}
3156       else
3157 	{
3158 	  MIPS_ELF_PUT_WORD (abfd, 1,
3159 			     sgot->contents + got_offset);
3160 	  MIPS_ELF_PUT_WORD (abfd, value - dtprel_base (info),
3161 			     sgot->contents + got_offset2);
3162 	}
3163       break;
3164 
3165     case GOT_TLS_IE:
3166       /* Initial Exec model.  */
3167       if (need_relocs)
3168 	{
3169 	  if (indx == 0)
3170 	    MIPS_ELF_PUT_WORD (abfd, value - elf_hash_table (info)->tls_sec->vma,
3171 			       sgot->contents + got_offset);
3172 	  else
3173 	    MIPS_ELF_PUT_WORD (abfd, 0,
3174 			       sgot->contents + got_offset);
3175 
3176 	  mips_elf_output_dynamic_relocation
3177 	    (abfd, sreloc, sreloc->reloc_count++, indx,
3178 	     ABI_64_P (abfd) ? R_MIPS_TLS_TPREL64 : R_MIPS_TLS_TPREL32,
3179 	     sgot->output_offset + sgot->output_section->vma + got_offset);
3180 	}
3181       else
3182 	MIPS_ELF_PUT_WORD (abfd, value - tprel_base (info),
3183 			   sgot->contents + got_offset);
3184       break;
3185 
3186     case GOT_TLS_LDM:
3187       /* The initial offset is zero, and the LD offsets will include the
3188 	 bias by DTP_OFFSET.  */
3189       MIPS_ELF_PUT_WORD (abfd, 0,
3190 			 sgot->contents + got_offset
3191 			 + MIPS_ELF_GOT_SIZE (abfd));
3192 
3193       if (!info->shared)
3194 	MIPS_ELF_PUT_WORD (abfd, 1,
3195 			   sgot->contents + got_offset);
3196       else
3197 	mips_elf_output_dynamic_relocation
3198 	  (abfd, sreloc, sreloc->reloc_count++, indx,
3199 	   ABI_64_P (abfd) ? R_MIPS_TLS_DTPMOD64 : R_MIPS_TLS_DTPMOD32,
3200 	   sgot->output_offset + sgot->output_section->vma + got_offset);
3201       break;
3202 
3203     default:
3204       abort ();
3205     }
3206 
3207   entry->tls_initialized = TRUE;
3208 }
3209 
3210 /* Return the offset from _GLOBAL_OFFSET_TABLE_ of the .got.plt entry
3211    for global symbol H.  .got.plt comes before the GOT, so the offset
3212    will be negative.  */
3213 
3214 static bfd_vma
3215 mips_elf_gotplt_index (struct bfd_link_info *info,
3216 		       struct elf_link_hash_entry *h)
3217 {
3218   bfd_vma plt_index, got_address, got_value;
3219   struct mips_elf_link_hash_table *htab;
3220 
3221   htab = mips_elf_hash_table (info);
3222   BFD_ASSERT (htab != NULL);
3223 
3224   BFD_ASSERT (h->plt.offset != (bfd_vma) -1);
3225 
3226   /* This function only works for VxWorks, because a non-VxWorks .got.plt
3227      section starts with reserved entries.  */
3228   BFD_ASSERT (htab->is_vxworks);
3229 
3230   /* Calculate the index of the symbol's PLT entry.  */
3231   plt_index = (h->plt.offset - htab->plt_header_size) / htab->plt_entry_size;
3232 
3233   /* Calculate the address of the associated .got.plt entry.  */
3234   got_address = (htab->sgotplt->output_section->vma
3235 		 + htab->sgotplt->output_offset
3236 		 + plt_index * 4);
3237 
3238   /* Calculate the value of _GLOBAL_OFFSET_TABLE_.  */
3239   got_value = (htab->root.hgot->root.u.def.section->output_section->vma
3240 	       + htab->root.hgot->root.u.def.section->output_offset
3241 	       + htab->root.hgot->root.u.def.value);
3242 
3243   return got_address - got_value;
3244 }
3245 
3246 /* Return the GOT offset for address VALUE.   If there is not yet a GOT
3247    entry for this value, create one.  If R_SYMNDX refers to a TLS symbol,
3248    create a TLS GOT entry instead.  Return -1 if no satisfactory GOT
3249    offset can be found.  */
3250 
3251 static bfd_vma
3252 mips_elf_local_got_index (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
3253 			  bfd_vma value, unsigned long r_symndx,
3254 			  struct mips_elf_link_hash_entry *h, int r_type)
3255 {
3256   struct mips_elf_link_hash_table *htab;
3257   struct mips_got_entry *entry;
3258 
3259   htab = mips_elf_hash_table (info);
3260   BFD_ASSERT (htab != NULL);
3261 
3262   entry = mips_elf_create_local_got_entry (abfd, info, ibfd, value,
3263 					   r_symndx, h, r_type);
3264   if (!entry)
3265     return MINUS_ONE;
3266 
3267   if (entry->tls_type)
3268     mips_elf_initialize_tls_slots (abfd, info, entry, h, value);
3269   return entry->gotidx;
3270 }
3271 
3272 /* Return the GOT index of global symbol H in the primary GOT.  */
3273 
3274 static bfd_vma
3275 mips_elf_primary_global_got_index (bfd *obfd, struct bfd_link_info *info,
3276 				   struct elf_link_hash_entry *h)
3277 {
3278   struct mips_elf_link_hash_table *htab;
3279   long global_got_dynindx;
3280   struct mips_got_info *g;
3281   bfd_vma got_index;
3282 
3283   htab = mips_elf_hash_table (info);
3284   BFD_ASSERT (htab != NULL);
3285 
3286   global_got_dynindx = 0;
3287   if (htab->global_gotsym != NULL)
3288     global_got_dynindx = htab->global_gotsym->dynindx;
3289 
3290   /* Once we determine the global GOT entry with the lowest dynamic
3291      symbol table index, we must put all dynamic symbols with greater
3292      indices into the primary GOT.  That makes it easy to calculate the
3293      GOT offset.  */
3294   BFD_ASSERT (h->dynindx >= global_got_dynindx);
3295   g = mips_elf_bfd_got (obfd, FALSE);
3296   got_index = ((h->dynindx - global_got_dynindx + g->local_gotno)
3297 	       * MIPS_ELF_GOT_SIZE (obfd));
3298   BFD_ASSERT (got_index < htab->sgot->size);
3299 
3300   return got_index;
3301 }
3302 
3303 /* Return the GOT index for the global symbol indicated by H, which is
3304    referenced by a relocation of type R_TYPE in IBFD.  */
3305 
3306 static bfd_vma
3307 mips_elf_global_got_index (bfd *obfd, struct bfd_link_info *info, bfd *ibfd,
3308 			   struct elf_link_hash_entry *h, int r_type)
3309 {
3310   struct mips_elf_link_hash_table *htab;
3311   struct mips_got_info *g;
3312   struct mips_got_entry lookup, *entry;
3313   bfd_vma gotidx;
3314 
3315   htab = mips_elf_hash_table (info);
3316   BFD_ASSERT (htab != NULL);
3317 
3318   g = mips_elf_bfd_got (ibfd, FALSE);
3319   BFD_ASSERT (g);
3320 
3321   lookup.tls_type = mips_elf_reloc_tls_type (r_type);
3322   if (!lookup.tls_type && g == mips_elf_bfd_got (obfd, FALSE))
3323     return mips_elf_primary_global_got_index (obfd, info, h);
3324 
3325   lookup.abfd = ibfd;
3326   lookup.symndx = -1;
3327   lookup.d.h = (struct mips_elf_link_hash_entry *) h;
3328   entry = htab_find (g->got_entries, &lookup);
3329   BFD_ASSERT (entry);
3330 
3331   gotidx = entry->gotidx;
3332   BFD_ASSERT (gotidx > 0 && gotidx < htab->sgot->size);
3333 
3334   if (lookup.tls_type)
3335     {
3336       bfd_vma value = MINUS_ONE;
3337 
3338       if ((h->root.type == bfd_link_hash_defined
3339 	   || h->root.type == bfd_link_hash_defweak)
3340 	  && h->root.u.def.section->output_section)
3341 	value = (h->root.u.def.value
3342 		 + h->root.u.def.section->output_offset
3343 		 + h->root.u.def.section->output_section->vma);
3344 
3345       mips_elf_initialize_tls_slots (obfd, info, entry, lookup.d.h, value);
3346     }
3347   return gotidx;
3348 }
3349 
3350 /* Find a GOT page entry that points to within 32KB of VALUE.  These
3351    entries are supposed to be placed at small offsets in the GOT, i.e.,
3352    within 32KB of GP.  Return the index of the GOT entry, or -1 if no
3353    entry could be created.  If OFFSETP is nonnull, use it to return the
3354    offset of the GOT entry from VALUE.  */
3355 
3356 static bfd_vma
3357 mips_elf_got_page (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
3358 		   bfd_vma value, bfd_vma *offsetp)
3359 {
3360   bfd_vma page, got_index;
3361   struct mips_got_entry *entry;
3362 
3363   page = (value + 0x8000) & ~(bfd_vma) 0xffff;
3364   entry = mips_elf_create_local_got_entry (abfd, info, ibfd, page, 0,
3365 					   NULL, R_MIPS_GOT_PAGE);
3366 
3367   if (!entry)
3368     return MINUS_ONE;
3369 
3370   got_index = entry->gotidx;
3371 
3372   if (offsetp)
3373     *offsetp = value - entry->d.address;
3374 
3375   return got_index;
3376 }
3377 
3378 /* Find a local GOT entry for an R_MIPS*_GOT16 relocation against VALUE.
3379    EXTERNAL is true if the relocation was originally against a global
3380    symbol that binds locally.  */
3381 
3382 static bfd_vma
3383 mips_elf_got16_entry (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
3384 		      bfd_vma value, bfd_boolean external)
3385 {
3386   struct mips_got_entry *entry;
3387 
3388   /* GOT16 relocations against local symbols are followed by a LO16
3389      relocation; those against global symbols are not.  Thus if the
3390      symbol was originally local, the GOT16 relocation should load the
3391      equivalent of %hi(VALUE), otherwise it should load VALUE itself.  */
3392   if (! external)
3393     value = mips_elf_high (value) << 16;
3394 
3395   /* It doesn't matter whether the original relocation was R_MIPS_GOT16,
3396      R_MIPS16_GOT16, R_MIPS_CALL16, etc.  The format of the entry is the
3397      same in all cases.  */
3398   entry = mips_elf_create_local_got_entry (abfd, info, ibfd, value, 0,
3399 					   NULL, R_MIPS_GOT16);
3400   if (entry)
3401     return entry->gotidx;
3402   else
3403     return MINUS_ONE;
3404 }
3405 
3406 /* Returns the offset for the entry at the INDEXth position
3407    in the GOT.  */
3408 
3409 static bfd_vma
3410 mips_elf_got_offset_from_index (struct bfd_link_info *info, bfd *output_bfd,
3411 				bfd *input_bfd, bfd_vma got_index)
3412 {
3413   struct mips_elf_link_hash_table *htab;
3414   asection *sgot;
3415   bfd_vma gp;
3416 
3417   htab = mips_elf_hash_table (info);
3418   BFD_ASSERT (htab != NULL);
3419 
3420   sgot = htab->sgot;
3421   gp = _bfd_get_gp_value (output_bfd)
3422     + mips_elf_adjust_gp (output_bfd, htab->got_info, input_bfd);
3423 
3424   return sgot->output_section->vma + sgot->output_offset + got_index - gp;
3425 }
3426 
3427 /* Create and return a local GOT entry for VALUE, which was calculated
3428    from a symbol belonging to INPUT_SECTON.  Return NULL if it could not
3429    be created.  If R_SYMNDX refers to a TLS symbol, create a TLS entry
3430    instead.  */
3431 
3432 static struct mips_got_entry *
3433 mips_elf_create_local_got_entry (bfd *abfd, struct bfd_link_info *info,
3434 				 bfd *ibfd, bfd_vma value,
3435 				 unsigned long r_symndx,
3436 				 struct mips_elf_link_hash_entry *h,
3437 				 int r_type)
3438 {
3439   struct mips_got_entry lookup, *entry;
3440   void **loc;
3441   struct mips_got_info *g;
3442   struct mips_elf_link_hash_table *htab;
3443   bfd_vma gotidx;
3444 
3445   htab = mips_elf_hash_table (info);
3446   BFD_ASSERT (htab != NULL);
3447 
3448   g = mips_elf_bfd_got (ibfd, FALSE);
3449   if (g == NULL)
3450     {
3451       g = mips_elf_bfd_got (abfd, FALSE);
3452       BFD_ASSERT (g != NULL);
3453     }
3454 
3455   /* This function shouldn't be called for symbols that live in the global
3456      area of the GOT.  */
3457   BFD_ASSERT (h == NULL || h->global_got_area == GGA_NONE);
3458 
3459   lookup.tls_type = mips_elf_reloc_tls_type (r_type);
3460   if (lookup.tls_type)
3461     {
3462       lookup.abfd = ibfd;
3463       if (tls_ldm_reloc_p (r_type))
3464 	{
3465 	  lookup.symndx = 0;
3466 	  lookup.d.addend = 0;
3467 	}
3468       else if (h == NULL)
3469 	{
3470 	  lookup.symndx = r_symndx;
3471 	  lookup.d.addend = 0;
3472 	}
3473       else
3474 	{
3475 	  lookup.symndx = -1;
3476 	  lookup.d.h = h;
3477 	}
3478 
3479       entry = (struct mips_got_entry *) htab_find (g->got_entries, &lookup);
3480       BFD_ASSERT (entry);
3481 
3482       gotidx = entry->gotidx;
3483       BFD_ASSERT (gotidx > 0 && gotidx < htab->sgot->size);
3484 
3485       return entry;
3486     }
3487 
3488   lookup.abfd = NULL;
3489   lookup.symndx = -1;
3490   lookup.d.address = value;
3491   loc = htab_find_slot (g->got_entries, &lookup, INSERT);
3492   if (!loc)
3493     return NULL;
3494 
3495   entry = (struct mips_got_entry *) *loc;
3496   if (entry)
3497     return entry;
3498 
3499   if (g->assigned_gotno >= g->local_gotno)
3500     {
3501       /* We didn't allocate enough space in the GOT.  */
3502       (*_bfd_error_handler)
3503 	(_("not enough GOT space for local GOT entries"));
3504       bfd_set_error (bfd_error_bad_value);
3505       return NULL;
3506     }
3507 
3508   entry = (struct mips_got_entry *) bfd_alloc (abfd, sizeof (*entry));
3509   if (!entry)
3510     return NULL;
3511 
3512   lookup.gotidx = MIPS_ELF_GOT_SIZE (abfd) * g->assigned_gotno++;
3513   *entry = lookup;
3514   *loc = entry;
3515 
3516   MIPS_ELF_PUT_WORD (abfd, value, htab->sgot->contents + entry->gotidx);
3517 
3518   /* These GOT entries need a dynamic relocation on VxWorks.  */
3519   if (htab->is_vxworks)
3520     {
3521       Elf_Internal_Rela outrel;
3522       asection *s;
3523       bfd_byte *rloc;
3524       bfd_vma got_address;
3525 
3526       s = mips_elf_rel_dyn_section (info, FALSE);
3527       got_address = (htab->sgot->output_section->vma
3528 		     + htab->sgot->output_offset
3529 		     + entry->gotidx);
3530 
3531       rloc = s->contents + (s->reloc_count++ * sizeof (Elf32_External_Rela));
3532       outrel.r_offset = got_address;
3533       outrel.r_info = ELF32_R_INFO (STN_UNDEF, R_MIPS_32);
3534       outrel.r_addend = value;
3535       bfd_elf32_swap_reloca_out (abfd, &outrel, rloc);
3536     }
3537 
3538   return entry;
3539 }
3540 
3541 /* Return the number of dynamic section symbols required by OUTPUT_BFD.
3542    The number might be exact or a worst-case estimate, depending on how
3543    much information is available to elf_backend_omit_section_dynsym at
3544    the current linking stage.  */
3545 
3546 static bfd_size_type
3547 count_section_dynsyms (bfd *output_bfd, struct bfd_link_info *info)
3548 {
3549   bfd_size_type count;
3550 
3551   count = 0;
3552   if (info->shared || elf_hash_table (info)->is_relocatable_executable)
3553     {
3554       asection *p;
3555       const struct elf_backend_data *bed;
3556 
3557       bed = get_elf_backend_data (output_bfd);
3558       for (p = output_bfd->sections; p ; p = p->next)
3559 	if ((p->flags & SEC_EXCLUDE) == 0
3560 	    && (p->flags & SEC_ALLOC) != 0
3561 	    && !(*bed->elf_backend_omit_section_dynsym) (output_bfd, info, p))
3562 	  ++count;
3563     }
3564   return count;
3565 }
3566 
3567 /* Sort the dynamic symbol table so that symbols that need GOT entries
3568    appear towards the end.  */
3569 
3570 static bfd_boolean
3571 mips_elf_sort_hash_table (bfd *abfd, struct bfd_link_info *info)
3572 {
3573   struct mips_elf_link_hash_table *htab;
3574   struct mips_elf_hash_sort_data hsd;
3575   struct mips_got_info *g;
3576 
3577   if (elf_hash_table (info)->dynsymcount == 0)
3578     return TRUE;
3579 
3580   htab = mips_elf_hash_table (info);
3581   BFD_ASSERT (htab != NULL);
3582 
3583   g = htab->got_info;
3584   if (g == NULL)
3585     return TRUE;
3586 
3587   hsd.low = NULL;
3588   hsd.max_unref_got_dynindx
3589     = hsd.min_got_dynindx
3590     = (elf_hash_table (info)->dynsymcount - g->reloc_only_gotno);
3591   hsd.max_non_got_dynindx = count_section_dynsyms (abfd, info) + 1;
3592   mips_elf_link_hash_traverse (((struct mips_elf_link_hash_table *)
3593 				elf_hash_table (info)),
3594 			       mips_elf_sort_hash_table_f,
3595 			       &hsd);
3596 
3597   /* There should have been enough room in the symbol table to
3598      accommodate both the GOT and non-GOT symbols.  */
3599   BFD_ASSERT (hsd.max_non_got_dynindx <= hsd.min_got_dynindx);
3600   BFD_ASSERT ((unsigned long) hsd.max_unref_got_dynindx
3601 	      == elf_hash_table (info)->dynsymcount);
3602   BFD_ASSERT (elf_hash_table (info)->dynsymcount - hsd.min_got_dynindx
3603 	      == g->global_gotno);
3604 
3605   /* Now we know which dynamic symbol has the lowest dynamic symbol
3606      table index in the GOT.  */
3607   htab->global_gotsym = hsd.low;
3608 
3609   return TRUE;
3610 }
3611 
3612 /* If H needs a GOT entry, assign it the highest available dynamic
3613    index.  Otherwise, assign it the lowest available dynamic
3614    index.  */
3615 
3616 static bfd_boolean
3617 mips_elf_sort_hash_table_f (struct mips_elf_link_hash_entry *h, void *data)
3618 {
3619   struct mips_elf_hash_sort_data *hsd = data;
3620 
3621   /* Symbols without dynamic symbol table entries aren't interesting
3622      at all.  */
3623   if (h->root.dynindx == -1)
3624     return TRUE;
3625 
3626   switch (h->global_got_area)
3627     {
3628     case GGA_NONE:
3629       h->root.dynindx = hsd->max_non_got_dynindx++;
3630       break;
3631 
3632     case GGA_NORMAL:
3633       h->root.dynindx = --hsd->min_got_dynindx;
3634       hsd->low = (struct elf_link_hash_entry *) h;
3635       break;
3636 
3637     case GGA_RELOC_ONLY:
3638       if (hsd->max_unref_got_dynindx == hsd->min_got_dynindx)
3639 	hsd->low = (struct elf_link_hash_entry *) h;
3640       h->root.dynindx = hsd->max_unref_got_dynindx++;
3641       break;
3642     }
3643 
3644   return TRUE;
3645 }
3646 
3647 /* Record that input bfd ABFD requires a GOT entry like *LOOKUP
3648    (which is owned by the caller and shouldn't be added to the
3649    hash table directly).  */
3650 
3651 static bfd_boolean
3652 mips_elf_record_got_entry (struct bfd_link_info *info, bfd *abfd,
3653 			   struct mips_got_entry *lookup)
3654 {
3655   struct mips_elf_link_hash_table *htab;
3656   struct mips_got_entry *entry;
3657   struct mips_got_info *g;
3658   void **loc, **bfd_loc;
3659 
3660   /* Make sure there's a slot for this entry in the master GOT.  */
3661   htab = mips_elf_hash_table (info);
3662   g = htab->got_info;
3663   loc = htab_find_slot (g->got_entries, lookup, INSERT);
3664   if (!loc)
3665     return FALSE;
3666 
3667   /* Populate the entry if it isn't already.  */
3668   entry = (struct mips_got_entry *) *loc;
3669   if (!entry)
3670     {
3671       entry = (struct mips_got_entry *) bfd_alloc (abfd, sizeof (*entry));
3672       if (!entry)
3673 	return FALSE;
3674 
3675       lookup->tls_initialized = FALSE;
3676       lookup->gotidx = -1;
3677       *entry = *lookup;
3678       *loc = entry;
3679     }
3680 
3681   /* Reuse the same GOT entry for the BFD's GOT.  */
3682   g = mips_elf_bfd_got (abfd, TRUE);
3683   if (!g)
3684     return FALSE;
3685 
3686   bfd_loc = htab_find_slot (g->got_entries, lookup, INSERT);
3687   if (!bfd_loc)
3688     return FALSE;
3689 
3690   if (!*bfd_loc)
3691     *bfd_loc = entry;
3692   return TRUE;
3693 }
3694 
3695 /* ABFD has a GOT relocation of type R_TYPE against H.  Reserve a GOT
3696    entry for it.  FOR_CALL is true if the caller is only interested in
3697    using the GOT entry for calls.  */
3698 
3699 static bfd_boolean
3700 mips_elf_record_global_got_symbol (struct elf_link_hash_entry *h,
3701 				   bfd *abfd, struct bfd_link_info *info,
3702 				   bfd_boolean for_call, int r_type)
3703 {
3704   struct mips_elf_link_hash_table *htab;
3705   struct mips_elf_link_hash_entry *hmips;
3706   struct mips_got_entry entry;
3707   unsigned char tls_type;
3708 
3709   htab = mips_elf_hash_table (info);
3710   BFD_ASSERT (htab != NULL);
3711 
3712   hmips = (struct mips_elf_link_hash_entry *) h;
3713   if (!for_call)
3714     hmips->got_only_for_calls = FALSE;
3715 
3716   /* A global symbol in the GOT must also be in the dynamic symbol
3717      table.  */
3718   if (h->dynindx == -1)
3719     {
3720       switch (ELF_ST_VISIBILITY (h->other))
3721 	{
3722 	case STV_INTERNAL:
3723 	case STV_HIDDEN:
3724 	  _bfd_elf_link_hash_hide_symbol (info, h, TRUE);
3725 	  break;
3726 	}
3727       if (!bfd_elf_link_record_dynamic_symbol (info, h))
3728 	return FALSE;
3729     }
3730 
3731   tls_type = mips_elf_reloc_tls_type (r_type);
3732   if (tls_type == GOT_TLS_NONE && hmips->global_got_area > GGA_NORMAL)
3733     hmips->global_got_area = GGA_NORMAL;
3734 
3735   entry.abfd = abfd;
3736   entry.symndx = -1;
3737   entry.d.h = (struct mips_elf_link_hash_entry *) h;
3738   entry.tls_type = tls_type;
3739   return mips_elf_record_got_entry (info, abfd, &entry);
3740 }
3741 
3742 /* ABFD has a GOT relocation of type R_TYPE against symbol SYMNDX + ADDEND,
3743    where SYMNDX is a local symbol.  Reserve a GOT entry for it.  */
3744 
3745 static bfd_boolean
3746 mips_elf_record_local_got_symbol (bfd *abfd, long symndx, bfd_vma addend,
3747 				  struct bfd_link_info *info, int r_type)
3748 {
3749   struct mips_elf_link_hash_table *htab;
3750   struct mips_got_info *g;
3751   struct mips_got_entry entry;
3752 
3753   htab = mips_elf_hash_table (info);
3754   BFD_ASSERT (htab != NULL);
3755 
3756   g = htab->got_info;
3757   BFD_ASSERT (g != NULL);
3758 
3759   entry.abfd = abfd;
3760   entry.symndx = symndx;
3761   entry.d.addend = addend;
3762   entry.tls_type = mips_elf_reloc_tls_type (r_type);
3763   return mips_elf_record_got_entry (info, abfd, &entry);
3764 }
3765 
3766 /* Record that ABFD has a page relocation against SYMNDX + ADDEND.
3767    H is the symbol's hash table entry, or null if SYMNDX is local
3768    to ABFD.  */
3769 
3770 static bfd_boolean
3771 mips_elf_record_got_page_ref (struct bfd_link_info *info, bfd *abfd,
3772 			      long symndx, struct elf_link_hash_entry *h,
3773 			      bfd_signed_vma addend)
3774 {
3775   struct mips_elf_link_hash_table *htab;
3776   struct mips_got_info *g1, *g2;
3777   struct mips_got_page_ref lookup, *entry;
3778   void **loc, **bfd_loc;
3779 
3780   htab = mips_elf_hash_table (info);
3781   BFD_ASSERT (htab != NULL);
3782 
3783   g1 = htab->got_info;
3784   BFD_ASSERT (g1 != NULL);
3785 
3786   if (h)
3787     {
3788       lookup.symndx = -1;
3789       lookup.u.h = (struct mips_elf_link_hash_entry *) h;
3790     }
3791   else
3792     {
3793       lookup.symndx = symndx;
3794       lookup.u.abfd = abfd;
3795     }
3796   lookup.addend = addend;
3797   loc = htab_find_slot (g1->got_page_refs, &lookup, INSERT);
3798   if (loc == NULL)
3799     return FALSE;
3800 
3801   entry = (struct mips_got_page_ref *) *loc;
3802   if (!entry)
3803     {
3804       entry = bfd_alloc (abfd, sizeof (*entry));
3805       if (!entry)
3806 	return FALSE;
3807 
3808       *entry = lookup;
3809       *loc = entry;
3810     }
3811 
3812   /* Add the same entry to the BFD's GOT.  */
3813   g2 = mips_elf_bfd_got (abfd, TRUE);
3814   if (!g2)
3815     return FALSE;
3816 
3817   bfd_loc = htab_find_slot (g2->got_page_refs, &lookup, INSERT);
3818   if (!bfd_loc)
3819     return FALSE;
3820 
3821   if (!*bfd_loc)
3822     *bfd_loc = entry;
3823 
3824   return TRUE;
3825 }
3826 
3827 /* Add room for N relocations to the .rel(a).dyn section in ABFD.  */
3828 
3829 static void
3830 mips_elf_allocate_dynamic_relocations (bfd *abfd, struct bfd_link_info *info,
3831 				       unsigned int n)
3832 {
3833   asection *s;
3834   struct mips_elf_link_hash_table *htab;
3835 
3836   htab = mips_elf_hash_table (info);
3837   BFD_ASSERT (htab != NULL);
3838 
3839   s = mips_elf_rel_dyn_section (info, FALSE);
3840   BFD_ASSERT (s != NULL);
3841 
3842   if (htab->is_vxworks)
3843     s->size += n * MIPS_ELF_RELA_SIZE (abfd);
3844   else
3845     {
3846       if (s->size == 0)
3847 	{
3848 	  /* Make room for a null element.  */
3849 	  s->size += MIPS_ELF_REL_SIZE (abfd);
3850 	  ++s->reloc_count;
3851 	}
3852       s->size += n * MIPS_ELF_REL_SIZE (abfd);
3853     }
3854 }
3855 
3856 /* A htab_traverse callback for GOT entries, with DATA pointing to a
3857    mips_elf_traverse_got_arg structure.  Count the number of GOT
3858    entries and TLS relocs.  Set DATA->value to true if we need
3859    to resolve indirect or warning symbols and then recreate the GOT.  */
3860 
3861 static int
3862 mips_elf_check_recreate_got (void **entryp, void *data)
3863 {
3864   struct mips_got_entry *entry;
3865   struct mips_elf_traverse_got_arg *arg;
3866 
3867   entry = (struct mips_got_entry *) *entryp;
3868   arg = (struct mips_elf_traverse_got_arg *) data;
3869   if (entry->abfd != NULL && entry->symndx == -1)
3870     {
3871       struct mips_elf_link_hash_entry *h;
3872 
3873       h = entry->d.h;
3874       if (h->root.root.type == bfd_link_hash_indirect
3875 	  || h->root.root.type == bfd_link_hash_warning)
3876 	{
3877 	  arg->value = TRUE;
3878 	  return 0;
3879 	}
3880     }
3881   mips_elf_count_got_entry (arg->info, arg->g, entry);
3882   return 1;
3883 }
3884 
3885 /* A htab_traverse callback for GOT entries, with DATA pointing to a
3886    mips_elf_traverse_got_arg structure.  Add all entries to DATA->g,
3887    converting entries for indirect and warning symbols into entries
3888    for the target symbol.  Set DATA->g to null on error.  */
3889 
3890 static int
3891 mips_elf_recreate_got (void **entryp, void *data)
3892 {
3893   struct mips_got_entry new_entry, *entry;
3894   struct mips_elf_traverse_got_arg *arg;
3895   void **slot;
3896 
3897   entry = (struct mips_got_entry *) *entryp;
3898   arg = (struct mips_elf_traverse_got_arg *) data;
3899   if (entry->abfd != NULL
3900       && entry->symndx == -1
3901       && (entry->d.h->root.root.type == bfd_link_hash_indirect
3902 	  || entry->d.h->root.root.type == bfd_link_hash_warning))
3903     {
3904       struct mips_elf_link_hash_entry *h;
3905 
3906       new_entry = *entry;
3907       entry = &new_entry;
3908       h = entry->d.h;
3909       do
3910 	{
3911 	  BFD_ASSERT (h->global_got_area == GGA_NONE);
3912 	  h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
3913 	}
3914       while (h->root.root.type == bfd_link_hash_indirect
3915 	     || h->root.root.type == bfd_link_hash_warning);
3916       entry->d.h = h;
3917     }
3918   slot = htab_find_slot (arg->g->got_entries, entry, INSERT);
3919   if (slot == NULL)
3920     {
3921       arg->g = NULL;
3922       return 0;
3923     }
3924   if (*slot == NULL)
3925     {
3926       if (entry == &new_entry)
3927 	{
3928 	  entry = bfd_alloc (entry->abfd, sizeof (*entry));
3929 	  if (!entry)
3930 	    {
3931 	      arg->g = NULL;
3932 	      return 0;
3933 	    }
3934 	  *entry = new_entry;
3935 	}
3936       *slot = entry;
3937       mips_elf_count_got_entry (arg->info, arg->g, entry);
3938     }
3939   return 1;
3940 }
3941 
3942 /* Return the maximum number of GOT page entries required for RANGE.  */
3943 
3944 static bfd_vma
3945 mips_elf_pages_for_range (const struct mips_got_page_range *range)
3946 {
3947   return (range->max_addend - range->min_addend + 0x1ffff) >> 16;
3948 }
3949 
3950 /* Record that G requires a page entry that can reach SEC + ADDEND.  */
3951 
3952 static bfd_boolean
3953 mips_elf_record_got_page_entry (struct mips_got_info *g,
3954 				asection *sec, bfd_signed_vma addend)
3955 {
3956   struct mips_got_page_entry lookup, *entry;
3957   struct mips_got_page_range **range_ptr, *range;
3958   bfd_vma old_pages, new_pages;
3959   void **loc;
3960 
3961   /* Find the mips_got_page_entry hash table entry for this section.  */
3962   lookup.sec = sec;
3963   loc = htab_find_slot (g->got_page_entries, &lookup, INSERT);
3964   if (loc == NULL)
3965     return FALSE;
3966 
3967   /* Create a mips_got_page_entry if this is the first time we've
3968      seen the section.  */
3969   entry = (struct mips_got_page_entry *) *loc;
3970   if (!entry)
3971     {
3972       entry = bfd_zalloc (sec->owner, sizeof (*entry));
3973       if (!entry)
3974 	return FALSE;
3975 
3976       entry->sec = sec;
3977       *loc = entry;
3978     }
3979 
3980   /* Skip over ranges whose maximum extent cannot share a page entry
3981      with ADDEND.  */
3982   range_ptr = &entry->ranges;
3983   while (*range_ptr && addend > (*range_ptr)->max_addend + 0xffff)
3984     range_ptr = &(*range_ptr)->next;
3985 
3986   /* If we scanned to the end of the list, or found a range whose
3987      minimum extent cannot share a page entry with ADDEND, create
3988      a new singleton range.  */
3989   range = *range_ptr;
3990   if (!range || addend < range->min_addend - 0xffff)
3991     {
3992       range = bfd_zalloc (sec->owner, sizeof (*range));
3993       if (!range)
3994 	return FALSE;
3995 
3996       range->next = *range_ptr;
3997       range->min_addend = addend;
3998       range->max_addend = addend;
3999 
4000       *range_ptr = range;
4001       entry->num_pages++;
4002       g->page_gotno++;
4003       return TRUE;
4004     }
4005 
4006   /* Remember how many pages the old range contributed.  */
4007   old_pages = mips_elf_pages_for_range (range);
4008 
4009   /* Update the ranges.  */
4010   if (addend < range->min_addend)
4011     range->min_addend = addend;
4012   else if (addend > range->max_addend)
4013     {
4014       if (range->next && addend >= range->next->min_addend - 0xffff)
4015 	{
4016 	  old_pages += mips_elf_pages_for_range (range->next);
4017 	  range->max_addend = range->next->max_addend;
4018 	  range->next = range->next->next;
4019 	}
4020       else
4021 	range->max_addend = addend;
4022     }
4023 
4024   /* Record any change in the total estimate.  */
4025   new_pages = mips_elf_pages_for_range (range);
4026   if (old_pages != new_pages)
4027     {
4028       entry->num_pages += new_pages - old_pages;
4029       g->page_gotno += new_pages - old_pages;
4030     }
4031 
4032   return TRUE;
4033 }
4034 
4035 /* A htab_traverse callback for which *REFP points to a mips_got_page_ref
4036    and for which DATA points to a mips_elf_traverse_got_arg.  Work out
4037    whether the page reference described by *REFP needs a GOT page entry,
4038    and record that entry in DATA->g if so.  Set DATA->g to null on failure.  */
4039 
4040 static bfd_boolean
4041 mips_elf_resolve_got_page_ref (void **refp, void *data)
4042 {
4043   struct mips_got_page_ref *ref;
4044   struct mips_elf_traverse_got_arg *arg;
4045   struct mips_elf_link_hash_table *htab;
4046   asection *sec;
4047   bfd_vma addend;
4048 
4049   ref = (struct mips_got_page_ref *) *refp;
4050   arg = (struct mips_elf_traverse_got_arg *) data;
4051   htab = mips_elf_hash_table (arg->info);
4052 
4053   if (ref->symndx < 0)
4054     {
4055       struct mips_elf_link_hash_entry *h;
4056 
4057       /* Global GOT_PAGEs decay to GOT_DISP and so don't need page entries.  */
4058       h = ref->u.h;
4059       if (!SYMBOL_REFERENCES_LOCAL (arg->info, &h->root))
4060 	return 1;
4061 
4062       /* Ignore undefined symbols; we'll issue an error later if
4063 	 appropriate.  */
4064       if (!((h->root.root.type == bfd_link_hash_defined
4065 	     || h->root.root.type == bfd_link_hash_defweak)
4066 	    && h->root.root.u.def.section))
4067 	return 1;
4068 
4069       sec = h->root.root.u.def.section;
4070       addend = h->root.root.u.def.value + ref->addend;
4071     }
4072   else
4073     {
4074       Elf_Internal_Sym *isym;
4075 
4076       /* Read in the symbol.  */
4077       isym = bfd_sym_from_r_symndx (&htab->sym_cache, ref->u.abfd,
4078 				    ref->symndx);
4079       if (isym == NULL)
4080 	{
4081 	  arg->g = NULL;
4082 	  return 0;
4083 	}
4084 
4085       /* Get the associated input section.  */
4086       sec = bfd_section_from_elf_index (ref->u.abfd, isym->st_shndx);
4087       if (sec == NULL)
4088 	{
4089 	  arg->g = NULL;
4090 	  return 0;
4091 	}
4092 
4093       /* If this is a mergable section, work out the section and offset
4094 	 of the merged data.  For section symbols, the addend specifies
4095 	 of the offset _of_ the first byte in the data, otherwise it
4096 	 specifies the offset _from_ the first byte.  */
4097       if (sec->flags & SEC_MERGE)
4098 	{
4099 	  void *secinfo;
4100 
4101 	  secinfo = elf_section_data (sec)->sec_info;
4102 	  if (ELF_ST_TYPE (isym->st_info) == STT_SECTION)
4103 	    addend = _bfd_merged_section_offset (ref->u.abfd, &sec, secinfo,
4104 						 isym->st_value + ref->addend);
4105 	  else
4106 	    addend = _bfd_merged_section_offset (ref->u.abfd, &sec, secinfo,
4107 						 isym->st_value) + ref->addend;
4108 	}
4109       else
4110 	addend = isym->st_value + ref->addend;
4111     }
4112   if (!mips_elf_record_got_page_entry (arg->g, sec, addend))
4113     {
4114       arg->g = NULL;
4115       return 0;
4116     }
4117   return 1;
4118 }
4119 
4120 /* If any entries in G->got_entries are for indirect or warning symbols,
4121    replace them with entries for the target symbol.  Convert g->got_page_refs
4122    into got_page_entry structures and estimate the number of page entries
4123    that they require.  */
4124 
4125 static bfd_boolean
4126 mips_elf_resolve_final_got_entries (struct bfd_link_info *info,
4127 				    struct mips_got_info *g)
4128 {
4129   struct mips_elf_traverse_got_arg tga;
4130   struct mips_got_info oldg;
4131 
4132   oldg = *g;
4133 
4134   tga.info = info;
4135   tga.g = g;
4136   tga.value = FALSE;
4137   htab_traverse (g->got_entries, mips_elf_check_recreate_got, &tga);
4138   if (tga.value)
4139     {
4140       *g = oldg;
4141       g->got_entries = htab_create (htab_size (oldg.got_entries),
4142 				    mips_elf_got_entry_hash,
4143 				    mips_elf_got_entry_eq, NULL);
4144       if (!g->got_entries)
4145 	return FALSE;
4146 
4147       htab_traverse (oldg.got_entries, mips_elf_recreate_got, &tga);
4148       if (!tga.g)
4149 	return FALSE;
4150 
4151       htab_delete (oldg.got_entries);
4152     }
4153 
4154   g->got_page_entries = htab_try_create (1, mips_got_page_entry_hash,
4155 					 mips_got_page_entry_eq, NULL);
4156   if (g->got_page_entries == NULL)
4157     return FALSE;
4158 
4159   tga.info = info;
4160   tga.g = g;
4161   htab_traverse (g->got_page_refs, mips_elf_resolve_got_page_ref, &tga);
4162 
4163   return TRUE;
4164 }
4165 
4166 /* A mips_elf_link_hash_traverse callback for which DATA points to the
4167    link_info structure.  Decide whether the hash entry needs an entry in
4168    the global part of the primary GOT, setting global_got_area accordingly.
4169    Count the number of global symbols that are in the primary GOT only
4170    because they have relocations against them (reloc_only_gotno).  */
4171 
4172 static int
4173 mips_elf_count_got_symbols (struct mips_elf_link_hash_entry *h, void *data)
4174 {
4175   struct bfd_link_info *info;
4176   struct mips_elf_link_hash_table *htab;
4177   struct mips_got_info *g;
4178 
4179   info = (struct bfd_link_info *) data;
4180   htab = mips_elf_hash_table (info);
4181   g = htab->got_info;
4182   if (h->global_got_area != GGA_NONE)
4183     {
4184       /* Make a final decision about whether the symbol belongs in the
4185 	 local or global GOT.  Symbols that bind locally can (and in the
4186 	 case of forced-local symbols, must) live in the local GOT.
4187 	 Those that are aren't in the dynamic symbol table must also
4188 	 live in the local GOT.
4189 
4190 	 Note that the former condition does not always imply the
4191 	 latter: symbols do not bind locally if they are completely
4192 	 undefined.  We'll report undefined symbols later if appropriate.  */
4193       if (h->root.dynindx == -1
4194 	  || (h->got_only_for_calls
4195 	      ? SYMBOL_CALLS_LOCAL (info, &h->root)
4196 	      : SYMBOL_REFERENCES_LOCAL (info, &h->root)))
4197 	/* The symbol belongs in the local GOT.  We no longer need this
4198 	   entry if it was only used for relocations; those relocations
4199 	   will be against the null or section symbol instead of H.  */
4200 	h->global_got_area = GGA_NONE;
4201       else if (htab->is_vxworks
4202 	       && h->got_only_for_calls
4203 	       && h->root.plt.offset != MINUS_ONE)
4204 	/* On VxWorks, calls can refer directly to the .got.plt entry;
4205 	   they don't need entries in the regular GOT.  .got.plt entries
4206 	   will be allocated by _bfd_mips_elf_adjust_dynamic_symbol.  */
4207 	h->global_got_area = GGA_NONE;
4208       else if (h->global_got_area == GGA_RELOC_ONLY)
4209 	{
4210 	  g->reloc_only_gotno++;
4211 	  g->global_gotno++;
4212 	}
4213     }
4214   return 1;
4215 }
4216 
4217 /* A htab_traverse callback for GOT entries.  Add each one to the GOT
4218    given in mips_elf_traverse_got_arg DATA.  Clear DATA->G on error.  */
4219 
4220 static int
4221 mips_elf_add_got_entry (void **entryp, void *data)
4222 {
4223   struct mips_got_entry *entry;
4224   struct mips_elf_traverse_got_arg *arg;
4225   void **slot;
4226 
4227   entry = (struct mips_got_entry *) *entryp;
4228   arg = (struct mips_elf_traverse_got_arg *) data;
4229   slot = htab_find_slot (arg->g->got_entries, entry, INSERT);
4230   if (!slot)
4231     {
4232       arg->g = NULL;
4233       return 0;
4234     }
4235   if (!*slot)
4236     {
4237       *slot = entry;
4238       mips_elf_count_got_entry (arg->info, arg->g, entry);
4239     }
4240   return 1;
4241 }
4242 
4243 /* A htab_traverse callback for GOT page entries.  Add each one to the GOT
4244    given in mips_elf_traverse_got_arg DATA.  Clear DATA->G on error.  */
4245 
4246 static int
4247 mips_elf_add_got_page_entry (void **entryp, void *data)
4248 {
4249   struct mips_got_page_entry *entry;
4250   struct mips_elf_traverse_got_arg *arg;
4251   void **slot;
4252 
4253   entry = (struct mips_got_page_entry *) *entryp;
4254   arg = (struct mips_elf_traverse_got_arg *) data;
4255   slot = htab_find_slot (arg->g->got_page_entries, entry, INSERT);
4256   if (!slot)
4257     {
4258       arg->g = NULL;
4259       return 0;
4260     }
4261   if (!*slot)
4262     {
4263       *slot = entry;
4264       arg->g->page_gotno += entry->num_pages;
4265     }
4266   return 1;
4267 }
4268 
4269 /* Consider merging FROM, which is ABFD's GOT, into TO.  Return -1 if
4270    this would lead to overflow, 1 if they were merged successfully,
4271    and 0 if a merge failed due to lack of memory.  (These values are chosen
4272    so that nonnegative return values can be returned by a htab_traverse
4273    callback.)  */
4274 
4275 static int
4276 mips_elf_merge_got_with (bfd *abfd, struct mips_got_info *from,
4277 			 struct mips_got_info *to,
4278 			 struct mips_elf_got_per_bfd_arg *arg)
4279 {
4280   struct mips_elf_traverse_got_arg tga;
4281   unsigned int estimate;
4282 
4283   /* Work out how many page entries we would need for the combined GOT.  */
4284   estimate = arg->max_pages;
4285   if (estimate >= from->page_gotno + to->page_gotno)
4286     estimate = from->page_gotno + to->page_gotno;
4287 
4288   /* And conservatively estimate how many local and TLS entries
4289      would be needed.  */
4290   estimate += from->local_gotno + to->local_gotno;
4291   estimate += from->tls_gotno + to->tls_gotno;
4292 
4293   /* If we're merging with the primary got, any TLS relocations will
4294      come after the full set of global entries.  Otherwise estimate those
4295      conservatively as well.  */
4296   if (to == arg->primary && from->tls_gotno + to->tls_gotno)
4297     estimate += arg->global_count;
4298   else
4299     estimate += from->global_gotno + to->global_gotno;
4300 
4301   /* Bail out if the combined GOT might be too big.  */
4302   if (estimate > arg->max_count)
4303     return -1;
4304 
4305   /* Transfer the bfd's got information from FROM to TO.  */
4306   tga.info = arg->info;
4307   tga.g = to;
4308   htab_traverse (from->got_entries, mips_elf_add_got_entry, &tga);
4309   if (!tga.g)
4310     return 0;
4311 
4312   htab_traverse (from->got_page_entries, mips_elf_add_got_page_entry, &tga);
4313   if (!tga.g)
4314     return 0;
4315 
4316   mips_elf_replace_bfd_got (abfd, to);
4317   return 1;
4318 }
4319 
4320 /* Attempt to merge GOT G, which belongs to ABFD.  Try to use as much
4321    as possible of the primary got, since it doesn't require explicit
4322    dynamic relocations, but don't use bfds that would reference global
4323    symbols out of the addressable range.  Failing the primary got,
4324    attempt to merge with the current got, or finish the current got
4325    and then make make the new got current.  */
4326 
4327 static bfd_boolean
4328 mips_elf_merge_got (bfd *abfd, struct mips_got_info *g,
4329 		    struct mips_elf_got_per_bfd_arg *arg)
4330 {
4331   unsigned int estimate;
4332   int result;
4333 
4334   if (!mips_elf_resolve_final_got_entries (arg->info, g))
4335     return FALSE;
4336 
4337   /* Work out the number of page, local and TLS entries.  */
4338   estimate = arg->max_pages;
4339   if (estimate > g->page_gotno)
4340     estimate = g->page_gotno;
4341   estimate += g->local_gotno + g->tls_gotno;
4342 
4343   /* We place TLS GOT entries after both locals and globals.  The globals
4344      for the primary GOT may overflow the normal GOT size limit, so be
4345      sure not to merge a GOT which requires TLS with the primary GOT in that
4346      case.  This doesn't affect non-primary GOTs.  */
4347   estimate += (g->tls_gotno > 0 ? arg->global_count : g->global_gotno);
4348 
4349   if (estimate <= arg->max_count)
4350     {
4351       /* If we don't have a primary GOT, use it as
4352 	 a starting point for the primary GOT.  */
4353       if (!arg->primary)
4354 	{
4355 	  arg->primary = g;
4356 	  return TRUE;
4357 	}
4358 
4359       /* Try merging with the primary GOT.  */
4360       result = mips_elf_merge_got_with (abfd, g, arg->primary, arg);
4361       if (result >= 0)
4362 	return result;
4363     }
4364 
4365   /* If we can merge with the last-created got, do it.  */
4366   if (arg->current)
4367     {
4368       result = mips_elf_merge_got_with (abfd, g, arg->current, arg);
4369       if (result >= 0)
4370 	return result;
4371     }
4372 
4373   /* Well, we couldn't merge, so create a new GOT.  Don't check if it
4374      fits; if it turns out that it doesn't, we'll get relocation
4375      overflows anyway.  */
4376   g->next = arg->current;
4377   arg->current = g;
4378 
4379   return TRUE;
4380 }
4381 
4382 /* ENTRYP is a hash table entry for a mips_got_entry.  Set its gotidx
4383    to GOTIDX, duplicating the entry if it has already been assigned
4384    an index in a different GOT.  */
4385 
4386 static bfd_boolean
4387 mips_elf_set_gotidx (void **entryp, long gotidx)
4388 {
4389   struct mips_got_entry *entry;
4390 
4391   entry = (struct mips_got_entry *) *entryp;
4392   if (entry->gotidx > 0)
4393     {
4394       struct mips_got_entry *new_entry;
4395 
4396       new_entry = bfd_alloc (entry->abfd, sizeof (*entry));
4397       if (!new_entry)
4398 	return FALSE;
4399 
4400       *new_entry = *entry;
4401       *entryp = new_entry;
4402       entry = new_entry;
4403     }
4404   entry->gotidx = gotidx;
4405   return TRUE;
4406 }
4407 
4408 /* Set the TLS GOT index for the GOT entry in ENTRYP.  DATA points to a
4409    mips_elf_traverse_got_arg in which DATA->value is the size of one
4410    GOT entry.  Set DATA->g to null on failure.  */
4411 
4412 static int
4413 mips_elf_initialize_tls_index (void **entryp, void *data)
4414 {
4415   struct mips_got_entry *entry;
4416   struct mips_elf_traverse_got_arg *arg;
4417 
4418   /* We're only interested in TLS symbols.  */
4419   entry = (struct mips_got_entry *) *entryp;
4420   if (entry->tls_type == GOT_TLS_NONE)
4421     return 1;
4422 
4423   arg = (struct mips_elf_traverse_got_arg *) data;
4424   if (!mips_elf_set_gotidx (entryp, arg->value * arg->g->tls_assigned_gotno))
4425     {
4426       arg->g = NULL;
4427       return 0;
4428     }
4429 
4430   /* Account for the entries we've just allocated.  */
4431   arg->g->tls_assigned_gotno += mips_tls_got_entries (entry->tls_type);
4432   return 1;
4433 }
4434 
4435 /* A htab_traverse callback for GOT entries, where DATA points to a
4436    mips_elf_traverse_got_arg.  Set the global_got_area of each global
4437    symbol to DATA->value.  */
4438 
4439 static int
4440 mips_elf_set_global_got_area (void **entryp, void *data)
4441 {
4442   struct mips_got_entry *entry;
4443   struct mips_elf_traverse_got_arg *arg;
4444 
4445   entry = (struct mips_got_entry *) *entryp;
4446   arg = (struct mips_elf_traverse_got_arg *) data;
4447   if (entry->abfd != NULL
4448       && entry->symndx == -1
4449       && entry->d.h->global_got_area != GGA_NONE)
4450     entry->d.h->global_got_area = arg->value;
4451   return 1;
4452 }
4453 
4454 /* A htab_traverse callback for secondary GOT entries, where DATA points
4455    to a mips_elf_traverse_got_arg.  Assign GOT indices to global entries
4456    and record the number of relocations they require.  DATA->value is
4457    the size of one GOT entry.  Set DATA->g to null on failure.  */
4458 
4459 static int
4460 mips_elf_set_global_gotidx (void **entryp, void *data)
4461 {
4462   struct mips_got_entry *entry;
4463   struct mips_elf_traverse_got_arg *arg;
4464 
4465   entry = (struct mips_got_entry *) *entryp;
4466   arg = (struct mips_elf_traverse_got_arg *) data;
4467   if (entry->abfd != NULL
4468       && entry->symndx == -1
4469       && entry->d.h->global_got_area != GGA_NONE)
4470     {
4471       if (!mips_elf_set_gotidx (entryp, arg->value * arg->g->assigned_gotno))
4472 	{
4473 	  arg->g = NULL;
4474 	  return 0;
4475 	}
4476       arg->g->assigned_gotno += 1;
4477 
4478       if (arg->info->shared
4479 	  || (elf_hash_table (arg->info)->dynamic_sections_created
4480 	      && entry->d.h->root.def_dynamic
4481 	      && !entry->d.h->root.def_regular))
4482 	arg->g->relocs += 1;
4483     }
4484 
4485   return 1;
4486 }
4487 
4488 /* A htab_traverse callback for GOT entries for which DATA is the
4489    bfd_link_info.  Forbid any global symbols from having traditional
4490    lazy-binding stubs.  */
4491 
4492 static int
4493 mips_elf_forbid_lazy_stubs (void **entryp, void *data)
4494 {
4495   struct bfd_link_info *info;
4496   struct mips_elf_link_hash_table *htab;
4497   struct mips_got_entry *entry;
4498 
4499   entry = (struct mips_got_entry *) *entryp;
4500   info = (struct bfd_link_info *) data;
4501   htab = mips_elf_hash_table (info);
4502   BFD_ASSERT (htab != NULL);
4503 
4504   if (entry->abfd != NULL
4505       && entry->symndx == -1
4506       && entry->d.h->needs_lazy_stub)
4507     {
4508       entry->d.h->needs_lazy_stub = FALSE;
4509       htab->lazy_stub_count--;
4510     }
4511 
4512   return 1;
4513 }
4514 
4515 /* Return the offset of an input bfd IBFD's GOT from the beginning of
4516    the primary GOT.  */
4517 static bfd_vma
4518 mips_elf_adjust_gp (bfd *abfd, struct mips_got_info *g, bfd *ibfd)
4519 {
4520   if (!g->next)
4521     return 0;
4522 
4523   g = mips_elf_bfd_got (ibfd, FALSE);
4524   if (! g)
4525     return 0;
4526 
4527   BFD_ASSERT (g->next);
4528 
4529   g = g->next;
4530 
4531   return (g->local_gotno + g->global_gotno + g->tls_gotno)
4532     * MIPS_ELF_GOT_SIZE (abfd);
4533 }
4534 
4535 /* Turn a single GOT that is too big for 16-bit addressing into
4536    a sequence of GOTs, each one 16-bit addressable.  */
4537 
4538 static bfd_boolean
4539 mips_elf_multi_got (bfd *abfd, struct bfd_link_info *info,
4540 		    asection *got, bfd_size_type pages)
4541 {
4542   struct mips_elf_link_hash_table *htab;
4543   struct mips_elf_got_per_bfd_arg got_per_bfd_arg;
4544   struct mips_elf_traverse_got_arg tga;
4545   struct mips_got_info *g, *gg;
4546   unsigned int assign, needed_relocs;
4547   bfd *dynobj, *ibfd;
4548 
4549   dynobj = elf_hash_table (info)->dynobj;
4550   htab = mips_elf_hash_table (info);
4551   BFD_ASSERT (htab != NULL);
4552 
4553   g = htab->got_info;
4554 
4555   got_per_bfd_arg.obfd = abfd;
4556   got_per_bfd_arg.info = info;
4557   got_per_bfd_arg.current = NULL;
4558   got_per_bfd_arg.primary = NULL;
4559   got_per_bfd_arg.max_count = ((MIPS_ELF_GOT_MAX_SIZE (info)
4560 				/ MIPS_ELF_GOT_SIZE (abfd))
4561 			       - htab->reserved_gotno);
4562   got_per_bfd_arg.max_pages = pages;
4563   /* The number of globals that will be included in the primary GOT.
4564      See the calls to mips_elf_set_global_got_area below for more
4565      information.  */
4566   got_per_bfd_arg.global_count = g->global_gotno;
4567 
4568   /* Try to merge the GOTs of input bfds together, as long as they
4569      don't seem to exceed the maximum GOT size, choosing one of them
4570      to be the primary GOT.  */
4571   for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link_next)
4572     {
4573       gg = mips_elf_bfd_got (ibfd, FALSE);
4574       if (gg && !mips_elf_merge_got (ibfd, gg, &got_per_bfd_arg))
4575 	return FALSE;
4576     }
4577 
4578   /* If we do not find any suitable primary GOT, create an empty one.  */
4579   if (got_per_bfd_arg.primary == NULL)
4580     g->next = mips_elf_create_got_info (abfd);
4581   else
4582     g->next = got_per_bfd_arg.primary;
4583   g->next->next = got_per_bfd_arg.current;
4584 
4585   /* GG is now the master GOT, and G is the primary GOT.  */
4586   gg = g;
4587   g = g->next;
4588 
4589   /* Map the output bfd to the primary got.  That's what we're going
4590      to use for bfds that use GOT16 or GOT_PAGE relocations that we
4591      didn't mark in check_relocs, and we want a quick way to find it.
4592      We can't just use gg->next because we're going to reverse the
4593      list.  */
4594   mips_elf_replace_bfd_got (abfd, g);
4595 
4596   /* Every symbol that is referenced in a dynamic relocation must be
4597      present in the primary GOT, so arrange for them to appear after
4598      those that are actually referenced.  */
4599   gg->reloc_only_gotno = gg->global_gotno - g->global_gotno;
4600   g->global_gotno = gg->global_gotno;
4601 
4602   tga.info = info;
4603   tga.value = GGA_RELOC_ONLY;
4604   htab_traverse (gg->got_entries, mips_elf_set_global_got_area, &tga);
4605   tga.value = GGA_NORMAL;
4606   htab_traverse (g->got_entries, mips_elf_set_global_got_area, &tga);
4607 
4608   /* Now go through the GOTs assigning them offset ranges.
4609      [assigned_gotno, local_gotno[ will be set to the range of local
4610      entries in each GOT.  We can then compute the end of a GOT by
4611      adding local_gotno to global_gotno.  We reverse the list and make
4612      it circular since then we'll be able to quickly compute the
4613      beginning of a GOT, by computing the end of its predecessor.  To
4614      avoid special cases for the primary GOT, while still preserving
4615      assertions that are valid for both single- and multi-got links,
4616      we arrange for the main got struct to have the right number of
4617      global entries, but set its local_gotno such that the initial
4618      offset of the primary GOT is zero.  Remember that the primary GOT
4619      will become the last item in the circular linked list, so it
4620      points back to the master GOT.  */
4621   gg->local_gotno = -g->global_gotno;
4622   gg->global_gotno = g->global_gotno;
4623   gg->tls_gotno = 0;
4624   assign = 0;
4625   gg->next = gg;
4626 
4627   do
4628     {
4629       struct mips_got_info *gn;
4630 
4631       assign += htab->reserved_gotno;
4632       g->assigned_gotno = assign;
4633       g->local_gotno += assign;
4634       g->local_gotno += (pages < g->page_gotno ? pages : g->page_gotno);
4635       assign = g->local_gotno + g->global_gotno + g->tls_gotno;
4636 
4637       /* Take g out of the direct list, and push it onto the reversed
4638 	 list that gg points to.  g->next is guaranteed to be nonnull after
4639 	 this operation, as required by mips_elf_initialize_tls_index. */
4640       gn = g->next;
4641       g->next = gg->next;
4642       gg->next = g;
4643 
4644       /* Set up any TLS entries.  We always place the TLS entries after
4645 	 all non-TLS entries.  */
4646       g->tls_assigned_gotno = g->local_gotno + g->global_gotno;
4647       tga.g = g;
4648       tga.value = MIPS_ELF_GOT_SIZE (abfd);
4649       htab_traverse (g->got_entries, mips_elf_initialize_tls_index, &tga);
4650       if (!tga.g)
4651 	return FALSE;
4652       BFD_ASSERT (g->tls_assigned_gotno == assign);
4653 
4654       /* Move onto the next GOT.  It will be a secondary GOT if nonull.  */
4655       g = gn;
4656 
4657       /* Forbid global symbols in every non-primary GOT from having
4658 	 lazy-binding stubs.  */
4659       if (g)
4660 	htab_traverse (g->got_entries, mips_elf_forbid_lazy_stubs, info);
4661     }
4662   while (g);
4663 
4664   got->size = assign * MIPS_ELF_GOT_SIZE (abfd);
4665 
4666   needed_relocs = 0;
4667   for (g = gg->next; g && g->next != gg; g = g->next)
4668     {
4669       unsigned int save_assign;
4670 
4671       /* Assign offsets to global GOT entries and count how many
4672 	 relocations they need.  */
4673       save_assign = g->assigned_gotno;
4674       g->assigned_gotno = g->local_gotno;
4675       tga.info = info;
4676       tga.value = MIPS_ELF_GOT_SIZE (abfd);
4677       tga.g = g;
4678       htab_traverse (g->got_entries, mips_elf_set_global_gotidx, &tga);
4679       if (!tga.g)
4680 	return FALSE;
4681       BFD_ASSERT (g->assigned_gotno == g->local_gotno + g->global_gotno);
4682       g->assigned_gotno = save_assign;
4683 
4684       if (info->shared)
4685 	{
4686 	  g->relocs += g->local_gotno - g->assigned_gotno;
4687 	  BFD_ASSERT (g->assigned_gotno == g->next->local_gotno
4688 		      + g->next->global_gotno
4689 		      + g->next->tls_gotno
4690 		      + htab->reserved_gotno);
4691 	}
4692       needed_relocs += g->relocs;
4693     }
4694   needed_relocs += g->relocs;
4695 
4696   if (needed_relocs)
4697     mips_elf_allocate_dynamic_relocations (dynobj, info,
4698 					   needed_relocs);
4699 
4700   return TRUE;
4701 }
4702 
4703 
4704 /* Returns the first relocation of type r_type found, beginning with
4705    RELOCATION.  RELEND is one-past-the-end of the relocation table.  */
4706 
4707 static const Elf_Internal_Rela *
4708 mips_elf_next_relocation (bfd *abfd ATTRIBUTE_UNUSED, unsigned int r_type,
4709 			  const Elf_Internal_Rela *relocation,
4710 			  const Elf_Internal_Rela *relend)
4711 {
4712   unsigned long r_symndx = ELF_R_SYM (abfd, relocation->r_info);
4713 
4714   while (relocation < relend)
4715     {
4716       if (ELF_R_TYPE (abfd, relocation->r_info) == r_type
4717 	  && ELF_R_SYM (abfd, relocation->r_info) == r_symndx)
4718 	return relocation;
4719 
4720       ++relocation;
4721     }
4722 
4723   /* We didn't find it.  */
4724   return NULL;
4725 }
4726 
4727 /* Return whether an input relocation is against a local symbol.  */
4728 
4729 static bfd_boolean
4730 mips_elf_local_relocation_p (bfd *input_bfd,
4731 			     const Elf_Internal_Rela *relocation,
4732 			     asection **local_sections)
4733 {
4734   unsigned long r_symndx;
4735   Elf_Internal_Shdr *symtab_hdr;
4736   size_t extsymoff;
4737 
4738   r_symndx = ELF_R_SYM (input_bfd, relocation->r_info);
4739   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
4740   extsymoff = (elf_bad_symtab (input_bfd)) ? 0 : symtab_hdr->sh_info;
4741 
4742   if (r_symndx < extsymoff)
4743     return TRUE;
4744   if (elf_bad_symtab (input_bfd) && local_sections[r_symndx] != NULL)
4745     return TRUE;
4746 
4747   return FALSE;
4748 }
4749 
4750 /* Sign-extend VALUE, which has the indicated number of BITS.  */
4751 
4752 bfd_vma
4753 _bfd_mips_elf_sign_extend (bfd_vma value, int bits)
4754 {
4755   if (value & ((bfd_vma) 1 << (bits - 1)))
4756     /* VALUE is negative.  */
4757     value |= ((bfd_vma) - 1) << bits;
4758 
4759   return value;
4760 }
4761 
4762 /* Return non-zero if the indicated VALUE has overflowed the maximum
4763    range expressible by a signed number with the indicated number of
4764    BITS.  */
4765 
4766 static bfd_boolean
4767 mips_elf_overflow_p (bfd_vma value, int bits)
4768 {
4769   bfd_signed_vma svalue = (bfd_signed_vma) value;
4770 
4771   if (svalue > (1 << (bits - 1)) - 1)
4772     /* The value is too big.  */
4773     return TRUE;
4774   else if (svalue < -(1 << (bits - 1)))
4775     /* The value is too small.  */
4776     return TRUE;
4777 
4778   /* All is well.  */
4779   return FALSE;
4780 }
4781 
4782 /* Calculate the %high function.  */
4783 
4784 static bfd_vma
4785 mips_elf_high (bfd_vma value)
4786 {
4787   return ((value + (bfd_vma) 0x8000) >> 16) & 0xffff;
4788 }
4789 
4790 /* Calculate the %higher function.  */
4791 
4792 static bfd_vma
4793 mips_elf_higher (bfd_vma value ATTRIBUTE_UNUSED)
4794 {
4795 #ifdef BFD64
4796   return ((value + (bfd_vma) 0x80008000) >> 32) & 0xffff;
4797 #else
4798   abort ();
4799   return MINUS_ONE;
4800 #endif
4801 }
4802 
4803 /* Calculate the %highest function.  */
4804 
4805 static bfd_vma
4806 mips_elf_highest (bfd_vma value ATTRIBUTE_UNUSED)
4807 {
4808 #ifdef BFD64
4809   return ((value + (((bfd_vma) 0x8000 << 32) | 0x80008000)) >> 48) & 0xffff;
4810 #else
4811   abort ();
4812   return MINUS_ONE;
4813 #endif
4814 }
4815 
4816 /* Create the .compact_rel section.  */
4817 
4818 static bfd_boolean
4819 mips_elf_create_compact_rel_section
4820   (bfd *abfd, struct bfd_link_info *info ATTRIBUTE_UNUSED)
4821 {
4822   flagword flags;
4823   register asection *s;
4824 
4825   if (bfd_get_linker_section (abfd, ".compact_rel") == NULL)
4826     {
4827       flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED
4828 	       | SEC_READONLY);
4829 
4830       s = bfd_make_section_anyway_with_flags (abfd, ".compact_rel", flags);
4831       if (s == NULL
4832 	  || ! bfd_set_section_alignment (abfd, s,
4833 					  MIPS_ELF_LOG_FILE_ALIGN (abfd)))
4834 	return FALSE;
4835 
4836       s->size = sizeof (Elf32_External_compact_rel);
4837     }
4838 
4839   return TRUE;
4840 }
4841 
4842 /* Create the .got section to hold the global offset table.  */
4843 
4844 static bfd_boolean
4845 mips_elf_create_got_section (bfd *abfd, struct bfd_link_info *info)
4846 {
4847   flagword flags;
4848   register asection *s;
4849   struct elf_link_hash_entry *h;
4850   struct bfd_link_hash_entry *bh;
4851   struct mips_elf_link_hash_table *htab;
4852 
4853   htab = mips_elf_hash_table (info);
4854   BFD_ASSERT (htab != NULL);
4855 
4856   /* This function may be called more than once.  */
4857   if (htab->sgot)
4858     return TRUE;
4859 
4860   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
4861 	   | SEC_LINKER_CREATED);
4862 
4863   /* We have to use an alignment of 2**4 here because this is hardcoded
4864      in the function stub generation and in the linker script.  */
4865   s = bfd_make_section_anyway_with_flags (abfd, ".got", flags);
4866   if (s == NULL
4867       || ! bfd_set_section_alignment (abfd, s, 4))
4868     return FALSE;
4869   htab->sgot = s;
4870 
4871   /* Define the symbol _GLOBAL_OFFSET_TABLE_.  We don't do this in the
4872      linker script because we don't want to define the symbol if we
4873      are not creating a global offset table.  */
4874   bh = NULL;
4875   if (! (_bfd_generic_link_add_one_symbol
4876 	 (info, abfd, "_GLOBAL_OFFSET_TABLE_", BSF_GLOBAL, s,
4877 	  0, NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
4878     return FALSE;
4879 
4880   h = (struct elf_link_hash_entry *) bh;
4881   h->non_elf = 0;
4882   h->def_regular = 1;
4883   h->type = STT_OBJECT;
4884   elf_hash_table (info)->hgot = h;
4885 
4886   if (info->shared
4887       && ! bfd_elf_link_record_dynamic_symbol (info, h))
4888     return FALSE;
4889 
4890   htab->got_info = mips_elf_create_got_info (abfd);
4891   mips_elf_section_data (s)->elf.this_hdr.sh_flags
4892     |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL;
4893 
4894   /* We also need a .got.plt section when generating PLTs.  */
4895   s = bfd_make_section_anyway_with_flags (abfd, ".got.plt",
4896 					  SEC_ALLOC | SEC_LOAD
4897 					  | SEC_HAS_CONTENTS
4898 					  | SEC_IN_MEMORY
4899 					  | SEC_LINKER_CREATED);
4900   if (s == NULL)
4901     return FALSE;
4902   htab->sgotplt = s;
4903 
4904   return TRUE;
4905 }
4906 
4907 /* Return true if H refers to the special VxWorks __GOTT_BASE__ or
4908    __GOTT_INDEX__ symbols.  These symbols are only special for
4909    shared objects; they are not used in executables.  */
4910 
4911 static bfd_boolean
4912 is_gott_symbol (struct bfd_link_info *info, struct elf_link_hash_entry *h)
4913 {
4914   return (mips_elf_hash_table (info)->is_vxworks
4915 	  && info->shared
4916 	  && (strcmp (h->root.root.string, "__GOTT_BASE__") == 0
4917 	      || strcmp (h->root.root.string, "__GOTT_INDEX__") == 0));
4918 }
4919 
4920 /* Return TRUE if a relocation of type R_TYPE from INPUT_BFD might
4921    require an la25 stub.  See also mips_elf_local_pic_function_p,
4922    which determines whether the destination function ever requires a
4923    stub.  */
4924 
4925 static bfd_boolean
4926 mips_elf_relocation_needs_la25_stub (bfd *input_bfd, int r_type,
4927 				     bfd_boolean target_is_16_bit_code_p)
4928 {
4929   /* We specifically ignore branches and jumps from EF_PIC objects,
4930      where the onus is on the compiler or programmer to perform any
4931      necessary initialization of $25.  Sometimes such initialization
4932      is unnecessary; for example, -mno-shared functions do not use
4933      the incoming value of $25, and may therefore be called directly.  */
4934   if (PIC_OBJECT_P (input_bfd))
4935     return FALSE;
4936 
4937   switch (r_type)
4938     {
4939     case R_MIPS_26:
4940     case R_MIPS_PC16:
4941     case R_MICROMIPS_26_S1:
4942     case R_MICROMIPS_PC7_S1:
4943     case R_MICROMIPS_PC10_S1:
4944     case R_MICROMIPS_PC16_S1:
4945     case R_MICROMIPS_PC23_S2:
4946       return TRUE;
4947 
4948     case R_MIPS16_26:
4949       return !target_is_16_bit_code_p;
4950 
4951     default:
4952       return FALSE;
4953     }
4954 }
4955 
4956 /* Calculate the value produced by the RELOCATION (which comes from
4957    the INPUT_BFD).  The ADDEND is the addend to use for this
4958    RELOCATION; RELOCATION->R_ADDEND is ignored.
4959 
4960    The result of the relocation calculation is stored in VALUEP.
4961    On exit, set *CROSS_MODE_JUMP_P to true if the relocation field
4962    is a MIPS16 or microMIPS jump to standard MIPS code, or vice versa.
4963 
4964    This function returns bfd_reloc_continue if the caller need take no
4965    further action regarding this relocation, bfd_reloc_notsupported if
4966    something goes dramatically wrong, bfd_reloc_overflow if an
4967    overflow occurs, and bfd_reloc_ok to indicate success.  */
4968 
4969 static bfd_reloc_status_type
4970 mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
4971 			       asection *input_section,
4972 			       struct bfd_link_info *info,
4973 			       const Elf_Internal_Rela *relocation,
4974 			       bfd_vma addend, reloc_howto_type *howto,
4975 			       Elf_Internal_Sym *local_syms,
4976 			       asection **local_sections, bfd_vma *valuep,
4977 			       const char **namep,
4978 			       bfd_boolean *cross_mode_jump_p,
4979 			       bfd_boolean save_addend)
4980 {
4981   /* The eventual value we will return.  */
4982   bfd_vma value;
4983   /* The address of the symbol against which the relocation is
4984      occurring.  */
4985   bfd_vma symbol = 0;
4986   /* The final GP value to be used for the relocatable, executable, or
4987      shared object file being produced.  */
4988   bfd_vma gp;
4989   /* The place (section offset or address) of the storage unit being
4990      relocated.  */
4991   bfd_vma p;
4992   /* The value of GP used to create the relocatable object.  */
4993   bfd_vma gp0;
4994   /* The offset into the global offset table at which the address of
4995      the relocation entry symbol, adjusted by the addend, resides
4996      during execution.  */
4997   bfd_vma g = MINUS_ONE;
4998   /* The section in which the symbol referenced by the relocation is
4999      located.  */
5000   asection *sec = NULL;
5001   struct mips_elf_link_hash_entry *h = NULL;
5002   /* TRUE if the symbol referred to by this relocation is a local
5003      symbol.  */
5004   bfd_boolean local_p, was_local_p;
5005   /* TRUE if the symbol referred to by this relocation is "_gp_disp".  */
5006   bfd_boolean gp_disp_p = FALSE;
5007   /* TRUE if the symbol referred to by this relocation is
5008      "__gnu_local_gp".  */
5009   bfd_boolean gnu_local_gp_p = FALSE;
5010   Elf_Internal_Shdr *symtab_hdr;
5011   size_t extsymoff;
5012   unsigned long r_symndx;
5013   int r_type;
5014   /* TRUE if overflow occurred during the calculation of the
5015      relocation value.  */
5016   bfd_boolean overflowed_p;
5017   /* TRUE if this relocation refers to a MIPS16 function.  */
5018   bfd_boolean target_is_16_bit_code_p = FALSE;
5019   bfd_boolean target_is_micromips_code_p = FALSE;
5020   struct mips_elf_link_hash_table *htab;
5021   bfd *dynobj;
5022 
5023   dynobj = elf_hash_table (info)->dynobj;
5024   htab = mips_elf_hash_table (info);
5025   BFD_ASSERT (htab != NULL);
5026 
5027   /* Parse the relocation.  */
5028   r_symndx = ELF_R_SYM (input_bfd, relocation->r_info);
5029   r_type = ELF_R_TYPE (input_bfd, relocation->r_info);
5030   p = (input_section->output_section->vma
5031        + input_section->output_offset
5032        + relocation->r_offset);
5033 
5034   /* Assume that there will be no overflow.  */
5035   overflowed_p = FALSE;
5036 
5037   /* Figure out whether or not the symbol is local, and get the offset
5038      used in the array of hash table entries.  */
5039   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
5040   local_p = mips_elf_local_relocation_p (input_bfd, relocation,
5041 					 local_sections);
5042   was_local_p = local_p;
5043   if (! elf_bad_symtab (input_bfd))
5044     extsymoff = symtab_hdr->sh_info;
5045   else
5046     {
5047       /* The symbol table does not follow the rule that local symbols
5048 	 must come before globals.  */
5049       extsymoff = 0;
5050     }
5051 
5052   /* Figure out the value of the symbol.  */
5053   if (local_p)
5054     {
5055       Elf_Internal_Sym *sym;
5056 
5057       sym = local_syms + r_symndx;
5058       sec = local_sections[r_symndx];
5059 
5060       symbol = sec->output_section->vma + sec->output_offset;
5061       if (ELF_ST_TYPE (sym->st_info) != STT_SECTION
5062 	  || (sec->flags & SEC_MERGE))
5063 	symbol += sym->st_value;
5064       if ((sec->flags & SEC_MERGE)
5065 	  && ELF_ST_TYPE (sym->st_info) == STT_SECTION)
5066 	{
5067 	  addend = _bfd_elf_rel_local_sym (abfd, sym, &sec, addend);
5068 	  addend -= symbol;
5069 	  addend += sec->output_section->vma + sec->output_offset;
5070 	}
5071 
5072       /* MIPS16/microMIPS text labels should be treated as odd.  */
5073       if (ELF_ST_IS_COMPRESSED (sym->st_other))
5074 	++symbol;
5075 
5076       /* Record the name of this symbol, for our caller.  */
5077       *namep = bfd_elf_string_from_elf_section (input_bfd,
5078 						symtab_hdr->sh_link,
5079 						sym->st_name);
5080       if (*namep == '\0')
5081 	*namep = bfd_section_name (input_bfd, sec);
5082 
5083       target_is_16_bit_code_p = ELF_ST_IS_MIPS16 (sym->st_other);
5084       target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (sym->st_other);
5085     }
5086   else
5087     {
5088       /* ??? Could we use RELOC_FOR_GLOBAL_SYMBOL here ?  */
5089 
5090       /* For global symbols we look up the symbol in the hash-table.  */
5091       h = ((struct mips_elf_link_hash_entry *)
5092 	   elf_sym_hashes (input_bfd) [r_symndx - extsymoff]);
5093       /* Find the real hash-table entry for this symbol.  */
5094       while (h->root.root.type == bfd_link_hash_indirect
5095 	     || h->root.root.type == bfd_link_hash_warning)
5096 	h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
5097 
5098       /* Record the name of this symbol, for our caller.  */
5099       *namep = h->root.root.root.string;
5100 
5101       /* See if this is the special _gp_disp symbol.  Note that such a
5102 	 symbol must always be a global symbol.  */
5103       if (strcmp (*namep, "_gp_disp") == 0
5104 	  && ! NEWABI_P (input_bfd))
5105 	{
5106 	  /* Relocations against _gp_disp are permitted only with
5107 	     R_MIPS_HI16 and R_MIPS_LO16 relocations.  */
5108 	  if (!hi16_reloc_p (r_type) && !lo16_reloc_p (r_type))
5109 	    return bfd_reloc_notsupported;
5110 
5111 	  gp_disp_p = TRUE;
5112 	}
5113       /* See if this is the special _gp symbol.  Note that such a
5114 	 symbol must always be a global symbol.  */
5115       else if (strcmp (*namep, "__gnu_local_gp") == 0)
5116 	gnu_local_gp_p = TRUE;
5117 
5118 
5119       /* If this symbol is defined, calculate its address.  Note that
5120 	 _gp_disp is a magic symbol, always implicitly defined by the
5121 	 linker, so it's inappropriate to check to see whether or not
5122 	 its defined.  */
5123       else if ((h->root.root.type == bfd_link_hash_defined
5124 		|| h->root.root.type == bfd_link_hash_defweak)
5125 	       && h->root.root.u.def.section)
5126 	{
5127 	  sec = h->root.root.u.def.section;
5128 	  if (sec->output_section)
5129 	    symbol = (h->root.root.u.def.value
5130 		      + sec->output_section->vma
5131 		      + sec->output_offset);
5132 	  else
5133 	    symbol = h->root.root.u.def.value;
5134 	}
5135       else if (h->root.root.type == bfd_link_hash_undefweak)
5136 	/* We allow relocations against undefined weak symbols, giving
5137 	   it the value zero, so that you can undefined weak functions
5138 	   and check to see if they exist by looking at their
5139 	   addresses.  */
5140 	symbol = 0;
5141       else if (info->unresolved_syms_in_objects == RM_IGNORE
5142 	       && ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT)
5143 	symbol = 0;
5144       else if (strcmp (*namep, SGI_COMPAT (input_bfd)
5145 		       ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING") == 0)
5146 	{
5147 	  /* If this is a dynamic link, we should have created a
5148 	     _DYNAMIC_LINK symbol or _DYNAMIC_LINKING(for normal mips) symbol
5149 	     in in _bfd_mips_elf_create_dynamic_sections.
5150 	     Otherwise, we should define the symbol with a value of 0.
5151 	     FIXME: It should probably get into the symbol table
5152 	     somehow as well.  */
5153 	  BFD_ASSERT (! info->shared);
5154 	  BFD_ASSERT (bfd_get_section_by_name (abfd, ".dynamic") == NULL);
5155 	  symbol = 0;
5156 	}
5157       else if (ELF_MIPS_IS_OPTIONAL (h->root.other))
5158 	{
5159 	  /* This is an optional symbol - an Irix specific extension to the
5160 	     ELF spec.  Ignore it for now.
5161 	     XXX - FIXME - there is more to the spec for OPTIONAL symbols
5162 	     than simply ignoring them, but we do not handle this for now.
5163 	     For information see the "64-bit ELF Object File Specification"
5164 	     which is available from here:
5165 	     http://techpubs.sgi.com/library/manuals/4000/007-4658-001/pdf/007-4658-001.pdf  */
5166 	  symbol = 0;
5167 	}
5168       else if ((*info->callbacks->undefined_symbol)
5169 	       (info, h->root.root.root.string, input_bfd,
5170 		input_section, relocation->r_offset,
5171 		(info->unresolved_syms_in_objects == RM_GENERATE_ERROR)
5172 		 || ELF_ST_VISIBILITY (h->root.other)))
5173 	{
5174 	  return bfd_reloc_undefined;
5175 	}
5176       else
5177 	{
5178 	  return bfd_reloc_notsupported;
5179 	}
5180 
5181       target_is_16_bit_code_p = ELF_ST_IS_MIPS16 (h->root.other);
5182       /* If the output section is the PLT section,
5183          then the target is not microMIPS.  */
5184       target_is_micromips_code_p = (htab->splt != sec
5185 				    && ELF_ST_IS_MICROMIPS (h->root.other));
5186     }
5187 
5188   /* If this is a reference to a 16-bit function with a stub, we need
5189      to redirect the relocation to the stub unless:
5190 
5191      (a) the relocation is for a MIPS16 JAL;
5192 
5193      (b) the relocation is for a MIPS16 PIC call, and there are no
5194 	 non-MIPS16 uses of the GOT slot; or
5195 
5196      (c) the section allows direct references to MIPS16 functions.  */
5197   if (r_type != R_MIPS16_26
5198       && !info->relocatable
5199       && ((h != NULL
5200 	   && h->fn_stub != NULL
5201 	   && (r_type != R_MIPS16_CALL16 || h->need_fn_stub))
5202 	  || (local_p
5203 	      && mips_elf_tdata (input_bfd)->local_stubs != NULL
5204 	      && mips_elf_tdata (input_bfd)->local_stubs[r_symndx] != NULL))
5205       && !section_allows_mips16_refs_p (input_section))
5206     {
5207       /* This is a 32- or 64-bit call to a 16-bit function.  We should
5208 	 have already noticed that we were going to need the
5209 	 stub.  */
5210       if (local_p)
5211 	{
5212 	  sec = mips_elf_tdata (input_bfd)->local_stubs[r_symndx];
5213 	  value = 0;
5214 	}
5215       else
5216 	{
5217 	  BFD_ASSERT (h->need_fn_stub);
5218 	  if (h->la25_stub)
5219 	    {
5220 	      /* If a LA25 header for the stub itself exists, point to the
5221 		 prepended LUI/ADDIU sequence.  */
5222 	      sec = h->la25_stub->stub_section;
5223 	      value = h->la25_stub->offset;
5224 	    }
5225 	  else
5226 	    {
5227 	      sec = h->fn_stub;
5228 	      value = 0;
5229 	    }
5230 	}
5231 
5232       symbol = sec->output_section->vma + sec->output_offset + value;
5233       /* The target is 16-bit, but the stub isn't.  */
5234       target_is_16_bit_code_p = FALSE;
5235     }
5236   /* If this is a 16-bit call to a 32- or 64-bit function with a stub, we
5237      need to redirect the call to the stub.  Note that we specifically
5238      exclude R_MIPS16_CALL16 from this behavior; indirect calls should
5239      use an indirect stub instead.  */
5240   else if (r_type == R_MIPS16_26 && !info->relocatable
5241 	   && ((h != NULL && (h->call_stub != NULL || h->call_fp_stub != NULL))
5242 	       || (local_p
5243 		   && mips_elf_tdata (input_bfd)->local_call_stubs != NULL
5244 		   && mips_elf_tdata (input_bfd)->local_call_stubs[r_symndx] != NULL))
5245 	   && !target_is_16_bit_code_p)
5246     {
5247       if (local_p)
5248 	sec = mips_elf_tdata (input_bfd)->local_call_stubs[r_symndx];
5249       else
5250 	{
5251 	  /* If both call_stub and call_fp_stub are defined, we can figure
5252 	     out which one to use by checking which one appears in the input
5253 	     file.  */
5254 	  if (h->call_stub != NULL && h->call_fp_stub != NULL)
5255 	    {
5256 	      asection *o;
5257 
5258 	      sec = NULL;
5259 	      for (o = input_bfd->sections; o != NULL; o = o->next)
5260 		{
5261 		  if (CALL_FP_STUB_P (bfd_get_section_name (input_bfd, o)))
5262 		    {
5263 		      sec = h->call_fp_stub;
5264 		      break;
5265 		    }
5266 		}
5267 	      if (sec == NULL)
5268 		sec = h->call_stub;
5269 	    }
5270 	  else if (h->call_stub != NULL)
5271 	    sec = h->call_stub;
5272 	  else
5273 	    sec = h->call_fp_stub;
5274   	}
5275 
5276       BFD_ASSERT (sec->size > 0);
5277       symbol = sec->output_section->vma + sec->output_offset;
5278     }
5279   /* If this is a direct call to a PIC function, redirect to the
5280      non-PIC stub.  */
5281   else if (h != NULL && h->la25_stub
5282 	   && mips_elf_relocation_needs_la25_stub (input_bfd, r_type,
5283 						   target_is_16_bit_code_p))
5284     symbol = (h->la25_stub->stub_section->output_section->vma
5285 	      + h->la25_stub->stub_section->output_offset
5286 	      + h->la25_stub->offset);
5287 
5288   /* Make sure MIPS16 and microMIPS are not used together.  */
5289   if ((r_type == R_MIPS16_26 && target_is_micromips_code_p)
5290       || (micromips_branch_reloc_p (r_type) && target_is_16_bit_code_p))
5291    {
5292       (*_bfd_error_handler)
5293 	(_("MIPS16 and microMIPS functions cannot call each other"));
5294       return bfd_reloc_notsupported;
5295    }
5296 
5297   /* Calls from 16-bit code to 32-bit code and vice versa require the
5298      mode change.  However, we can ignore calls to undefined weak symbols,
5299      which should never be executed at runtime.  This exception is important
5300      because the assembly writer may have "known" that any definition of the
5301      symbol would be 16-bit code, and that direct jumps were therefore
5302      acceptable.  */
5303   *cross_mode_jump_p = (!info->relocatable
5304 			&& !(h && h->root.root.type == bfd_link_hash_undefweak)
5305 			&& ((r_type == R_MIPS16_26 && !target_is_16_bit_code_p)
5306 			    || (r_type == R_MICROMIPS_26_S1
5307 				&& !target_is_micromips_code_p)
5308 			    || ((r_type == R_MIPS_26 || r_type == R_MIPS_JALR)
5309 				&& (target_is_16_bit_code_p
5310 				    || target_is_micromips_code_p))));
5311 
5312   local_p = (h == NULL
5313 	     || (h->got_only_for_calls
5314 		 ? SYMBOL_CALLS_LOCAL (info, &h->root)
5315 		 : SYMBOL_REFERENCES_LOCAL (info, &h->root)));
5316 
5317   gp0 = _bfd_get_gp_value (input_bfd);
5318   gp = _bfd_get_gp_value (abfd);
5319   if (htab->got_info)
5320     gp += mips_elf_adjust_gp (abfd, htab->got_info, input_bfd);
5321 
5322   if (gnu_local_gp_p)
5323     symbol = gp;
5324 
5325   /* Global R_MIPS_GOT_PAGE/R_MICROMIPS_GOT_PAGE relocations are equivalent
5326      to R_MIPS_GOT_DISP/R_MICROMIPS_GOT_DISP.  The addend is applied by the
5327      corresponding R_MIPS_GOT_OFST/R_MICROMIPS_GOT_OFST.  */
5328   if (got_page_reloc_p (r_type) && !local_p)
5329     {
5330       r_type = (micromips_reloc_p (r_type)
5331 		? R_MICROMIPS_GOT_DISP : R_MIPS_GOT_DISP);
5332       addend = 0;
5333     }
5334 
5335   /* If we haven't already determined the GOT offset, and we're going
5336      to need it, get it now.  */
5337   switch (r_type)
5338     {
5339     case R_MIPS16_CALL16:
5340     case R_MIPS16_GOT16:
5341     case R_MIPS_CALL16:
5342     case R_MIPS_GOT16:
5343     case R_MIPS_GOT_DISP:
5344     case R_MIPS_GOT_HI16:
5345     case R_MIPS_CALL_HI16:
5346     case R_MIPS_GOT_LO16:
5347     case R_MIPS_CALL_LO16:
5348     case R_MICROMIPS_CALL16:
5349     case R_MICROMIPS_GOT16:
5350     case R_MICROMIPS_GOT_DISP:
5351     case R_MICROMIPS_GOT_HI16:
5352     case R_MICROMIPS_CALL_HI16:
5353     case R_MICROMIPS_GOT_LO16:
5354     case R_MICROMIPS_CALL_LO16:
5355     case R_MIPS_TLS_GD:
5356     case R_MIPS_TLS_GOTTPREL:
5357     case R_MIPS_TLS_LDM:
5358     case R_MIPS16_TLS_GD:
5359     case R_MIPS16_TLS_GOTTPREL:
5360     case R_MIPS16_TLS_LDM:
5361     case R_MICROMIPS_TLS_GD:
5362     case R_MICROMIPS_TLS_GOTTPREL:
5363     case R_MICROMIPS_TLS_LDM:
5364       /* Find the index into the GOT where this value is located.  */
5365       if (tls_ldm_reloc_p (r_type))
5366 	{
5367 	  g = mips_elf_local_got_index (abfd, input_bfd, info,
5368 					0, 0, NULL, r_type);
5369 	  if (g == MINUS_ONE)
5370 	    return bfd_reloc_outofrange;
5371 	}
5372       else if (!local_p)
5373 	{
5374 	  /* On VxWorks, CALL relocations should refer to the .got.plt
5375 	     entry, which is initialized to point at the PLT stub.  */
5376 	  if (htab->is_vxworks
5377 	      && (call_hi16_reloc_p (r_type)
5378 		  || call_lo16_reloc_p (r_type)
5379 		  || call16_reloc_p (r_type)))
5380 	    {
5381 	      BFD_ASSERT (addend == 0);
5382 	      BFD_ASSERT (h->root.needs_plt);
5383 	      g = mips_elf_gotplt_index (info, &h->root);
5384 	    }
5385 	  else
5386 	    {
5387 	      BFD_ASSERT (addend == 0);
5388 	      g = mips_elf_global_got_index (abfd, info, input_bfd,
5389 					     &h->root, r_type);
5390 	      if (!TLS_RELOC_P (r_type)
5391 		  && !elf_hash_table (info)->dynamic_sections_created)
5392 		/* This is a static link.  We must initialize the GOT entry.  */
5393 		MIPS_ELF_PUT_WORD (dynobj, symbol, htab->sgot->contents + g);
5394 	    }
5395 	}
5396       else if (!htab->is_vxworks
5397 	       && (call16_reloc_p (r_type) || got16_reloc_p (r_type)))
5398 	/* The calculation below does not involve "g".  */
5399 	break;
5400       else
5401 	{
5402 	  g = mips_elf_local_got_index (abfd, input_bfd, info,
5403 					symbol + addend, r_symndx, h, r_type);
5404 	  if (g == MINUS_ONE)
5405 	    return bfd_reloc_outofrange;
5406 	}
5407 
5408       /* Convert GOT indices to actual offsets.  */
5409       g = mips_elf_got_offset_from_index (info, abfd, input_bfd, g);
5410       break;
5411     }
5412 
5413   /* Relocations against the VxWorks __GOTT_BASE__ and __GOTT_INDEX__
5414      symbols are resolved by the loader.  Add them to .rela.dyn.  */
5415   if (h != NULL && is_gott_symbol (info, &h->root))
5416     {
5417       Elf_Internal_Rela outrel;
5418       bfd_byte *loc;
5419       asection *s;
5420 
5421       s = mips_elf_rel_dyn_section (info, FALSE);
5422       loc = s->contents + s->reloc_count++ * sizeof (Elf32_External_Rela);
5423 
5424       outrel.r_offset = (input_section->output_section->vma
5425 			 + input_section->output_offset
5426 			 + relocation->r_offset);
5427       outrel.r_info = ELF32_R_INFO (h->root.dynindx, r_type);
5428       outrel.r_addend = addend;
5429       bfd_elf32_swap_reloca_out (abfd, &outrel, loc);
5430 
5431       /* If we've written this relocation for a readonly section,
5432 	 we need to set DF_TEXTREL again, so that we do not delete the
5433 	 DT_TEXTREL tag.  */
5434       if (MIPS_ELF_READONLY_SECTION (input_section))
5435 	info->flags |= DF_TEXTREL;
5436 
5437       *valuep = 0;
5438       return bfd_reloc_ok;
5439     }
5440 
5441   /* Figure out what kind of relocation is being performed.  */
5442   switch (r_type)
5443     {
5444     case R_MIPS_NONE:
5445       return bfd_reloc_continue;
5446 
5447     case R_MIPS_16:
5448       value = symbol + _bfd_mips_elf_sign_extend (addend, 16);
5449       overflowed_p = mips_elf_overflow_p (value, 16);
5450       break;
5451 
5452     case R_MIPS_32:
5453     case R_MIPS_REL32:
5454     case R_MIPS_64:
5455       if ((info->shared
5456 	   || (htab->root.dynamic_sections_created
5457 	       && h != NULL
5458 	       && h->root.def_dynamic
5459 	       && !h->root.def_regular
5460 	       && !h->has_static_relocs))
5461 	  && r_symndx != STN_UNDEF
5462 	  && (h == NULL
5463 	      || h->root.root.type != bfd_link_hash_undefweak
5464 	      || ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT)
5465 	  && (input_section->flags & SEC_ALLOC) != 0)
5466 	{
5467 	  /* If we're creating a shared library, then we can't know
5468 	     where the symbol will end up.  So, we create a relocation
5469 	     record in the output, and leave the job up to the dynamic
5470 	     linker.  We must do the same for executable references to
5471 	     shared library symbols, unless we've decided to use copy
5472 	     relocs or PLTs instead.  */
5473 	  value = addend;
5474 	  if (!mips_elf_create_dynamic_relocation (abfd,
5475 						   info,
5476 						   relocation,
5477 						   h,
5478 						   sec,
5479 						   symbol,
5480 						   &value,
5481 						   input_section))
5482 	    return bfd_reloc_undefined;
5483 	}
5484       else
5485 	{
5486 	  if (r_type != R_MIPS_REL32)
5487 	    value = symbol + addend;
5488 	  else
5489 	    value = addend;
5490 	}
5491       value &= howto->dst_mask;
5492       break;
5493 
5494     case R_MIPS_PC32:
5495       value = symbol + addend - p;
5496       value &= howto->dst_mask;
5497       break;
5498 
5499     case R_MIPS16_26:
5500       /* The calculation for R_MIPS16_26 is just the same as for an
5501 	 R_MIPS_26.  It's only the storage of the relocated field into
5502 	 the output file that's different.  That's handled in
5503 	 mips_elf_perform_relocation.  So, we just fall through to the
5504 	 R_MIPS_26 case here.  */
5505     case R_MIPS_26:
5506     case R_MICROMIPS_26_S1:
5507       {
5508 	unsigned int shift;
5509 
5510 	/* Make sure the target of JALX is word-aligned.  Bit 0 must be
5511 	   the correct ISA mode selector and bit 1 must be 0.  */
5512 	if (*cross_mode_jump_p && (symbol & 3) != (r_type == R_MIPS_26))
5513 	  return bfd_reloc_outofrange;
5514 
5515 	/* Shift is 2, unusually, for microMIPS JALX.  */
5516 	shift = (!*cross_mode_jump_p && r_type == R_MICROMIPS_26_S1) ? 1 : 2;
5517 
5518 	if (was_local_p)
5519 	  value = addend | ((p + 4) & (0xfc000000 << shift));
5520 	else
5521 	  value = _bfd_mips_elf_sign_extend (addend, 26 + shift);
5522 	value = (value + symbol) >> shift;
5523 	if (!was_local_p && h->root.root.type != bfd_link_hash_undefweak)
5524 	  overflowed_p = (value >> 26) != ((p + 4) >> (26 + shift));
5525 	value &= howto->dst_mask;
5526       }
5527       break;
5528 
5529     case R_MIPS_TLS_DTPREL_HI16:
5530     case R_MIPS16_TLS_DTPREL_HI16:
5531     case R_MICROMIPS_TLS_DTPREL_HI16:
5532       value = (mips_elf_high (addend + symbol - dtprel_base (info))
5533 	       & howto->dst_mask);
5534       break;
5535 
5536     case R_MIPS_TLS_DTPREL_LO16:
5537     case R_MIPS_TLS_DTPREL32:
5538     case R_MIPS_TLS_DTPREL64:
5539     case R_MIPS16_TLS_DTPREL_LO16:
5540     case R_MICROMIPS_TLS_DTPREL_LO16:
5541       value = (symbol + addend - dtprel_base (info)) & howto->dst_mask;
5542       break;
5543 
5544     case R_MIPS_TLS_TPREL_HI16:
5545     case R_MIPS16_TLS_TPREL_HI16:
5546     case R_MICROMIPS_TLS_TPREL_HI16:
5547       value = (mips_elf_high (addend + symbol - tprel_base (info))
5548 	       & howto->dst_mask);
5549       break;
5550 
5551     case R_MIPS_TLS_TPREL_LO16:
5552     case R_MIPS_TLS_TPREL32:
5553     case R_MIPS_TLS_TPREL64:
5554     case R_MIPS16_TLS_TPREL_LO16:
5555     case R_MICROMIPS_TLS_TPREL_LO16:
5556       value = (symbol + addend - tprel_base (info)) & howto->dst_mask;
5557       break;
5558 
5559     case R_MIPS_HI16:
5560     case R_MIPS16_HI16:
5561     case R_MICROMIPS_HI16:
5562       if (!gp_disp_p)
5563 	{
5564 	  value = mips_elf_high (addend + symbol);
5565 	  value &= howto->dst_mask;
5566 	}
5567       else
5568 	{
5569 	  /* For MIPS16 ABI code we generate this sequence
5570 	        0: li      $v0,%hi(_gp_disp)
5571 	        4: addiupc $v1,%lo(_gp_disp)
5572 	        8: sll     $v0,16
5573 	       12: addu    $v0,$v1
5574 	       14: move    $gp,$v0
5575 	     So the offsets of hi and lo relocs are the same, but the
5576 	     base $pc is that used by the ADDIUPC instruction at $t9 + 4.
5577 	     ADDIUPC clears the low two bits of the instruction address,
5578 	     so the base is ($t9 + 4) & ~3.  */
5579 	  if (r_type == R_MIPS16_HI16)
5580 	    value = mips_elf_high (addend + gp - ((p + 4) & ~(bfd_vma) 0x3));
5581 	  /* The microMIPS .cpload sequence uses the same assembly
5582 	     instructions as the traditional psABI version, but the
5583 	     incoming $t9 has the low bit set.  */
5584 	  else if (r_type == R_MICROMIPS_HI16)
5585 	    value = mips_elf_high (addend + gp - p - 1);
5586 	  else
5587 	    value = mips_elf_high (addend + gp - p);
5588 	  overflowed_p = mips_elf_overflow_p (value, 16);
5589 	}
5590       break;
5591 
5592     case R_MIPS_LO16:
5593     case R_MIPS16_LO16:
5594     case R_MICROMIPS_LO16:
5595     case R_MICROMIPS_HI0_LO16:
5596       if (!gp_disp_p)
5597 	value = (symbol + addend) & howto->dst_mask;
5598       else
5599 	{
5600 	  /* See the comment for R_MIPS16_HI16 above for the reason
5601 	     for this conditional.  */
5602 	  if (r_type == R_MIPS16_LO16)
5603 	    value = addend + gp - (p & ~(bfd_vma) 0x3);
5604 	  else if (r_type == R_MICROMIPS_LO16
5605 		   || r_type == R_MICROMIPS_HI0_LO16)
5606 	    value = addend + gp - p + 3;
5607 	  else
5608 	    value = addend + gp - p + 4;
5609 	  /* The MIPS ABI requires checking the R_MIPS_LO16 relocation
5610 	     for overflow.  But, on, say, IRIX5, relocations against
5611 	     _gp_disp are normally generated from the .cpload
5612 	     pseudo-op.  It generates code that normally looks like
5613 	     this:
5614 
5615 	       lui    $gp,%hi(_gp_disp)
5616 	       addiu  $gp,$gp,%lo(_gp_disp)
5617 	       addu   $gp,$gp,$t9
5618 
5619 	     Here $t9 holds the address of the function being called,
5620 	     as required by the MIPS ELF ABI.  The R_MIPS_LO16
5621 	     relocation can easily overflow in this situation, but the
5622 	     R_MIPS_HI16 relocation will handle the overflow.
5623 	     Therefore, we consider this a bug in the MIPS ABI, and do
5624 	     not check for overflow here.  */
5625 	}
5626       break;
5627 
5628     case R_MIPS_LITERAL:
5629     case R_MICROMIPS_LITERAL:
5630       /* Because we don't merge literal sections, we can handle this
5631 	 just like R_MIPS_GPREL16.  In the long run, we should merge
5632 	 shared literals, and then we will need to additional work
5633 	 here.  */
5634 
5635       /* Fall through.  */
5636 
5637     case R_MIPS16_GPREL:
5638       /* The R_MIPS16_GPREL performs the same calculation as
5639 	 R_MIPS_GPREL16, but stores the relocated bits in a different
5640 	 order.  We don't need to do anything special here; the
5641 	 differences are handled in mips_elf_perform_relocation.  */
5642     case R_MIPS_GPREL16:
5643     case R_MICROMIPS_GPREL7_S2:
5644     case R_MICROMIPS_GPREL16:
5645       /* Only sign-extend the addend if it was extracted from the
5646 	 instruction.  If the addend was separate, leave it alone,
5647 	 otherwise we may lose significant bits.  */
5648       if (howto->partial_inplace)
5649 	addend = _bfd_mips_elf_sign_extend (addend, 16);
5650       value = symbol + addend - gp;
5651       /* If the symbol was local, any earlier relocatable links will
5652 	 have adjusted its addend with the gp offset, so compensate
5653 	 for that now.  Don't do it for symbols forced local in this
5654 	 link, though, since they won't have had the gp offset applied
5655 	 to them before.  */
5656       if (was_local_p)
5657 	value += gp0;
5658       overflowed_p = mips_elf_overflow_p (value, 16);
5659       break;
5660 
5661     case R_MIPS16_GOT16:
5662     case R_MIPS16_CALL16:
5663     case R_MIPS_GOT16:
5664     case R_MIPS_CALL16:
5665     case R_MICROMIPS_GOT16:
5666     case R_MICROMIPS_CALL16:
5667       /* VxWorks does not have separate local and global semantics for
5668 	 R_MIPS*_GOT16; every relocation evaluates to "G".  */
5669       if (!htab->is_vxworks && local_p)
5670 	{
5671 	  value = mips_elf_got16_entry (abfd, input_bfd, info,
5672 					symbol + addend, !was_local_p);
5673 	  if (value == MINUS_ONE)
5674 	    return bfd_reloc_outofrange;
5675 	  value
5676 	    = mips_elf_got_offset_from_index (info, abfd, input_bfd, value);
5677 	  overflowed_p = mips_elf_overflow_p (value, 16);
5678 	  break;
5679 	}
5680 
5681       /* Fall through.  */
5682 
5683     case R_MIPS_TLS_GD:
5684     case R_MIPS_TLS_GOTTPREL:
5685     case R_MIPS_TLS_LDM:
5686     case R_MIPS_GOT_DISP:
5687     case R_MIPS16_TLS_GD:
5688     case R_MIPS16_TLS_GOTTPREL:
5689     case R_MIPS16_TLS_LDM:
5690     case R_MICROMIPS_TLS_GD:
5691     case R_MICROMIPS_TLS_GOTTPREL:
5692     case R_MICROMIPS_TLS_LDM:
5693     case R_MICROMIPS_GOT_DISP:
5694       value = g;
5695       overflowed_p = mips_elf_overflow_p (value, 16);
5696       break;
5697 
5698     case R_MIPS_GPREL32:
5699       value = (addend + symbol + gp0 - gp);
5700       if (!save_addend)
5701 	value &= howto->dst_mask;
5702       break;
5703 
5704     case R_MIPS_PC16:
5705     case R_MIPS_GNU_REL16_S2:
5706       value = symbol + _bfd_mips_elf_sign_extend (addend, 18) - p;
5707       overflowed_p = mips_elf_overflow_p (value, 18);
5708       value >>= howto->rightshift;
5709       value &= howto->dst_mask;
5710       break;
5711 
5712     case R_MICROMIPS_PC7_S1:
5713       value = symbol + _bfd_mips_elf_sign_extend (addend, 8) - p;
5714       overflowed_p = mips_elf_overflow_p (value, 8);
5715       value >>= howto->rightshift;
5716       value &= howto->dst_mask;
5717       break;
5718 
5719     case R_MICROMIPS_PC10_S1:
5720       value = symbol + _bfd_mips_elf_sign_extend (addend, 11) - p;
5721       overflowed_p = mips_elf_overflow_p (value, 11);
5722       value >>= howto->rightshift;
5723       value &= howto->dst_mask;
5724       break;
5725 
5726     case R_MICROMIPS_PC16_S1:
5727       value = symbol + _bfd_mips_elf_sign_extend (addend, 17) - p;
5728       overflowed_p = mips_elf_overflow_p (value, 17);
5729       value >>= howto->rightshift;
5730       value &= howto->dst_mask;
5731       break;
5732 
5733     case R_MICROMIPS_PC23_S2:
5734       value = symbol + _bfd_mips_elf_sign_extend (addend, 25) - ((p | 3) ^ 3);
5735       overflowed_p = mips_elf_overflow_p (value, 25);
5736       value >>= howto->rightshift;
5737       value &= howto->dst_mask;
5738       break;
5739 
5740     case R_MIPS_GOT_HI16:
5741     case R_MIPS_CALL_HI16:
5742     case R_MICROMIPS_GOT_HI16:
5743     case R_MICROMIPS_CALL_HI16:
5744       /* We're allowed to handle these two relocations identically.
5745 	 The dynamic linker is allowed to handle the CALL relocations
5746 	 differently by creating a lazy evaluation stub.  */
5747       value = g;
5748       value = mips_elf_high (value);
5749       value &= howto->dst_mask;
5750       break;
5751 
5752     case R_MIPS_GOT_LO16:
5753     case R_MIPS_CALL_LO16:
5754     case R_MICROMIPS_GOT_LO16:
5755     case R_MICROMIPS_CALL_LO16:
5756       value = g & howto->dst_mask;
5757       break;
5758 
5759     case R_MIPS_GOT_PAGE:
5760     case R_MICROMIPS_GOT_PAGE:
5761       value = mips_elf_got_page (abfd, input_bfd, info, symbol + addend, NULL);
5762       if (value == MINUS_ONE)
5763 	return bfd_reloc_outofrange;
5764       value = mips_elf_got_offset_from_index (info, abfd, input_bfd, value);
5765       overflowed_p = mips_elf_overflow_p (value, 16);
5766       break;
5767 
5768     case R_MIPS_GOT_OFST:
5769     case R_MICROMIPS_GOT_OFST:
5770       if (local_p)
5771 	mips_elf_got_page (abfd, input_bfd, info, symbol + addend, &value);
5772       else
5773 	value = addend;
5774       overflowed_p = mips_elf_overflow_p (value, 16);
5775       break;
5776 
5777     case R_MIPS_SUB:
5778     case R_MICROMIPS_SUB:
5779       value = symbol - addend;
5780       value &= howto->dst_mask;
5781       break;
5782 
5783     case R_MIPS_HIGHER:
5784     case R_MICROMIPS_HIGHER:
5785       value = mips_elf_higher (addend + symbol);
5786       value &= howto->dst_mask;
5787       break;
5788 
5789     case R_MIPS_HIGHEST:
5790     case R_MICROMIPS_HIGHEST:
5791       value = mips_elf_highest (addend + symbol);
5792       value &= howto->dst_mask;
5793       break;
5794 
5795     case R_MIPS_SCN_DISP:
5796     case R_MICROMIPS_SCN_DISP:
5797       value = symbol + addend - sec->output_offset;
5798       value &= howto->dst_mask;
5799       break;
5800 
5801     case R_MIPS_JALR:
5802     case R_MICROMIPS_JALR:
5803       /* This relocation is only a hint.  In some cases, we optimize
5804 	 it into a bal instruction.  But we don't try to optimize
5805 	 when the symbol does not resolve locally.  */
5806       if (h != NULL && !SYMBOL_CALLS_LOCAL (info, &h->root))
5807 	return bfd_reloc_continue;
5808       value = symbol + addend;
5809       break;
5810 
5811     case R_MIPS_PJUMP:
5812     case R_MIPS_GNU_VTINHERIT:
5813     case R_MIPS_GNU_VTENTRY:
5814       /* We don't do anything with these at present.  */
5815       return bfd_reloc_continue;
5816 
5817     default:
5818       /* An unrecognized relocation type.  */
5819       return bfd_reloc_notsupported;
5820     }
5821 
5822   /* Store the VALUE for our caller.  */
5823   *valuep = value;
5824   return overflowed_p ? bfd_reloc_overflow : bfd_reloc_ok;
5825 }
5826 
5827 /* Obtain the field relocated by RELOCATION.  */
5828 
5829 static bfd_vma
5830 mips_elf_obtain_contents (reloc_howto_type *howto,
5831 			  const Elf_Internal_Rela *relocation,
5832 			  bfd *input_bfd, bfd_byte *contents)
5833 {
5834   bfd_vma x;
5835   bfd_byte *location = contents + relocation->r_offset;
5836 
5837   /* Obtain the bytes.  */
5838   x = bfd_get ((8 * bfd_get_reloc_size (howto)), input_bfd, location);
5839 
5840   return x;
5841 }
5842 
5843 /* It has been determined that the result of the RELOCATION is the
5844    VALUE.  Use HOWTO to place VALUE into the output file at the
5845    appropriate position.  The SECTION is the section to which the
5846    relocation applies.
5847    CROSS_MODE_JUMP_P is true if the relocation field
5848    is a MIPS16 or microMIPS jump to standard MIPS code, or vice versa.
5849 
5850    Returns FALSE if anything goes wrong.  */
5851 
5852 static bfd_boolean
5853 mips_elf_perform_relocation (struct bfd_link_info *info,
5854 			     reloc_howto_type *howto,
5855 			     const Elf_Internal_Rela *relocation,
5856 			     bfd_vma value, bfd *input_bfd,
5857 			     asection *input_section, bfd_byte *contents,
5858 			     bfd_boolean cross_mode_jump_p)
5859 {
5860   bfd_vma x;
5861   bfd_byte *location;
5862   int r_type = ELF_R_TYPE (input_bfd, relocation->r_info);
5863 
5864   /* Figure out where the relocation is occurring.  */
5865   location = contents + relocation->r_offset;
5866 
5867   _bfd_mips_elf_reloc_unshuffle (input_bfd, r_type, FALSE, location);
5868 
5869   /* Obtain the current value.  */
5870   x = mips_elf_obtain_contents (howto, relocation, input_bfd, contents);
5871 
5872   /* Clear the field we are setting.  */
5873   x &= ~howto->dst_mask;
5874 
5875   /* Set the field.  */
5876   x |= (value & howto->dst_mask);
5877 
5878   /* If required, turn JAL into JALX.  */
5879   if (cross_mode_jump_p && jal_reloc_p (r_type))
5880     {
5881       bfd_boolean ok;
5882       bfd_vma opcode = x >> 26;
5883       bfd_vma jalx_opcode;
5884 
5885       /* Check to see if the opcode is already JAL or JALX.  */
5886       if (r_type == R_MIPS16_26)
5887 	{
5888 	  ok = ((opcode == 0x6) || (opcode == 0x7));
5889 	  jalx_opcode = 0x7;
5890 	}
5891       else if (r_type == R_MICROMIPS_26_S1)
5892 	{
5893 	  ok = ((opcode == 0x3d) || (opcode == 0x3c));
5894 	  jalx_opcode = 0x3c;
5895 	}
5896       else
5897 	{
5898 	  ok = ((opcode == 0x3) || (opcode == 0x1d));
5899 	  jalx_opcode = 0x1d;
5900 	}
5901 
5902       /* If the opcode is not JAL or JALX, there's a problem.  We cannot
5903          convert J or JALS to JALX.  */
5904       if (!ok)
5905 	{
5906 	  (*_bfd_error_handler)
5907 	    (_("%B: %A+0x%lx: Unsupported jump between ISA modes; consider recompiling with interlinking enabled."),
5908 	     input_bfd,
5909 	     input_section,
5910 	     (unsigned long) relocation->r_offset);
5911 	  bfd_set_error (bfd_error_bad_value);
5912 	  return FALSE;
5913 	}
5914 
5915       /* Make this the JALX opcode.  */
5916       x = (x & ~(0x3f << 26)) | (jalx_opcode << 26);
5917     }
5918 
5919   /* Try converting JAL to BAL and J(AL)R to B(AL), if the target is in
5920      range.  */
5921   if (!info->relocatable
5922       && !cross_mode_jump_p
5923       && ((JAL_TO_BAL_P (input_bfd)
5924 	   && r_type == R_MIPS_26
5925 	   && (x >> 26) == 0x3)		/* jal addr */
5926 	  || (JALR_TO_BAL_P (input_bfd)
5927 	      && r_type == R_MIPS_JALR
5928 	      && x == 0x0320f809)	/* jalr t9 */
5929 	  || (JR_TO_B_P (input_bfd)
5930 	      && r_type == R_MIPS_JALR
5931 	      && x == 0x03200008)))	/* jr t9 */
5932     {
5933       bfd_vma addr;
5934       bfd_vma dest;
5935       bfd_signed_vma off;
5936 
5937       addr = (input_section->output_section->vma
5938 	      + input_section->output_offset
5939 	      + relocation->r_offset
5940 	      + 4);
5941       if (r_type == R_MIPS_26)
5942 	dest = (value << 2) | ((addr >> 28) << 28);
5943       else
5944 	dest = value;
5945       off = dest - addr;
5946       if (off <= 0x1ffff && off >= -0x20000)
5947 	{
5948 	  if (x == 0x03200008)	/* jr t9 */
5949 	    x = 0x10000000 | (((bfd_vma) off >> 2) & 0xffff);   /* b addr */
5950 	  else
5951 	    x = 0x04110000 | (((bfd_vma) off >> 2) & 0xffff);   /* bal addr */
5952 	}
5953     }
5954 
5955   /* Put the value into the output.  */
5956   bfd_put (8 * bfd_get_reloc_size (howto), input_bfd, x, location);
5957 
5958   _bfd_mips_elf_reloc_shuffle (input_bfd, r_type, !info->relocatable,
5959 			       location);
5960 
5961   return TRUE;
5962 }
5963 
5964 /* Create a rel.dyn relocation for the dynamic linker to resolve.  REL
5965    is the original relocation, which is now being transformed into a
5966    dynamic relocation.  The ADDENDP is adjusted if necessary; the
5967    caller should store the result in place of the original addend.  */
5968 
5969 static bfd_boolean
5970 mips_elf_create_dynamic_relocation (bfd *output_bfd,
5971 				    struct bfd_link_info *info,
5972 				    const Elf_Internal_Rela *rel,
5973 				    struct mips_elf_link_hash_entry *h,
5974 				    asection *sec, bfd_vma symbol,
5975 				    bfd_vma *addendp, asection *input_section)
5976 {
5977   Elf_Internal_Rela outrel[3];
5978   asection *sreloc;
5979   bfd *dynobj;
5980   int r_type;
5981   long indx;
5982   bfd_boolean defined_p;
5983   struct mips_elf_link_hash_table *htab;
5984 
5985   htab = mips_elf_hash_table (info);
5986   BFD_ASSERT (htab != NULL);
5987 
5988   r_type = ELF_R_TYPE (output_bfd, rel->r_info);
5989   dynobj = elf_hash_table (info)->dynobj;
5990   sreloc = mips_elf_rel_dyn_section (info, FALSE);
5991   BFD_ASSERT (sreloc != NULL);
5992   BFD_ASSERT (sreloc->contents != NULL);
5993   BFD_ASSERT (sreloc->reloc_count * MIPS_ELF_REL_SIZE (output_bfd)
5994 	      < sreloc->size);
5995 
5996   outrel[0].r_offset =
5997     _bfd_elf_section_offset (output_bfd, info, input_section, rel[0].r_offset);
5998   if (ABI_64_P (output_bfd))
5999     {
6000       outrel[1].r_offset =
6001 	_bfd_elf_section_offset (output_bfd, info, input_section, rel[1].r_offset);
6002       outrel[2].r_offset =
6003 	_bfd_elf_section_offset (output_bfd, info, input_section, rel[2].r_offset);
6004     }
6005 
6006   if (outrel[0].r_offset == MINUS_ONE)
6007     /* The relocation field has been deleted.  */
6008     return TRUE;
6009 
6010   if (outrel[0].r_offset == MINUS_TWO)
6011     {
6012       /* The relocation field has been converted into a relative value of
6013 	 some sort.  Functions like _bfd_elf_write_section_eh_frame expect
6014 	 the field to be fully relocated, so add in the symbol's value.  */
6015       *addendp += symbol;
6016       return TRUE;
6017     }
6018 
6019   /* We must now calculate the dynamic symbol table index to use
6020      in the relocation.  */
6021   if (h != NULL && ! SYMBOL_REFERENCES_LOCAL (info, &h->root))
6022     {
6023       BFD_ASSERT (htab->is_vxworks || h->global_got_area != GGA_NONE);
6024       indx = h->root.dynindx;
6025       if (SGI_COMPAT (output_bfd))
6026 	defined_p = h->root.def_regular;
6027       else
6028 	/* ??? glibc's ld.so just adds the final GOT entry to the
6029 	   relocation field.  It therefore treats relocs against
6030 	   defined symbols in the same way as relocs against
6031 	   undefined symbols.  */
6032 	defined_p = FALSE;
6033     }
6034   else
6035     {
6036       if (sec != NULL && bfd_is_abs_section (sec))
6037 	indx = 0;
6038       else if (sec == NULL || sec->owner == NULL)
6039 	{
6040 	  bfd_set_error (bfd_error_bad_value);
6041 	  return FALSE;
6042 	}
6043       else
6044 	{
6045 	  indx = elf_section_data (sec->output_section)->dynindx;
6046 	  if (indx == 0)
6047 	    {
6048 	      asection *osec = htab->root.text_index_section;
6049 	      indx = elf_section_data (osec)->dynindx;
6050 	    }
6051 	  if (indx == 0)
6052 	    abort ();
6053 	}
6054 
6055       /* Instead of generating a relocation using the section
6056 	 symbol, we may as well make it a fully relative
6057 	 relocation.  We want to avoid generating relocations to
6058 	 local symbols because we used to generate them
6059 	 incorrectly, without adding the original symbol value,
6060 	 which is mandated by the ABI for section symbols.  In
6061 	 order to give dynamic loaders and applications time to
6062 	 phase out the incorrect use, we refrain from emitting
6063 	 section-relative relocations.  It's not like they're
6064 	 useful, after all.  This should be a bit more efficient
6065 	 as well.  */
6066       /* ??? Although this behavior is compatible with glibc's ld.so,
6067 	 the ABI says that relocations against STN_UNDEF should have
6068 	 a symbol value of 0.  Irix rld honors this, so relocations
6069 	 against STN_UNDEF have no effect.  */
6070       if (!SGI_COMPAT (output_bfd))
6071 	indx = 0;
6072       defined_p = TRUE;
6073     }
6074 
6075   /* If the relocation was previously an absolute relocation and
6076      this symbol will not be referred to by the relocation, we must
6077      adjust it by the value we give it in the dynamic symbol table.
6078      Otherwise leave the job up to the dynamic linker.  */
6079   if (defined_p && r_type != R_MIPS_REL32)
6080     *addendp += symbol;
6081 
6082   if (htab->is_vxworks)
6083     /* VxWorks uses non-relative relocations for this.  */
6084     outrel[0].r_info = ELF32_R_INFO (indx, R_MIPS_32);
6085   else
6086     /* The relocation is always an REL32 relocation because we don't
6087        know where the shared library will wind up at load-time.  */
6088     outrel[0].r_info = ELF_R_INFO (output_bfd, (unsigned long) indx,
6089 				   R_MIPS_REL32);
6090 
6091   /* For strict adherence to the ABI specification, we should
6092      generate a R_MIPS_64 relocation record by itself before the
6093      _REL32/_64 record as well, such that the addend is read in as
6094      a 64-bit value (REL32 is a 32-bit relocation, after all).
6095      However, since none of the existing ELF64 MIPS dynamic
6096      loaders seems to care, we don't waste space with these
6097      artificial relocations.  If this turns out to not be true,
6098      mips_elf_allocate_dynamic_relocation() should be tweaked so
6099      as to make room for a pair of dynamic relocations per
6100      invocation if ABI_64_P, and here we should generate an
6101      additional relocation record with R_MIPS_64 by itself for a
6102      NULL symbol before this relocation record.  */
6103   outrel[1].r_info = ELF_R_INFO (output_bfd, 0,
6104 				 ABI_64_P (output_bfd)
6105 				 ? R_MIPS_64
6106 				 : R_MIPS_NONE);
6107   outrel[2].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_NONE);
6108 
6109   /* Adjust the output offset of the relocation to reference the
6110      correct location in the output file.  */
6111   outrel[0].r_offset += (input_section->output_section->vma
6112 			 + input_section->output_offset);
6113   outrel[1].r_offset += (input_section->output_section->vma
6114 			 + input_section->output_offset);
6115   outrel[2].r_offset += (input_section->output_section->vma
6116 			 + input_section->output_offset);
6117 
6118   /* Put the relocation back out.  We have to use the special
6119      relocation outputter in the 64-bit case since the 64-bit
6120      relocation format is non-standard.  */
6121   if (ABI_64_P (output_bfd))
6122     {
6123       (*get_elf_backend_data (output_bfd)->s->swap_reloc_out)
6124 	(output_bfd, &outrel[0],
6125 	 (sreloc->contents
6126 	  + sreloc->reloc_count * sizeof (Elf64_Mips_External_Rel)));
6127     }
6128   else if (htab->is_vxworks)
6129     {
6130       /* VxWorks uses RELA rather than REL dynamic relocations.  */
6131       outrel[0].r_addend = *addendp;
6132       bfd_elf32_swap_reloca_out
6133 	(output_bfd, &outrel[0],
6134 	 (sreloc->contents
6135 	  + sreloc->reloc_count * sizeof (Elf32_External_Rela)));
6136     }
6137   else
6138     bfd_elf32_swap_reloc_out
6139       (output_bfd, &outrel[0],
6140        (sreloc->contents + sreloc->reloc_count * sizeof (Elf32_External_Rel)));
6141 
6142   /* We've now added another relocation.  */
6143   ++sreloc->reloc_count;
6144 
6145   /* Make sure the output section is writable.  The dynamic linker
6146      will be writing to it.  */
6147   elf_section_data (input_section->output_section)->this_hdr.sh_flags
6148     |= SHF_WRITE;
6149 
6150   /* On IRIX5, make an entry of compact relocation info.  */
6151   if (IRIX_COMPAT (output_bfd) == ict_irix5)
6152     {
6153       asection *scpt = bfd_get_linker_section (dynobj, ".compact_rel");
6154       bfd_byte *cr;
6155 
6156       if (scpt)
6157 	{
6158 	  Elf32_crinfo cptrel;
6159 
6160 	  mips_elf_set_cr_format (cptrel, CRF_MIPS_LONG);
6161 	  cptrel.vaddr = (rel->r_offset
6162 			  + input_section->output_section->vma
6163 			  + input_section->output_offset);
6164 	  if (r_type == R_MIPS_REL32)
6165 	    mips_elf_set_cr_type (cptrel, CRT_MIPS_REL32);
6166 	  else
6167 	    mips_elf_set_cr_type (cptrel, CRT_MIPS_WORD);
6168 	  mips_elf_set_cr_dist2to (cptrel, 0);
6169 	  cptrel.konst = *addendp;
6170 
6171 	  cr = (scpt->contents
6172 		+ sizeof (Elf32_External_compact_rel));
6173 	  mips_elf_set_cr_relvaddr (cptrel, 0);
6174 	  bfd_elf32_swap_crinfo_out (output_bfd, &cptrel,
6175 				     ((Elf32_External_crinfo *) cr
6176 				      + scpt->reloc_count));
6177 	  ++scpt->reloc_count;
6178 	}
6179     }
6180 
6181   /* If we've written this relocation for a readonly section,
6182      we need to set DF_TEXTREL again, so that we do not delete the
6183      DT_TEXTREL tag.  */
6184   if (MIPS_ELF_READONLY_SECTION (input_section))
6185     info->flags |= DF_TEXTREL;
6186 
6187   return TRUE;
6188 }
6189 
6190 /* Return the MACH for a MIPS e_flags value.  */
6191 
6192 unsigned long
6193 _bfd_elf_mips_mach (flagword flags)
6194 {
6195   switch (flags & EF_MIPS_MACH)
6196     {
6197     case E_MIPS_MACH_3900:
6198       return bfd_mach_mips3900;
6199 
6200     case E_MIPS_MACH_4010:
6201       return bfd_mach_mips4010;
6202 
6203     case E_MIPS_MACH_4100:
6204       return bfd_mach_mips4100;
6205 
6206     case E_MIPS_MACH_4111:
6207       return bfd_mach_mips4111;
6208 
6209     case E_MIPS_MACH_4120:
6210       return bfd_mach_mips4120;
6211 
6212     case E_MIPS_MACH_4650:
6213       return bfd_mach_mips4650;
6214 
6215     case E_MIPS_MACH_5400:
6216       return bfd_mach_mips5400;
6217 
6218     case E_MIPS_MACH_5500:
6219       return bfd_mach_mips5500;
6220 
6221     case E_MIPS_MACH_5900:
6222       return bfd_mach_mips5900;
6223 
6224     case E_MIPS_MACH_9000:
6225       return bfd_mach_mips9000;
6226 
6227     case E_MIPS_MACH_SB1:
6228       return bfd_mach_mips_sb1;
6229 
6230     case E_MIPS_MACH_LS2E:
6231       return bfd_mach_mips_loongson_2e;
6232 
6233     case E_MIPS_MACH_LS2F:
6234       return bfd_mach_mips_loongson_2f;
6235 
6236     case E_MIPS_MACH_LS3A:
6237       return bfd_mach_mips_loongson_3a;
6238 
6239     case E_MIPS_MACH_OCTEON2:
6240       return bfd_mach_mips_octeon2;
6241 
6242     case E_MIPS_MACH_OCTEON:
6243       return bfd_mach_mips_octeon;
6244 
6245     case E_MIPS_MACH_XLR:
6246       return bfd_mach_mips_xlr;
6247 
6248     default:
6249       switch (flags & EF_MIPS_ARCH)
6250 	{
6251 	default:
6252 	case E_MIPS_ARCH_1:
6253 	  return bfd_mach_mips3000;
6254 
6255 	case E_MIPS_ARCH_2:
6256 	  return bfd_mach_mips6000;
6257 
6258 	case E_MIPS_ARCH_3:
6259 	  return bfd_mach_mips4000;
6260 
6261 	case E_MIPS_ARCH_4:
6262 	  return bfd_mach_mips8000;
6263 
6264 	case E_MIPS_ARCH_5:
6265 	  return bfd_mach_mips5;
6266 
6267 	case E_MIPS_ARCH_32:
6268 	  return bfd_mach_mipsisa32;
6269 
6270 	case E_MIPS_ARCH_64:
6271 	  return bfd_mach_mipsisa64;
6272 
6273 	case E_MIPS_ARCH_32R2:
6274 	  return bfd_mach_mipsisa32r2;
6275 
6276 	case E_MIPS_ARCH_64R2:
6277 	  return bfd_mach_mipsisa64r2;
6278 	}
6279     }
6280 
6281   return 0;
6282 }
6283 
6284 /* Return printable name for ABI.  */
6285 
6286 static INLINE char *
6287 elf_mips_abi_name (bfd *abfd)
6288 {
6289   flagword flags;
6290 
6291   flags = elf_elfheader (abfd)->e_flags;
6292   switch (flags & EF_MIPS_ABI)
6293     {
6294     case 0:
6295       if (ABI_N32_P (abfd))
6296 	return "N32";
6297       else if (ABI_64_P (abfd))
6298 	return "64";
6299       else
6300 	return "none";
6301     case E_MIPS_ABI_O32:
6302       return "O32";
6303     case E_MIPS_ABI_O64:
6304       return "O64";
6305     case E_MIPS_ABI_EABI32:
6306       return "EABI32";
6307     case E_MIPS_ABI_EABI64:
6308       return "EABI64";
6309     default:
6310       return "unknown abi";
6311     }
6312 }
6313 
6314 /* MIPS ELF uses two common sections.  One is the usual one, and the
6315    other is for small objects.  All the small objects are kept
6316    together, and then referenced via the gp pointer, which yields
6317    faster assembler code.  This is what we use for the small common
6318    section.  This approach is copied from ecoff.c.  */
6319 static asection mips_elf_scom_section;
6320 static asymbol mips_elf_scom_symbol;
6321 static asymbol *mips_elf_scom_symbol_ptr;
6322 
6323 /* MIPS ELF also uses an acommon section, which represents an
6324    allocated common symbol which may be overridden by a
6325    definition in a shared library.  */
6326 static asection mips_elf_acom_section;
6327 static asymbol mips_elf_acom_symbol;
6328 static asymbol *mips_elf_acom_symbol_ptr;
6329 
6330 /* This is used for both the 32-bit and the 64-bit ABI.  */
6331 
6332 void
6333 _bfd_mips_elf_symbol_processing (bfd *abfd, asymbol *asym)
6334 {
6335   elf_symbol_type *elfsym;
6336 
6337   /* Handle the special MIPS section numbers that a symbol may use.  */
6338   elfsym = (elf_symbol_type *) asym;
6339   switch (elfsym->internal_elf_sym.st_shndx)
6340     {
6341     case SHN_MIPS_ACOMMON:
6342       /* This section is used in a dynamically linked executable file.
6343 	 It is an allocated common section.  The dynamic linker can
6344 	 either resolve these symbols to something in a shared
6345 	 library, or it can just leave them here.  For our purposes,
6346 	 we can consider these symbols to be in a new section.  */
6347       if (mips_elf_acom_section.name == NULL)
6348 	{
6349 	  /* Initialize the acommon section.  */
6350 	  mips_elf_acom_section.name = ".acommon";
6351 	  mips_elf_acom_section.flags = SEC_ALLOC;
6352 	  mips_elf_acom_section.output_section = &mips_elf_acom_section;
6353 	  mips_elf_acom_section.symbol = &mips_elf_acom_symbol;
6354 	  mips_elf_acom_section.symbol_ptr_ptr = &mips_elf_acom_symbol_ptr;
6355 	  mips_elf_acom_symbol.name = ".acommon";
6356 	  mips_elf_acom_symbol.flags = BSF_SECTION_SYM;
6357 	  mips_elf_acom_symbol.section = &mips_elf_acom_section;
6358 	  mips_elf_acom_symbol_ptr = &mips_elf_acom_symbol;
6359 	}
6360       asym->section = &mips_elf_acom_section;
6361       break;
6362 
6363     case SHN_COMMON:
6364       /* Common symbols less than the GP size are automatically
6365 	 treated as SHN_MIPS_SCOMMON symbols on IRIX5.  */
6366       if (asym->value > elf_gp_size (abfd)
6367 	  || ELF_ST_TYPE (elfsym->internal_elf_sym.st_info) == STT_TLS
6368 	  || IRIX_COMPAT (abfd) == ict_irix6)
6369 	break;
6370       /* Fall through.  */
6371     case SHN_MIPS_SCOMMON:
6372       if (mips_elf_scom_section.name == NULL)
6373 	{
6374 	  /* Initialize the small common section.  */
6375 	  mips_elf_scom_section.name = ".scommon";
6376 	  mips_elf_scom_section.flags = SEC_IS_COMMON;
6377 	  mips_elf_scom_section.output_section = &mips_elf_scom_section;
6378 	  mips_elf_scom_section.symbol = &mips_elf_scom_symbol;
6379 	  mips_elf_scom_section.symbol_ptr_ptr = &mips_elf_scom_symbol_ptr;
6380 	  mips_elf_scom_symbol.name = ".scommon";
6381 	  mips_elf_scom_symbol.flags = BSF_SECTION_SYM;
6382 	  mips_elf_scom_symbol.section = &mips_elf_scom_section;
6383 	  mips_elf_scom_symbol_ptr = &mips_elf_scom_symbol;
6384 	}
6385       asym->section = &mips_elf_scom_section;
6386       asym->value = elfsym->internal_elf_sym.st_size;
6387       break;
6388 
6389     case SHN_MIPS_SUNDEFINED:
6390       asym->section = bfd_und_section_ptr;
6391       break;
6392 
6393     case SHN_MIPS_TEXT:
6394       {
6395 	asection *section = bfd_get_section_by_name (abfd, ".text");
6396 
6397 	if (section != NULL)
6398 	  {
6399 	    asym->section = section;
6400 	    /* MIPS_TEXT is a bit special, the address is not an offset
6401 	       to the base of the .text section.  So substract the section
6402 	       base address to make it an offset.  */
6403 	    asym->value -= section->vma;
6404 	  }
6405       }
6406       break;
6407 
6408     case SHN_MIPS_DATA:
6409       {
6410 	asection *section = bfd_get_section_by_name (abfd, ".data");
6411 
6412 	if (section != NULL)
6413 	  {
6414 	    asym->section = section;
6415 	    /* MIPS_DATA is a bit special, the address is not an offset
6416 	       to the base of the .data section.  So substract the section
6417 	       base address to make it an offset.  */
6418 	    asym->value -= section->vma;
6419 	  }
6420       }
6421       break;
6422     }
6423 
6424   /* If this is an odd-valued function symbol, assume it's a MIPS16
6425      or microMIPS one.  */
6426   if (ELF_ST_TYPE (elfsym->internal_elf_sym.st_info) == STT_FUNC
6427       && (asym->value & 1) != 0)
6428     {
6429       asym->value--;
6430       if (MICROMIPS_P (abfd))
6431 	elfsym->internal_elf_sym.st_other
6432 	  = ELF_ST_SET_MICROMIPS (elfsym->internal_elf_sym.st_other);
6433       else
6434 	elfsym->internal_elf_sym.st_other
6435 	  = ELF_ST_SET_MIPS16 (elfsym->internal_elf_sym.st_other);
6436     }
6437 }
6438 
6439 /* Implement elf_backend_eh_frame_address_size.  This differs from
6440    the default in the way it handles EABI64.
6441 
6442    EABI64 was originally specified as an LP64 ABI, and that is what
6443    -mabi=eabi normally gives on a 64-bit target.  However, gcc has
6444    historically accepted the combination of -mabi=eabi and -mlong32,
6445    and this ILP32 variation has become semi-official over time.
6446    Both forms use elf32 and have pointer-sized FDE addresses.
6447 
6448    If an EABI object was generated by GCC 4.0 or above, it will have
6449    an empty .gcc_compiled_longXX section, where XX is the size of longs
6450    in bits.  Unfortunately, ILP32 objects generated by earlier compilers
6451    have no special marking to distinguish them from LP64 objects.
6452 
6453    We don't want users of the official LP64 ABI to be punished for the
6454    existence of the ILP32 variant, but at the same time, we don't want
6455    to mistakenly interpret pre-4.0 ILP32 objects as being LP64 objects.
6456    We therefore take the following approach:
6457 
6458       - If ABFD contains a .gcc_compiled_longXX section, use it to
6459         determine the pointer size.
6460 
6461       - Otherwise check the type of the first relocation.  Assume that
6462         the LP64 ABI is being used if the relocation is of type R_MIPS_64.
6463 
6464       - Otherwise punt.
6465 
6466    The second check is enough to detect LP64 objects generated by pre-4.0
6467    compilers because, in the kind of output generated by those compilers,
6468    the first relocation will be associated with either a CIE personality
6469    routine or an FDE start address.  Furthermore, the compilers never
6470    used a special (non-pointer) encoding for this ABI.
6471 
6472    Checking the relocation type should also be safe because there is no
6473    reason to use R_MIPS_64 in an ILP32 object.  Pre-4.0 compilers never
6474    did so.  */
6475 
6476 unsigned int
6477 _bfd_mips_elf_eh_frame_address_size (bfd *abfd, asection *sec)
6478 {
6479   if (elf_elfheader (abfd)->e_ident[EI_CLASS] == ELFCLASS64)
6480     return 8;
6481   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI64)
6482     {
6483       bfd_boolean long32_p, long64_p;
6484 
6485       long32_p = bfd_get_section_by_name (abfd, ".gcc_compiled_long32") != 0;
6486       long64_p = bfd_get_section_by_name (abfd, ".gcc_compiled_long64") != 0;
6487       if (long32_p && long64_p)
6488 	return 0;
6489       if (long32_p)
6490 	return 4;
6491       if (long64_p)
6492 	return 8;
6493 
6494       if (sec->reloc_count > 0
6495 	  && elf_section_data (sec)->relocs != NULL
6496 	  && (ELF32_R_TYPE (elf_section_data (sec)->relocs[0].r_info)
6497 	      == R_MIPS_64))
6498 	return 8;
6499 
6500       return 0;
6501     }
6502   return 4;
6503 }
6504 
6505 /* There appears to be a bug in the MIPSpro linker that causes GOT_DISP
6506    relocations against two unnamed section symbols to resolve to the
6507    same address.  For example, if we have code like:
6508 
6509 	lw	$4,%got_disp(.data)($gp)
6510 	lw	$25,%got_disp(.text)($gp)
6511 	jalr	$25
6512 
6513    then the linker will resolve both relocations to .data and the program
6514    will jump there rather than to .text.
6515 
6516    We can work around this problem by giving names to local section symbols.
6517    This is also what the MIPSpro tools do.  */
6518 
6519 bfd_boolean
6520 _bfd_mips_elf_name_local_section_symbols (bfd *abfd)
6521 {
6522   return SGI_COMPAT (abfd);
6523 }
6524 
6525 /* Work over a section just before writing it out.  This routine is
6526    used by both the 32-bit and the 64-bit ABI.  FIXME: We recognize
6527    sections that need the SHF_MIPS_GPREL flag by name; there has to be
6528    a better way.  */
6529 
6530 bfd_boolean
6531 _bfd_mips_elf_section_processing (bfd *abfd, Elf_Internal_Shdr *hdr)
6532 {
6533   if (hdr->sh_type == SHT_MIPS_REGINFO
6534       && hdr->sh_size > 0)
6535     {
6536       bfd_byte buf[4];
6537 
6538       BFD_ASSERT (hdr->sh_size == sizeof (Elf32_External_RegInfo));
6539       BFD_ASSERT (hdr->contents == NULL);
6540 
6541       if (bfd_seek (abfd,
6542 		    hdr->sh_offset + sizeof (Elf32_External_RegInfo) - 4,
6543 		    SEEK_SET) != 0)
6544 	return FALSE;
6545       H_PUT_32 (abfd, elf_gp (abfd), buf);
6546       if (bfd_bwrite (buf, 4, abfd) != 4)
6547 	return FALSE;
6548     }
6549 
6550   if (hdr->sh_type == SHT_MIPS_OPTIONS
6551       && hdr->bfd_section != NULL
6552       && mips_elf_section_data (hdr->bfd_section) != NULL
6553       && mips_elf_section_data (hdr->bfd_section)->u.tdata != NULL)
6554     {
6555       bfd_byte *contents, *l, *lend;
6556 
6557       /* We stored the section contents in the tdata field in the
6558 	 set_section_contents routine.  We save the section contents
6559 	 so that we don't have to read them again.
6560 	 At this point we know that elf_gp is set, so we can look
6561 	 through the section contents to see if there is an
6562 	 ODK_REGINFO structure.  */
6563 
6564       contents = mips_elf_section_data (hdr->bfd_section)->u.tdata;
6565       l = contents;
6566       lend = contents + hdr->sh_size;
6567       while (l + sizeof (Elf_External_Options) <= lend)
6568 	{
6569 	  Elf_Internal_Options intopt;
6570 
6571 	  bfd_mips_elf_swap_options_in (abfd, (Elf_External_Options *) l,
6572 					&intopt);
6573 	  if (intopt.size < sizeof (Elf_External_Options))
6574 	    {
6575 	      (*_bfd_error_handler)
6576 		(_("%B: Warning: bad `%s' option size %u smaller than its header"),
6577 		abfd, MIPS_ELF_OPTIONS_SECTION_NAME (abfd), intopt.size);
6578 	      break;
6579 	    }
6580 	  if (ABI_64_P (abfd) && intopt.kind == ODK_REGINFO)
6581 	    {
6582 	      bfd_byte buf[8];
6583 
6584 	      if (bfd_seek (abfd,
6585 			    (hdr->sh_offset
6586 			     + (l - contents)
6587 			     + sizeof (Elf_External_Options)
6588 			     + (sizeof (Elf64_External_RegInfo) - 8)),
6589 			     SEEK_SET) != 0)
6590 		return FALSE;
6591 	      H_PUT_64 (abfd, elf_gp (abfd), buf);
6592 	      if (bfd_bwrite (buf, 8, abfd) != 8)
6593 		return FALSE;
6594 	    }
6595 	  else if (intopt.kind == ODK_REGINFO)
6596 	    {
6597 	      bfd_byte buf[4];
6598 
6599 	      if (bfd_seek (abfd,
6600 			    (hdr->sh_offset
6601 			     + (l - contents)
6602 			     + sizeof (Elf_External_Options)
6603 			     + (sizeof (Elf32_External_RegInfo) - 4)),
6604 			    SEEK_SET) != 0)
6605 		return FALSE;
6606 	      H_PUT_32 (abfd, elf_gp (abfd), buf);
6607 	      if (bfd_bwrite (buf, 4, abfd) != 4)
6608 		return FALSE;
6609 	    }
6610 	  l += intopt.size;
6611 	}
6612     }
6613 
6614   if (hdr->bfd_section != NULL)
6615     {
6616       const char *name = bfd_get_section_name (abfd, hdr->bfd_section);
6617 
6618       /* .sbss is not handled specially here because the GNU/Linux
6619 	 prelinker can convert .sbss from NOBITS to PROGBITS and
6620 	 changing it back to NOBITS breaks the binary.  The entry in
6621 	 _bfd_mips_elf_special_sections will ensure the correct flags
6622 	 are set on .sbss if BFD creates it without reading it from an
6623 	 input file, and without special handling here the flags set
6624 	 on it in an input file will be followed.  */
6625       if (strcmp (name, ".sdata") == 0
6626 	  || strcmp (name, ".lit8") == 0
6627 	  || strcmp (name, ".lit4") == 0)
6628 	{
6629 	  hdr->sh_flags |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL;
6630 	  hdr->sh_type = SHT_PROGBITS;
6631 	}
6632       else if (strcmp (name, ".srdata") == 0)
6633 	{
6634 	  hdr->sh_flags |= SHF_ALLOC | SHF_MIPS_GPREL;
6635 	  hdr->sh_type = SHT_PROGBITS;
6636 	}
6637       else if (strcmp (name, ".compact_rel") == 0)
6638 	{
6639 	  hdr->sh_flags = 0;
6640 	  hdr->sh_type = SHT_PROGBITS;
6641 	}
6642       else if (strcmp (name, ".rtproc") == 0)
6643 	{
6644 	  if (hdr->sh_addralign != 0 && hdr->sh_entsize == 0)
6645 	    {
6646 	      unsigned int adjust;
6647 
6648 	      adjust = hdr->sh_size % hdr->sh_addralign;
6649 	      if (adjust != 0)
6650 		hdr->sh_size += hdr->sh_addralign - adjust;
6651 	    }
6652 	}
6653     }
6654 
6655   return TRUE;
6656 }
6657 
6658 /* Handle a MIPS specific section when reading an object file.  This
6659    is called when elfcode.h finds a section with an unknown type.
6660    This routine supports both the 32-bit and 64-bit ELF ABI.
6661 
6662    FIXME: We need to handle the SHF_MIPS_GPREL flag, but I'm not sure
6663    how to.  */
6664 
6665 bfd_boolean
6666 _bfd_mips_elf_section_from_shdr (bfd *abfd,
6667 				 Elf_Internal_Shdr *hdr,
6668 				 const char *name,
6669 				 int shindex)
6670 {
6671   flagword flags = 0;
6672 
6673   /* There ought to be a place to keep ELF backend specific flags, but
6674      at the moment there isn't one.  We just keep track of the
6675      sections by their name, instead.  Fortunately, the ABI gives
6676      suggested names for all the MIPS specific sections, so we will
6677      probably get away with this.  */
6678   switch (hdr->sh_type)
6679     {
6680     case SHT_MIPS_LIBLIST:
6681       if (strcmp (name, ".liblist") != 0)
6682 	return FALSE;
6683       break;
6684     case SHT_MIPS_MSYM:
6685       if (strcmp (name, ".msym") != 0)
6686 	return FALSE;
6687       break;
6688     case SHT_MIPS_CONFLICT:
6689       if (strcmp (name, ".conflict") != 0)
6690 	return FALSE;
6691       break;
6692     case SHT_MIPS_GPTAB:
6693       if (! CONST_STRNEQ (name, ".gptab."))
6694 	return FALSE;
6695       break;
6696     case SHT_MIPS_UCODE:
6697       if (strcmp (name, ".ucode") != 0)
6698 	return FALSE;
6699       break;
6700     case SHT_MIPS_DEBUG:
6701       if (strcmp (name, ".mdebug") != 0)
6702 	return FALSE;
6703       flags = SEC_DEBUGGING;
6704       break;
6705     case SHT_MIPS_REGINFO:
6706       if (strcmp (name, ".reginfo") != 0
6707 	  || hdr->sh_size != sizeof (Elf32_External_RegInfo))
6708 	return FALSE;
6709       flags = (SEC_LINK_ONCE | SEC_LINK_DUPLICATES_SAME_SIZE);
6710       break;
6711     case SHT_MIPS_IFACE:
6712       if (strcmp (name, ".MIPS.interfaces") != 0)
6713 	return FALSE;
6714       break;
6715     case SHT_MIPS_CONTENT:
6716       if (! CONST_STRNEQ (name, ".MIPS.content"))
6717 	return FALSE;
6718       break;
6719     case SHT_MIPS_OPTIONS:
6720       if (!MIPS_ELF_OPTIONS_SECTION_NAME_P (name))
6721 	return FALSE;
6722       break;
6723     case SHT_MIPS_DWARF:
6724       if (! CONST_STRNEQ (name, ".debug_")
6725           && ! CONST_STRNEQ (name, ".zdebug_"))
6726 	return FALSE;
6727       break;
6728     case SHT_MIPS_SYMBOL_LIB:
6729       if (strcmp (name, ".MIPS.symlib") != 0)
6730 	return FALSE;
6731       break;
6732     case SHT_MIPS_EVENTS:
6733       if (! CONST_STRNEQ (name, ".MIPS.events")
6734 	  && ! CONST_STRNEQ (name, ".MIPS.post_rel"))
6735 	return FALSE;
6736       break;
6737     default:
6738       break;
6739     }
6740 
6741   if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
6742     return FALSE;
6743 
6744   if (flags)
6745     {
6746       if (! bfd_set_section_flags (abfd, hdr->bfd_section,
6747 				   (bfd_get_section_flags (abfd,
6748 							   hdr->bfd_section)
6749 				    | flags)))
6750 	return FALSE;
6751     }
6752 
6753   /* FIXME: We should record sh_info for a .gptab section.  */
6754 
6755   /* For a .reginfo section, set the gp value in the tdata information
6756      from the contents of this section.  We need the gp value while
6757      processing relocs, so we just get it now.  The .reginfo section
6758      is not used in the 64-bit MIPS ELF ABI.  */
6759   if (hdr->sh_type == SHT_MIPS_REGINFO)
6760     {
6761       Elf32_External_RegInfo ext;
6762       Elf32_RegInfo s;
6763 
6764       if (! bfd_get_section_contents (abfd, hdr->bfd_section,
6765 				      &ext, 0, sizeof ext))
6766 	return FALSE;
6767       bfd_mips_elf32_swap_reginfo_in (abfd, &ext, &s);
6768       elf_gp (abfd) = s.ri_gp_value;
6769     }
6770 
6771   /* For a SHT_MIPS_OPTIONS section, look for a ODK_REGINFO entry, and
6772      set the gp value based on what we find.  We may see both
6773      SHT_MIPS_REGINFO and SHT_MIPS_OPTIONS/ODK_REGINFO; in that case,
6774      they should agree.  */
6775   if (hdr->sh_type == SHT_MIPS_OPTIONS)
6776     {
6777       bfd_byte *contents, *l, *lend;
6778 
6779       contents = bfd_malloc (hdr->sh_size);
6780       if (contents == NULL)
6781 	return FALSE;
6782       if (! bfd_get_section_contents (abfd, hdr->bfd_section, contents,
6783 				      0, hdr->sh_size))
6784 	{
6785 	  free (contents);
6786 	  return FALSE;
6787 	}
6788       l = contents;
6789       lend = contents + hdr->sh_size;
6790       while (l + sizeof (Elf_External_Options) <= lend)
6791 	{
6792 	  Elf_Internal_Options intopt;
6793 
6794 	  bfd_mips_elf_swap_options_in (abfd, (Elf_External_Options *) l,
6795 					&intopt);
6796 	  if (intopt.size < sizeof (Elf_External_Options))
6797 	    {
6798 	      (*_bfd_error_handler)
6799 		(_("%B: Warning: bad `%s' option size %u smaller than its header"),
6800 		abfd, MIPS_ELF_OPTIONS_SECTION_NAME (abfd), intopt.size);
6801 	      break;
6802 	    }
6803 	  if (ABI_64_P (abfd) && intopt.kind == ODK_REGINFO)
6804 	    {
6805 	      Elf64_Internal_RegInfo intreg;
6806 
6807 	      bfd_mips_elf64_swap_reginfo_in
6808 		(abfd,
6809 		 ((Elf64_External_RegInfo *)
6810 		  (l + sizeof (Elf_External_Options))),
6811 		 &intreg);
6812 	      elf_gp (abfd) = intreg.ri_gp_value;
6813 	    }
6814 	  else if (intopt.kind == ODK_REGINFO)
6815 	    {
6816 	      Elf32_RegInfo intreg;
6817 
6818 	      bfd_mips_elf32_swap_reginfo_in
6819 		(abfd,
6820 		 ((Elf32_External_RegInfo *)
6821 		  (l + sizeof (Elf_External_Options))),
6822 		 &intreg);
6823 	      elf_gp (abfd) = intreg.ri_gp_value;
6824 	    }
6825 	  l += intopt.size;
6826 	}
6827       free (contents);
6828     }
6829 
6830   return TRUE;
6831 }
6832 
6833 /* Set the correct type for a MIPS ELF section.  We do this by the
6834    section name, which is a hack, but ought to work.  This routine is
6835    used by both the 32-bit and the 64-bit ABI.  */
6836 
6837 bfd_boolean
6838 _bfd_mips_elf_fake_sections (bfd *abfd, Elf_Internal_Shdr *hdr, asection *sec)
6839 {
6840   const char *name = bfd_get_section_name (abfd, sec);
6841 
6842   if (strcmp (name, ".liblist") == 0)
6843     {
6844       hdr->sh_type = SHT_MIPS_LIBLIST;
6845       hdr->sh_info = sec->size / sizeof (Elf32_Lib);
6846       /* The sh_link field is set in final_write_processing.  */
6847     }
6848   else if (strcmp (name, ".conflict") == 0)
6849     hdr->sh_type = SHT_MIPS_CONFLICT;
6850   else if (CONST_STRNEQ (name, ".gptab."))
6851     {
6852       hdr->sh_type = SHT_MIPS_GPTAB;
6853       hdr->sh_entsize = sizeof (Elf32_External_gptab);
6854       /* The sh_info field is set in final_write_processing.  */
6855     }
6856   else if (strcmp (name, ".ucode") == 0)
6857     hdr->sh_type = SHT_MIPS_UCODE;
6858   else if (strcmp (name, ".mdebug") == 0)
6859     {
6860       hdr->sh_type = SHT_MIPS_DEBUG;
6861       /* In a shared object on IRIX 5.3, the .mdebug section has an
6862          entsize of 0.  FIXME: Does this matter?  */
6863       if (SGI_COMPAT (abfd) && (abfd->flags & DYNAMIC) != 0)
6864 	hdr->sh_entsize = 0;
6865       else
6866 	hdr->sh_entsize = 1;
6867     }
6868   else if (strcmp (name, ".reginfo") == 0)
6869     {
6870       hdr->sh_type = SHT_MIPS_REGINFO;
6871       /* In a shared object on IRIX 5.3, the .reginfo section has an
6872          entsize of 0x18.  FIXME: Does this matter?  */
6873       if (SGI_COMPAT (abfd))
6874 	{
6875 	  if ((abfd->flags & DYNAMIC) != 0)
6876 	    hdr->sh_entsize = sizeof (Elf32_External_RegInfo);
6877 	  else
6878 	    hdr->sh_entsize = 1;
6879 	}
6880       else
6881 	hdr->sh_entsize = sizeof (Elf32_External_RegInfo);
6882     }
6883   else if (SGI_COMPAT (abfd)
6884 	   && (strcmp (name, ".hash") == 0
6885 	       || strcmp (name, ".dynamic") == 0
6886 	       || strcmp (name, ".dynstr") == 0))
6887     {
6888       if (SGI_COMPAT (abfd))
6889 	hdr->sh_entsize = 0;
6890 #if 0
6891       /* This isn't how the IRIX6 linker behaves.  */
6892       hdr->sh_info = SIZEOF_MIPS_DYNSYM_SECNAMES;
6893 #endif
6894     }
6895   else if (strcmp (name, ".got") == 0
6896 	   || strcmp (name, ".srdata") == 0
6897 	   || strcmp (name, ".sdata") == 0
6898 	   || strcmp (name, ".sbss") == 0
6899 	   || strcmp (name, ".lit4") == 0
6900 	   || strcmp (name, ".lit8") == 0)
6901     hdr->sh_flags |= SHF_MIPS_GPREL;
6902   else if (strcmp (name, ".MIPS.interfaces") == 0)
6903     {
6904       hdr->sh_type = SHT_MIPS_IFACE;
6905       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
6906     }
6907   else if (CONST_STRNEQ (name, ".MIPS.content"))
6908     {
6909       hdr->sh_type = SHT_MIPS_CONTENT;
6910       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
6911       /* The sh_info field is set in final_write_processing.  */
6912     }
6913   else if (MIPS_ELF_OPTIONS_SECTION_NAME_P (name))
6914     {
6915       hdr->sh_type = SHT_MIPS_OPTIONS;
6916       hdr->sh_entsize = 1;
6917       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
6918     }
6919   else if (CONST_STRNEQ (name, ".debug_")
6920            || CONST_STRNEQ (name, ".zdebug_"))
6921     {
6922       hdr->sh_type = SHT_MIPS_DWARF;
6923 
6924       /* Irix facilities such as libexc expect a single .debug_frame
6925 	 per executable, the system ones have NOSTRIP set and the linker
6926 	 doesn't merge sections with different flags so ...  */
6927       if (SGI_COMPAT (abfd) && CONST_STRNEQ (name, ".debug_frame"))
6928 	hdr->sh_flags |= SHF_MIPS_NOSTRIP;
6929     }
6930   else if (strcmp (name, ".MIPS.symlib") == 0)
6931     {
6932       hdr->sh_type = SHT_MIPS_SYMBOL_LIB;
6933       /* The sh_link and sh_info fields are set in
6934          final_write_processing.  */
6935     }
6936   else if (CONST_STRNEQ (name, ".MIPS.events")
6937 	   || CONST_STRNEQ (name, ".MIPS.post_rel"))
6938     {
6939       hdr->sh_type = SHT_MIPS_EVENTS;
6940       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
6941       /* The sh_link field is set in final_write_processing.  */
6942     }
6943   else if (strcmp (name, ".msym") == 0)
6944     {
6945       hdr->sh_type = SHT_MIPS_MSYM;
6946       hdr->sh_flags |= SHF_ALLOC;
6947       hdr->sh_entsize = 8;
6948     }
6949 
6950   /* The generic elf_fake_sections will set up REL_HDR using the default
6951    kind of relocations.  We used to set up a second header for the
6952    non-default kind of relocations here, but only NewABI would use
6953    these, and the IRIX ld doesn't like resulting empty RELA sections.
6954    Thus we create those header only on demand now.  */
6955 
6956   return TRUE;
6957 }
6958 
6959 /* Given a BFD section, try to locate the corresponding ELF section
6960    index.  This is used by both the 32-bit and the 64-bit ABI.
6961    Actually, it's not clear to me that the 64-bit ABI supports these,
6962    but for non-PIC objects we will certainly want support for at least
6963    the .scommon section.  */
6964 
6965 bfd_boolean
6966 _bfd_mips_elf_section_from_bfd_section (bfd *abfd ATTRIBUTE_UNUSED,
6967 					asection *sec, int *retval)
6968 {
6969   if (strcmp (bfd_get_section_name (abfd, sec), ".scommon") == 0)
6970     {
6971       *retval = SHN_MIPS_SCOMMON;
6972       return TRUE;
6973     }
6974   if (strcmp (bfd_get_section_name (abfd, sec), ".acommon") == 0)
6975     {
6976       *retval = SHN_MIPS_ACOMMON;
6977       return TRUE;
6978     }
6979   return FALSE;
6980 }
6981 
6982 /* Hook called by the linker routine which adds symbols from an object
6983    file.  We must handle the special MIPS section numbers here.  */
6984 
6985 bfd_boolean
6986 _bfd_mips_elf_add_symbol_hook (bfd *abfd, struct bfd_link_info *info,
6987 			       Elf_Internal_Sym *sym, const char **namep,
6988 			       flagword *flagsp ATTRIBUTE_UNUSED,
6989 			       asection **secp, bfd_vma *valp)
6990 {
6991   if (SGI_COMPAT (abfd)
6992       && (abfd->flags & DYNAMIC) != 0
6993       && strcmp (*namep, "_rld_new_interface") == 0)
6994     {
6995       /* Skip IRIX5 rld entry name.  */
6996       *namep = NULL;
6997       return TRUE;
6998     }
6999 
7000   /* Shared objects may have a dynamic symbol '_gp_disp' defined as
7001      a SECTION *ABS*.  This causes ld to think it can resolve _gp_disp
7002      by setting a DT_NEEDED for the shared object.  Since _gp_disp is
7003      a magic symbol resolved by the linker, we ignore this bogus definition
7004      of _gp_disp.  New ABI objects do not suffer from this problem so this
7005      is not done for them. */
7006   if (!NEWABI_P(abfd)
7007       && (sym->st_shndx == SHN_ABS)
7008       && (strcmp (*namep, "_gp_disp") == 0))
7009     {
7010       *namep = NULL;
7011       return TRUE;
7012     }
7013 
7014   switch (sym->st_shndx)
7015     {
7016     case SHN_COMMON:
7017       /* Common symbols less than the GP size are automatically
7018 	 treated as SHN_MIPS_SCOMMON symbols.  */
7019       if (sym->st_size > elf_gp_size (abfd)
7020 	  || ELF_ST_TYPE (sym->st_info) == STT_TLS
7021 	  || IRIX_COMPAT (abfd) == ict_irix6)
7022 	break;
7023       /* Fall through.  */
7024     case SHN_MIPS_SCOMMON:
7025       *secp = bfd_make_section_old_way (abfd, ".scommon");
7026       (*secp)->flags |= SEC_IS_COMMON;
7027       *valp = sym->st_size;
7028       break;
7029 
7030     case SHN_MIPS_TEXT:
7031       /* This section is used in a shared object.  */
7032       if (mips_elf_tdata (abfd)->elf_text_section == NULL)
7033 	{
7034 	  asymbol *elf_text_symbol;
7035 	  asection *elf_text_section;
7036 	  bfd_size_type amt = sizeof (asection);
7037 
7038 	  elf_text_section = bfd_zalloc (abfd, amt);
7039 	  if (elf_text_section == NULL)
7040 	    return FALSE;
7041 
7042 	  amt = sizeof (asymbol);
7043 	  elf_text_symbol = bfd_zalloc (abfd, amt);
7044 	  if (elf_text_symbol == NULL)
7045 	    return FALSE;
7046 
7047 	  /* Initialize the section.  */
7048 
7049 	  mips_elf_tdata (abfd)->elf_text_section = elf_text_section;
7050 	  mips_elf_tdata (abfd)->elf_text_symbol = elf_text_symbol;
7051 
7052 	  elf_text_section->symbol = elf_text_symbol;
7053 	  elf_text_section->symbol_ptr_ptr = &mips_elf_tdata (abfd)->elf_text_symbol;
7054 
7055 	  elf_text_section->name = ".text";
7056 	  elf_text_section->flags = SEC_NO_FLAGS;
7057 	  elf_text_section->output_section = NULL;
7058 	  elf_text_section->owner = abfd;
7059 	  elf_text_symbol->name = ".text";
7060 	  elf_text_symbol->flags = BSF_SECTION_SYM | BSF_DYNAMIC;
7061 	  elf_text_symbol->section = elf_text_section;
7062 	}
7063       /* This code used to do *secp = bfd_und_section_ptr if
7064          info->shared.  I don't know why, and that doesn't make sense,
7065          so I took it out.  */
7066       *secp = mips_elf_tdata (abfd)->elf_text_section;
7067       break;
7068 
7069     case SHN_MIPS_ACOMMON:
7070       /* Fall through. XXX Can we treat this as allocated data?  */
7071     case SHN_MIPS_DATA:
7072       /* This section is used in a shared object.  */
7073       if (mips_elf_tdata (abfd)->elf_data_section == NULL)
7074 	{
7075 	  asymbol *elf_data_symbol;
7076 	  asection *elf_data_section;
7077 	  bfd_size_type amt = sizeof (asection);
7078 
7079 	  elf_data_section = bfd_zalloc (abfd, amt);
7080 	  if (elf_data_section == NULL)
7081 	    return FALSE;
7082 
7083 	  amt = sizeof (asymbol);
7084 	  elf_data_symbol = bfd_zalloc (abfd, amt);
7085 	  if (elf_data_symbol == NULL)
7086 	    return FALSE;
7087 
7088 	  /* Initialize the section.  */
7089 
7090 	  mips_elf_tdata (abfd)->elf_data_section = elf_data_section;
7091 	  mips_elf_tdata (abfd)->elf_data_symbol = elf_data_symbol;
7092 
7093 	  elf_data_section->symbol = elf_data_symbol;
7094 	  elf_data_section->symbol_ptr_ptr = &mips_elf_tdata (abfd)->elf_data_symbol;
7095 
7096 	  elf_data_section->name = ".data";
7097 	  elf_data_section->flags = SEC_NO_FLAGS;
7098 	  elf_data_section->output_section = NULL;
7099 	  elf_data_section->owner = abfd;
7100 	  elf_data_symbol->name = ".data";
7101 	  elf_data_symbol->flags = BSF_SECTION_SYM | BSF_DYNAMIC;
7102 	  elf_data_symbol->section = elf_data_section;
7103 	}
7104       /* This code used to do *secp = bfd_und_section_ptr if
7105          info->shared.  I don't know why, and that doesn't make sense,
7106          so I took it out.  */
7107       *secp = mips_elf_tdata (abfd)->elf_data_section;
7108       break;
7109 
7110     case SHN_MIPS_SUNDEFINED:
7111       *secp = bfd_und_section_ptr;
7112       break;
7113     }
7114 
7115   if (SGI_COMPAT (abfd)
7116       && ! info->shared
7117       && info->output_bfd->xvec == abfd->xvec
7118       && strcmp (*namep, "__rld_obj_head") == 0)
7119     {
7120       struct elf_link_hash_entry *h;
7121       struct bfd_link_hash_entry *bh;
7122 
7123       /* Mark __rld_obj_head as dynamic.  */
7124       bh = NULL;
7125       if (! (_bfd_generic_link_add_one_symbol
7126 	     (info, abfd, *namep, BSF_GLOBAL, *secp, *valp, NULL, FALSE,
7127 	      get_elf_backend_data (abfd)->collect, &bh)))
7128 	return FALSE;
7129 
7130       h = (struct elf_link_hash_entry *) bh;
7131       h->non_elf = 0;
7132       h->def_regular = 1;
7133       h->type = STT_OBJECT;
7134 
7135       if (! bfd_elf_link_record_dynamic_symbol (info, h))
7136 	return FALSE;
7137 
7138       mips_elf_hash_table (info)->use_rld_obj_head = TRUE;
7139       mips_elf_hash_table (info)->rld_symbol = h;
7140     }
7141 
7142   /* If this is a mips16 text symbol, add 1 to the value to make it
7143      odd.  This will cause something like .word SYM to come up with
7144      the right value when it is loaded into the PC.  */
7145   if (ELF_ST_IS_COMPRESSED (sym->st_other))
7146     ++*valp;
7147 
7148   return TRUE;
7149 }
7150 
7151 /* This hook function is called before the linker writes out a global
7152    symbol.  We mark symbols as small common if appropriate.  This is
7153    also where we undo the increment of the value for a mips16 symbol.  */
7154 
7155 int
7156 _bfd_mips_elf_link_output_symbol_hook
7157   (struct bfd_link_info *info ATTRIBUTE_UNUSED,
7158    const char *name ATTRIBUTE_UNUSED, Elf_Internal_Sym *sym,
7159    asection *input_sec, struct elf_link_hash_entry *h ATTRIBUTE_UNUSED)
7160 {
7161   /* If we see a common symbol, which implies a relocatable link, then
7162      if a symbol was small common in an input file, mark it as small
7163      common in the output file.  */
7164   if (sym->st_shndx == SHN_COMMON
7165       && strcmp (input_sec->name, ".scommon") == 0)
7166     sym->st_shndx = SHN_MIPS_SCOMMON;
7167 
7168   if (ELF_ST_IS_COMPRESSED (sym->st_other))
7169     sym->st_value &= ~1;
7170 
7171   return 1;
7172 }
7173 
7174 /* Functions for the dynamic linker.  */
7175 
7176 /* Create dynamic sections when linking against a dynamic object.  */
7177 
7178 bfd_boolean
7179 _bfd_mips_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
7180 {
7181   struct elf_link_hash_entry *h;
7182   struct bfd_link_hash_entry *bh;
7183   flagword flags;
7184   register asection *s;
7185   const char * const *namep;
7186   struct mips_elf_link_hash_table *htab;
7187 
7188   htab = mips_elf_hash_table (info);
7189   BFD_ASSERT (htab != NULL);
7190 
7191   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
7192 	   | SEC_LINKER_CREATED | SEC_READONLY);
7193 
7194   /* The psABI requires a read-only .dynamic section, but the VxWorks
7195      EABI doesn't.  */
7196   if (!htab->is_vxworks)
7197     {
7198       s = bfd_get_linker_section (abfd, ".dynamic");
7199       if (s != NULL)
7200 	{
7201 	  if (! bfd_set_section_flags (abfd, s, flags))
7202 	    return FALSE;
7203 	}
7204     }
7205 
7206   /* We need to create .got section.  */
7207   if (!mips_elf_create_got_section (abfd, info))
7208     return FALSE;
7209 
7210   if (! mips_elf_rel_dyn_section (info, TRUE))
7211     return FALSE;
7212 
7213   /* Create .stub section.  */
7214   s = bfd_make_section_anyway_with_flags (abfd,
7215 					  MIPS_ELF_STUB_SECTION_NAME (abfd),
7216 					  flags | SEC_CODE);
7217   if (s == NULL
7218       || ! bfd_set_section_alignment (abfd, s,
7219 				      MIPS_ELF_LOG_FILE_ALIGN (abfd)))
7220     return FALSE;
7221   htab->sstubs = s;
7222 
7223   if (!mips_elf_hash_table (info)->use_rld_obj_head
7224       && !info->shared
7225       && bfd_get_linker_section (abfd, ".rld_map") == NULL)
7226     {
7227       s = bfd_make_section_anyway_with_flags (abfd, ".rld_map",
7228 					      flags &~ (flagword) SEC_READONLY);
7229       if (s == NULL
7230 	  || ! bfd_set_section_alignment (abfd, s,
7231 					  MIPS_ELF_LOG_FILE_ALIGN (abfd)))
7232 	return FALSE;
7233     }
7234 
7235   /* On IRIX5, we adjust add some additional symbols and change the
7236      alignments of several sections.  There is no ABI documentation
7237      indicating that this is necessary on IRIX6, nor any evidence that
7238      the linker takes such action.  */
7239   if (IRIX_COMPAT (abfd) == ict_irix5)
7240     {
7241       for (namep = mips_elf_dynsym_rtproc_names; *namep != NULL; namep++)
7242 	{
7243 	  bh = NULL;
7244 	  if (! (_bfd_generic_link_add_one_symbol
7245 		 (info, abfd, *namep, BSF_GLOBAL, bfd_und_section_ptr, 0,
7246 		  NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
7247 	    return FALSE;
7248 
7249 	  h = (struct elf_link_hash_entry *) bh;
7250 	  h->non_elf = 0;
7251 	  h->def_regular = 1;
7252 	  h->type = STT_SECTION;
7253 
7254 	  if (! bfd_elf_link_record_dynamic_symbol (info, h))
7255 	    return FALSE;
7256 	}
7257 
7258       /* We need to create a .compact_rel section.  */
7259       if (SGI_COMPAT (abfd))
7260 	{
7261 	  if (!mips_elf_create_compact_rel_section (abfd, info))
7262 	    return FALSE;
7263 	}
7264 
7265       /* Change alignments of some sections.  */
7266       s = bfd_get_linker_section (abfd, ".hash");
7267       if (s != NULL)
7268 	bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7269       s = bfd_get_linker_section (abfd, ".dynsym");
7270       if (s != NULL)
7271 	bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7272       s = bfd_get_linker_section (abfd, ".dynstr");
7273       if (s != NULL)
7274 	bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7275       /* ??? */
7276       s = bfd_get_section_by_name (abfd, ".reginfo");
7277       if (s != NULL)
7278 	bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7279       s = bfd_get_linker_section (abfd, ".dynamic");
7280       if (s != NULL)
7281 	bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7282     }
7283 
7284   if (!info->shared)
7285     {
7286       const char *name;
7287 
7288       name = SGI_COMPAT (abfd) ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING";
7289       bh = NULL;
7290       if (!(_bfd_generic_link_add_one_symbol
7291 	    (info, abfd, name, BSF_GLOBAL, bfd_abs_section_ptr, 0,
7292 	     NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
7293 	return FALSE;
7294 
7295       h = (struct elf_link_hash_entry *) bh;
7296       h->non_elf = 0;
7297       h->def_regular = 1;
7298       h->type = STT_SECTION;
7299 
7300       if (! bfd_elf_link_record_dynamic_symbol (info, h))
7301 	return FALSE;
7302 
7303       if (! mips_elf_hash_table (info)->use_rld_obj_head)
7304 	{
7305 	  /* __rld_map is a four byte word located in the .data section
7306 	     and is filled in by the rtld to contain a pointer to
7307 	     the _r_debug structure. Its symbol value will be set in
7308 	     _bfd_mips_elf_finish_dynamic_symbol.  */
7309 	  s = bfd_get_linker_section (abfd, ".rld_map");
7310 	  BFD_ASSERT (s != NULL);
7311 
7312 	  name = SGI_COMPAT (abfd) ? "__rld_map" : "__RLD_MAP";
7313 	  bh = NULL;
7314 	  if (!(_bfd_generic_link_add_one_symbol
7315 		(info, abfd, name, BSF_GLOBAL, s, 0, NULL, FALSE,
7316 		 get_elf_backend_data (abfd)->collect, &bh)))
7317 	    return FALSE;
7318 
7319 	  h = (struct elf_link_hash_entry *) bh;
7320 	  h->non_elf = 0;
7321 	  h->def_regular = 1;
7322 	  h->type = STT_OBJECT;
7323 
7324 	  if (! bfd_elf_link_record_dynamic_symbol (info, h))
7325 	    return FALSE;
7326 	  mips_elf_hash_table (info)->rld_symbol = h;
7327 	}
7328     }
7329 
7330   /* Create the .plt, .rel(a).plt, .dynbss and .rel(a).bss sections.
7331      Also, on VxWorks, create the _PROCEDURE_LINKAGE_TABLE_ symbol.  */
7332   if (!_bfd_elf_create_dynamic_sections (abfd, info))
7333     return FALSE;
7334 
7335   /* Cache the sections created above.  */
7336   htab->splt = bfd_get_linker_section (abfd, ".plt");
7337   htab->sdynbss = bfd_get_linker_section (abfd, ".dynbss");
7338   if (htab->is_vxworks)
7339     {
7340       htab->srelbss = bfd_get_linker_section (abfd, ".rela.bss");
7341       htab->srelplt = bfd_get_linker_section (abfd, ".rela.plt");
7342     }
7343   else
7344     htab->srelplt = bfd_get_linker_section (abfd, ".rel.plt");
7345   if (!htab->sdynbss
7346       || (htab->is_vxworks && !htab->srelbss && !info->shared)
7347       || !htab->srelplt
7348       || !htab->splt)
7349     abort ();
7350 
7351   if (htab->is_vxworks)
7352     {
7353       /* Do the usual VxWorks handling.  */
7354       if (!elf_vxworks_create_dynamic_sections (abfd, info, &htab->srelplt2))
7355 	return FALSE;
7356 
7357       /* Work out the PLT sizes.  */
7358       if (info->shared)
7359 	{
7360 	  htab->plt_header_size
7361 	    = 4 * ARRAY_SIZE (mips_vxworks_shared_plt0_entry);
7362 	  htab->plt_entry_size
7363 	    = 4 * ARRAY_SIZE (mips_vxworks_shared_plt_entry);
7364 	}
7365       else
7366 	{
7367 	  htab->plt_header_size
7368 	    = 4 * ARRAY_SIZE (mips_vxworks_exec_plt0_entry);
7369 	  htab->plt_entry_size
7370 	    = 4 * ARRAY_SIZE (mips_vxworks_exec_plt_entry);
7371 	}
7372     }
7373   else if (!info->shared)
7374     {
7375       /* All variants of the plt0 entry are the same size.  */
7376       htab->plt_header_size = 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry);
7377       htab->plt_entry_size = 4 * ARRAY_SIZE (mips_exec_plt_entry);
7378     }
7379 
7380   return TRUE;
7381 }
7382 
7383 /* Return true if relocation REL against section SEC is a REL rather than
7384    RELA relocation.  RELOCS is the first relocation in the section and
7385    ABFD is the bfd that contains SEC.  */
7386 
7387 static bfd_boolean
7388 mips_elf_rel_relocation_p (bfd *abfd, asection *sec,
7389 			   const Elf_Internal_Rela *relocs,
7390 			   const Elf_Internal_Rela *rel)
7391 {
7392   Elf_Internal_Shdr *rel_hdr;
7393   const struct elf_backend_data *bed;
7394 
7395   /* To determine which flavor of relocation this is, we depend on the
7396      fact that the INPUT_SECTION's REL_HDR is read before RELA_HDR.  */
7397   rel_hdr = elf_section_data (sec)->rel.hdr;
7398   if (rel_hdr == NULL)
7399     return FALSE;
7400   bed = get_elf_backend_data (abfd);
7401   return ((size_t) (rel - relocs)
7402 	  < NUM_SHDR_ENTRIES (rel_hdr) * bed->s->int_rels_per_ext_rel);
7403 }
7404 
7405 /* Read the addend for REL relocation REL, which belongs to bfd ABFD.
7406    HOWTO is the relocation's howto and CONTENTS points to the contents
7407    of the section that REL is against.  */
7408 
7409 static bfd_vma
7410 mips_elf_read_rel_addend (bfd *abfd, const Elf_Internal_Rela *rel,
7411 			  reloc_howto_type *howto, bfd_byte *contents)
7412 {
7413   bfd_byte *location;
7414   unsigned int r_type;
7415   bfd_vma addend;
7416 
7417   r_type = ELF_R_TYPE (abfd, rel->r_info);
7418   location = contents + rel->r_offset;
7419 
7420   /* Get the addend, which is stored in the input file.  */
7421   _bfd_mips_elf_reloc_unshuffle (abfd, r_type, FALSE, location);
7422   addend = mips_elf_obtain_contents (howto, rel, abfd, contents);
7423   _bfd_mips_elf_reloc_shuffle (abfd, r_type, FALSE, location);
7424 
7425   return addend & howto->src_mask;
7426 }
7427 
7428 /* REL is a relocation in ABFD that needs a partnering LO16 relocation
7429    and *ADDEND is the addend for REL itself.  Look for the LO16 relocation
7430    and update *ADDEND with the final addend.  Return true on success
7431    or false if the LO16 could not be found.  RELEND is the exclusive
7432    upper bound on the relocations for REL's section.  */
7433 
7434 static bfd_boolean
7435 mips_elf_add_lo16_rel_addend (bfd *abfd,
7436 			      const Elf_Internal_Rela *rel,
7437 			      const Elf_Internal_Rela *relend,
7438 			      bfd_byte *contents, bfd_vma *addend)
7439 {
7440   unsigned int r_type, lo16_type;
7441   const Elf_Internal_Rela *lo16_relocation;
7442   reloc_howto_type *lo16_howto;
7443   bfd_vma l;
7444 
7445   r_type = ELF_R_TYPE (abfd, rel->r_info);
7446   if (mips16_reloc_p (r_type))
7447     lo16_type = R_MIPS16_LO16;
7448   else if (micromips_reloc_p (r_type))
7449     lo16_type = R_MICROMIPS_LO16;
7450   else
7451     lo16_type = R_MIPS_LO16;
7452 
7453   /* The combined value is the sum of the HI16 addend, left-shifted by
7454      sixteen bits, and the LO16 addend, sign extended.  (Usually, the
7455      code does a `lui' of the HI16 value, and then an `addiu' of the
7456      LO16 value.)
7457 
7458      Scan ahead to find a matching LO16 relocation.
7459 
7460      According to the MIPS ELF ABI, the R_MIPS_LO16 relocation must
7461      be immediately following.  However, for the IRIX6 ABI, the next
7462      relocation may be a composed relocation consisting of several
7463      relocations for the same address.  In that case, the R_MIPS_LO16
7464      relocation may occur as one of these.  We permit a similar
7465      extension in general, as that is useful for GCC.
7466 
7467      In some cases GCC dead code elimination removes the LO16 but keeps
7468      the corresponding HI16.  This is strictly speaking a violation of
7469      the ABI but not immediately harmful.  */
7470   lo16_relocation = mips_elf_next_relocation (abfd, lo16_type, rel, relend);
7471   if (lo16_relocation == NULL)
7472     return FALSE;
7473 
7474   /* Obtain the addend kept there.  */
7475   lo16_howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, lo16_type, FALSE);
7476   l = mips_elf_read_rel_addend (abfd, lo16_relocation, lo16_howto, contents);
7477 
7478   l <<= lo16_howto->rightshift;
7479   l = _bfd_mips_elf_sign_extend (l, 16);
7480 
7481   *addend <<= 16;
7482   *addend += l;
7483   return TRUE;
7484 }
7485 
7486 /* Try to read the contents of section SEC in bfd ABFD.  Return true and
7487    store the contents in *CONTENTS on success.  Assume that *CONTENTS
7488    already holds the contents if it is nonull on entry.  */
7489 
7490 static bfd_boolean
7491 mips_elf_get_section_contents (bfd *abfd, asection *sec, bfd_byte **contents)
7492 {
7493   if (*contents)
7494     return TRUE;
7495 
7496   /* Get cached copy if it exists.  */
7497   if (elf_section_data (sec)->this_hdr.contents != NULL)
7498     {
7499       *contents = elf_section_data (sec)->this_hdr.contents;
7500       return TRUE;
7501     }
7502 
7503   return bfd_malloc_and_get_section (abfd, sec, contents);
7504 }
7505 
7506 /* Look through the relocs for a section during the first phase, and
7507    allocate space in the global offset table.  */
7508 
7509 bfd_boolean
7510 _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
7511 			    asection *sec, const Elf_Internal_Rela *relocs)
7512 {
7513   const char *name;
7514   bfd *dynobj;
7515   Elf_Internal_Shdr *symtab_hdr;
7516   struct elf_link_hash_entry **sym_hashes;
7517   size_t extsymoff;
7518   const Elf_Internal_Rela *rel;
7519   const Elf_Internal_Rela *rel_end;
7520   asection *sreloc;
7521   const struct elf_backend_data *bed;
7522   struct mips_elf_link_hash_table *htab;
7523   bfd_byte *contents;
7524   bfd_vma addend;
7525   reloc_howto_type *howto;
7526 
7527   if (info->relocatable)
7528     return TRUE;
7529 
7530   htab = mips_elf_hash_table (info);
7531   BFD_ASSERT (htab != NULL);
7532 
7533   dynobj = elf_hash_table (info)->dynobj;
7534   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
7535   sym_hashes = elf_sym_hashes (abfd);
7536   extsymoff = (elf_bad_symtab (abfd)) ? 0 : symtab_hdr->sh_info;
7537 
7538   bed = get_elf_backend_data (abfd);
7539   rel_end = relocs + sec->reloc_count * bed->s->int_rels_per_ext_rel;
7540 
7541   /* Check for the mips16 stub sections.  */
7542 
7543   name = bfd_get_section_name (abfd, sec);
7544   if (FN_STUB_P (name))
7545     {
7546       unsigned long r_symndx;
7547 
7548       /* Look at the relocation information to figure out which symbol
7549          this is for.  */
7550 
7551       r_symndx = mips16_stub_symndx (bed, sec, relocs, rel_end);
7552       if (r_symndx == 0)
7553 	{
7554 	  (*_bfd_error_handler)
7555 	    (_("%B: Warning: cannot determine the target function for"
7556 	       " stub section `%s'"),
7557 	     abfd, name);
7558 	  bfd_set_error (bfd_error_bad_value);
7559 	  return FALSE;
7560 	}
7561 
7562       if (r_symndx < extsymoff
7563 	  || sym_hashes[r_symndx - extsymoff] == NULL)
7564 	{
7565 	  asection *o;
7566 
7567 	  /* This stub is for a local symbol.  This stub will only be
7568              needed if there is some relocation in this BFD, other
7569              than a 16 bit function call, which refers to this symbol.  */
7570 	  for (o = abfd->sections; o != NULL; o = o->next)
7571 	    {
7572 	      Elf_Internal_Rela *sec_relocs;
7573 	      const Elf_Internal_Rela *r, *rend;
7574 
7575 	      /* We can ignore stub sections when looking for relocs.  */
7576 	      if ((o->flags & SEC_RELOC) == 0
7577 		  || o->reloc_count == 0
7578 		  || section_allows_mips16_refs_p (o))
7579 		continue;
7580 
7581 	      sec_relocs
7582 		= _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
7583 					     info->keep_memory);
7584 	      if (sec_relocs == NULL)
7585 		return FALSE;
7586 
7587 	      rend = sec_relocs + o->reloc_count;
7588 	      for (r = sec_relocs; r < rend; r++)
7589 		if (ELF_R_SYM (abfd, r->r_info) == r_symndx
7590 		    && !mips16_call_reloc_p (ELF_R_TYPE (abfd, r->r_info)))
7591 		  break;
7592 
7593 	      if (elf_section_data (o)->relocs != sec_relocs)
7594 		free (sec_relocs);
7595 
7596 	      if (r < rend)
7597 		break;
7598 	    }
7599 
7600 	  if (o == NULL)
7601 	    {
7602 	      /* There is no non-call reloc for this stub, so we do
7603                  not need it.  Since this function is called before
7604                  the linker maps input sections to output sections, we
7605                  can easily discard it by setting the SEC_EXCLUDE
7606                  flag.  */
7607 	      sec->flags |= SEC_EXCLUDE;
7608 	      return TRUE;
7609 	    }
7610 
7611 	  /* Record this stub in an array of local symbol stubs for
7612              this BFD.  */
7613 	  if (mips_elf_tdata (abfd)->local_stubs == NULL)
7614 	    {
7615 	      unsigned long symcount;
7616 	      asection **n;
7617 	      bfd_size_type amt;
7618 
7619 	      if (elf_bad_symtab (abfd))
7620 		symcount = NUM_SHDR_ENTRIES (symtab_hdr);
7621 	      else
7622 		symcount = symtab_hdr->sh_info;
7623 	      amt = symcount * sizeof (asection *);
7624 	      n = bfd_zalloc (abfd, amt);
7625 	      if (n == NULL)
7626 		return FALSE;
7627 	      mips_elf_tdata (abfd)->local_stubs = n;
7628 	    }
7629 
7630 	  sec->flags |= SEC_KEEP;
7631 	  mips_elf_tdata (abfd)->local_stubs[r_symndx] = sec;
7632 
7633 	  /* We don't need to set mips16_stubs_seen in this case.
7634              That flag is used to see whether we need to look through
7635              the global symbol table for stubs.  We don't need to set
7636              it here, because we just have a local stub.  */
7637 	}
7638       else
7639 	{
7640 	  struct mips_elf_link_hash_entry *h;
7641 
7642 	  h = ((struct mips_elf_link_hash_entry *)
7643 	       sym_hashes[r_symndx - extsymoff]);
7644 
7645 	  while (h->root.root.type == bfd_link_hash_indirect
7646 		 || h->root.root.type == bfd_link_hash_warning)
7647 	    h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
7648 
7649 	  /* H is the symbol this stub is for.  */
7650 
7651 	  /* If we already have an appropriate stub for this function, we
7652 	     don't need another one, so we can discard this one.  Since
7653 	     this function is called before the linker maps input sections
7654 	     to output sections, we can easily discard it by setting the
7655 	     SEC_EXCLUDE flag.  */
7656 	  if (h->fn_stub != NULL)
7657 	    {
7658 	      sec->flags |= SEC_EXCLUDE;
7659 	      return TRUE;
7660 	    }
7661 
7662 	  sec->flags |= SEC_KEEP;
7663 	  h->fn_stub = sec;
7664 	  mips_elf_hash_table (info)->mips16_stubs_seen = TRUE;
7665 	}
7666     }
7667   else if (CALL_STUB_P (name) || CALL_FP_STUB_P (name))
7668     {
7669       unsigned long r_symndx;
7670       struct mips_elf_link_hash_entry *h;
7671       asection **loc;
7672 
7673       /* Look at the relocation information to figure out which symbol
7674          this is for.  */
7675 
7676       r_symndx = mips16_stub_symndx (bed, sec, relocs, rel_end);
7677       if (r_symndx == 0)
7678 	{
7679 	  (*_bfd_error_handler)
7680 	    (_("%B: Warning: cannot determine the target function for"
7681 	       " stub section `%s'"),
7682 	     abfd, name);
7683 	  bfd_set_error (bfd_error_bad_value);
7684 	  return FALSE;
7685 	}
7686 
7687       if (r_symndx < extsymoff
7688 	  || sym_hashes[r_symndx - extsymoff] == NULL)
7689 	{
7690 	  asection *o;
7691 
7692 	  /* This stub is for a local symbol.  This stub will only be
7693              needed if there is some relocation (R_MIPS16_26) in this BFD
7694              that refers to this symbol.  */
7695 	  for (o = abfd->sections; o != NULL; o = o->next)
7696 	    {
7697 	      Elf_Internal_Rela *sec_relocs;
7698 	      const Elf_Internal_Rela *r, *rend;
7699 
7700 	      /* We can ignore stub sections when looking for relocs.  */
7701 	      if ((o->flags & SEC_RELOC) == 0
7702 		  || o->reloc_count == 0
7703 		  || section_allows_mips16_refs_p (o))
7704 		continue;
7705 
7706 	      sec_relocs
7707 		= _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
7708 					     info->keep_memory);
7709 	      if (sec_relocs == NULL)
7710 		return FALSE;
7711 
7712 	      rend = sec_relocs + o->reloc_count;
7713 	      for (r = sec_relocs; r < rend; r++)
7714 		if (ELF_R_SYM (abfd, r->r_info) == r_symndx
7715 		    && ELF_R_TYPE (abfd, r->r_info) == R_MIPS16_26)
7716 		    break;
7717 
7718 	      if (elf_section_data (o)->relocs != sec_relocs)
7719 		free (sec_relocs);
7720 
7721 	      if (r < rend)
7722 		break;
7723 	    }
7724 
7725 	  if (o == NULL)
7726 	    {
7727 	      /* There is no non-call reloc for this stub, so we do
7728                  not need it.  Since this function is called before
7729                  the linker maps input sections to output sections, we
7730                  can easily discard it by setting the SEC_EXCLUDE
7731                  flag.  */
7732 	      sec->flags |= SEC_EXCLUDE;
7733 	      return TRUE;
7734 	    }
7735 
7736 	  /* Record this stub in an array of local symbol call_stubs for
7737              this BFD.  */
7738 	  if (mips_elf_tdata (abfd)->local_call_stubs == NULL)
7739 	    {
7740 	      unsigned long symcount;
7741 	      asection **n;
7742 	      bfd_size_type amt;
7743 
7744 	      if (elf_bad_symtab (abfd))
7745 		symcount = NUM_SHDR_ENTRIES (symtab_hdr);
7746 	      else
7747 		symcount = symtab_hdr->sh_info;
7748 	      amt = symcount * sizeof (asection *);
7749 	      n = bfd_zalloc (abfd, amt);
7750 	      if (n == NULL)
7751 		return FALSE;
7752 	      mips_elf_tdata (abfd)->local_call_stubs = n;
7753 	    }
7754 
7755 	  sec->flags |= SEC_KEEP;
7756 	  mips_elf_tdata (abfd)->local_call_stubs[r_symndx] = sec;
7757 
7758 	  /* We don't need to set mips16_stubs_seen in this case.
7759              That flag is used to see whether we need to look through
7760              the global symbol table for stubs.  We don't need to set
7761              it here, because we just have a local stub.  */
7762 	}
7763       else
7764 	{
7765 	  h = ((struct mips_elf_link_hash_entry *)
7766 	       sym_hashes[r_symndx - extsymoff]);
7767 
7768 	  /* H is the symbol this stub is for.  */
7769 
7770 	  if (CALL_FP_STUB_P (name))
7771 	    loc = &h->call_fp_stub;
7772 	  else
7773 	    loc = &h->call_stub;
7774 
7775 	  /* If we already have an appropriate stub for this function, we
7776 	     don't need another one, so we can discard this one.  Since
7777 	     this function is called before the linker maps input sections
7778 	     to output sections, we can easily discard it by setting the
7779 	     SEC_EXCLUDE flag.  */
7780 	  if (*loc != NULL)
7781 	    {
7782 	      sec->flags |= SEC_EXCLUDE;
7783 	      return TRUE;
7784 	    }
7785 
7786 	  sec->flags |= SEC_KEEP;
7787 	  *loc = sec;
7788 	  mips_elf_hash_table (info)->mips16_stubs_seen = TRUE;
7789 	}
7790     }
7791 
7792   sreloc = NULL;
7793   contents = NULL;
7794   for (rel = relocs; rel < rel_end; ++rel)
7795     {
7796       unsigned long r_symndx;
7797       unsigned int r_type;
7798       struct elf_link_hash_entry *h;
7799       bfd_boolean can_make_dynamic_p;
7800 
7801       r_symndx = ELF_R_SYM (abfd, rel->r_info);
7802       r_type = ELF_R_TYPE (abfd, rel->r_info);
7803 
7804       if (r_symndx < extsymoff)
7805 	h = NULL;
7806       else if (r_symndx >= extsymoff + NUM_SHDR_ENTRIES (symtab_hdr))
7807 	{
7808 	  (*_bfd_error_handler)
7809 	    (_("%B: Malformed reloc detected for section %s"),
7810 	     abfd, name);
7811 	  bfd_set_error (bfd_error_bad_value);
7812 	  return FALSE;
7813 	}
7814       else
7815 	{
7816 	  h = sym_hashes[r_symndx - extsymoff];
7817 	  while (h != NULL
7818 		 && (h->root.type == bfd_link_hash_indirect
7819 		     || h->root.type == bfd_link_hash_warning))
7820 	    h = (struct elf_link_hash_entry *) h->root.u.i.link;
7821 	}
7822 
7823       /* Set CAN_MAKE_DYNAMIC_P to true if we can convert this
7824 	 relocation into a dynamic one.  */
7825       can_make_dynamic_p = FALSE;
7826       switch (r_type)
7827 	{
7828 	case R_MIPS_GOT16:
7829 	case R_MIPS_CALL16:
7830 	case R_MIPS_CALL_HI16:
7831 	case R_MIPS_CALL_LO16:
7832 	case R_MIPS_GOT_HI16:
7833 	case R_MIPS_GOT_LO16:
7834 	case R_MIPS_GOT_PAGE:
7835 	case R_MIPS_GOT_OFST:
7836 	case R_MIPS_GOT_DISP:
7837 	case R_MIPS_TLS_GOTTPREL:
7838 	case R_MIPS_TLS_GD:
7839 	case R_MIPS_TLS_LDM:
7840 	case R_MIPS16_GOT16:
7841 	case R_MIPS16_CALL16:
7842 	case R_MIPS16_TLS_GOTTPREL:
7843 	case R_MIPS16_TLS_GD:
7844 	case R_MIPS16_TLS_LDM:
7845 	case R_MICROMIPS_GOT16:
7846 	case R_MICROMIPS_CALL16:
7847 	case R_MICROMIPS_CALL_HI16:
7848 	case R_MICROMIPS_CALL_LO16:
7849 	case R_MICROMIPS_GOT_HI16:
7850 	case R_MICROMIPS_GOT_LO16:
7851 	case R_MICROMIPS_GOT_PAGE:
7852 	case R_MICROMIPS_GOT_OFST:
7853 	case R_MICROMIPS_GOT_DISP:
7854 	case R_MICROMIPS_TLS_GOTTPREL:
7855 	case R_MICROMIPS_TLS_GD:
7856 	case R_MICROMIPS_TLS_LDM:
7857 	  if (dynobj == NULL)
7858 	    elf_hash_table (info)->dynobj = dynobj = abfd;
7859 	  if (!mips_elf_create_got_section (dynobj, info))
7860 	    return FALSE;
7861 	  if (htab->is_vxworks && !info->shared)
7862 	    {
7863 	      (*_bfd_error_handler)
7864 		(_("%B: GOT reloc at 0x%lx not expected in executables"),
7865 		 abfd, (unsigned long) rel->r_offset);
7866 	      bfd_set_error (bfd_error_bad_value);
7867 	      return FALSE;
7868 	    }
7869 	  break;
7870 
7871 	  /* This is just a hint; it can safely be ignored.  Don't set
7872 	     has_static_relocs for the corresponding symbol.  */
7873 	case R_MIPS_JALR:
7874 	case R_MICROMIPS_JALR:
7875 	  break;
7876 
7877 	case R_MIPS_32:
7878 	case R_MIPS_REL32:
7879 	case R_MIPS_64:
7880 	  /* In VxWorks executables, references to external symbols
7881 	     must be handled using copy relocs or PLT entries; it is not
7882 	     possible to convert this relocation into a dynamic one.
7883 
7884 	     For executables that use PLTs and copy-relocs, we have a
7885 	     choice between converting the relocation into a dynamic
7886 	     one or using copy relocations or PLT entries.  It is
7887 	     usually better to do the former, unless the relocation is
7888 	     against a read-only section.  */
7889 	  if ((info->shared
7890 	       || (h != NULL
7891 		   && !htab->is_vxworks
7892 		   && strcmp (h->root.root.string, "__gnu_local_gp") != 0
7893 		   && !(!info->nocopyreloc
7894 			&& !PIC_OBJECT_P (abfd)
7895 			&& MIPS_ELF_READONLY_SECTION (sec))))
7896 	      && (sec->flags & SEC_ALLOC) != 0)
7897 	    {
7898 	      can_make_dynamic_p = TRUE;
7899 	      if (dynobj == NULL)
7900 		elf_hash_table (info)->dynobj = dynobj = abfd;
7901 	      break;
7902 	    }
7903 	  /* For sections that are not SEC_ALLOC a copy reloc would be
7904 	     output if possible (implying questionable semantics for
7905 	     read-only data objects) or otherwise the final link would
7906 	     fail as ld.so will not process them and could not therefore
7907 	     handle any outstanding dynamic relocations.
7908 
7909 	     For such sections that are also SEC_DEBUGGING, we can avoid
7910 	     these problems by simply ignoring any relocs as these
7911 	     sections have a predefined use and we know it is safe to do
7912 	     so.
7913 
7914 	     This is needed in cases such as a global symbol definition
7915 	     in a shared library causing a common symbol from an object
7916 	     file to be converted to an undefined reference.  If that
7917 	     happens, then all the relocations against this symbol from
7918 	     SEC_DEBUGGING sections in the object file will resolve to
7919 	     nil.  */
7920 	  if ((sec->flags & SEC_DEBUGGING) != 0)
7921 	    break;
7922 	  /* Fall through.  */
7923 
7924 	default:
7925 	  /* Most static relocations require pointer equality, except
7926 	     for branches.  */
7927 	  if (h)
7928 	    h->pointer_equality_needed = TRUE;
7929 	  /* Fall through.  */
7930 
7931 	case R_MIPS_26:
7932 	case R_MIPS_PC16:
7933 	case R_MIPS16_26:
7934 	case R_MICROMIPS_26_S1:
7935 	case R_MICROMIPS_PC7_S1:
7936 	case R_MICROMIPS_PC10_S1:
7937 	case R_MICROMIPS_PC16_S1:
7938 	case R_MICROMIPS_PC23_S2:
7939 	  if (h)
7940 	    ((struct mips_elf_link_hash_entry *) h)->has_static_relocs = TRUE;
7941 	  break;
7942 	}
7943 
7944       if (h)
7945 	{
7946 	  /* Relocations against the special VxWorks __GOTT_BASE__ and
7947 	     __GOTT_INDEX__ symbols must be left to the loader.  Allocate
7948 	     room for them in .rela.dyn.  */
7949 	  if (is_gott_symbol (info, h))
7950 	    {
7951 	      if (sreloc == NULL)
7952 		{
7953 		  sreloc = mips_elf_rel_dyn_section (info, TRUE);
7954 		  if (sreloc == NULL)
7955 		    return FALSE;
7956 		}
7957 	      mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
7958 	      if (MIPS_ELF_READONLY_SECTION (sec))
7959 		/* We tell the dynamic linker that there are
7960 		   relocations against the text segment.  */
7961 		info->flags |= DF_TEXTREL;
7962 	    }
7963 	}
7964       else if (call_lo16_reloc_p (r_type)
7965 	       || got_lo16_reloc_p (r_type)
7966 	       || got_disp_reloc_p (r_type)
7967 	       || (got16_reloc_p (r_type) && htab->is_vxworks))
7968 	{
7969 	  /* We may need a local GOT entry for this relocation.  We
7970 	     don't count R_MIPS_GOT_PAGE because we can estimate the
7971 	     maximum number of pages needed by looking at the size of
7972 	     the segment.  Similar comments apply to R_MIPS*_GOT16 and
7973 	     R_MIPS*_CALL16, except on VxWorks, where GOT relocations
7974 	     always evaluate to "G".  We don't count R_MIPS_GOT_HI16, or
7975 	     R_MIPS_CALL_HI16 because these are always followed by an
7976 	     R_MIPS_GOT_LO16 or R_MIPS_CALL_LO16.  */
7977 	  if (!mips_elf_record_local_got_symbol (abfd, r_symndx,
7978 						 rel->r_addend, info, r_type))
7979 	    return FALSE;
7980 	}
7981 
7982       if (h != NULL
7983 	  && mips_elf_relocation_needs_la25_stub (abfd, r_type,
7984 						  ELF_ST_IS_MIPS16 (h->other)))
7985 	((struct mips_elf_link_hash_entry *) h)->has_nonpic_branches = TRUE;
7986 
7987       switch (r_type)
7988 	{
7989 	case R_MIPS_CALL16:
7990 	case R_MIPS16_CALL16:
7991 	case R_MICROMIPS_CALL16:
7992 	  if (h == NULL)
7993 	    {
7994 	      (*_bfd_error_handler)
7995 		(_("%B: CALL16 reloc at 0x%lx not against global symbol"),
7996 		 abfd, (unsigned long) rel->r_offset);
7997 	      bfd_set_error (bfd_error_bad_value);
7998 	      return FALSE;
7999 	    }
8000 	  /* Fall through.  */
8001 
8002 	case R_MIPS_CALL_HI16:
8003 	case R_MIPS_CALL_LO16:
8004 	case R_MICROMIPS_CALL_HI16:
8005 	case R_MICROMIPS_CALL_LO16:
8006 	  if (h != NULL)
8007 	    {
8008 	      /* Make sure there is room in the regular GOT to hold the
8009 		 function's address.  We may eliminate it in favour of
8010 		 a .got.plt entry later; see mips_elf_count_got_symbols.  */
8011 	      if (!mips_elf_record_global_got_symbol (h, abfd, info, TRUE,
8012 						      r_type))
8013 		return FALSE;
8014 
8015 	      /* We need a stub, not a plt entry for the undefined
8016 		 function.  But we record it as if it needs plt.  See
8017 		 _bfd_elf_adjust_dynamic_symbol.  */
8018 	      h->needs_plt = 1;
8019 	      h->type = STT_FUNC;
8020 	    }
8021 	  break;
8022 
8023 	case R_MIPS_GOT_PAGE:
8024 	case R_MICROMIPS_GOT_PAGE:
8025 	case R_MIPS16_GOT16:
8026 	case R_MIPS_GOT16:
8027 	case R_MIPS_GOT_HI16:
8028 	case R_MIPS_GOT_LO16:
8029 	case R_MICROMIPS_GOT16:
8030 	case R_MICROMIPS_GOT_HI16:
8031 	case R_MICROMIPS_GOT_LO16:
8032 	  if (!h || got_page_reloc_p (r_type))
8033 	    {
8034 	      /* This relocation needs (or may need, if h != NULL) a
8035 		 page entry in the GOT.  For R_MIPS_GOT_PAGE we do not
8036 		 know for sure until we know whether the symbol is
8037 		 preemptible.  */
8038 	      if (mips_elf_rel_relocation_p (abfd, sec, relocs, rel))
8039 		{
8040 		  if (!mips_elf_get_section_contents (abfd, sec, &contents))
8041 		    return FALSE;
8042 		  howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, FALSE);
8043 		  addend = mips_elf_read_rel_addend (abfd, rel,
8044 						     howto, contents);
8045 		  if (got16_reloc_p (r_type))
8046 		    mips_elf_add_lo16_rel_addend (abfd, rel, rel_end,
8047 						  contents, &addend);
8048 		  else
8049 		    addend <<= howto->rightshift;
8050 		}
8051 	      else
8052 		addend = rel->r_addend;
8053 	      if (!mips_elf_record_got_page_ref (info, abfd, r_symndx,
8054 						 h, addend))
8055 		return FALSE;
8056 
8057 	      if (h)
8058 		{
8059 		  struct mips_elf_link_hash_entry *hmips =
8060 		    (struct mips_elf_link_hash_entry *) h;
8061 
8062 		  /* This symbol is definitely not overridable.  */
8063 		  if (hmips->root.def_regular
8064 		      && ! (info->shared && ! info->symbolic
8065 			    && ! hmips->root.forced_local))
8066 		    h = NULL;
8067 		}
8068 	    }
8069 	  /* If this is a global, overridable symbol, GOT_PAGE will
8070 	     decay to GOT_DISP, so we'll need a GOT entry for it.  */
8071 	  /* Fall through.  */
8072 
8073 	case R_MIPS_GOT_DISP:
8074 	case R_MICROMIPS_GOT_DISP:
8075 	  if (h && !mips_elf_record_global_got_symbol (h, abfd, info,
8076 						       FALSE, r_type))
8077 	    return FALSE;
8078 	  break;
8079 
8080 	case R_MIPS_TLS_GOTTPREL:
8081 	case R_MIPS16_TLS_GOTTPREL:
8082 	case R_MICROMIPS_TLS_GOTTPREL:
8083 	  if (info->shared)
8084 	    info->flags |= DF_STATIC_TLS;
8085 	  /* Fall through */
8086 
8087 	case R_MIPS_TLS_LDM:
8088 	case R_MIPS16_TLS_LDM:
8089 	case R_MICROMIPS_TLS_LDM:
8090 	  if (tls_ldm_reloc_p (r_type))
8091 	    {
8092 	      r_symndx = STN_UNDEF;
8093 	      h = NULL;
8094 	    }
8095 	  /* Fall through */
8096 
8097 	case R_MIPS_TLS_GD:
8098 	case R_MIPS16_TLS_GD:
8099 	case R_MICROMIPS_TLS_GD:
8100 	  /* This symbol requires a global offset table entry, or two
8101 	     for TLS GD relocations.  */
8102 	  if (h != NULL)
8103 	    {
8104 	      if (!mips_elf_record_global_got_symbol (h, abfd, info,
8105 						      FALSE, r_type))
8106 		return FALSE;
8107 	    }
8108 	  else
8109 	    {
8110 	      if (!mips_elf_record_local_got_symbol (abfd, r_symndx,
8111 						     rel->r_addend,
8112 						     info, r_type))
8113 		return FALSE;
8114 	    }
8115 	  break;
8116 
8117 	case R_MIPS_32:
8118 	case R_MIPS_REL32:
8119 	case R_MIPS_64:
8120 	  /* In VxWorks executables, references to external symbols
8121 	     are handled using copy relocs or PLT stubs, so there's
8122 	     no need to add a .rela.dyn entry for this relocation.  */
8123 	  if (can_make_dynamic_p)
8124 	    {
8125 	      if (sreloc == NULL)
8126 		{
8127 		  sreloc = mips_elf_rel_dyn_section (info, TRUE);
8128 		  if (sreloc == NULL)
8129 		    return FALSE;
8130 		}
8131 	      if (info->shared && h == NULL)
8132 		{
8133 		  /* When creating a shared object, we must copy these
8134 		     reloc types into the output file as R_MIPS_REL32
8135 		     relocs.  Make room for this reloc in .rel(a).dyn.  */
8136 		  mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
8137 		  if (MIPS_ELF_READONLY_SECTION (sec))
8138 		    /* We tell the dynamic linker that there are
8139 		       relocations against the text segment.  */
8140 		    info->flags |= DF_TEXTREL;
8141 		}
8142 	      else
8143 		{
8144 		  struct mips_elf_link_hash_entry *hmips;
8145 
8146 		  /* For a shared object, we must copy this relocation
8147 		     unless the symbol turns out to be undefined and
8148 		     weak with non-default visibility, in which case
8149 		     it will be left as zero.
8150 
8151 		     We could elide R_MIPS_REL32 for locally binding symbols
8152 		     in shared libraries, but do not yet do so.
8153 
8154 		     For an executable, we only need to copy this
8155 		     reloc if the symbol is defined in a dynamic
8156 		     object.  */
8157 		  hmips = (struct mips_elf_link_hash_entry *) h;
8158 		  ++hmips->possibly_dynamic_relocs;
8159 		  if (MIPS_ELF_READONLY_SECTION (sec))
8160 		    /* We need it to tell the dynamic linker if there
8161 		       are relocations against the text segment.  */
8162 		    hmips->readonly_reloc = TRUE;
8163 		}
8164 	    }
8165 
8166 	  if (SGI_COMPAT (abfd))
8167 	    mips_elf_hash_table (info)->compact_rel_size +=
8168 	      sizeof (Elf32_External_crinfo);
8169 	  break;
8170 
8171 	case R_MIPS_26:
8172 	case R_MIPS_GPREL16:
8173 	case R_MIPS_LITERAL:
8174 	case R_MIPS_GPREL32:
8175 	case R_MICROMIPS_26_S1:
8176 	case R_MICROMIPS_GPREL16:
8177 	case R_MICROMIPS_LITERAL:
8178 	case R_MICROMIPS_GPREL7_S2:
8179 	  if (SGI_COMPAT (abfd))
8180 	    mips_elf_hash_table (info)->compact_rel_size +=
8181 	      sizeof (Elf32_External_crinfo);
8182 	  break;
8183 
8184 	  /* This relocation describes the C++ object vtable hierarchy.
8185 	     Reconstruct it for later use during GC.  */
8186 	case R_MIPS_GNU_VTINHERIT:
8187 	  if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
8188 	    return FALSE;
8189 	  break;
8190 
8191 	  /* This relocation describes which C++ vtable entries are actually
8192 	     used.  Record for later use during GC.  */
8193 	case R_MIPS_GNU_VTENTRY:
8194 	  BFD_ASSERT (h != NULL);
8195 	  if (h != NULL
8196 	      && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset))
8197 	    return FALSE;
8198 	  break;
8199 
8200 	default:
8201 	  break;
8202 	}
8203 
8204       /* We must not create a stub for a symbol that has relocations
8205 	 related to taking the function's address.  This doesn't apply to
8206 	 VxWorks, where CALL relocs refer to a .got.plt entry instead of
8207 	 a normal .got entry.  */
8208       if (!htab->is_vxworks && h != NULL)
8209 	switch (r_type)
8210 	  {
8211 	  default:
8212 	    ((struct mips_elf_link_hash_entry *) h)->no_fn_stub = TRUE;
8213 	    break;
8214 	  case R_MIPS16_CALL16:
8215 	  case R_MIPS_CALL16:
8216 	  case R_MIPS_CALL_HI16:
8217 	  case R_MIPS_CALL_LO16:
8218 	  case R_MIPS_JALR:
8219 	  case R_MICROMIPS_CALL16:
8220 	  case R_MICROMIPS_CALL_HI16:
8221 	  case R_MICROMIPS_CALL_LO16:
8222 	  case R_MICROMIPS_JALR:
8223 	    break;
8224 	  }
8225 
8226       /* See if this reloc would need to refer to a MIPS16 hard-float stub,
8227 	 if there is one.  We only need to handle global symbols here;
8228 	 we decide whether to keep or delete stubs for local symbols
8229 	 when processing the stub's relocations.  */
8230       if (h != NULL
8231 	  && !mips16_call_reloc_p (r_type)
8232 	  && !section_allows_mips16_refs_p (sec))
8233 	{
8234 	  struct mips_elf_link_hash_entry *mh;
8235 
8236 	  mh = (struct mips_elf_link_hash_entry *) h;
8237 	  mh->need_fn_stub = TRUE;
8238 	}
8239 
8240       /* Refuse some position-dependent relocations when creating a
8241 	 shared library.  Do not refuse R_MIPS_32 / R_MIPS_64; they're
8242 	 not PIC, but we can create dynamic relocations and the result
8243 	 will be fine.  Also do not refuse R_MIPS_LO16, which can be
8244 	 combined with R_MIPS_GOT16.  */
8245       if (info->shared)
8246 	{
8247 	  switch (r_type)
8248 	    {
8249 	    case R_MIPS16_HI16:
8250 	    case R_MIPS_HI16:
8251 	    case R_MIPS_HIGHER:
8252 	    case R_MIPS_HIGHEST:
8253 	    case R_MICROMIPS_HI16:
8254 	    case R_MICROMIPS_HIGHER:
8255 	    case R_MICROMIPS_HIGHEST:
8256 	      /* Don't refuse a high part relocation if it's against
8257 		 no symbol (e.g. part of a compound relocation).  */
8258 	      if (r_symndx == STN_UNDEF)
8259 		break;
8260 
8261 	      /* R_MIPS_HI16 against _gp_disp is used for $gp setup,
8262 		 and has a special meaning.  */
8263 	      if (!NEWABI_P (abfd) && h != NULL
8264 		  && strcmp (h->root.root.string, "_gp_disp") == 0)
8265 		break;
8266 
8267 	      /* Likewise __GOTT_BASE__ and __GOTT_INDEX__ on VxWorks.  */
8268 	      if (is_gott_symbol (info, h))
8269 		break;
8270 
8271 	      /* FALLTHROUGH */
8272 
8273 	    case R_MIPS16_26:
8274 	    case R_MIPS_26:
8275 	    case R_MICROMIPS_26_S1:
8276 	      howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, FALSE);
8277 	      (*_bfd_error_handler)
8278 		(_("%B: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC"),
8279 		 abfd, howto->name,
8280 		 (h) ? h->root.root.string : "a local symbol");
8281 	      bfd_set_error (bfd_error_bad_value);
8282 	      return FALSE;
8283 	    default:
8284 	      break;
8285 	    }
8286 	}
8287     }
8288 
8289   return TRUE;
8290 }
8291 
8292 bfd_boolean
8293 _bfd_mips_relax_section (bfd *abfd, asection *sec,
8294 			 struct bfd_link_info *link_info,
8295 			 bfd_boolean *again)
8296 {
8297   Elf_Internal_Rela *internal_relocs;
8298   Elf_Internal_Rela *irel, *irelend;
8299   Elf_Internal_Shdr *symtab_hdr;
8300   bfd_byte *contents = NULL;
8301   size_t extsymoff;
8302   bfd_boolean changed_contents = FALSE;
8303   bfd_vma sec_start = sec->output_section->vma + sec->output_offset;
8304   Elf_Internal_Sym *isymbuf = NULL;
8305 
8306   /* We are not currently changing any sizes, so only one pass.  */
8307   *again = FALSE;
8308 
8309   if (link_info->relocatable)
8310     return TRUE;
8311 
8312   internal_relocs = _bfd_elf_link_read_relocs (abfd, sec, NULL, NULL,
8313 					       link_info->keep_memory);
8314   if (internal_relocs == NULL)
8315     return TRUE;
8316 
8317   irelend = internal_relocs + sec->reloc_count
8318     * get_elf_backend_data (abfd)->s->int_rels_per_ext_rel;
8319   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
8320   extsymoff = (elf_bad_symtab (abfd)) ? 0 : symtab_hdr->sh_info;
8321 
8322   for (irel = internal_relocs; irel < irelend; irel++)
8323     {
8324       bfd_vma symval;
8325       bfd_signed_vma sym_offset;
8326       unsigned int r_type;
8327       unsigned long r_symndx;
8328       asection *sym_sec;
8329       unsigned long instruction;
8330 
8331       /* Turn jalr into bgezal, and jr into beq, if they're marked
8332 	 with a JALR relocation, that indicate where they jump to.
8333 	 This saves some pipeline bubbles.  */
8334       r_type = ELF_R_TYPE (abfd, irel->r_info);
8335       if (r_type != R_MIPS_JALR)
8336 	continue;
8337 
8338       r_symndx = ELF_R_SYM (abfd, irel->r_info);
8339       /* Compute the address of the jump target.  */
8340       if (r_symndx >= extsymoff)
8341 	{
8342 	  struct mips_elf_link_hash_entry *h
8343 	    = ((struct mips_elf_link_hash_entry *)
8344 	       elf_sym_hashes (abfd) [r_symndx - extsymoff]);
8345 
8346 	  while (h->root.root.type == bfd_link_hash_indirect
8347 		 || h->root.root.type == bfd_link_hash_warning)
8348 	    h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
8349 
8350 	  /* If a symbol is undefined, or if it may be overridden,
8351 	     skip it.  */
8352 	  if (! ((h->root.root.type == bfd_link_hash_defined
8353 		  || h->root.root.type == bfd_link_hash_defweak)
8354 		 && h->root.root.u.def.section)
8355 	      || (link_info->shared && ! link_info->symbolic
8356 		  && !h->root.forced_local))
8357 	    continue;
8358 
8359 	  sym_sec = h->root.root.u.def.section;
8360 	  if (sym_sec->output_section)
8361 	    symval = (h->root.root.u.def.value
8362 		      + sym_sec->output_section->vma
8363 		      + sym_sec->output_offset);
8364 	  else
8365 	    symval = h->root.root.u.def.value;
8366 	}
8367       else
8368 	{
8369 	  Elf_Internal_Sym *isym;
8370 
8371 	  /* Read this BFD's symbols if we haven't done so already.  */
8372 	  if (isymbuf == NULL && symtab_hdr->sh_info != 0)
8373 	    {
8374 	      isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
8375 	      if (isymbuf == NULL)
8376 		isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
8377 						symtab_hdr->sh_info, 0,
8378 						NULL, NULL, NULL);
8379 	      if (isymbuf == NULL)
8380 		goto relax_return;
8381 	    }
8382 
8383 	  isym = isymbuf + r_symndx;
8384 	  if (isym->st_shndx == SHN_UNDEF)
8385 	    continue;
8386 	  else if (isym->st_shndx == SHN_ABS)
8387 	    sym_sec = bfd_abs_section_ptr;
8388 	  else if (isym->st_shndx == SHN_COMMON)
8389 	    sym_sec = bfd_com_section_ptr;
8390 	  else
8391 	    sym_sec
8392 	      = bfd_section_from_elf_index (abfd, isym->st_shndx);
8393 	  symval = isym->st_value
8394 	    + sym_sec->output_section->vma
8395 	    + sym_sec->output_offset;
8396 	}
8397 
8398       /* Compute branch offset, from delay slot of the jump to the
8399 	 branch target.  */
8400       sym_offset = (symval + irel->r_addend)
8401 	- (sec_start + irel->r_offset + 4);
8402 
8403       /* Branch offset must be properly aligned.  */
8404       if ((sym_offset & 3) != 0)
8405 	continue;
8406 
8407       sym_offset >>= 2;
8408 
8409       /* Check that it's in range.  */
8410       if (sym_offset < -0x8000 || sym_offset >= 0x8000)
8411 	continue;
8412 
8413       /* Get the section contents if we haven't done so already.  */
8414       if (!mips_elf_get_section_contents (abfd, sec, &contents))
8415 	goto relax_return;
8416 
8417       instruction = bfd_get_32 (abfd, contents + irel->r_offset);
8418 
8419       /* If it was jalr <reg>, turn it into bgezal $zero, <target>.  */
8420       if ((instruction & 0xfc1fffff) == 0x0000f809)
8421 	instruction = 0x04110000;
8422       /* If it was jr <reg>, turn it into b <target>.  */
8423       else if ((instruction & 0xfc1fffff) == 0x00000008)
8424 	instruction = 0x10000000;
8425       else
8426 	continue;
8427 
8428       instruction |= (sym_offset & 0xffff);
8429       bfd_put_32 (abfd, instruction, contents + irel->r_offset);
8430       changed_contents = TRUE;
8431     }
8432 
8433   if (contents != NULL
8434       && elf_section_data (sec)->this_hdr.contents != contents)
8435     {
8436       if (!changed_contents && !link_info->keep_memory)
8437         free (contents);
8438       else
8439         {
8440           /* Cache the section contents for elf_link_input_bfd.  */
8441           elf_section_data (sec)->this_hdr.contents = contents;
8442         }
8443     }
8444   return TRUE;
8445 
8446  relax_return:
8447   if (contents != NULL
8448       && elf_section_data (sec)->this_hdr.contents != contents)
8449     free (contents);
8450   return FALSE;
8451 }
8452 
8453 /* Allocate space for global sym dynamic relocs.  */
8454 
8455 static bfd_boolean
8456 allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
8457 {
8458   struct bfd_link_info *info = inf;
8459   bfd *dynobj;
8460   struct mips_elf_link_hash_entry *hmips;
8461   struct mips_elf_link_hash_table *htab;
8462 
8463   htab = mips_elf_hash_table (info);
8464   BFD_ASSERT (htab != NULL);
8465 
8466   dynobj = elf_hash_table (info)->dynobj;
8467   hmips = (struct mips_elf_link_hash_entry *) h;
8468 
8469   /* VxWorks executables are handled elsewhere; we only need to
8470      allocate relocations in shared objects.  */
8471   if (htab->is_vxworks && !info->shared)
8472     return TRUE;
8473 
8474   /* Ignore indirect symbols.  All relocations against such symbols
8475      will be redirected to the target symbol.  */
8476   if (h->root.type == bfd_link_hash_indirect)
8477     return TRUE;
8478 
8479   /* If this symbol is defined in a dynamic object, or we are creating
8480      a shared library, we will need to copy any R_MIPS_32 or
8481      R_MIPS_REL32 relocs against it into the output file.  */
8482   if (! info->relocatable
8483       && hmips->possibly_dynamic_relocs != 0
8484       && (h->root.type == bfd_link_hash_defweak
8485 	  || (!h->def_regular && !ELF_COMMON_DEF_P (h))
8486 	  || info->shared))
8487     {
8488       bfd_boolean do_copy = TRUE;
8489 
8490       if (h->root.type == bfd_link_hash_undefweak)
8491 	{
8492 	  /* Do not copy relocations for undefined weak symbols with
8493 	     non-default visibility.  */
8494 	  if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
8495 	    do_copy = FALSE;
8496 
8497 	  /* Make sure undefined weak symbols are output as a dynamic
8498 	     symbol in PIEs.  */
8499 	  else if (h->dynindx == -1 && !h->forced_local)
8500 	    {
8501 	      if (! bfd_elf_link_record_dynamic_symbol (info, h))
8502 		return FALSE;
8503 	    }
8504 	}
8505 
8506       if (do_copy)
8507 	{
8508 	  /* Even though we don't directly need a GOT entry for this symbol,
8509 	     the SVR4 psABI requires it to have a dynamic symbol table
8510 	     index greater that DT_MIPS_GOTSYM if there are dynamic
8511 	     relocations against it.
8512 
8513 	     VxWorks does not enforce the same mapping between the GOT
8514 	     and the symbol table, so the same requirement does not
8515 	     apply there.  */
8516 	  if (!htab->is_vxworks)
8517 	    {
8518 	      if (hmips->global_got_area > GGA_RELOC_ONLY)
8519 		hmips->global_got_area = GGA_RELOC_ONLY;
8520 	      hmips->got_only_for_calls = FALSE;
8521 	    }
8522 
8523 	  mips_elf_allocate_dynamic_relocations
8524 	    (dynobj, info, hmips->possibly_dynamic_relocs);
8525 	  if (hmips->readonly_reloc)
8526 	    /* We tell the dynamic linker that there are relocations
8527 	       against the text segment.  */
8528 	    info->flags |= DF_TEXTREL;
8529 	}
8530     }
8531 
8532   return TRUE;
8533 }
8534 
8535 /* Adjust a symbol defined by a dynamic object and referenced by a
8536    regular object.  The current definition is in some section of the
8537    dynamic object, but we're not including those sections.  We have to
8538    change the definition to something the rest of the link can
8539    understand.  */
8540 
8541 bfd_boolean
8542 _bfd_mips_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
8543 				     struct elf_link_hash_entry *h)
8544 {
8545   bfd *dynobj;
8546   struct mips_elf_link_hash_entry *hmips;
8547   struct mips_elf_link_hash_table *htab;
8548 
8549   htab = mips_elf_hash_table (info);
8550   BFD_ASSERT (htab != NULL);
8551 
8552   dynobj = elf_hash_table (info)->dynobj;
8553   hmips = (struct mips_elf_link_hash_entry *) h;
8554 
8555   /* Make sure we know what is going on here.  */
8556   BFD_ASSERT (dynobj != NULL
8557 	      && (h->needs_plt
8558 		  || h->u.weakdef != NULL
8559 		  || (h->def_dynamic
8560 		      && h->ref_regular
8561 		      && !h->def_regular)));
8562 
8563   hmips = (struct mips_elf_link_hash_entry *) h;
8564 
8565   /* If there are call relocations against an externally-defined symbol,
8566      see whether we can create a MIPS lazy-binding stub for it.  We can
8567      only do this if all references to the function are through call
8568      relocations, and in that case, the traditional lazy-binding stubs
8569      are much more efficient than PLT entries.
8570 
8571      Traditional stubs are only available on SVR4 psABI-based systems;
8572      VxWorks always uses PLTs instead.  */
8573   if (!htab->is_vxworks && h->needs_plt && !hmips->no_fn_stub)
8574     {
8575       if (! elf_hash_table (info)->dynamic_sections_created)
8576 	return TRUE;
8577 
8578       /* If this symbol is not defined in a regular file, then set
8579 	 the symbol to the stub location.  This is required to make
8580 	 function pointers compare as equal between the normal
8581 	 executable and the shared library.  */
8582       if (!h->def_regular)
8583 	{
8584 	  hmips->needs_lazy_stub = TRUE;
8585 	  htab->lazy_stub_count++;
8586 	  return TRUE;
8587 	}
8588     }
8589   /* As above, VxWorks requires PLT entries for externally-defined
8590      functions that are only accessed through call relocations.
8591 
8592      Both VxWorks and non-VxWorks targets also need PLT entries if there
8593      are static-only relocations against an externally-defined function.
8594      This can technically occur for shared libraries if there are
8595      branches to the symbol, although it is unlikely that this will be
8596      used in practice due to the short ranges involved.  It can occur
8597      for any relative or absolute relocation in executables; in that
8598      case, the PLT entry becomes the function's canonical address.  */
8599   else if (((h->needs_plt && !hmips->no_fn_stub)
8600 	    || (h->type == STT_FUNC && hmips->has_static_relocs))
8601 	   && htab->use_plts_and_copy_relocs
8602 	   && !SYMBOL_CALLS_LOCAL (info, h)
8603 	   && !(ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
8604 		&& h->root.type == bfd_link_hash_undefweak))
8605     {
8606       /* If this is the first symbol to need a PLT entry, allocate room
8607 	 for the header.  */
8608       if (htab->splt->size == 0)
8609 	{
8610 	  BFD_ASSERT (htab->sgotplt->size == 0);
8611 
8612 	  /* If we're using the PLT additions to the psABI, each PLT
8613 	     entry is 16 bytes and the PLT0 entry is 32 bytes.
8614 	     Encourage better cache usage by aligning.  We do this
8615 	     lazily to avoid pessimizing traditional objects.  */
8616 	  if (!htab->is_vxworks
8617 	      && !bfd_set_section_alignment (dynobj, htab->splt, 5))
8618 	    return FALSE;
8619 
8620 	  /* Make sure that .got.plt is word-aligned.  We do this lazily
8621 	     for the same reason as above.  */
8622 	  if (!bfd_set_section_alignment (dynobj, htab->sgotplt,
8623 					  MIPS_ELF_LOG_FILE_ALIGN (dynobj)))
8624 	    return FALSE;
8625 
8626 	  htab->splt->size += htab->plt_header_size;
8627 
8628 	  /* On non-VxWorks targets, the first two entries in .got.plt
8629 	     are reserved.  */
8630 	  if (!htab->is_vxworks)
8631 	    htab->sgotplt->size
8632 	      += get_elf_backend_data (dynobj)->got_header_size;
8633 
8634 	  /* On VxWorks, also allocate room for the header's
8635 	     .rela.plt.unloaded entries.  */
8636 	  if (htab->is_vxworks && !info->shared)
8637 	    htab->srelplt2->size += 2 * sizeof (Elf32_External_Rela);
8638 	}
8639 
8640       /* Assign the next .plt entry to this symbol.  */
8641       h->plt.offset = htab->splt->size;
8642       htab->splt->size += htab->plt_entry_size;
8643 
8644       /* If the output file has no definition of the symbol, set the
8645 	 symbol's value to the address of the stub.  */
8646       if (!info->shared && !h->def_regular)
8647 	{
8648 	  h->root.u.def.section = htab->splt;
8649 	  h->root.u.def.value = h->plt.offset;
8650 	  /* For VxWorks, point at the PLT load stub rather than the
8651 	     lazy resolution stub; this stub will become the canonical
8652 	     function address.  */
8653 	  if (htab->is_vxworks)
8654 	    h->root.u.def.value += 8;
8655 	}
8656 
8657       /* Make room for the .got.plt entry and the R_MIPS_JUMP_SLOT
8658 	 relocation.  */
8659       htab->sgotplt->size += MIPS_ELF_GOT_SIZE (dynobj);
8660       htab->srelplt->size += (htab->is_vxworks
8661 			      ? MIPS_ELF_RELA_SIZE (dynobj)
8662 			      : MIPS_ELF_REL_SIZE (dynobj));
8663 
8664       /* Make room for the .rela.plt.unloaded relocations.  */
8665       if (htab->is_vxworks && !info->shared)
8666 	htab->srelplt2->size += 3 * sizeof (Elf32_External_Rela);
8667 
8668       /* All relocations against this symbol that could have been made
8669 	 dynamic will now refer to the PLT entry instead.  */
8670       hmips->possibly_dynamic_relocs = 0;
8671 
8672       return TRUE;
8673     }
8674 
8675   /* If this is a weak symbol, and there is a real definition, the
8676      processor independent code will have arranged for us to see the
8677      real definition first, and we can just use the same value.  */
8678   if (h->u.weakdef != NULL)
8679     {
8680       BFD_ASSERT (h->u.weakdef->root.type == bfd_link_hash_defined
8681 		  || h->u.weakdef->root.type == bfd_link_hash_defweak);
8682       h->root.u.def.section = h->u.weakdef->root.u.def.section;
8683       h->root.u.def.value = h->u.weakdef->root.u.def.value;
8684       return TRUE;
8685     }
8686 
8687   /* Otherwise, there is nothing further to do for symbols defined
8688      in regular objects.  */
8689   if (h->def_regular)
8690     return TRUE;
8691 
8692   /* There's also nothing more to do if we'll convert all relocations
8693      against this symbol into dynamic relocations.  */
8694   if (!hmips->has_static_relocs)
8695     return TRUE;
8696 
8697   /* We're now relying on copy relocations.  Complain if we have
8698      some that we can't convert.  */
8699   if (!htab->use_plts_and_copy_relocs || info->shared)
8700     {
8701       (*_bfd_error_handler) (_("non-dynamic relocations refer to "
8702 			       "dynamic symbol %s"),
8703 			     h->root.root.string);
8704       bfd_set_error (bfd_error_bad_value);
8705       return FALSE;
8706     }
8707 
8708   /* We must allocate the symbol in our .dynbss section, which will
8709      become part of the .bss section of the executable.  There will be
8710      an entry for this symbol in the .dynsym section.  The dynamic
8711      object will contain position independent code, so all references
8712      from the dynamic object to this symbol will go through the global
8713      offset table.  The dynamic linker will use the .dynsym entry to
8714      determine the address it must put in the global offset table, so
8715      both the dynamic object and the regular object will refer to the
8716      same memory location for the variable.  */
8717 
8718   if ((h->root.u.def.section->flags & SEC_ALLOC) != 0)
8719     {
8720       if (htab->is_vxworks)
8721 	htab->srelbss->size += sizeof (Elf32_External_Rela);
8722       else
8723 	mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
8724       h->needs_copy = 1;
8725     }
8726 
8727   /* All relocations against this symbol that could have been made
8728      dynamic will now refer to the local copy instead.  */
8729   hmips->possibly_dynamic_relocs = 0;
8730 
8731   return _bfd_elf_adjust_dynamic_copy (h, htab->sdynbss);
8732 }
8733 
8734 /* This function is called after all the input files have been read,
8735    and the input sections have been assigned to output sections.  We
8736    check for any mips16 stub sections that we can discard.  */
8737 
8738 bfd_boolean
8739 _bfd_mips_elf_always_size_sections (bfd *output_bfd,
8740 				    struct bfd_link_info *info)
8741 {
8742   asection *ri;
8743   struct mips_elf_link_hash_table *htab;
8744   struct mips_htab_traverse_info hti;
8745 
8746   htab = mips_elf_hash_table (info);
8747   BFD_ASSERT (htab != NULL);
8748 
8749   /* The .reginfo section has a fixed size.  */
8750   ri = bfd_get_section_by_name (output_bfd, ".reginfo");
8751   if (ri != NULL)
8752     bfd_set_section_size (output_bfd, ri, sizeof (Elf32_External_RegInfo));
8753 
8754   hti.info = info;
8755   hti.output_bfd = output_bfd;
8756   hti.error = FALSE;
8757   mips_elf_link_hash_traverse (mips_elf_hash_table (info),
8758 			       mips_elf_check_symbols, &hti);
8759   if (hti.error)
8760     return FALSE;
8761 
8762   return TRUE;
8763 }
8764 
8765 /* If the link uses a GOT, lay it out and work out its size.  */
8766 
8767 static bfd_boolean
8768 mips_elf_lay_out_got (bfd *output_bfd, struct bfd_link_info *info)
8769 {
8770   bfd *dynobj;
8771   asection *s;
8772   struct mips_got_info *g;
8773   bfd_size_type loadable_size = 0;
8774   bfd_size_type page_gotno;
8775   bfd *ibfd;
8776   struct mips_elf_traverse_got_arg tga;
8777   struct mips_elf_link_hash_table *htab;
8778 
8779   htab = mips_elf_hash_table (info);
8780   BFD_ASSERT (htab != NULL);
8781 
8782   s = htab->sgot;
8783   if (s == NULL)
8784     return TRUE;
8785 
8786   dynobj = elf_hash_table (info)->dynobj;
8787   g = htab->got_info;
8788 
8789   /* Allocate room for the reserved entries.  VxWorks always reserves
8790      3 entries; other objects only reserve 2 entries.  */
8791   BFD_ASSERT (g->assigned_gotno == 0);
8792   if (htab->is_vxworks)
8793     htab->reserved_gotno = 3;
8794   else
8795     htab->reserved_gotno = 2;
8796   g->local_gotno += htab->reserved_gotno;
8797   g->assigned_gotno = htab->reserved_gotno;
8798 
8799   /* Decide which symbols need to go in the global part of the GOT and
8800      count the number of reloc-only GOT symbols.  */
8801   mips_elf_link_hash_traverse (htab, mips_elf_count_got_symbols, info);
8802 
8803   if (!mips_elf_resolve_final_got_entries (info, g))
8804     return FALSE;
8805 
8806   /* Calculate the total loadable size of the output.  That
8807      will give us the maximum number of GOT_PAGE entries
8808      required.  */
8809   for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link_next)
8810     {
8811       asection *subsection;
8812 
8813       for (subsection = ibfd->sections;
8814 	   subsection;
8815 	   subsection = subsection->next)
8816 	{
8817 	  if ((subsection->flags & SEC_ALLOC) == 0)
8818 	    continue;
8819 	  loadable_size += ((subsection->size + 0xf)
8820 			    &~ (bfd_size_type) 0xf);
8821 	}
8822     }
8823 
8824   if (htab->is_vxworks)
8825     /* There's no need to allocate page entries for VxWorks; R_MIPS*_GOT16
8826        relocations against local symbols evaluate to "G", and the EABI does
8827        not include R_MIPS_GOT_PAGE.  */
8828     page_gotno = 0;
8829   else
8830     /* Assume there are two loadable segments consisting of contiguous
8831        sections.  Is 5 enough?  */
8832     page_gotno = (loadable_size >> 16) + 5;
8833 
8834   /* Choose the smaller of the two page estimates; both are intended to be
8835      conservative.  */
8836   if (page_gotno > g->page_gotno)
8837     page_gotno = g->page_gotno;
8838 
8839   g->local_gotno += page_gotno;
8840 
8841   s->size += g->local_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
8842   s->size += g->global_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
8843   s->size += g->tls_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
8844 
8845   /* VxWorks does not support multiple GOTs.  It initializes $gp to
8846      __GOTT_BASE__[__GOTT_INDEX__], the value of which is set by the
8847      dynamic loader.  */
8848   if (!htab->is_vxworks && s->size > MIPS_ELF_GOT_MAX_SIZE (info))
8849     {
8850       if (!mips_elf_multi_got (output_bfd, info, s, page_gotno))
8851 	return FALSE;
8852     }
8853   else
8854     {
8855       /* Record that all bfds use G.  This also has the effect of freeing
8856 	 the per-bfd GOTs, which we no longer need.  */
8857       for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link_next)
8858 	if (mips_elf_bfd_got (ibfd, FALSE))
8859 	  mips_elf_replace_bfd_got (ibfd, g);
8860       mips_elf_replace_bfd_got (output_bfd, g);
8861 
8862       /* Set up TLS entries.  */
8863       g->tls_assigned_gotno = g->global_gotno + g->local_gotno;
8864       tga.info = info;
8865       tga.g = g;
8866       tga.value = MIPS_ELF_GOT_SIZE (output_bfd);
8867       htab_traverse (g->got_entries, mips_elf_initialize_tls_index, &tga);
8868       if (!tga.g)
8869 	return FALSE;
8870       BFD_ASSERT (g->tls_assigned_gotno
8871 		  == g->global_gotno + g->local_gotno + g->tls_gotno);
8872 
8873       /* Each VxWorks GOT entry needs an explicit relocation.  */
8874       if (htab->is_vxworks && info->shared)
8875 	g->relocs += g->global_gotno + g->local_gotno - htab->reserved_gotno;
8876 
8877       /* Allocate room for the TLS relocations.  */
8878       if (g->relocs)
8879 	mips_elf_allocate_dynamic_relocations (dynobj, info, g->relocs);
8880     }
8881 
8882   return TRUE;
8883 }
8884 
8885 /* Estimate the size of the .MIPS.stubs section.  */
8886 
8887 static void
8888 mips_elf_estimate_stub_size (bfd *output_bfd, struct bfd_link_info *info)
8889 {
8890   struct mips_elf_link_hash_table *htab;
8891   bfd_size_type dynsymcount;
8892 
8893   htab = mips_elf_hash_table (info);
8894   BFD_ASSERT (htab != NULL);
8895 
8896   if (htab->lazy_stub_count == 0)
8897     return;
8898 
8899   /* IRIX rld assumes that a function stub isn't at the end of the .text
8900      section, so add a dummy entry to the end.  */
8901   htab->lazy_stub_count++;
8902 
8903   /* Get a worst-case estimate of the number of dynamic symbols needed.
8904      At this point, dynsymcount does not account for section symbols
8905      and count_section_dynsyms may overestimate the number that will
8906      be needed.  */
8907   dynsymcount = (elf_hash_table (info)->dynsymcount
8908 		 + count_section_dynsyms (output_bfd, info));
8909 
8910   /* Determine the size of one stub entry.  */
8911   htab->function_stub_size = (dynsymcount > 0x10000
8912 			      ? MIPS_FUNCTION_STUB_BIG_SIZE
8913 			      : MIPS_FUNCTION_STUB_NORMAL_SIZE);
8914 
8915   htab->sstubs->size = htab->lazy_stub_count * htab->function_stub_size;
8916 }
8917 
8918 /* A mips_elf_link_hash_traverse callback for which DATA points to the
8919    MIPS hash table.  If H needs a traditional MIPS lazy-binding stub,
8920    allocate an entry in the stubs section.  */
8921 
8922 static bfd_boolean
8923 mips_elf_allocate_lazy_stub (struct mips_elf_link_hash_entry *h, void *data)
8924 {
8925   struct mips_elf_link_hash_table *htab;
8926 
8927   htab = (struct mips_elf_link_hash_table *) data;
8928   if (h->needs_lazy_stub)
8929     {
8930       h->root.root.u.def.section = htab->sstubs;
8931       h->root.root.u.def.value = htab->sstubs->size;
8932       h->root.plt.offset = htab->sstubs->size;
8933       htab->sstubs->size += htab->function_stub_size;
8934     }
8935   return TRUE;
8936 }
8937 
8938 /* Allocate offsets in the stubs section to each symbol that needs one.
8939    Set the final size of the .MIPS.stub section.  */
8940 
8941 static void
8942 mips_elf_lay_out_lazy_stubs (struct bfd_link_info *info)
8943 {
8944   struct mips_elf_link_hash_table *htab;
8945 
8946   htab = mips_elf_hash_table (info);
8947   BFD_ASSERT (htab != NULL);
8948 
8949   if (htab->lazy_stub_count == 0)
8950     return;
8951 
8952   htab->sstubs->size = 0;
8953   mips_elf_link_hash_traverse (htab, mips_elf_allocate_lazy_stub, htab);
8954   htab->sstubs->size += htab->function_stub_size;
8955   BFD_ASSERT (htab->sstubs->size
8956 	      == htab->lazy_stub_count * htab->function_stub_size);
8957 }
8958 
8959 /* Set the sizes of the dynamic sections.  */
8960 
8961 bfd_boolean
8962 _bfd_mips_elf_size_dynamic_sections (bfd *output_bfd,
8963 				     struct bfd_link_info *info)
8964 {
8965   bfd *dynobj;
8966   asection *s, *sreldyn;
8967   bfd_boolean reltext;
8968   struct mips_elf_link_hash_table *htab;
8969 
8970   htab = mips_elf_hash_table (info);
8971   BFD_ASSERT (htab != NULL);
8972   dynobj = elf_hash_table (info)->dynobj;
8973   BFD_ASSERT (dynobj != NULL);
8974 
8975   if (elf_hash_table (info)->dynamic_sections_created)
8976     {
8977       /* Set the contents of the .interp section to the interpreter.  */
8978       if (info->executable)
8979 	{
8980 	  s = bfd_get_linker_section (dynobj, ".interp");
8981 	  BFD_ASSERT (s != NULL);
8982 	  s->size
8983 	    = strlen (ELF_DYNAMIC_INTERPRETER (output_bfd)) + 1;
8984 	  s->contents
8985 	    = (bfd_byte *) ELF_DYNAMIC_INTERPRETER (output_bfd);
8986 	}
8987 
8988       /* Create a symbol for the PLT, if we know that we are using it.  */
8989       if (htab->splt && htab->splt->size > 0 && htab->root.hplt == NULL)
8990 	{
8991 	  struct elf_link_hash_entry *h;
8992 
8993 	  BFD_ASSERT (htab->use_plts_and_copy_relocs);
8994 
8995 	  h = _bfd_elf_define_linkage_sym (dynobj, info, htab->splt,
8996 					   "_PROCEDURE_LINKAGE_TABLE_");
8997 	  htab->root.hplt = h;
8998 	  if (h == NULL)
8999 	    return FALSE;
9000 	  h->type = STT_FUNC;
9001 	}
9002     }
9003 
9004   /* Allocate space for global sym dynamic relocs.  */
9005   elf_link_hash_traverse (&htab->root, allocate_dynrelocs, info);
9006 
9007   mips_elf_estimate_stub_size (output_bfd, info);
9008 
9009   if (!mips_elf_lay_out_got (output_bfd, info))
9010     return FALSE;
9011 
9012   mips_elf_lay_out_lazy_stubs (info);
9013 
9014   /* The check_relocs and adjust_dynamic_symbol entry points have
9015      determined the sizes of the various dynamic sections.  Allocate
9016      memory for them.  */
9017   reltext = FALSE;
9018   for (s = dynobj->sections; s != NULL; s = s->next)
9019     {
9020       const char *name;
9021 
9022       /* It's OK to base decisions on the section name, because none
9023 	 of the dynobj section names depend upon the input files.  */
9024       name = bfd_get_section_name (dynobj, s);
9025 
9026       if ((s->flags & SEC_LINKER_CREATED) == 0)
9027 	continue;
9028 
9029       if (CONST_STRNEQ (name, ".rel"))
9030 	{
9031 	  if (s->size != 0)
9032 	    {
9033 	      const char *outname;
9034 	      asection *target;
9035 
9036 	      /* If this relocation section applies to a read only
9037                  section, then we probably need a DT_TEXTREL entry.
9038                  If the relocation section is .rel(a).dyn, we always
9039                  assert a DT_TEXTREL entry rather than testing whether
9040                  there exists a relocation to a read only section or
9041                  not.  */
9042 	      outname = bfd_get_section_name (output_bfd,
9043 					      s->output_section);
9044 	      target = bfd_get_section_by_name (output_bfd, outname + 4);
9045 	      if ((target != NULL
9046 		   && (target->flags & SEC_READONLY) != 0
9047 		   && (target->flags & SEC_ALLOC) != 0)
9048 		  || strcmp (outname, MIPS_ELF_REL_DYN_NAME (info)) == 0)
9049 		reltext = TRUE;
9050 
9051 	      /* We use the reloc_count field as a counter if we need
9052 		 to copy relocs into the output file.  */
9053 	      if (strcmp (name, MIPS_ELF_REL_DYN_NAME (info)) != 0)
9054 		s->reloc_count = 0;
9055 
9056 	      /* If combreloc is enabled, elf_link_sort_relocs() will
9057 		 sort relocations, but in a different way than we do,
9058 		 and before we're done creating relocations.  Also, it
9059 		 will move them around between input sections'
9060 		 relocation's contents, so our sorting would be
9061 		 broken, so don't let it run.  */
9062 	      info->combreloc = 0;
9063 	    }
9064 	}
9065       else if (! info->shared
9066 	       && ! mips_elf_hash_table (info)->use_rld_obj_head
9067 	       && CONST_STRNEQ (name, ".rld_map"))
9068 	{
9069 	  /* We add a room for __rld_map.  It will be filled in by the
9070 	     rtld to contain a pointer to the _r_debug structure.  */
9071 	  s->size += MIPS_ELF_RLD_MAP_SIZE (output_bfd);
9072 	}
9073       else if (SGI_COMPAT (output_bfd)
9074 	       && CONST_STRNEQ (name, ".compact_rel"))
9075 	s->size += mips_elf_hash_table (info)->compact_rel_size;
9076       else if (s == htab->splt)
9077 	{
9078 	  /* If the last PLT entry has a branch delay slot, allocate
9079 	     room for an extra nop to fill the delay slot.  This is
9080 	     for CPUs without load interlocking.  */
9081 	  if (! LOAD_INTERLOCKS_P (output_bfd)
9082 	      && ! htab->is_vxworks && s->size > 0)
9083 	    s->size += 4;
9084 	}
9085       else if (! CONST_STRNEQ (name, ".init")
9086 	       && s != htab->sgot
9087 	       && s != htab->sgotplt
9088 	       && s != htab->sstubs
9089 	       && s != htab->sdynbss)
9090 	{
9091 	  /* It's not one of our sections, so don't allocate space.  */
9092 	  continue;
9093 	}
9094 
9095       if (s->size == 0)
9096 	{
9097 	  s->flags |= SEC_EXCLUDE;
9098 	  continue;
9099 	}
9100 
9101       if ((s->flags & SEC_HAS_CONTENTS) == 0)
9102 	continue;
9103 
9104       /* Allocate memory for the section contents.  */
9105       s->contents = bfd_zalloc (dynobj, s->size);
9106       if (s->contents == NULL)
9107 	{
9108 	  bfd_set_error (bfd_error_no_memory);
9109 	  return FALSE;
9110 	}
9111     }
9112 
9113   if (elf_hash_table (info)->dynamic_sections_created)
9114     {
9115       /* Add some entries to the .dynamic section.  We fill in the
9116 	 values later, in _bfd_mips_elf_finish_dynamic_sections, but we
9117 	 must add the entries now so that we get the correct size for
9118 	 the .dynamic section.  */
9119 
9120       /* SGI object has the equivalence of DT_DEBUG in the
9121 	 DT_MIPS_RLD_MAP entry.  This must come first because glibc
9122 	 only fills in DT_MIPS_RLD_MAP (not DT_DEBUG) and some tools
9123 	 may only look at the first one they see.  */
9124       if (!info->shared
9125 	  && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_MAP, 0))
9126 	return FALSE;
9127 
9128       /* The DT_DEBUG entry may be filled in by the dynamic linker and
9129 	 used by the debugger.  */
9130       if (info->executable
9131 	  && !SGI_COMPAT (output_bfd)
9132 	  && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_DEBUG, 0))
9133 	return FALSE;
9134 
9135       if (reltext && (SGI_COMPAT (output_bfd) || htab->is_vxworks))
9136 	info->flags |= DF_TEXTREL;
9137 
9138       if ((info->flags & DF_TEXTREL) != 0)
9139 	{
9140 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_TEXTREL, 0))
9141 	    return FALSE;
9142 
9143 	  /* Clear the DF_TEXTREL flag.  It will be set again if we
9144 	     write out an actual text relocation; we may not, because
9145 	     at this point we do not know whether e.g. any .eh_frame
9146 	     absolute relocations have been converted to PC-relative.  */
9147 	  info->flags &= ~DF_TEXTREL;
9148 	}
9149 
9150       if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTGOT, 0))
9151 	return FALSE;
9152 
9153       sreldyn = mips_elf_rel_dyn_section (info, FALSE);
9154       if (htab->is_vxworks)
9155 	{
9156 	  /* VxWorks uses .rela.dyn instead of .rel.dyn.  It does not
9157 	     use any of the DT_MIPS_* tags.  */
9158 	  if (sreldyn && sreldyn->size > 0)
9159 	    {
9160 	      if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELA, 0))
9161 		return FALSE;
9162 
9163 	      if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELASZ, 0))
9164 		return FALSE;
9165 
9166 	      if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELAENT, 0))
9167 		return FALSE;
9168 	    }
9169 	}
9170       else
9171 	{
9172 	  if (sreldyn && sreldyn->size > 0)
9173 	    {
9174 	      if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_REL, 0))
9175 		return FALSE;
9176 
9177 	      if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELSZ, 0))
9178 		return FALSE;
9179 
9180 	      if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELENT, 0))
9181 		return FALSE;
9182 	    }
9183 
9184 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_VERSION, 0))
9185 	    return FALSE;
9186 
9187 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_FLAGS, 0))
9188 	    return FALSE;
9189 
9190 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_BASE_ADDRESS, 0))
9191 	    return FALSE;
9192 
9193 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_LOCAL_GOTNO, 0))
9194 	    return FALSE;
9195 
9196 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_SYMTABNO, 0))
9197 	    return FALSE;
9198 
9199 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_UNREFEXTNO, 0))
9200 	    return FALSE;
9201 
9202 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_GOTSYM, 0))
9203 	    return FALSE;
9204 
9205 	  if (IRIX_COMPAT (dynobj) == ict_irix5
9206 	      && ! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_HIPAGENO, 0))
9207 	    return FALSE;
9208 
9209 	  if (IRIX_COMPAT (dynobj) == ict_irix6
9210 	      && (bfd_get_section_by_name
9211 		  (output_bfd, MIPS_ELF_OPTIONS_SECTION_NAME (dynobj)))
9212 	      && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_OPTIONS, 0))
9213 	    return FALSE;
9214 	}
9215       if (htab->splt->size > 0)
9216 	{
9217 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTREL, 0))
9218 	    return FALSE;
9219 
9220 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_JMPREL, 0))
9221 	    return FALSE;
9222 
9223 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTRELSZ, 0))
9224 	    return FALSE;
9225 
9226 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_PLTGOT, 0))
9227 	    return FALSE;
9228 	}
9229       if (htab->is_vxworks
9230 	  && !elf_vxworks_add_dynamic_entries (output_bfd, info))
9231 	return FALSE;
9232     }
9233 
9234   return TRUE;
9235 }
9236 
9237 /* REL is a relocation in INPUT_BFD that is being copied to OUTPUT_BFD.
9238    Adjust its R_ADDEND field so that it is correct for the output file.
9239    LOCAL_SYMS and LOCAL_SECTIONS are arrays of INPUT_BFD's local symbols
9240    and sections respectively; both use symbol indexes.  */
9241 
9242 static void
9243 mips_elf_adjust_addend (bfd *output_bfd, struct bfd_link_info *info,
9244 			bfd *input_bfd, Elf_Internal_Sym *local_syms,
9245 			asection **local_sections, Elf_Internal_Rela *rel)
9246 {
9247   unsigned int r_type, r_symndx;
9248   Elf_Internal_Sym *sym;
9249   asection *sec;
9250 
9251   if (mips_elf_local_relocation_p (input_bfd, rel, local_sections))
9252     {
9253       r_type = ELF_R_TYPE (output_bfd, rel->r_info);
9254       if (gprel16_reloc_p (r_type)
9255 	  || r_type == R_MIPS_GPREL32
9256 	  || literal_reloc_p (r_type))
9257 	{
9258 	  rel->r_addend += _bfd_get_gp_value (input_bfd);
9259 	  rel->r_addend -= _bfd_get_gp_value (output_bfd);
9260 	}
9261 
9262       r_symndx = ELF_R_SYM (output_bfd, rel->r_info);
9263       sym = local_syms + r_symndx;
9264 
9265       /* Adjust REL's addend to account for section merging.  */
9266       if (!info->relocatable)
9267 	{
9268 	  sec = local_sections[r_symndx];
9269 	  _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
9270 	}
9271 
9272       /* This would normally be done by the rela_normal code in elflink.c.  */
9273       if (ELF_ST_TYPE (sym->st_info) == STT_SECTION)
9274 	rel->r_addend += local_sections[r_symndx]->output_offset;
9275     }
9276 }
9277 
9278 /* Handle relocations against symbols from removed linkonce sections,
9279    or sections discarded by a linker script.  We use this wrapper around
9280    RELOC_AGAINST_DISCARDED_SECTION to handle triplets of compound relocs
9281    on 64-bit ELF targets.  In this case for any relocation handled, which
9282    always be the first in a triplet, the remaining two have to be processed
9283    together with the first, even if they are R_MIPS_NONE.  It is the symbol
9284    index referred by the first reloc that applies to all the three and the
9285    remaining two never refer to an object symbol.  And it is the final
9286    relocation (the last non-null one) that determines the output field of
9287    the whole relocation so retrieve the corresponding howto structure for
9288    the relocatable field to be cleared by RELOC_AGAINST_DISCARDED_SECTION.
9289 
9290    Note that RELOC_AGAINST_DISCARDED_SECTION is a macro that uses "continue"
9291    and therefore requires to be pasted in a loop.  It also defines a block
9292    and does not protect any of its arguments, hence the extra brackets.  */
9293 
9294 static void
9295 mips_reloc_against_discarded_section (bfd *output_bfd,
9296 				      struct bfd_link_info *info,
9297 				      bfd *input_bfd, asection *input_section,
9298 				      Elf_Internal_Rela **rel,
9299 				      const Elf_Internal_Rela **relend,
9300 				      bfd_boolean rel_reloc,
9301 				      reloc_howto_type *howto,
9302 				      bfd_byte *contents)
9303 {
9304   const struct elf_backend_data *bed = get_elf_backend_data (output_bfd);
9305   int count = bed->s->int_rels_per_ext_rel;
9306   unsigned int r_type;
9307   int i;
9308 
9309   for (i = count - 1; i > 0; i--)
9310     {
9311       r_type = ELF_R_TYPE (output_bfd, (*rel)[i].r_info);
9312       if (r_type != R_MIPS_NONE)
9313 	{
9314 	  howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, r_type, !rel_reloc);
9315 	  break;
9316 	}
9317     }
9318   do
9319     {
9320        RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
9321 					(*rel), count, (*relend),
9322 					howto, i, contents);
9323     }
9324   while (0);
9325 }
9326 
9327 /* Relocate a MIPS ELF section.  */
9328 
9329 bfd_boolean
9330 _bfd_mips_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
9331 				bfd *input_bfd, asection *input_section,
9332 				bfd_byte *contents, Elf_Internal_Rela *relocs,
9333 				Elf_Internal_Sym *local_syms,
9334 				asection **local_sections)
9335 {
9336   Elf_Internal_Rela *rel;
9337   const Elf_Internal_Rela *relend;
9338   bfd_vma addend = 0;
9339   bfd_boolean use_saved_addend_p = FALSE;
9340   const struct elf_backend_data *bed;
9341 
9342   bed = get_elf_backend_data (output_bfd);
9343   relend = relocs + input_section->reloc_count * bed->s->int_rels_per_ext_rel;
9344   for (rel = relocs; rel < relend; ++rel)
9345     {
9346       const char *name;
9347       bfd_vma value = 0;
9348       reloc_howto_type *howto;
9349       bfd_boolean cross_mode_jump_p;
9350       /* TRUE if the relocation is a RELA relocation, rather than a
9351          REL relocation.  */
9352       bfd_boolean rela_relocation_p = TRUE;
9353       unsigned int r_type = ELF_R_TYPE (output_bfd, rel->r_info);
9354       const char *msg;
9355       unsigned long r_symndx;
9356       asection *sec;
9357       Elf_Internal_Shdr *symtab_hdr;
9358       struct elf_link_hash_entry *h;
9359       bfd_boolean rel_reloc;
9360 
9361       rel_reloc = (NEWABI_P (input_bfd)
9362 		   && mips_elf_rel_relocation_p (input_bfd, input_section,
9363 						 relocs, rel));
9364       /* Find the relocation howto for this relocation.  */
9365       howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, r_type, !rel_reloc);
9366 
9367       r_symndx = ELF_R_SYM (input_bfd, rel->r_info);
9368       symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
9369       if (mips_elf_local_relocation_p (input_bfd, rel, local_sections))
9370 	{
9371 	  sec = local_sections[r_symndx];
9372 	  h = NULL;
9373 	}
9374       else
9375 	{
9376 	  unsigned long extsymoff;
9377 
9378 	  extsymoff = 0;
9379 	  if (!elf_bad_symtab (input_bfd))
9380 	    extsymoff = symtab_hdr->sh_info;
9381 	  h = elf_sym_hashes (input_bfd) [r_symndx - extsymoff];
9382 	  while (h->root.type == bfd_link_hash_indirect
9383 		 || h->root.type == bfd_link_hash_warning)
9384 	    h = (struct elf_link_hash_entry *) h->root.u.i.link;
9385 
9386 	  sec = NULL;
9387 	  if (h->root.type == bfd_link_hash_defined
9388 	      || h->root.type == bfd_link_hash_defweak)
9389 	    sec = h->root.u.def.section;
9390 	}
9391 
9392       if (sec != NULL && discarded_section (sec))
9393 	{
9394 	  mips_reloc_against_discarded_section (output_bfd, info, input_bfd,
9395 						input_section, &rel, &relend,
9396 						rel_reloc, howto, contents);
9397 	  continue;
9398 	}
9399 
9400       if (r_type == R_MIPS_64 && ! NEWABI_P (input_bfd))
9401 	{
9402 	  /* Some 32-bit code uses R_MIPS_64.  In particular, people use
9403 	     64-bit code, but make sure all their addresses are in the
9404 	     lowermost or uppermost 32-bit section of the 64-bit address
9405 	     space.  Thus, when they use an R_MIPS_64 they mean what is
9406 	     usually meant by R_MIPS_32, with the exception that the
9407 	     stored value is sign-extended to 64 bits.  */
9408 	  howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, R_MIPS_32, FALSE);
9409 
9410 	  /* On big-endian systems, we need to lie about the position
9411 	     of the reloc.  */
9412 	  if (bfd_big_endian (input_bfd))
9413 	    rel->r_offset += 4;
9414 	}
9415 
9416       if (!use_saved_addend_p)
9417 	{
9418 	  /* If these relocations were originally of the REL variety,
9419 	     we must pull the addend out of the field that will be
9420 	     relocated.  Otherwise, we simply use the contents of the
9421 	     RELA relocation.  */
9422 	  if (mips_elf_rel_relocation_p (input_bfd, input_section,
9423 					 relocs, rel))
9424 	    {
9425 	      rela_relocation_p = FALSE;
9426 	      addend = mips_elf_read_rel_addend (input_bfd, rel,
9427 						 howto, contents);
9428 	      if (hi16_reloc_p (r_type)
9429 		  || (got16_reloc_p (r_type)
9430 		      && mips_elf_local_relocation_p (input_bfd, rel,
9431 						      local_sections)))
9432 		{
9433 		  if (!mips_elf_add_lo16_rel_addend (input_bfd, rel, relend,
9434 						     contents, &addend))
9435 		    {
9436 		      if (h)
9437 			name = h->root.root.string;
9438 		      else
9439 			name = bfd_elf_sym_name (input_bfd, symtab_hdr,
9440 						 local_syms + r_symndx,
9441 						 sec);
9442 		      (*_bfd_error_handler)
9443 			(_("%B: Can't find matching LO16 reloc against `%s' for %s at 0x%lx in section `%A'"),
9444 			 input_bfd, input_section, name, howto->name,
9445 			 rel->r_offset);
9446 		    }
9447 		}
9448 	      else
9449 		addend <<= howto->rightshift;
9450 	    }
9451 	  else
9452 	    addend = rel->r_addend;
9453 	  mips_elf_adjust_addend (output_bfd, info, input_bfd,
9454 				  local_syms, local_sections, rel);
9455 	}
9456 
9457       if (info->relocatable)
9458 	{
9459 	  if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd)
9460 	      && bfd_big_endian (input_bfd))
9461 	    rel->r_offset -= 4;
9462 
9463 	  if (!rela_relocation_p && rel->r_addend)
9464 	    {
9465 	      addend += rel->r_addend;
9466 	      if (hi16_reloc_p (r_type) || got16_reloc_p (r_type))
9467 		addend = mips_elf_high (addend);
9468 	      else if (r_type == R_MIPS_HIGHER)
9469 		addend = mips_elf_higher (addend);
9470 	      else if (r_type == R_MIPS_HIGHEST)
9471 		addend = mips_elf_highest (addend);
9472 	      else
9473 		addend >>= howto->rightshift;
9474 
9475 	      /* We use the source mask, rather than the destination
9476 		 mask because the place to which we are writing will be
9477 		 source of the addend in the final link.  */
9478 	      addend &= howto->src_mask;
9479 
9480 	      if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd))
9481 		/* See the comment above about using R_MIPS_64 in the 32-bit
9482 		   ABI.  Here, we need to update the addend.  It would be
9483 		   possible to get away with just using the R_MIPS_32 reloc
9484 		   but for endianness.  */
9485 		{
9486 		  bfd_vma sign_bits;
9487 		  bfd_vma low_bits;
9488 		  bfd_vma high_bits;
9489 
9490 		  if (addend & ((bfd_vma) 1 << 31))
9491 #ifdef BFD64
9492 		    sign_bits = ((bfd_vma) 1 << 32) - 1;
9493 #else
9494 		    sign_bits = -1;
9495 #endif
9496 		  else
9497 		    sign_bits = 0;
9498 
9499 		  /* If we don't know that we have a 64-bit type,
9500 		     do two separate stores.  */
9501 		  if (bfd_big_endian (input_bfd))
9502 		    {
9503 		      /* Store the sign-bits (which are most significant)
9504 			 first.  */
9505 		      low_bits = sign_bits;
9506 		      high_bits = addend;
9507 		    }
9508 		  else
9509 		    {
9510 		      low_bits = addend;
9511 		      high_bits = sign_bits;
9512 		    }
9513 		  bfd_put_32 (input_bfd, low_bits,
9514 			      contents + rel->r_offset);
9515 		  bfd_put_32 (input_bfd, high_bits,
9516 			      contents + rel->r_offset + 4);
9517 		  continue;
9518 		}
9519 
9520 	      if (! mips_elf_perform_relocation (info, howto, rel, addend,
9521 						 input_bfd, input_section,
9522 						 contents, FALSE))
9523 		return FALSE;
9524 	    }
9525 
9526 	  /* Go on to the next relocation.  */
9527 	  continue;
9528 	}
9529 
9530       /* In the N32 and 64-bit ABIs there may be multiple consecutive
9531 	 relocations for the same offset.  In that case we are
9532 	 supposed to treat the output of each relocation as the addend
9533 	 for the next.  */
9534       if (rel + 1 < relend
9535 	  && rel->r_offset == rel[1].r_offset
9536 	  && ELF_R_TYPE (input_bfd, rel[1].r_info) != R_MIPS_NONE)
9537 	use_saved_addend_p = TRUE;
9538       else
9539 	use_saved_addend_p = FALSE;
9540 
9541       /* Figure out what value we are supposed to relocate.  */
9542       switch (mips_elf_calculate_relocation (output_bfd, input_bfd,
9543 					     input_section, info, rel,
9544 					     addend, howto, local_syms,
9545 					     local_sections, &value,
9546 					     &name, &cross_mode_jump_p,
9547 					     use_saved_addend_p))
9548 	{
9549 	case bfd_reloc_continue:
9550 	  /* There's nothing to do.  */
9551 	  continue;
9552 
9553 	case bfd_reloc_undefined:
9554 	  /* mips_elf_calculate_relocation already called the
9555 	     undefined_symbol callback.  There's no real point in
9556 	     trying to perform the relocation at this point, so we
9557 	     just skip ahead to the next relocation.  */
9558 	  continue;
9559 
9560 	case bfd_reloc_notsupported:
9561 	  msg = _("internal error: unsupported relocation error");
9562 	  info->callbacks->warning
9563 	    (info, msg, name, input_bfd, input_section, rel->r_offset);
9564 	  return FALSE;
9565 
9566 	case bfd_reloc_overflow:
9567 	  if (use_saved_addend_p)
9568 	    /* Ignore overflow until we reach the last relocation for
9569 	       a given location.  */
9570 	    ;
9571 	  else
9572 	    {
9573 	      struct mips_elf_link_hash_table *htab;
9574 
9575 	      htab = mips_elf_hash_table (info);
9576 	      BFD_ASSERT (htab != NULL);
9577 	      BFD_ASSERT (name != NULL);
9578 	      if (!htab->small_data_overflow_reported
9579 		  && (gprel16_reloc_p (howto->type)
9580 		      || literal_reloc_p (howto->type)))
9581 		{
9582 		  msg = _("small-data section exceeds 64KB;"
9583 			  " lower small-data size limit (see option -G)");
9584 
9585 		  htab->small_data_overflow_reported = TRUE;
9586 		  (*info->callbacks->einfo) ("%P: %s\n", msg);
9587 		}
9588 	      if (! ((*info->callbacks->reloc_overflow)
9589 		     (info, NULL, name, howto->name, (bfd_vma) 0,
9590 		      input_bfd, input_section, rel->r_offset)))
9591 		return FALSE;
9592 	    }
9593 	  break;
9594 
9595 	case bfd_reloc_ok:
9596 	  break;
9597 
9598 	case bfd_reloc_outofrange:
9599 	  if (jal_reloc_p (howto->type))
9600 	    {
9601 	      msg = _("JALX to a non-word-aligned address");
9602 	      info->callbacks->warning
9603 		(info, msg, name, input_bfd, input_section, rel->r_offset);
9604 	      return FALSE;
9605 	    }
9606 	  /* Fall through.  */
9607 
9608 	default:
9609 	  abort ();
9610 	  break;
9611 	}
9612 
9613       /* If we've got another relocation for the address, keep going
9614 	 until we reach the last one.  */
9615       if (use_saved_addend_p)
9616 	{
9617 	  addend = value;
9618 	  continue;
9619 	}
9620 
9621       if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd))
9622 	/* See the comment above about using R_MIPS_64 in the 32-bit
9623 	   ABI.  Until now, we've been using the HOWTO for R_MIPS_32;
9624 	   that calculated the right value.  Now, however, we
9625 	   sign-extend the 32-bit result to 64-bits, and store it as a
9626 	   64-bit value.  We are especially generous here in that we
9627 	   go to extreme lengths to support this usage on systems with
9628 	   only a 32-bit VMA.  */
9629 	{
9630 	  bfd_vma sign_bits;
9631 	  bfd_vma low_bits;
9632 	  bfd_vma high_bits;
9633 
9634 	  if (value & ((bfd_vma) 1 << 31))
9635 #ifdef BFD64
9636 	    sign_bits = ((bfd_vma) 1 << 32) - 1;
9637 #else
9638 	    sign_bits = -1;
9639 #endif
9640 	  else
9641 	    sign_bits = 0;
9642 
9643 	  /* If we don't know that we have a 64-bit type,
9644 	     do two separate stores.  */
9645 	  if (bfd_big_endian (input_bfd))
9646 	    {
9647 	      /* Undo what we did above.  */
9648 	      rel->r_offset -= 4;
9649 	      /* Store the sign-bits (which are most significant)
9650 		 first.  */
9651 	      low_bits = sign_bits;
9652 	      high_bits = value;
9653 	    }
9654 	  else
9655 	    {
9656 	      low_bits = value;
9657 	      high_bits = sign_bits;
9658 	    }
9659 	  bfd_put_32 (input_bfd, low_bits,
9660 		      contents + rel->r_offset);
9661 	  bfd_put_32 (input_bfd, high_bits,
9662 		      contents + rel->r_offset + 4);
9663 	  continue;
9664 	}
9665 
9666       /* Actually perform the relocation.  */
9667       if (! mips_elf_perform_relocation (info, howto, rel, value,
9668 					 input_bfd, input_section,
9669 					 contents, cross_mode_jump_p))
9670 	return FALSE;
9671     }
9672 
9673   return TRUE;
9674 }
9675 
9676 /* A function that iterates over each entry in la25_stubs and fills
9677    in the code for each one.  DATA points to a mips_htab_traverse_info.  */
9678 
9679 static int
9680 mips_elf_create_la25_stub (void **slot, void *data)
9681 {
9682   struct mips_htab_traverse_info *hti;
9683   struct mips_elf_link_hash_table *htab;
9684   struct mips_elf_la25_stub *stub;
9685   asection *s;
9686   bfd_byte *loc;
9687   bfd_vma offset, target, target_high, target_low;
9688 
9689   stub = (struct mips_elf_la25_stub *) *slot;
9690   hti = (struct mips_htab_traverse_info *) data;
9691   htab = mips_elf_hash_table (hti->info);
9692   BFD_ASSERT (htab != NULL);
9693 
9694   /* Create the section contents, if we haven't already.  */
9695   s = stub->stub_section;
9696   loc = s->contents;
9697   if (loc == NULL)
9698     {
9699       loc = bfd_malloc (s->size);
9700       if (loc == NULL)
9701 	{
9702 	  hti->error = TRUE;
9703 	  return FALSE;
9704 	}
9705       s->contents = loc;
9706     }
9707 
9708   /* Work out where in the section this stub should go.  */
9709   offset = stub->offset;
9710 
9711   /* Work out the target address.  */
9712   target = mips_elf_get_la25_target (stub, &s);
9713   target += s->output_section->vma + s->output_offset;
9714 
9715   target_high = ((target + 0x8000) >> 16) & 0xffff;
9716   target_low = (target & 0xffff);
9717 
9718   if (stub->stub_section != htab->strampoline)
9719     {
9720       /* This is a simple LUI/ADDIU stub.  Zero out the beginning
9721 	 of the section and write the two instructions at the end.  */
9722       memset (loc, 0, offset);
9723       loc += offset;
9724       if (ELF_ST_IS_MICROMIPS (stub->h->root.other))
9725 	{
9726 	  bfd_put_micromips_32 (hti->output_bfd,
9727 				LA25_LUI_MICROMIPS (target_high),
9728 				loc);
9729 	  bfd_put_micromips_32 (hti->output_bfd,
9730 				LA25_ADDIU_MICROMIPS (target_low),
9731 				loc + 4);
9732 	}
9733       else
9734 	{
9735 	  bfd_put_32 (hti->output_bfd, LA25_LUI (target_high), loc);
9736 	  bfd_put_32 (hti->output_bfd, LA25_ADDIU (target_low), loc + 4);
9737 	}
9738     }
9739   else
9740     {
9741       /* This is trampoline.  */
9742       loc += offset;
9743       if (ELF_ST_IS_MICROMIPS (stub->h->root.other))
9744 	{
9745 	  bfd_put_micromips_32 (hti->output_bfd,
9746 				LA25_LUI_MICROMIPS (target_high), loc);
9747 	  bfd_put_micromips_32 (hti->output_bfd,
9748 				LA25_J_MICROMIPS (target), loc + 4);
9749 	  bfd_put_micromips_32 (hti->output_bfd,
9750 				LA25_ADDIU_MICROMIPS (target_low), loc + 8);
9751 	  bfd_put_32 (hti->output_bfd, 0, loc + 12);
9752 	}
9753       else
9754 	{
9755 	  bfd_put_32 (hti->output_bfd, LA25_LUI (target_high), loc);
9756 	  bfd_put_32 (hti->output_bfd, LA25_J (target), loc + 4);
9757 	  bfd_put_32 (hti->output_bfd, LA25_ADDIU (target_low), loc + 8);
9758 	  bfd_put_32 (hti->output_bfd, 0, loc + 12);
9759 	}
9760     }
9761   return TRUE;
9762 }
9763 
9764 /* If NAME is one of the special IRIX6 symbols defined by the linker,
9765    adjust it appropriately now.  */
9766 
9767 static void
9768 mips_elf_irix6_finish_dynamic_symbol (bfd *abfd ATTRIBUTE_UNUSED,
9769 				      const char *name, Elf_Internal_Sym *sym)
9770 {
9771   /* The linker script takes care of providing names and values for
9772      these, but we must place them into the right sections.  */
9773   static const char* const text_section_symbols[] = {
9774     "_ftext",
9775     "_etext",
9776     "__dso_displacement",
9777     "__elf_header",
9778     "__program_header_table",
9779     NULL
9780   };
9781 
9782   static const char* const data_section_symbols[] = {
9783     "_fdata",
9784     "_edata",
9785     "_end",
9786     "_fbss",
9787     NULL
9788   };
9789 
9790   const char* const *p;
9791   int i;
9792 
9793   for (i = 0; i < 2; ++i)
9794     for (p = (i == 0) ? text_section_symbols : data_section_symbols;
9795 	 *p;
9796 	 ++p)
9797       if (strcmp (*p, name) == 0)
9798 	{
9799 	  /* All of these symbols are given type STT_SECTION by the
9800 	     IRIX6 linker.  */
9801 	  sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
9802 	  sym->st_other = STO_PROTECTED;
9803 
9804 	  /* The IRIX linker puts these symbols in special sections.  */
9805 	  if (i == 0)
9806 	    sym->st_shndx = SHN_MIPS_TEXT;
9807 	  else
9808 	    sym->st_shndx = SHN_MIPS_DATA;
9809 
9810 	  break;
9811 	}
9812 }
9813 
9814 /* Finish up dynamic symbol handling.  We set the contents of various
9815    dynamic sections here.  */
9816 
9817 bfd_boolean
9818 _bfd_mips_elf_finish_dynamic_symbol (bfd *output_bfd,
9819 				     struct bfd_link_info *info,
9820 				     struct elf_link_hash_entry *h,
9821 				     Elf_Internal_Sym *sym)
9822 {
9823   bfd *dynobj;
9824   asection *sgot;
9825   struct mips_got_info *g, *gg;
9826   const char *name;
9827   int idx;
9828   struct mips_elf_link_hash_table *htab;
9829   struct mips_elf_link_hash_entry *hmips;
9830 
9831   htab = mips_elf_hash_table (info);
9832   BFD_ASSERT (htab != NULL);
9833   dynobj = elf_hash_table (info)->dynobj;
9834   hmips = (struct mips_elf_link_hash_entry *) h;
9835 
9836   BFD_ASSERT (!htab->is_vxworks);
9837 
9838   if (h->plt.offset != MINUS_ONE && hmips->no_fn_stub)
9839     {
9840       /* We've decided to create a PLT entry for this symbol.  */
9841       bfd_byte *loc;
9842       bfd_vma header_address, plt_index, got_address;
9843       bfd_vma got_address_high, got_address_low, load;
9844       const bfd_vma *plt_entry;
9845 
9846       BFD_ASSERT (htab->use_plts_and_copy_relocs);
9847       BFD_ASSERT (h->dynindx != -1);
9848       BFD_ASSERT (htab->splt != NULL);
9849       BFD_ASSERT (h->plt.offset <= htab->splt->size);
9850       BFD_ASSERT (!h->def_regular);
9851 
9852       /* Calculate the address of the PLT header.  */
9853       header_address = (htab->splt->output_section->vma
9854 			+ htab->splt->output_offset);
9855 
9856       /* Calculate the index of the entry.  */
9857       plt_index = ((h->plt.offset - htab->plt_header_size)
9858 		   / htab->plt_entry_size);
9859 
9860       /* Calculate the address of the .got.plt entry.  */
9861       got_address = (htab->sgotplt->output_section->vma
9862 		     + htab->sgotplt->output_offset
9863 		     + (2 + plt_index) * MIPS_ELF_GOT_SIZE (dynobj));
9864       got_address_high = ((got_address + 0x8000) >> 16) & 0xffff;
9865       got_address_low = got_address & 0xffff;
9866 
9867       /* Initially point the .got.plt entry at the PLT header.  */
9868       loc = (htab->sgotplt->contents
9869 	     + (2 + plt_index) * MIPS_ELF_GOT_SIZE (dynobj));
9870       if (ABI_64_P (output_bfd))
9871 	bfd_put_64 (output_bfd, header_address, loc);
9872       else
9873 	bfd_put_32 (output_bfd, header_address, loc);
9874 
9875       /* Find out where the .plt entry should go.  */
9876       loc = htab->splt->contents + h->plt.offset;
9877 
9878       /* Pick the load opcode.  */
9879       load = MIPS_ELF_LOAD_WORD (output_bfd);
9880 
9881       /* Fill in the PLT entry itself.  */
9882       plt_entry = mips_exec_plt_entry;
9883       bfd_put_32 (output_bfd, plt_entry[0] | got_address_high, loc);
9884       bfd_put_32 (output_bfd, plt_entry[1] | got_address_low | load, loc + 4);
9885 
9886       if (! LOAD_INTERLOCKS_P (output_bfd))
9887 	{
9888 	  bfd_put_32 (output_bfd, plt_entry[2] | got_address_low, loc + 8);
9889 	  bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
9890 	}
9891       else
9892 	{
9893 	  bfd_put_32 (output_bfd, plt_entry[3], loc + 8);
9894 	  bfd_put_32 (output_bfd, plt_entry[2] | got_address_low, loc + 12);
9895 	}
9896 
9897       /* Emit an R_MIPS_JUMP_SLOT relocation against the .got.plt entry.  */
9898       mips_elf_output_dynamic_relocation (output_bfd, htab->srelplt,
9899 					  plt_index, h->dynindx,
9900 					  R_MIPS_JUMP_SLOT, got_address);
9901 
9902       /* We distinguish between PLT entries and lazy-binding stubs by
9903 	 giving the former an st_other value of STO_MIPS_PLT.  Set the
9904 	 flag and leave the value if there are any relocations in the
9905 	 binary where pointer equality matters.  */
9906       sym->st_shndx = SHN_UNDEF;
9907       if (h->pointer_equality_needed)
9908 	sym->st_other = STO_MIPS_PLT;
9909       else
9910 	sym->st_value = 0;
9911     }
9912   else if (h->plt.offset != MINUS_ONE)
9913     {
9914       /* We've decided to create a lazy-binding stub.  */
9915       bfd_byte stub[MIPS_FUNCTION_STUB_BIG_SIZE];
9916 
9917       /* This symbol has a stub.  Set it up.  */
9918 
9919       BFD_ASSERT (h->dynindx != -1);
9920 
9921       BFD_ASSERT ((htab->function_stub_size == MIPS_FUNCTION_STUB_BIG_SIZE)
9922                   || (h->dynindx <= 0xffff));
9923 
9924       /* Values up to 2^31 - 1 are allowed.  Larger values would cause
9925 	 sign extension at runtime in the stub, resulting in a negative
9926 	 index value.  */
9927       if (h->dynindx & ~0x7fffffff)
9928 	return FALSE;
9929 
9930       /* Fill the stub.  */
9931       idx = 0;
9932       bfd_put_32 (output_bfd, STUB_LW (output_bfd), stub + idx);
9933       idx += 4;
9934       bfd_put_32 (output_bfd, STUB_MOVE (output_bfd), stub + idx);
9935       idx += 4;
9936       if (htab->function_stub_size == MIPS_FUNCTION_STUB_BIG_SIZE)
9937         {
9938           bfd_put_32 (output_bfd, STUB_LUI ((h->dynindx >> 16) & 0x7fff),
9939                       stub + idx);
9940           idx += 4;
9941         }
9942       bfd_put_32 (output_bfd, STUB_JALR, stub + idx);
9943       idx += 4;
9944 
9945       /* If a large stub is not required and sign extension is not a
9946          problem, then use legacy code in the stub.  */
9947       if (htab->function_stub_size == MIPS_FUNCTION_STUB_BIG_SIZE)
9948 	bfd_put_32 (output_bfd, STUB_ORI (h->dynindx & 0xffff), stub + idx);
9949       else if (h->dynindx & ~0x7fff)
9950         bfd_put_32 (output_bfd, STUB_LI16U (h->dynindx & 0xffff), stub + idx);
9951       else
9952         bfd_put_32 (output_bfd, STUB_LI16S (output_bfd, h->dynindx),
9953 		    stub + idx);
9954 
9955       BFD_ASSERT (h->plt.offset <= htab->sstubs->size);
9956       memcpy (htab->sstubs->contents + h->plt.offset,
9957 	      stub, htab->function_stub_size);
9958 
9959       /* Mark the symbol as undefined.  plt.offset != -1 occurs
9960 	 only for the referenced symbol.  */
9961       sym->st_shndx = SHN_UNDEF;
9962 
9963       /* The run-time linker uses the st_value field of the symbol
9964 	 to reset the global offset table entry for this external
9965 	 to its stub address when unlinking a shared object.  */
9966       sym->st_value = (htab->sstubs->output_section->vma
9967 		       + htab->sstubs->output_offset
9968 		       + h->plt.offset);
9969     }
9970 
9971   /* If we have a MIPS16 function with a stub, the dynamic symbol must
9972      refer to the stub, since only the stub uses the standard calling
9973      conventions.  */
9974   if (h->dynindx != -1 && hmips->fn_stub != NULL)
9975     {
9976       BFD_ASSERT (hmips->need_fn_stub);
9977       sym->st_value = (hmips->fn_stub->output_section->vma
9978 		       + hmips->fn_stub->output_offset);
9979       sym->st_size = hmips->fn_stub->size;
9980       sym->st_other = ELF_ST_VISIBILITY (sym->st_other);
9981     }
9982 
9983   BFD_ASSERT (h->dynindx != -1
9984 	      || h->forced_local);
9985 
9986   sgot = htab->sgot;
9987   g = htab->got_info;
9988   BFD_ASSERT (g != NULL);
9989 
9990   /* Run through the global symbol table, creating GOT entries for all
9991      the symbols that need them.  */
9992   if (hmips->global_got_area != GGA_NONE)
9993     {
9994       bfd_vma offset;
9995       bfd_vma value;
9996 
9997       value = sym->st_value;
9998       offset = mips_elf_primary_global_got_index (output_bfd, info, h);
9999       MIPS_ELF_PUT_WORD (output_bfd, value, sgot->contents + offset);
10000     }
10001 
10002   if (hmips->global_got_area != GGA_NONE && g->next)
10003     {
10004       struct mips_got_entry e, *p;
10005       bfd_vma entry;
10006       bfd_vma offset;
10007 
10008       gg = g;
10009 
10010       e.abfd = output_bfd;
10011       e.symndx = -1;
10012       e.d.h = hmips;
10013       e.tls_type = GOT_TLS_NONE;
10014 
10015       for (g = g->next; g->next != gg; g = g->next)
10016 	{
10017 	  if (g->got_entries
10018 	      && (p = (struct mips_got_entry *) htab_find (g->got_entries,
10019 							   &e)))
10020 	    {
10021 	      offset = p->gotidx;
10022 	      BFD_ASSERT (offset > 0 && offset < htab->sgot->size);
10023 	      if (info->shared
10024 		  || (elf_hash_table (info)->dynamic_sections_created
10025 		      && p->d.h != NULL
10026 		      && p->d.h->root.def_dynamic
10027 		      && !p->d.h->root.def_regular))
10028 		{
10029 		  /* Create an R_MIPS_REL32 relocation for this entry.  Due to
10030 		     the various compatibility problems, it's easier to mock
10031 		     up an R_MIPS_32 or R_MIPS_64 relocation and leave
10032 		     mips_elf_create_dynamic_relocation to calculate the
10033 		     appropriate addend.  */
10034 		  Elf_Internal_Rela rel[3];
10035 
10036 		  memset (rel, 0, sizeof (rel));
10037 		  if (ABI_64_P (output_bfd))
10038 		    rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_64);
10039 		  else
10040 		    rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_32);
10041 		  rel[0].r_offset = rel[1].r_offset = rel[2].r_offset = offset;
10042 
10043 		  entry = 0;
10044 		  if (! (mips_elf_create_dynamic_relocation
10045 			 (output_bfd, info, rel,
10046 			  e.d.h, NULL, sym->st_value, &entry, sgot)))
10047 		    return FALSE;
10048 		}
10049 	      else
10050 		entry = sym->st_value;
10051 	      MIPS_ELF_PUT_WORD (output_bfd, entry, sgot->contents + offset);
10052 	    }
10053 	}
10054     }
10055 
10056   /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute.  */
10057   name = h->root.root.string;
10058   if (h == elf_hash_table (info)->hdynamic
10059       || h == elf_hash_table (info)->hgot)
10060     sym->st_shndx = SHN_ABS;
10061   else if (strcmp (name, "_DYNAMIC_LINK") == 0
10062 	   || strcmp (name, "_DYNAMIC_LINKING") == 0)
10063     {
10064       sym->st_shndx = SHN_ABS;
10065       sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10066       sym->st_value = 1;
10067     }
10068   else if (strcmp (name, "_gp_disp") == 0 && ! NEWABI_P (output_bfd))
10069     {
10070       sym->st_shndx = SHN_ABS;
10071       sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10072       sym->st_value = elf_gp (output_bfd);
10073     }
10074   else if (SGI_COMPAT (output_bfd))
10075     {
10076       if (strcmp (name, mips_elf_dynsym_rtproc_names[0]) == 0
10077 	  || strcmp (name, mips_elf_dynsym_rtproc_names[1]) == 0)
10078 	{
10079 	  sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10080 	  sym->st_other = STO_PROTECTED;
10081 	  sym->st_value = 0;
10082 	  sym->st_shndx = SHN_MIPS_DATA;
10083 	}
10084       else if (strcmp (name, mips_elf_dynsym_rtproc_names[2]) == 0)
10085 	{
10086 	  sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10087 	  sym->st_other = STO_PROTECTED;
10088 	  sym->st_value = mips_elf_hash_table (info)->procedure_count;
10089 	  sym->st_shndx = SHN_ABS;
10090 	}
10091       else if (sym->st_shndx != SHN_UNDEF && sym->st_shndx != SHN_ABS)
10092 	{
10093 	  if (h->type == STT_FUNC)
10094 	    sym->st_shndx = SHN_MIPS_TEXT;
10095 	  else if (h->type == STT_OBJECT)
10096 	    sym->st_shndx = SHN_MIPS_DATA;
10097 	}
10098     }
10099 
10100   /* Emit a copy reloc, if needed.  */
10101   if (h->needs_copy)
10102     {
10103       asection *s;
10104       bfd_vma symval;
10105 
10106       BFD_ASSERT (h->dynindx != -1);
10107       BFD_ASSERT (htab->use_plts_and_copy_relocs);
10108 
10109       s = mips_elf_rel_dyn_section (info, FALSE);
10110       symval = (h->root.u.def.section->output_section->vma
10111 		+ h->root.u.def.section->output_offset
10112 		+ h->root.u.def.value);
10113       mips_elf_output_dynamic_relocation (output_bfd, s, s->reloc_count++,
10114 					  h->dynindx, R_MIPS_COPY, symval);
10115     }
10116 
10117   /* Handle the IRIX6-specific symbols.  */
10118   if (IRIX_COMPAT (output_bfd) == ict_irix6)
10119     mips_elf_irix6_finish_dynamic_symbol (output_bfd, name, sym);
10120 
10121   /* Keep dynamic compressed symbols odd.  This allows the dynamic linker
10122      to treat compressed symbols like any other.  */
10123   if (ELF_ST_IS_MIPS16 (sym->st_other))
10124     {
10125       BFD_ASSERT (sym->st_value & 1);
10126       sym->st_other -= STO_MIPS16;
10127     }
10128   else if (ELF_ST_IS_MICROMIPS (sym->st_other))
10129     {
10130       BFD_ASSERT (sym->st_value & 1);
10131       sym->st_other -= STO_MICROMIPS;
10132     }
10133 
10134   return TRUE;
10135 }
10136 
10137 /* Likewise, for VxWorks.  */
10138 
10139 bfd_boolean
10140 _bfd_mips_vxworks_finish_dynamic_symbol (bfd *output_bfd,
10141 					 struct bfd_link_info *info,
10142 					 struct elf_link_hash_entry *h,
10143 					 Elf_Internal_Sym *sym)
10144 {
10145   bfd *dynobj;
10146   asection *sgot;
10147   struct mips_got_info *g;
10148   struct mips_elf_link_hash_table *htab;
10149   struct mips_elf_link_hash_entry *hmips;
10150 
10151   htab = mips_elf_hash_table (info);
10152   BFD_ASSERT (htab != NULL);
10153   dynobj = elf_hash_table (info)->dynobj;
10154   hmips = (struct mips_elf_link_hash_entry *) h;
10155 
10156   if (h->plt.offset != (bfd_vma) -1)
10157     {
10158       bfd_byte *loc;
10159       bfd_vma plt_address, plt_index, got_address, got_offset, branch_offset;
10160       Elf_Internal_Rela rel;
10161       static const bfd_vma *plt_entry;
10162 
10163       BFD_ASSERT (h->dynindx != -1);
10164       BFD_ASSERT (htab->splt != NULL);
10165       BFD_ASSERT (h->plt.offset <= htab->splt->size);
10166 
10167       /* Calculate the address of the .plt entry.  */
10168       plt_address = (htab->splt->output_section->vma
10169 		     + htab->splt->output_offset
10170 		     + h->plt.offset);
10171 
10172       /* Calculate the index of the entry.  */
10173       plt_index = ((h->plt.offset - htab->plt_header_size)
10174 		   / htab->plt_entry_size);
10175 
10176       /* Calculate the address of the .got.plt entry.  */
10177       got_address = (htab->sgotplt->output_section->vma
10178 		     + htab->sgotplt->output_offset
10179 		     + plt_index * 4);
10180 
10181       /* Calculate the offset of the .got.plt entry from
10182 	 _GLOBAL_OFFSET_TABLE_.  */
10183       got_offset = mips_elf_gotplt_index (info, h);
10184 
10185       /* Calculate the offset for the branch at the start of the PLT
10186 	 entry.  The branch jumps to the beginning of .plt.  */
10187       branch_offset = -(h->plt.offset / 4 + 1) & 0xffff;
10188 
10189       /* Fill in the initial value of the .got.plt entry.  */
10190       bfd_put_32 (output_bfd, plt_address,
10191 		  htab->sgotplt->contents + plt_index * 4);
10192 
10193       /* Find out where the .plt entry should go.  */
10194       loc = htab->splt->contents + h->plt.offset;
10195 
10196       if (info->shared)
10197 	{
10198 	  plt_entry = mips_vxworks_shared_plt_entry;
10199 	  bfd_put_32 (output_bfd, plt_entry[0] | branch_offset, loc);
10200 	  bfd_put_32 (output_bfd, plt_entry[1] | plt_index, loc + 4);
10201 	}
10202       else
10203 	{
10204 	  bfd_vma got_address_high, got_address_low;
10205 
10206 	  plt_entry = mips_vxworks_exec_plt_entry;
10207 	  got_address_high = ((got_address + 0x8000) >> 16) & 0xffff;
10208 	  got_address_low = got_address & 0xffff;
10209 
10210 	  bfd_put_32 (output_bfd, plt_entry[0] | branch_offset, loc);
10211 	  bfd_put_32 (output_bfd, plt_entry[1] | plt_index, loc + 4);
10212 	  bfd_put_32 (output_bfd, plt_entry[2] | got_address_high, loc + 8);
10213 	  bfd_put_32 (output_bfd, plt_entry[3] | got_address_low, loc + 12);
10214 	  bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
10215 	  bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
10216 	  bfd_put_32 (output_bfd, plt_entry[6], loc + 24);
10217 	  bfd_put_32 (output_bfd, plt_entry[7], loc + 28);
10218 
10219 	  loc = (htab->srelplt2->contents
10220 		 + (plt_index * 3 + 2) * sizeof (Elf32_External_Rela));
10221 
10222 	  /* Emit a relocation for the .got.plt entry.  */
10223 	  rel.r_offset = got_address;
10224 	  rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_MIPS_32);
10225 	  rel.r_addend = h->plt.offset;
10226 	  bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10227 
10228 	  /* Emit a relocation for the lui of %hi(<.got.plt slot>).  */
10229 	  loc += sizeof (Elf32_External_Rela);
10230 	  rel.r_offset = plt_address + 8;
10231 	  rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
10232 	  rel.r_addend = got_offset;
10233 	  bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10234 
10235 	  /* Emit a relocation for the addiu of %lo(<.got.plt slot>).  */
10236 	  loc += sizeof (Elf32_External_Rela);
10237 	  rel.r_offset += 4;
10238 	  rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
10239 	  bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10240 	}
10241 
10242       /* Emit an R_MIPS_JUMP_SLOT relocation against the .got.plt entry.  */
10243       loc = htab->srelplt->contents + plt_index * sizeof (Elf32_External_Rela);
10244       rel.r_offset = got_address;
10245       rel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_JUMP_SLOT);
10246       rel.r_addend = 0;
10247       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10248 
10249       if (!h->def_regular)
10250 	sym->st_shndx = SHN_UNDEF;
10251     }
10252 
10253   BFD_ASSERT (h->dynindx != -1 || h->forced_local);
10254 
10255   sgot = htab->sgot;
10256   g = htab->got_info;
10257   BFD_ASSERT (g != NULL);
10258 
10259   /* See if this symbol has an entry in the GOT.  */
10260   if (hmips->global_got_area != GGA_NONE)
10261     {
10262       bfd_vma offset;
10263       Elf_Internal_Rela outrel;
10264       bfd_byte *loc;
10265       asection *s;
10266 
10267       /* Install the symbol value in the GOT.   */
10268       offset = mips_elf_primary_global_got_index (output_bfd, info, h);
10269       MIPS_ELF_PUT_WORD (output_bfd, sym->st_value, sgot->contents + offset);
10270 
10271       /* Add a dynamic relocation for it.  */
10272       s = mips_elf_rel_dyn_section (info, FALSE);
10273       loc = s->contents + (s->reloc_count++ * sizeof (Elf32_External_Rela));
10274       outrel.r_offset = (sgot->output_section->vma
10275 			 + sgot->output_offset
10276 			 + offset);
10277       outrel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_32);
10278       outrel.r_addend = 0;
10279       bfd_elf32_swap_reloca_out (dynobj, &outrel, loc);
10280     }
10281 
10282   /* Emit a copy reloc, if needed.  */
10283   if (h->needs_copy)
10284     {
10285       Elf_Internal_Rela rel;
10286 
10287       BFD_ASSERT (h->dynindx != -1);
10288 
10289       rel.r_offset = (h->root.u.def.section->output_section->vma
10290 		      + h->root.u.def.section->output_offset
10291 		      + h->root.u.def.value);
10292       rel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_COPY);
10293       rel.r_addend = 0;
10294       bfd_elf32_swap_reloca_out (output_bfd, &rel,
10295 				 htab->srelbss->contents
10296 				 + (htab->srelbss->reloc_count
10297 				    * sizeof (Elf32_External_Rela)));
10298       ++htab->srelbss->reloc_count;
10299     }
10300 
10301   /* If this is a mips16/microMIPS symbol, force the value to be even.  */
10302   if (ELF_ST_IS_COMPRESSED (sym->st_other))
10303     sym->st_value &= ~1;
10304 
10305   return TRUE;
10306 }
10307 
10308 /* Write out a plt0 entry to the beginning of .plt.  */
10309 
10310 static void
10311 mips_finish_exec_plt (bfd *output_bfd, struct bfd_link_info *info)
10312 {
10313   bfd_byte *loc;
10314   bfd_vma gotplt_value, gotplt_value_high, gotplt_value_low;
10315   static const bfd_vma *plt_entry;
10316   struct mips_elf_link_hash_table *htab;
10317 
10318   htab = mips_elf_hash_table (info);
10319   BFD_ASSERT (htab != NULL);
10320 
10321   if (ABI_64_P (output_bfd))
10322     plt_entry = mips_n64_exec_plt0_entry;
10323   else if (ABI_N32_P (output_bfd))
10324     plt_entry = mips_n32_exec_plt0_entry;
10325   else
10326     plt_entry = mips_o32_exec_plt0_entry;
10327 
10328   /* Calculate the value of .got.plt.  */
10329   gotplt_value = (htab->sgotplt->output_section->vma
10330 		  + htab->sgotplt->output_offset);
10331   gotplt_value_high = ((gotplt_value + 0x8000) >> 16) & 0xffff;
10332   gotplt_value_low = gotplt_value & 0xffff;
10333 
10334   /* The PLT sequence is not safe for N64 if .got.plt's address can
10335      not be loaded in two instructions.  */
10336   BFD_ASSERT ((gotplt_value & ~(bfd_vma) 0x7fffffff) == 0
10337 	      || ~(gotplt_value | 0x7fffffff) == 0);
10338 
10339   /* Install the PLT header.  */
10340   loc = htab->splt->contents;
10341   bfd_put_32 (output_bfd, plt_entry[0] | gotplt_value_high, loc);
10342   bfd_put_32 (output_bfd, plt_entry[1] | gotplt_value_low, loc + 4);
10343   bfd_put_32 (output_bfd, plt_entry[2] | gotplt_value_low, loc + 8);
10344   bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
10345   bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
10346   bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
10347   bfd_put_32 (output_bfd, plt_entry[6], loc + 24);
10348   bfd_put_32 (output_bfd, plt_entry[7], loc + 28);
10349 }
10350 
10351 /* Install the PLT header for a VxWorks executable and finalize the
10352    contents of .rela.plt.unloaded.  */
10353 
10354 static void
10355 mips_vxworks_finish_exec_plt (bfd *output_bfd, struct bfd_link_info *info)
10356 {
10357   Elf_Internal_Rela rela;
10358   bfd_byte *loc;
10359   bfd_vma got_value, got_value_high, got_value_low, plt_address;
10360   static const bfd_vma *plt_entry;
10361   struct mips_elf_link_hash_table *htab;
10362 
10363   htab = mips_elf_hash_table (info);
10364   BFD_ASSERT (htab != NULL);
10365 
10366   plt_entry = mips_vxworks_exec_plt0_entry;
10367 
10368   /* Calculate the value of _GLOBAL_OFFSET_TABLE_.  */
10369   got_value = (htab->root.hgot->root.u.def.section->output_section->vma
10370 	       + htab->root.hgot->root.u.def.section->output_offset
10371 	       + htab->root.hgot->root.u.def.value);
10372 
10373   got_value_high = ((got_value + 0x8000) >> 16) & 0xffff;
10374   got_value_low = got_value & 0xffff;
10375 
10376   /* Calculate the address of the PLT header.  */
10377   plt_address = htab->splt->output_section->vma + htab->splt->output_offset;
10378 
10379   /* Install the PLT header.  */
10380   loc = htab->splt->contents;
10381   bfd_put_32 (output_bfd, plt_entry[0] | got_value_high, loc);
10382   bfd_put_32 (output_bfd, plt_entry[1] | got_value_low, loc + 4);
10383   bfd_put_32 (output_bfd, plt_entry[2], loc + 8);
10384   bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
10385   bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
10386   bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
10387 
10388   /* Output the relocation for the lui of %hi(_GLOBAL_OFFSET_TABLE_).  */
10389   loc = htab->srelplt2->contents;
10390   rela.r_offset = plt_address;
10391   rela.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
10392   rela.r_addend = 0;
10393   bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
10394   loc += sizeof (Elf32_External_Rela);
10395 
10396   /* Output the relocation for the following addiu of
10397      %lo(_GLOBAL_OFFSET_TABLE_).  */
10398   rela.r_offset += 4;
10399   rela.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
10400   bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
10401   loc += sizeof (Elf32_External_Rela);
10402 
10403   /* Fix up the remaining relocations.  They may have the wrong
10404      symbol index for _G_O_T_ or _P_L_T_ depending on the order
10405      in which symbols were output.  */
10406   while (loc < htab->srelplt2->contents + htab->srelplt2->size)
10407     {
10408       Elf_Internal_Rela rel;
10409 
10410       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
10411       rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_MIPS_32);
10412       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10413       loc += sizeof (Elf32_External_Rela);
10414 
10415       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
10416       rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
10417       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10418       loc += sizeof (Elf32_External_Rela);
10419 
10420       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
10421       rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
10422       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10423       loc += sizeof (Elf32_External_Rela);
10424     }
10425 }
10426 
10427 /* Install the PLT header for a VxWorks shared library.  */
10428 
10429 static void
10430 mips_vxworks_finish_shared_plt (bfd *output_bfd, struct bfd_link_info *info)
10431 {
10432   unsigned int i;
10433   struct mips_elf_link_hash_table *htab;
10434 
10435   htab = mips_elf_hash_table (info);
10436   BFD_ASSERT (htab != NULL);
10437 
10438   /* We just need to copy the entry byte-by-byte.  */
10439   for (i = 0; i < ARRAY_SIZE (mips_vxworks_shared_plt0_entry); i++)
10440     bfd_put_32 (output_bfd, mips_vxworks_shared_plt0_entry[i],
10441 		htab->splt->contents + i * 4);
10442 }
10443 
10444 /* Finish up the dynamic sections.  */
10445 
10446 bfd_boolean
10447 _bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd,
10448 				       struct bfd_link_info *info)
10449 {
10450   bfd *dynobj;
10451   asection *sdyn;
10452   asection *sgot;
10453   struct mips_got_info *gg, *g;
10454   struct mips_elf_link_hash_table *htab;
10455 
10456   htab = mips_elf_hash_table (info);
10457   BFD_ASSERT (htab != NULL);
10458 
10459   dynobj = elf_hash_table (info)->dynobj;
10460 
10461   sdyn = bfd_get_linker_section (dynobj, ".dynamic");
10462 
10463   sgot = htab->sgot;
10464   gg = htab->got_info;
10465 
10466   if (elf_hash_table (info)->dynamic_sections_created)
10467     {
10468       bfd_byte *b;
10469       int dyn_to_skip = 0, dyn_skipped = 0;
10470 
10471       BFD_ASSERT (sdyn != NULL);
10472       BFD_ASSERT (gg != NULL);
10473 
10474       g = mips_elf_bfd_got (output_bfd, FALSE);
10475       BFD_ASSERT (g != NULL);
10476 
10477       for (b = sdyn->contents;
10478 	   b < sdyn->contents + sdyn->size;
10479 	   b += MIPS_ELF_DYN_SIZE (dynobj))
10480 	{
10481 	  Elf_Internal_Dyn dyn;
10482 	  const char *name;
10483 	  size_t elemsize;
10484 	  asection *s;
10485 	  bfd_boolean swap_out_p;
10486 
10487 	  /* Read in the current dynamic entry.  */
10488 	  (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
10489 
10490 	  /* Assume that we're going to modify it and write it out.  */
10491 	  swap_out_p = TRUE;
10492 
10493 	  switch (dyn.d_tag)
10494 	    {
10495 	    case DT_RELENT:
10496 	      dyn.d_un.d_val = MIPS_ELF_REL_SIZE (dynobj);
10497 	      break;
10498 
10499 	    case DT_RELAENT:
10500 	      BFD_ASSERT (htab->is_vxworks);
10501 	      dyn.d_un.d_val = MIPS_ELF_RELA_SIZE (dynobj);
10502 	      break;
10503 
10504 	    case DT_STRSZ:
10505 	      /* Rewrite DT_STRSZ.  */
10506 	      dyn.d_un.d_val =
10507 		_bfd_elf_strtab_size (elf_hash_table (info)->dynstr);
10508 	      break;
10509 
10510 	    case DT_PLTGOT:
10511 	      s = htab->sgot;
10512 	      dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
10513 	      break;
10514 
10515 	    case DT_MIPS_PLTGOT:
10516 	      s = htab->sgotplt;
10517 	      dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
10518 	      break;
10519 
10520 	    case DT_MIPS_RLD_VERSION:
10521 	      dyn.d_un.d_val = 1; /* XXX */
10522 	      break;
10523 
10524 	    case DT_MIPS_FLAGS:
10525 	      dyn.d_un.d_val = RHF_NOTPOT; /* XXX */
10526 	      break;
10527 
10528 	    case DT_MIPS_TIME_STAMP:
10529 	      {
10530 		time_t t;
10531 		time (&t);
10532 		dyn.d_un.d_val = t;
10533 	      }
10534 	      break;
10535 
10536 	    case DT_MIPS_ICHECKSUM:
10537 	      /* XXX FIXME: */
10538 	      swap_out_p = FALSE;
10539 	      break;
10540 
10541 	    case DT_MIPS_IVERSION:
10542 	      /* XXX FIXME: */
10543 	      swap_out_p = FALSE;
10544 	      break;
10545 
10546 	    case DT_MIPS_BASE_ADDRESS:
10547 	      s = output_bfd->sections;
10548 	      BFD_ASSERT (s != NULL);
10549 	      dyn.d_un.d_ptr = s->vma & ~(bfd_vma) 0xffff;
10550 	      break;
10551 
10552 	    case DT_MIPS_LOCAL_GOTNO:
10553 	      dyn.d_un.d_val = g->local_gotno;
10554 	      break;
10555 
10556 	    case DT_MIPS_UNREFEXTNO:
10557 	      /* The index into the dynamic symbol table which is the
10558 		 entry of the first external symbol that is not
10559 		 referenced within the same object.  */
10560 	      dyn.d_un.d_val = bfd_count_sections (output_bfd) + 1;
10561 	      break;
10562 
10563 	    case DT_MIPS_GOTSYM:
10564 	      if (htab->global_gotsym)
10565 		{
10566 		  dyn.d_un.d_val = htab->global_gotsym->dynindx;
10567 		  break;
10568 		}
10569 	      /* In case if we don't have global got symbols we default
10570 		 to setting DT_MIPS_GOTSYM to the same value as
10571 		 DT_MIPS_SYMTABNO, so we just fall through.  */
10572 
10573 	    case DT_MIPS_SYMTABNO:
10574 	      name = ".dynsym";
10575 	      elemsize = MIPS_ELF_SYM_SIZE (output_bfd);
10576 	      s = bfd_get_section_by_name (output_bfd, name);
10577 	      BFD_ASSERT (s != NULL);
10578 
10579 	      dyn.d_un.d_val = s->size / elemsize;
10580 	      break;
10581 
10582 	    case DT_MIPS_HIPAGENO:
10583 	      dyn.d_un.d_val = g->local_gotno - htab->reserved_gotno;
10584 	      break;
10585 
10586 	    case DT_MIPS_RLD_MAP:
10587 	      {
10588 		struct elf_link_hash_entry *h;
10589 		h = mips_elf_hash_table (info)->rld_symbol;
10590 		if (!h)
10591 		  {
10592 		    dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
10593 		    swap_out_p = FALSE;
10594 		    break;
10595 		  }
10596 		s = h->root.u.def.section;
10597 		dyn.d_un.d_ptr = (s->output_section->vma + s->output_offset
10598 				  + h->root.u.def.value);
10599 	      }
10600 	      break;
10601 
10602 	    case DT_MIPS_OPTIONS:
10603 	      s = (bfd_get_section_by_name
10604 		   (output_bfd, MIPS_ELF_OPTIONS_SECTION_NAME (output_bfd)));
10605 	      dyn.d_un.d_ptr = s->vma;
10606 	      break;
10607 
10608 	    case DT_RELASZ:
10609 	      BFD_ASSERT (htab->is_vxworks);
10610 	      /* The count does not include the JUMP_SLOT relocations.  */
10611 	      if (htab->srelplt)
10612 		dyn.d_un.d_val -= htab->srelplt->size;
10613 	      break;
10614 
10615 	    case DT_PLTREL:
10616 	      BFD_ASSERT (htab->use_plts_and_copy_relocs);
10617 	      if (htab->is_vxworks)
10618 		dyn.d_un.d_val = DT_RELA;
10619 	      else
10620 		dyn.d_un.d_val = DT_REL;
10621 	      break;
10622 
10623 	    case DT_PLTRELSZ:
10624 	      BFD_ASSERT (htab->use_plts_and_copy_relocs);
10625 	      dyn.d_un.d_val = htab->srelplt->size;
10626 	      break;
10627 
10628 	    case DT_JMPREL:
10629 	      BFD_ASSERT (htab->use_plts_and_copy_relocs);
10630 	      dyn.d_un.d_ptr = (htab->srelplt->output_section->vma
10631 				+ htab->srelplt->output_offset);
10632 	      break;
10633 
10634 	    case DT_TEXTREL:
10635 	      /* If we didn't need any text relocations after all, delete
10636 		 the dynamic tag.  */
10637 	      if (!(info->flags & DF_TEXTREL))
10638 		{
10639 		  dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
10640 		  swap_out_p = FALSE;
10641 		}
10642 	      break;
10643 
10644 	    case DT_FLAGS:
10645 	      /* If we didn't need any text relocations after all, clear
10646 		 DF_TEXTREL from DT_FLAGS.  */
10647 	      if (!(info->flags & DF_TEXTREL))
10648 		dyn.d_un.d_val &= ~DF_TEXTREL;
10649 	      else
10650 		swap_out_p = FALSE;
10651 	      break;
10652 
10653 	    default:
10654 	      swap_out_p = FALSE;
10655 	      if (htab->is_vxworks
10656 		  && elf_vxworks_finish_dynamic_entry (output_bfd, &dyn))
10657 		swap_out_p = TRUE;
10658 	      break;
10659 	    }
10660 
10661 	  if (swap_out_p || dyn_skipped)
10662 	    (*get_elf_backend_data (dynobj)->s->swap_dyn_out)
10663 	      (dynobj, &dyn, b - dyn_skipped);
10664 
10665 	  if (dyn_to_skip)
10666 	    {
10667 	      dyn_skipped += dyn_to_skip;
10668 	      dyn_to_skip = 0;
10669 	    }
10670 	}
10671 
10672       /* Wipe out any trailing entries if we shifted down a dynamic tag.  */
10673       if (dyn_skipped > 0)
10674 	memset (b - dyn_skipped, 0, dyn_skipped);
10675     }
10676 
10677   if (sgot != NULL && sgot->size > 0
10678       && !bfd_is_abs_section (sgot->output_section))
10679     {
10680       if (htab->is_vxworks)
10681 	{
10682 	  /* The first entry of the global offset table points to the
10683 	     ".dynamic" section.  The second is initialized by the
10684 	     loader and contains the shared library identifier.
10685 	     The third is also initialized by the loader and points
10686 	     to the lazy resolution stub.  */
10687 	  MIPS_ELF_PUT_WORD (output_bfd,
10688 			     sdyn->output_offset + sdyn->output_section->vma,
10689 			     sgot->contents);
10690 	  MIPS_ELF_PUT_WORD (output_bfd, 0,
10691 			     sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd));
10692 	  MIPS_ELF_PUT_WORD (output_bfd, 0,
10693 			     sgot->contents
10694 			     + 2 * MIPS_ELF_GOT_SIZE (output_bfd));
10695 	}
10696       else
10697 	{
10698 	  /* The first entry of the global offset table will be filled at
10699 	     runtime. The second entry will be used by some runtime loaders.
10700 	     This isn't the case of IRIX rld.  */
10701 	  MIPS_ELF_PUT_WORD (output_bfd, (bfd_vma) 0, sgot->contents);
10702 	  MIPS_ELF_PUT_WORD (output_bfd, MIPS_ELF_GNU_GOT1_MASK (output_bfd),
10703 			     sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd));
10704 	}
10705 
10706       elf_section_data (sgot->output_section)->this_hdr.sh_entsize
10707 	 = MIPS_ELF_GOT_SIZE (output_bfd);
10708     }
10709 
10710   /* Generate dynamic relocations for the non-primary gots.  */
10711   if (gg != NULL && gg->next)
10712     {
10713       Elf_Internal_Rela rel[3];
10714       bfd_vma addend = 0;
10715 
10716       memset (rel, 0, sizeof (rel));
10717       rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_REL32);
10718 
10719       for (g = gg->next; g->next != gg; g = g->next)
10720 	{
10721 	  bfd_vma got_index = g->next->local_gotno + g->next->global_gotno
10722 	    + g->next->tls_gotno;
10723 
10724 	  MIPS_ELF_PUT_WORD (output_bfd, 0, sgot->contents
10725 			     + got_index++ * MIPS_ELF_GOT_SIZE (output_bfd));
10726 	  MIPS_ELF_PUT_WORD (output_bfd, MIPS_ELF_GNU_GOT1_MASK (output_bfd),
10727 			     sgot->contents
10728 			     + got_index++ * MIPS_ELF_GOT_SIZE (output_bfd));
10729 
10730 	  if (! info->shared)
10731 	    continue;
10732 
10733 	  while (got_index < g->assigned_gotno)
10734 	    {
10735 	      rel[0].r_offset = rel[1].r_offset = rel[2].r_offset
10736 		= got_index++ * MIPS_ELF_GOT_SIZE (output_bfd);
10737 	      if (!(mips_elf_create_dynamic_relocation
10738 		    (output_bfd, info, rel, NULL,
10739 		     bfd_abs_section_ptr,
10740 		     0, &addend, sgot)))
10741 		return FALSE;
10742 	      BFD_ASSERT (addend == 0);
10743 	    }
10744 	}
10745     }
10746 
10747   /* The generation of dynamic relocations for the non-primary gots
10748      adds more dynamic relocations.  We cannot count them until
10749      here.  */
10750 
10751   if (elf_hash_table (info)->dynamic_sections_created)
10752     {
10753       bfd_byte *b;
10754       bfd_boolean swap_out_p;
10755 
10756       BFD_ASSERT (sdyn != NULL);
10757 
10758       for (b = sdyn->contents;
10759 	   b < sdyn->contents + sdyn->size;
10760 	   b += MIPS_ELF_DYN_SIZE (dynobj))
10761 	{
10762 	  Elf_Internal_Dyn dyn;
10763 	  asection *s;
10764 
10765 	  /* Read in the current dynamic entry.  */
10766 	  (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
10767 
10768 	  /* Assume that we're going to modify it and write it out.  */
10769 	  swap_out_p = TRUE;
10770 
10771 	  switch (dyn.d_tag)
10772 	    {
10773 	    case DT_RELSZ:
10774 	      /* Reduce DT_RELSZ to account for any relocations we
10775 		 decided not to make.  This is for the n64 irix rld,
10776 		 which doesn't seem to apply any relocations if there
10777 		 are trailing null entries.  */
10778 	      s = mips_elf_rel_dyn_section (info, FALSE);
10779 	      dyn.d_un.d_val = (s->reloc_count
10780 				* (ABI_64_P (output_bfd)
10781 				   ? sizeof (Elf64_Mips_External_Rel)
10782 				   : sizeof (Elf32_External_Rel)));
10783 	      /* Adjust the section size too.  Tools like the prelinker
10784 		 can reasonably expect the values to the same.  */
10785 	      elf_section_data (s->output_section)->this_hdr.sh_size
10786 		= dyn.d_un.d_val;
10787 	      break;
10788 
10789 	    default:
10790 	      swap_out_p = FALSE;
10791 	      break;
10792 	    }
10793 
10794 	  if (swap_out_p)
10795 	    (*get_elf_backend_data (dynobj)->s->swap_dyn_out)
10796 	      (dynobj, &dyn, b);
10797 	}
10798     }
10799 
10800   {
10801     asection *s;
10802     Elf32_compact_rel cpt;
10803 
10804     if (SGI_COMPAT (output_bfd))
10805       {
10806 	/* Write .compact_rel section out.  */
10807 	s = bfd_get_linker_section (dynobj, ".compact_rel");
10808 	if (s != NULL)
10809 	  {
10810 	    cpt.id1 = 1;
10811 	    cpt.num = s->reloc_count;
10812 	    cpt.id2 = 2;
10813 	    cpt.offset = (s->output_section->filepos
10814 			  + sizeof (Elf32_External_compact_rel));
10815 	    cpt.reserved0 = 0;
10816 	    cpt.reserved1 = 0;
10817 	    bfd_elf32_swap_compact_rel_out (output_bfd, &cpt,
10818 					    ((Elf32_External_compact_rel *)
10819 					     s->contents));
10820 
10821 	    /* Clean up a dummy stub function entry in .text.  */
10822 	    if (htab->sstubs != NULL)
10823 	      {
10824 		file_ptr dummy_offset;
10825 
10826 		BFD_ASSERT (htab->sstubs->size >= htab->function_stub_size);
10827 		dummy_offset = htab->sstubs->size - htab->function_stub_size;
10828 		memset (htab->sstubs->contents + dummy_offset, 0,
10829 			htab->function_stub_size);
10830 	      }
10831 	  }
10832       }
10833 
10834     /* The psABI says that the dynamic relocations must be sorted in
10835        increasing order of r_symndx.  The VxWorks EABI doesn't require
10836        this, and because the code below handles REL rather than RELA
10837        relocations, using it for VxWorks would be outright harmful.  */
10838     if (!htab->is_vxworks)
10839       {
10840 	s = mips_elf_rel_dyn_section (info, FALSE);
10841 	if (s != NULL
10842 	    && s->size > (bfd_vma)2 * MIPS_ELF_REL_SIZE (output_bfd))
10843 	  {
10844 	    reldyn_sorting_bfd = output_bfd;
10845 
10846 	    if (ABI_64_P (output_bfd))
10847 	      qsort ((Elf64_External_Rel *) s->contents + 1,
10848 		     s->reloc_count - 1, sizeof (Elf64_Mips_External_Rel),
10849 		     sort_dynamic_relocs_64);
10850 	    else
10851 	      qsort ((Elf32_External_Rel *) s->contents + 1,
10852 		     s->reloc_count - 1, sizeof (Elf32_External_Rel),
10853 		     sort_dynamic_relocs);
10854 	  }
10855       }
10856   }
10857 
10858   if (htab->splt && htab->splt->size > 0)
10859     {
10860       if (htab->is_vxworks)
10861 	{
10862 	  if (info->shared)
10863 	    mips_vxworks_finish_shared_plt (output_bfd, info);
10864 	  else
10865 	    mips_vxworks_finish_exec_plt (output_bfd, info);
10866 	}
10867       else
10868 	{
10869 	  BFD_ASSERT (!info->shared);
10870 	  mips_finish_exec_plt (output_bfd, info);
10871 	}
10872     }
10873   return TRUE;
10874 }
10875 
10876 
10877 /* Set ABFD's EF_MIPS_ARCH and EF_MIPS_MACH flags.  */
10878 
10879 static void
10880 mips_set_isa_flags (bfd *abfd)
10881 {
10882   flagword val;
10883 
10884   switch (bfd_get_mach (abfd))
10885     {
10886     default:
10887     case bfd_mach_mips3000:
10888       val = E_MIPS_ARCH_1;
10889       break;
10890 
10891     case bfd_mach_mips3900:
10892       val = E_MIPS_ARCH_1 | E_MIPS_MACH_3900;
10893       break;
10894 
10895     case bfd_mach_mips6000:
10896       val = E_MIPS_ARCH_2;
10897       break;
10898 
10899     case bfd_mach_mips4000:
10900     case bfd_mach_mips4300:
10901     case bfd_mach_mips4400:
10902     case bfd_mach_mips4600:
10903       val = E_MIPS_ARCH_3;
10904       break;
10905 
10906     case bfd_mach_mips4010:
10907       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4010;
10908       break;
10909 
10910     case bfd_mach_mips4100:
10911       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4100;
10912       break;
10913 
10914     case bfd_mach_mips4111:
10915       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4111;
10916       break;
10917 
10918     case bfd_mach_mips4120:
10919       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4120;
10920       break;
10921 
10922     case bfd_mach_mips4650:
10923       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4650;
10924       break;
10925 
10926     case bfd_mach_mips5400:
10927       val = E_MIPS_ARCH_4 | E_MIPS_MACH_5400;
10928       break;
10929 
10930     case bfd_mach_mips5500:
10931       val = E_MIPS_ARCH_4 | E_MIPS_MACH_5500;
10932       break;
10933 
10934     case bfd_mach_mips5900:
10935       val = E_MIPS_ARCH_3 | E_MIPS_MACH_5900;
10936       break;
10937 
10938     case bfd_mach_mips9000:
10939       val = E_MIPS_ARCH_4 | E_MIPS_MACH_9000;
10940       break;
10941 
10942     case bfd_mach_mips5000:
10943     case bfd_mach_mips7000:
10944     case bfd_mach_mips8000:
10945     case bfd_mach_mips10000:
10946     case bfd_mach_mips12000:
10947     case bfd_mach_mips14000:
10948     case bfd_mach_mips16000:
10949       val = E_MIPS_ARCH_4;
10950       break;
10951 
10952     case bfd_mach_mips5:
10953       val = E_MIPS_ARCH_5;
10954       break;
10955 
10956     case bfd_mach_mips_loongson_2e:
10957       val = E_MIPS_ARCH_3 | E_MIPS_MACH_LS2E;
10958       break;
10959 
10960     case bfd_mach_mips_loongson_2f:
10961       val = E_MIPS_ARCH_3 | E_MIPS_MACH_LS2F;
10962       break;
10963 
10964     case bfd_mach_mips_sb1:
10965       val = E_MIPS_ARCH_64 | E_MIPS_MACH_SB1;
10966       break;
10967 
10968     case bfd_mach_mips_loongson_3a:
10969       val = E_MIPS_ARCH_64 | E_MIPS_MACH_LS3A;
10970       break;
10971 
10972     case bfd_mach_mips_octeon:
10973     case bfd_mach_mips_octeonp:
10974       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON;
10975       break;
10976 
10977     case bfd_mach_mips_xlr:
10978       val = E_MIPS_ARCH_64 | E_MIPS_MACH_XLR;
10979       break;
10980 
10981     case bfd_mach_mips_octeon2:
10982       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON2;
10983       break;
10984 
10985     case bfd_mach_mipsisa32:
10986       val = E_MIPS_ARCH_32;
10987       break;
10988 
10989     case bfd_mach_mipsisa64:
10990       val = E_MIPS_ARCH_64;
10991       break;
10992 
10993     case bfd_mach_mipsisa32r2:
10994       val = E_MIPS_ARCH_32R2;
10995       break;
10996 
10997     case bfd_mach_mipsisa64r2:
10998       val = E_MIPS_ARCH_64R2;
10999       break;
11000     }
11001   elf_elfheader (abfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH);
11002   elf_elfheader (abfd)->e_flags |= val;
11003 
11004 }
11005 
11006 
11007 /* The final processing done just before writing out a MIPS ELF object
11008    file.  This gets the MIPS architecture right based on the machine
11009    number.  This is used by both the 32-bit and the 64-bit ABI.  */
11010 
11011 void
11012 _bfd_mips_elf_final_write_processing (bfd *abfd,
11013 				      bfd_boolean linker ATTRIBUTE_UNUSED)
11014 {
11015   unsigned int i;
11016   Elf_Internal_Shdr **hdrpp;
11017   const char *name;
11018   asection *sec;
11019 
11020   /* Keep the existing EF_MIPS_MACH and EF_MIPS_ARCH flags if the former
11021      is nonzero.  This is for compatibility with old objects, which used
11022      a combination of a 32-bit EF_MIPS_ARCH and a 64-bit EF_MIPS_MACH.  */
11023   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == 0)
11024     mips_set_isa_flags (abfd);
11025 
11026   /* Set the sh_info field for .gptab sections and other appropriate
11027      info for each special section.  */
11028   for (i = 1, hdrpp = elf_elfsections (abfd) + 1;
11029        i < elf_numsections (abfd);
11030        i++, hdrpp++)
11031     {
11032       switch ((*hdrpp)->sh_type)
11033 	{
11034 	case SHT_MIPS_MSYM:
11035 	case SHT_MIPS_LIBLIST:
11036 	  sec = bfd_get_section_by_name (abfd, ".dynstr");
11037 	  if (sec != NULL)
11038 	    (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
11039 	  break;
11040 
11041 	case SHT_MIPS_GPTAB:
11042 	  BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
11043 	  name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
11044 	  BFD_ASSERT (name != NULL
11045 		      && CONST_STRNEQ (name, ".gptab."));
11046 	  sec = bfd_get_section_by_name (abfd, name + sizeof ".gptab" - 1);
11047 	  BFD_ASSERT (sec != NULL);
11048 	  (*hdrpp)->sh_info = elf_section_data (sec)->this_idx;
11049 	  break;
11050 
11051 	case SHT_MIPS_CONTENT:
11052 	  BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
11053 	  name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
11054 	  BFD_ASSERT (name != NULL
11055 		      && CONST_STRNEQ (name, ".MIPS.content"));
11056 	  sec = bfd_get_section_by_name (abfd,
11057 					 name + sizeof ".MIPS.content" - 1);
11058 	  BFD_ASSERT (sec != NULL);
11059 	  (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
11060 	  break;
11061 
11062 	case SHT_MIPS_SYMBOL_LIB:
11063 	  sec = bfd_get_section_by_name (abfd, ".dynsym");
11064 	  if (sec != NULL)
11065 	    (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
11066 	  sec = bfd_get_section_by_name (abfd, ".liblist");
11067 	  if (sec != NULL)
11068 	    (*hdrpp)->sh_info = elf_section_data (sec)->this_idx;
11069 	  break;
11070 
11071 	case SHT_MIPS_EVENTS:
11072 	  BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
11073 	  name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
11074 	  BFD_ASSERT (name != NULL);
11075 	  if (CONST_STRNEQ (name, ".MIPS.events"))
11076 	    sec = bfd_get_section_by_name (abfd,
11077 					   name + sizeof ".MIPS.events" - 1);
11078 	  else
11079 	    {
11080 	      BFD_ASSERT (CONST_STRNEQ (name, ".MIPS.post_rel"));
11081 	      sec = bfd_get_section_by_name (abfd,
11082 					     (name
11083 					      + sizeof ".MIPS.post_rel" - 1));
11084 	    }
11085 	  BFD_ASSERT (sec != NULL);
11086 	  (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
11087 	  break;
11088 
11089 	}
11090     }
11091 }
11092 
11093 /* When creating an IRIX5 executable, we need REGINFO and RTPROC
11094    segments.  */
11095 
11096 int
11097 _bfd_mips_elf_additional_program_headers (bfd *abfd,
11098 					  struct bfd_link_info *info ATTRIBUTE_UNUSED)
11099 {
11100   asection *s;
11101   int ret = 0;
11102 
11103   /* See if we need a PT_MIPS_REGINFO segment.  */
11104   s = bfd_get_section_by_name (abfd, ".reginfo");
11105   if (s && (s->flags & SEC_LOAD))
11106     ++ret;
11107 
11108   /* See if we need a PT_MIPS_OPTIONS segment.  */
11109   if (IRIX_COMPAT (abfd) == ict_irix6
11110       && bfd_get_section_by_name (abfd,
11111 				  MIPS_ELF_OPTIONS_SECTION_NAME (abfd)))
11112     ++ret;
11113 
11114   /* See if we need a PT_MIPS_RTPROC segment.  */
11115   if (IRIX_COMPAT (abfd) == ict_irix5
11116       && bfd_get_section_by_name (abfd, ".dynamic")
11117       && bfd_get_section_by_name (abfd, ".mdebug"))
11118     ++ret;
11119 
11120   /* Allocate a PT_NULL header in dynamic objects.  See
11121      _bfd_mips_elf_modify_segment_map for details.  */
11122   if (!SGI_COMPAT (abfd)
11123       && bfd_get_section_by_name (abfd, ".dynamic"))
11124     ++ret;
11125 
11126   return ret;
11127 }
11128 
11129 /* Modify the segment map for an IRIX5 executable.  */
11130 
11131 bfd_boolean
11132 _bfd_mips_elf_modify_segment_map (bfd *abfd,
11133 				  struct bfd_link_info *info)
11134 {
11135   asection *s;
11136   struct elf_segment_map *m, **pm;
11137   bfd_size_type amt;
11138 
11139   /* If there is a .reginfo section, we need a PT_MIPS_REGINFO
11140      segment.  */
11141   s = bfd_get_section_by_name (abfd, ".reginfo");
11142   if (s != NULL && (s->flags & SEC_LOAD) != 0)
11143     {
11144       for (m = elf_seg_map (abfd); m != NULL; m = m->next)
11145 	if (m->p_type == PT_MIPS_REGINFO)
11146 	  break;
11147       if (m == NULL)
11148 	{
11149 	  amt = sizeof *m;
11150 	  m = bfd_zalloc (abfd, amt);
11151 	  if (m == NULL)
11152 	    return FALSE;
11153 
11154 	  m->p_type = PT_MIPS_REGINFO;
11155 	  m->count = 1;
11156 	  m->sections[0] = s;
11157 
11158 	  /* We want to put it after the PHDR and INTERP segments.  */
11159 	  pm = &elf_seg_map (abfd);
11160 	  while (*pm != NULL
11161 		 && ((*pm)->p_type == PT_PHDR
11162 		     || (*pm)->p_type == PT_INTERP))
11163 	    pm = &(*pm)->next;
11164 
11165 	  m->next = *pm;
11166 	  *pm = m;
11167 	}
11168     }
11169 
11170   /* For IRIX 6, we don't have .mdebug sections, nor does anything but
11171      .dynamic end up in PT_DYNAMIC.  However, we do have to insert a
11172      PT_MIPS_OPTIONS segment immediately following the program header
11173      table.  */
11174   if (NEWABI_P (abfd)
11175       /* On non-IRIX6 new abi, we'll have already created a segment
11176 	 for this section, so don't create another.  I'm not sure this
11177 	 is not also the case for IRIX 6, but I can't test it right
11178 	 now.  */
11179       && IRIX_COMPAT (abfd) == ict_irix6)
11180     {
11181       for (s = abfd->sections; s; s = s->next)
11182 	if (elf_section_data (s)->this_hdr.sh_type == SHT_MIPS_OPTIONS)
11183 	  break;
11184 
11185       if (s)
11186 	{
11187 	  struct elf_segment_map *options_segment;
11188 
11189 	  pm = &elf_seg_map (abfd);
11190 	  while (*pm != NULL
11191 		 && ((*pm)->p_type == PT_PHDR
11192 		     || (*pm)->p_type == PT_INTERP))
11193 	    pm = &(*pm)->next;
11194 
11195 	  if (*pm == NULL || (*pm)->p_type != PT_MIPS_OPTIONS)
11196 	    {
11197 	      amt = sizeof (struct elf_segment_map);
11198 	      options_segment = bfd_zalloc (abfd, amt);
11199 	      options_segment->next = *pm;
11200 	      options_segment->p_type = PT_MIPS_OPTIONS;
11201 	      options_segment->p_flags = PF_R;
11202 	      options_segment->p_flags_valid = TRUE;
11203 	      options_segment->count = 1;
11204 	      options_segment->sections[0] = s;
11205 	      *pm = options_segment;
11206 	    }
11207 	}
11208     }
11209   else
11210     {
11211       if (IRIX_COMPAT (abfd) == ict_irix5)
11212 	{
11213 	  /* If there are .dynamic and .mdebug sections, we make a room
11214 	     for the RTPROC header.  FIXME: Rewrite without section names.  */
11215 	  if (bfd_get_section_by_name (abfd, ".interp") == NULL
11216 	      && bfd_get_section_by_name (abfd, ".dynamic") != NULL
11217 	      && bfd_get_section_by_name (abfd, ".mdebug") != NULL)
11218 	    {
11219 	      for (m = elf_seg_map (abfd); m != NULL; m = m->next)
11220 		if (m->p_type == PT_MIPS_RTPROC)
11221 		  break;
11222 	      if (m == NULL)
11223 		{
11224 		  amt = sizeof *m;
11225 		  m = bfd_zalloc (abfd, amt);
11226 		  if (m == NULL)
11227 		    return FALSE;
11228 
11229 		  m->p_type = PT_MIPS_RTPROC;
11230 
11231 		  s = bfd_get_section_by_name (abfd, ".rtproc");
11232 		  if (s == NULL)
11233 		    {
11234 		      m->count = 0;
11235 		      m->p_flags = 0;
11236 		      m->p_flags_valid = 1;
11237 		    }
11238 		  else
11239 		    {
11240 		      m->count = 1;
11241 		      m->sections[0] = s;
11242 		    }
11243 
11244 		  /* We want to put it after the DYNAMIC segment.  */
11245 		  pm = &elf_seg_map (abfd);
11246 		  while (*pm != NULL && (*pm)->p_type != PT_DYNAMIC)
11247 		    pm = &(*pm)->next;
11248 		  if (*pm != NULL)
11249 		    pm = &(*pm)->next;
11250 
11251 		  m->next = *pm;
11252 		  *pm = m;
11253 		}
11254 	    }
11255 	}
11256       /* On IRIX5, the PT_DYNAMIC segment includes the .dynamic,
11257 	 .dynstr, .dynsym, and .hash sections, and everything in
11258 	 between.  */
11259       for (pm = &elf_seg_map (abfd); *pm != NULL;
11260 	   pm = &(*pm)->next)
11261 	if ((*pm)->p_type == PT_DYNAMIC)
11262 	  break;
11263       m = *pm;
11264       if (m != NULL && IRIX_COMPAT (abfd) == ict_none)
11265 	{
11266 	  /* For a normal mips executable the permissions for the PT_DYNAMIC
11267 	     segment are read, write and execute. We do that here since
11268 	     the code in elf.c sets only the read permission. This matters
11269 	     sometimes for the dynamic linker.  */
11270 	  if (bfd_get_section_by_name (abfd, ".dynamic") != NULL)
11271 	    {
11272 	      m->p_flags = PF_R | PF_W | PF_X;
11273 	      m->p_flags_valid = 1;
11274 	    }
11275 	}
11276       /* GNU/Linux binaries do not need the extended PT_DYNAMIC section.
11277 	 glibc's dynamic linker has traditionally derived the number of
11278 	 tags from the p_filesz field, and sometimes allocates stack
11279 	 arrays of that size.  An overly-big PT_DYNAMIC segment can
11280 	 be actively harmful in such cases.  Making PT_DYNAMIC contain
11281 	 other sections can also make life hard for the prelinker,
11282 	 which might move one of the other sections to a different
11283 	 PT_LOAD segment.  */
11284       if (SGI_COMPAT (abfd)
11285 	  && m != NULL
11286 	  && m->count == 1
11287 	  && strcmp (m->sections[0]->name, ".dynamic") == 0)
11288 	{
11289 	  static const char *sec_names[] =
11290 	  {
11291 	    ".dynamic", ".dynstr", ".dynsym", ".hash"
11292 	  };
11293 	  bfd_vma low, high;
11294 	  unsigned int i, c;
11295 	  struct elf_segment_map *n;
11296 
11297 	  low = ~(bfd_vma) 0;
11298 	  high = 0;
11299 	  for (i = 0; i < sizeof sec_names / sizeof sec_names[0]; i++)
11300 	    {
11301 	      s = bfd_get_section_by_name (abfd, sec_names[i]);
11302 	      if (s != NULL && (s->flags & SEC_LOAD) != 0)
11303 		{
11304 		  bfd_size_type sz;
11305 
11306 		  if (low > s->vma)
11307 		    low = s->vma;
11308 		  sz = s->size;
11309 		  if (high < s->vma + sz)
11310 		    high = s->vma + sz;
11311 		}
11312 	    }
11313 
11314 	  c = 0;
11315 	  for (s = abfd->sections; s != NULL; s = s->next)
11316 	    if ((s->flags & SEC_LOAD) != 0
11317 		&& s->vma >= low
11318 		&& s->vma + s->size <= high)
11319 	      ++c;
11320 
11321 	  amt = sizeof *n + (bfd_size_type) (c - 1) * sizeof (asection *);
11322 	  n = bfd_zalloc (abfd, amt);
11323 	  if (n == NULL)
11324 	    return FALSE;
11325 	  *n = *m;
11326 	  n->count = c;
11327 
11328 	  i = 0;
11329 	  for (s = abfd->sections; s != NULL; s = s->next)
11330 	    {
11331 	      if ((s->flags & SEC_LOAD) != 0
11332 		  && s->vma >= low
11333 		  && s->vma + s->size <= high)
11334 		{
11335 		  n->sections[i] = s;
11336 		  ++i;
11337 		}
11338 	    }
11339 
11340 	  *pm = n;
11341 	}
11342     }
11343 
11344   /* Allocate a spare program header in dynamic objects so that tools
11345      like the prelinker can add an extra PT_LOAD entry.
11346 
11347      If the prelinker needs to make room for a new PT_LOAD entry, its
11348      standard procedure is to move the first (read-only) sections into
11349      the new (writable) segment.  However, the MIPS ABI requires
11350      .dynamic to be in a read-only segment, and the section will often
11351      start within sizeof (ElfNN_Phdr) bytes of the last program header.
11352 
11353      Although the prelinker could in principle move .dynamic to a
11354      writable segment, it seems better to allocate a spare program
11355      header instead, and avoid the need to move any sections.
11356      There is a long tradition of allocating spare dynamic tags,
11357      so allocating a spare program header seems like a natural
11358      extension.
11359 
11360      If INFO is NULL, we may be copying an already prelinked binary
11361      with objcopy or strip, so do not add this header.  */
11362   if (info != NULL
11363       && !SGI_COMPAT (abfd)
11364       && bfd_get_section_by_name (abfd, ".dynamic"))
11365     {
11366       for (pm = &elf_seg_map (abfd); *pm != NULL; pm = &(*pm)->next)
11367 	if ((*pm)->p_type == PT_NULL)
11368 	  break;
11369       if (*pm == NULL)
11370 	{
11371 	  m = bfd_zalloc (abfd, sizeof (*m));
11372 	  if (m == NULL)
11373 	    return FALSE;
11374 
11375 	  m->p_type = PT_NULL;
11376 	  *pm = m;
11377 	}
11378     }
11379 
11380   return TRUE;
11381 }
11382 
11383 /* Return the section that should be marked against GC for a given
11384    relocation.  */
11385 
11386 asection *
11387 _bfd_mips_elf_gc_mark_hook (asection *sec,
11388 			    struct bfd_link_info *info,
11389 			    Elf_Internal_Rela *rel,
11390 			    struct elf_link_hash_entry *h,
11391 			    Elf_Internal_Sym *sym)
11392 {
11393   /* ??? Do mips16 stub sections need to be handled special?  */
11394 
11395   if (h != NULL)
11396     switch (ELF_R_TYPE (sec->owner, rel->r_info))
11397       {
11398       case R_MIPS_GNU_VTINHERIT:
11399       case R_MIPS_GNU_VTENTRY:
11400 	return NULL;
11401       }
11402 
11403   return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
11404 }
11405 
11406 /* Update the got entry reference counts for the section being removed.  */
11407 
11408 bfd_boolean
11409 _bfd_mips_elf_gc_sweep_hook (bfd *abfd ATTRIBUTE_UNUSED,
11410 			     struct bfd_link_info *info ATTRIBUTE_UNUSED,
11411 			     asection *sec ATTRIBUTE_UNUSED,
11412 			     const Elf_Internal_Rela *relocs ATTRIBUTE_UNUSED)
11413 {
11414 #if 0
11415   Elf_Internal_Shdr *symtab_hdr;
11416   struct elf_link_hash_entry **sym_hashes;
11417   bfd_signed_vma *local_got_refcounts;
11418   const Elf_Internal_Rela *rel, *relend;
11419   unsigned long r_symndx;
11420   struct elf_link_hash_entry *h;
11421 
11422   if (info->relocatable)
11423     return TRUE;
11424 
11425   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
11426   sym_hashes = elf_sym_hashes (abfd);
11427   local_got_refcounts = elf_local_got_refcounts (abfd);
11428 
11429   relend = relocs + sec->reloc_count;
11430   for (rel = relocs; rel < relend; rel++)
11431     switch (ELF_R_TYPE (abfd, rel->r_info))
11432       {
11433       case R_MIPS16_GOT16:
11434       case R_MIPS16_CALL16:
11435       case R_MIPS_GOT16:
11436       case R_MIPS_CALL16:
11437       case R_MIPS_CALL_HI16:
11438       case R_MIPS_CALL_LO16:
11439       case R_MIPS_GOT_HI16:
11440       case R_MIPS_GOT_LO16:
11441       case R_MIPS_GOT_DISP:
11442       case R_MIPS_GOT_PAGE:
11443       case R_MIPS_GOT_OFST:
11444       case R_MICROMIPS_GOT16:
11445       case R_MICROMIPS_CALL16:
11446       case R_MICROMIPS_CALL_HI16:
11447       case R_MICROMIPS_CALL_LO16:
11448       case R_MICROMIPS_GOT_HI16:
11449       case R_MICROMIPS_GOT_LO16:
11450       case R_MICROMIPS_GOT_DISP:
11451       case R_MICROMIPS_GOT_PAGE:
11452       case R_MICROMIPS_GOT_OFST:
11453 	/* ??? It would seem that the existing MIPS code does no sort
11454 	   of reference counting or whatnot on its GOT and PLT entries,
11455 	   so it is not possible to garbage collect them at this time.  */
11456 	break;
11457 
11458       default:
11459 	break;
11460       }
11461 #endif
11462 
11463   return TRUE;
11464 }
11465 
11466 /* Copy data from a MIPS ELF indirect symbol to its direct symbol,
11467    hiding the old indirect symbol.  Process additional relocation
11468    information.  Also called for weakdefs, in which case we just let
11469    _bfd_elf_link_hash_copy_indirect copy the flags for us.  */
11470 
11471 void
11472 _bfd_mips_elf_copy_indirect_symbol (struct bfd_link_info *info,
11473 				    struct elf_link_hash_entry *dir,
11474 				    struct elf_link_hash_entry *ind)
11475 {
11476   struct mips_elf_link_hash_entry *dirmips, *indmips;
11477 
11478   _bfd_elf_link_hash_copy_indirect (info, dir, ind);
11479 
11480   dirmips = (struct mips_elf_link_hash_entry *) dir;
11481   indmips = (struct mips_elf_link_hash_entry *) ind;
11482   /* Any absolute non-dynamic relocations against an indirect or weak
11483      definition will be against the target symbol.  */
11484   if (indmips->has_static_relocs)
11485     dirmips->has_static_relocs = TRUE;
11486 
11487   if (ind->root.type != bfd_link_hash_indirect)
11488     return;
11489 
11490   dirmips->possibly_dynamic_relocs += indmips->possibly_dynamic_relocs;
11491   if (indmips->readonly_reloc)
11492     dirmips->readonly_reloc = TRUE;
11493   if (indmips->no_fn_stub)
11494     dirmips->no_fn_stub = TRUE;
11495   if (indmips->fn_stub)
11496     {
11497       dirmips->fn_stub = indmips->fn_stub;
11498       indmips->fn_stub = NULL;
11499     }
11500   if (indmips->need_fn_stub)
11501     {
11502       dirmips->need_fn_stub = TRUE;
11503       indmips->need_fn_stub = FALSE;
11504     }
11505   if (indmips->call_stub)
11506     {
11507       dirmips->call_stub = indmips->call_stub;
11508       indmips->call_stub = NULL;
11509     }
11510   if (indmips->call_fp_stub)
11511     {
11512       dirmips->call_fp_stub = indmips->call_fp_stub;
11513       indmips->call_fp_stub = NULL;
11514     }
11515   if (indmips->global_got_area < dirmips->global_got_area)
11516     dirmips->global_got_area = indmips->global_got_area;
11517   if (indmips->global_got_area < GGA_NONE)
11518     indmips->global_got_area = GGA_NONE;
11519   if (indmips->has_nonpic_branches)
11520     dirmips->has_nonpic_branches = TRUE;
11521 }
11522 
11523 #define PDR_SIZE 32
11524 
11525 bfd_boolean
11526 _bfd_mips_elf_discard_info (bfd *abfd, struct elf_reloc_cookie *cookie,
11527 			    struct bfd_link_info *info)
11528 {
11529   asection *o;
11530   bfd_boolean ret = FALSE;
11531   unsigned char *tdata;
11532   size_t i, skip;
11533 
11534   o = bfd_get_section_by_name (abfd, ".pdr");
11535   if (! o)
11536     return FALSE;
11537   if (o->size == 0)
11538     return FALSE;
11539   if (o->size % PDR_SIZE != 0)
11540     return FALSE;
11541   if (o->output_section != NULL
11542       && bfd_is_abs_section (o->output_section))
11543     return FALSE;
11544 
11545   tdata = bfd_zmalloc (o->size / PDR_SIZE);
11546   if (! tdata)
11547     return FALSE;
11548 
11549   cookie->rels = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
11550 					    info->keep_memory);
11551   if (!cookie->rels)
11552     {
11553       free (tdata);
11554       return FALSE;
11555     }
11556 
11557   cookie->rel = cookie->rels;
11558   cookie->relend = cookie->rels + o->reloc_count;
11559 
11560   for (i = 0, skip = 0; i < o->size / PDR_SIZE; i ++)
11561     {
11562       if (bfd_elf_reloc_symbol_deleted_p (i * PDR_SIZE, cookie))
11563 	{
11564 	  tdata[i] = 1;
11565 	  skip ++;
11566 	}
11567     }
11568 
11569   if (skip != 0)
11570     {
11571       mips_elf_section_data (o)->u.tdata = tdata;
11572       o->size -= skip * PDR_SIZE;
11573       ret = TRUE;
11574     }
11575   else
11576     free (tdata);
11577 
11578   if (! info->keep_memory)
11579     free (cookie->rels);
11580 
11581   return ret;
11582 }
11583 
11584 bfd_boolean
11585 _bfd_mips_elf_ignore_discarded_relocs (asection *sec)
11586 {
11587   if (strcmp (sec->name, ".pdr") == 0)
11588     return TRUE;
11589   return FALSE;
11590 }
11591 
11592 bfd_boolean
11593 _bfd_mips_elf_write_section (bfd *output_bfd,
11594 			     struct bfd_link_info *link_info ATTRIBUTE_UNUSED,
11595                              asection *sec, bfd_byte *contents)
11596 {
11597   bfd_byte *to, *from, *end;
11598   int i;
11599 
11600   if (strcmp (sec->name, ".pdr") != 0)
11601     return FALSE;
11602 
11603   if (mips_elf_section_data (sec)->u.tdata == NULL)
11604     return FALSE;
11605 
11606   to = contents;
11607   end = contents + sec->size;
11608   for (from = contents, i = 0;
11609        from < end;
11610        from += PDR_SIZE, i++)
11611     {
11612       if ((mips_elf_section_data (sec)->u.tdata)[i] == 1)
11613 	continue;
11614       if (to != from)
11615 	memcpy (to, from, PDR_SIZE);
11616       to += PDR_SIZE;
11617     }
11618   bfd_set_section_contents (output_bfd, sec->output_section, contents,
11619 			    sec->output_offset, sec->size);
11620   return TRUE;
11621 }
11622 
11623 /* microMIPS code retains local labels for linker relaxation.  Omit them
11624    from output by default for clarity.  */
11625 
11626 bfd_boolean
11627 _bfd_mips_elf_is_target_special_symbol (bfd *abfd, asymbol *sym)
11628 {
11629   return _bfd_elf_is_local_label_name (abfd, sym->name);
11630 }
11631 
11632 /* MIPS ELF uses a special find_nearest_line routine in order the
11633    handle the ECOFF debugging information.  */
11634 
11635 struct mips_elf_find_line
11636 {
11637   struct ecoff_debug_info d;
11638   struct ecoff_find_line i;
11639 };
11640 
11641 bfd_boolean
11642 _bfd_mips_elf_find_nearest_line (bfd *abfd, asection *section,
11643 				 asymbol **symbols, bfd_vma offset,
11644 				 const char **filename_ptr,
11645 				 const char **functionname_ptr,
11646 				 unsigned int *line_ptr)
11647 {
11648   asection *msec;
11649 
11650   if (_bfd_dwarf1_find_nearest_line (abfd, section, symbols, offset,
11651 				     filename_ptr, functionname_ptr,
11652 				     line_ptr))
11653     return TRUE;
11654 
11655   if (_bfd_dwarf2_find_nearest_line (abfd, dwarf_debug_sections,
11656                                      section, symbols, offset,
11657 				     filename_ptr, functionname_ptr,
11658 				     line_ptr, NULL, ABI_64_P (abfd) ? 8 : 0,
11659 				     &elf_tdata (abfd)->dwarf2_find_line_info))
11660     return TRUE;
11661 
11662   msec = bfd_get_section_by_name (abfd, ".mdebug");
11663   if (msec != NULL)
11664     {
11665       flagword origflags;
11666       struct mips_elf_find_line *fi;
11667       const struct ecoff_debug_swap * const swap =
11668 	get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
11669 
11670       /* If we are called during a link, mips_elf_final_link may have
11671 	 cleared the SEC_HAS_CONTENTS field.  We force it back on here
11672 	 if appropriate (which it normally will be).  */
11673       origflags = msec->flags;
11674       if (elf_section_data (msec)->this_hdr.sh_type != SHT_NOBITS)
11675 	msec->flags |= SEC_HAS_CONTENTS;
11676 
11677       fi = mips_elf_tdata (abfd)->find_line_info;
11678       if (fi == NULL)
11679 	{
11680 	  bfd_size_type external_fdr_size;
11681 	  char *fraw_src;
11682 	  char *fraw_end;
11683 	  struct fdr *fdr_ptr;
11684 	  bfd_size_type amt = sizeof (struct mips_elf_find_line);
11685 
11686 	  fi = bfd_zalloc (abfd, amt);
11687 	  if (fi == NULL)
11688 	    {
11689 	      msec->flags = origflags;
11690 	      return FALSE;
11691 	    }
11692 
11693 	  if (! _bfd_mips_elf_read_ecoff_info (abfd, msec, &fi->d))
11694 	    {
11695 	      msec->flags = origflags;
11696 	      return FALSE;
11697 	    }
11698 
11699 	  /* Swap in the FDR information.  */
11700 	  amt = fi->d.symbolic_header.ifdMax * sizeof (struct fdr);
11701 	  fi->d.fdr = bfd_alloc (abfd, amt);
11702 	  if (fi->d.fdr == NULL)
11703 	    {
11704 	      msec->flags = origflags;
11705 	      return FALSE;
11706 	    }
11707 	  external_fdr_size = swap->external_fdr_size;
11708 	  fdr_ptr = fi->d.fdr;
11709 	  fraw_src = (char *) fi->d.external_fdr;
11710 	  fraw_end = (fraw_src
11711 		      + fi->d.symbolic_header.ifdMax * external_fdr_size);
11712 	  for (; fraw_src < fraw_end; fraw_src += external_fdr_size, fdr_ptr++)
11713 	    (*swap->swap_fdr_in) (abfd, fraw_src, fdr_ptr);
11714 
11715 	  mips_elf_tdata (abfd)->find_line_info = fi;
11716 
11717 	  /* Note that we don't bother to ever free this information.
11718              find_nearest_line is either called all the time, as in
11719              objdump -l, so the information should be saved, or it is
11720              rarely called, as in ld error messages, so the memory
11721              wasted is unimportant.  Still, it would probably be a
11722              good idea for free_cached_info to throw it away.  */
11723 	}
11724 
11725       if (_bfd_ecoff_locate_line (abfd, section, offset, &fi->d, swap,
11726 				  &fi->i, filename_ptr, functionname_ptr,
11727 				  line_ptr))
11728 	{
11729 	  msec->flags = origflags;
11730 	  return TRUE;
11731 	}
11732 
11733       msec->flags = origflags;
11734     }
11735 
11736   /* Fall back on the generic ELF find_nearest_line routine.  */
11737 
11738   return _bfd_elf_find_nearest_line (abfd, section, symbols, offset,
11739 				     filename_ptr, functionname_ptr,
11740 				     line_ptr);
11741 }
11742 
11743 bfd_boolean
11744 _bfd_mips_elf_find_inliner_info (bfd *abfd,
11745 				 const char **filename_ptr,
11746 				 const char **functionname_ptr,
11747 				 unsigned int *line_ptr)
11748 {
11749   bfd_boolean found;
11750   found = _bfd_dwarf2_find_inliner_info (abfd, filename_ptr,
11751 					 functionname_ptr, line_ptr,
11752 					 & elf_tdata (abfd)->dwarf2_find_line_info);
11753   return found;
11754 }
11755 
11756 
11757 /* When are writing out the .options or .MIPS.options section,
11758    remember the bytes we are writing out, so that we can install the
11759    GP value in the section_processing routine.  */
11760 
11761 bfd_boolean
11762 _bfd_mips_elf_set_section_contents (bfd *abfd, sec_ptr section,
11763 				    const void *location,
11764 				    file_ptr offset, bfd_size_type count)
11765 {
11766   if (MIPS_ELF_OPTIONS_SECTION_NAME_P (section->name))
11767     {
11768       bfd_byte *c;
11769 
11770       if (elf_section_data (section) == NULL)
11771 	{
11772 	  bfd_size_type amt = sizeof (struct bfd_elf_section_data);
11773 	  section->used_by_bfd = bfd_zalloc (abfd, amt);
11774 	  if (elf_section_data (section) == NULL)
11775 	    return FALSE;
11776 	}
11777       c = mips_elf_section_data (section)->u.tdata;
11778       if (c == NULL)
11779 	{
11780 	  c = bfd_zalloc (abfd, section->size);
11781 	  if (c == NULL)
11782 	    return FALSE;
11783 	  mips_elf_section_data (section)->u.tdata = c;
11784 	}
11785 
11786       memcpy (c + offset, location, count);
11787     }
11788 
11789   return _bfd_elf_set_section_contents (abfd, section, location, offset,
11790 					count);
11791 }
11792 
11793 /* This is almost identical to bfd_generic_get_... except that some
11794    MIPS relocations need to be handled specially.  Sigh.  */
11795 
11796 bfd_byte *
11797 _bfd_elf_mips_get_relocated_section_contents
11798   (bfd *abfd,
11799    struct bfd_link_info *link_info,
11800    struct bfd_link_order *link_order,
11801    bfd_byte *data,
11802    bfd_boolean relocatable,
11803    asymbol **symbols)
11804 {
11805   /* Get enough memory to hold the stuff */
11806   bfd *input_bfd = link_order->u.indirect.section->owner;
11807   asection *input_section = link_order->u.indirect.section;
11808   bfd_size_type sz;
11809 
11810   long reloc_size = bfd_get_reloc_upper_bound (input_bfd, input_section);
11811   arelent **reloc_vector = NULL;
11812   long reloc_count;
11813 
11814   if (reloc_size < 0)
11815     goto error_return;
11816 
11817   reloc_vector = bfd_malloc (reloc_size);
11818   if (reloc_vector == NULL && reloc_size != 0)
11819     goto error_return;
11820 
11821   /* read in the section */
11822   sz = input_section->rawsize ? input_section->rawsize : input_section->size;
11823   if (!bfd_get_section_contents (input_bfd, input_section, data, 0, sz))
11824     goto error_return;
11825 
11826   reloc_count = bfd_canonicalize_reloc (input_bfd,
11827 					input_section,
11828 					reloc_vector,
11829 					symbols);
11830   if (reloc_count < 0)
11831     goto error_return;
11832 
11833   if (reloc_count > 0)
11834     {
11835       arelent **parent;
11836       /* for mips */
11837       int gp_found;
11838       bfd_vma gp = 0x12345678;	/* initialize just to shut gcc up */
11839 
11840       {
11841 	struct bfd_hash_entry *h;
11842 	struct bfd_link_hash_entry *lh;
11843 	/* Skip all this stuff if we aren't mixing formats.  */
11844 	if (abfd && input_bfd
11845 	    && abfd->xvec == input_bfd->xvec)
11846 	  lh = 0;
11847 	else
11848 	  {
11849 	    h = bfd_hash_lookup (&link_info->hash->table, "_gp", FALSE, FALSE);
11850 	    lh = (struct bfd_link_hash_entry *) h;
11851 	  }
11852       lookup:
11853 	if (lh)
11854 	  {
11855 	    switch (lh->type)
11856 	      {
11857 	      case bfd_link_hash_undefined:
11858 	      case bfd_link_hash_undefweak:
11859 	      case bfd_link_hash_common:
11860 		gp_found = 0;
11861 		break;
11862 	      case bfd_link_hash_defined:
11863 	      case bfd_link_hash_defweak:
11864 		gp_found = 1;
11865 		gp = lh->u.def.value;
11866 		break;
11867 	      case bfd_link_hash_indirect:
11868 	      case bfd_link_hash_warning:
11869 		lh = lh->u.i.link;
11870 		/* @@FIXME  ignoring warning for now */
11871 		goto lookup;
11872 	      case bfd_link_hash_new:
11873 	      default:
11874 		abort ();
11875 	      }
11876 	  }
11877 	else
11878 	  gp_found = 0;
11879       }
11880       /* end mips */
11881       for (parent = reloc_vector; *parent != NULL; parent++)
11882 	{
11883 	  char *error_message = NULL;
11884 	  bfd_reloc_status_type r;
11885 
11886 	  /* Specific to MIPS: Deal with relocation types that require
11887 	     knowing the gp of the output bfd.  */
11888 	  asymbol *sym = *(*parent)->sym_ptr_ptr;
11889 
11890 	  /* If we've managed to find the gp and have a special
11891 	     function for the relocation then go ahead, else default
11892 	     to the generic handling.  */
11893 	  if (gp_found
11894 	      && (*parent)->howto->special_function
11895 	      == _bfd_mips_elf32_gprel16_reloc)
11896 	    r = _bfd_mips_elf_gprel16_with_gp (input_bfd, sym, *parent,
11897 					       input_section, relocatable,
11898 					       data, gp);
11899 	  else
11900 	    r = bfd_perform_relocation (input_bfd, *parent, data,
11901 					input_section,
11902 					relocatable ? abfd : NULL,
11903 					&error_message);
11904 
11905 	  if (relocatable)
11906 	    {
11907 	      asection *os = input_section->output_section;
11908 
11909 	      /* A partial link, so keep the relocs */
11910 	      os->orelocation[os->reloc_count] = *parent;
11911 	      os->reloc_count++;
11912 	    }
11913 
11914 	  if (r != bfd_reloc_ok)
11915 	    {
11916 	      switch (r)
11917 		{
11918 		case bfd_reloc_undefined:
11919 		  if (!((*link_info->callbacks->undefined_symbol)
11920 			(link_info, bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
11921 			 input_bfd, input_section, (*parent)->address, TRUE)))
11922 		    goto error_return;
11923 		  break;
11924 		case bfd_reloc_dangerous:
11925 		  BFD_ASSERT (error_message != NULL);
11926 		  if (!((*link_info->callbacks->reloc_dangerous)
11927 			(link_info, error_message, input_bfd, input_section,
11928 			 (*parent)->address)))
11929 		    goto error_return;
11930 		  break;
11931 		case bfd_reloc_overflow:
11932 		  if (!((*link_info->callbacks->reloc_overflow)
11933 			(link_info, NULL,
11934 			 bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
11935 			 (*parent)->howto->name, (*parent)->addend,
11936 			 input_bfd, input_section, (*parent)->address)))
11937 		    goto error_return;
11938 		  break;
11939 		case bfd_reloc_outofrange:
11940 		default:
11941 		  abort ();
11942 		  break;
11943 		}
11944 
11945 	    }
11946 	}
11947     }
11948   if (reloc_vector != NULL)
11949     free (reloc_vector);
11950   return data;
11951 
11952 error_return:
11953   if (reloc_vector != NULL)
11954     free (reloc_vector);
11955   return NULL;
11956 }
11957 
11958 static bfd_boolean
11959 mips_elf_relax_delete_bytes (bfd *abfd,
11960 			     asection *sec, bfd_vma addr, int count)
11961 {
11962   Elf_Internal_Shdr *symtab_hdr;
11963   unsigned int sec_shndx;
11964   bfd_byte *contents;
11965   Elf_Internal_Rela *irel, *irelend;
11966   Elf_Internal_Sym *isym;
11967   Elf_Internal_Sym *isymend;
11968   struct elf_link_hash_entry **sym_hashes;
11969   struct elf_link_hash_entry **end_hashes;
11970   struct elf_link_hash_entry **start_hashes;
11971   unsigned int symcount;
11972 
11973   sec_shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
11974   contents = elf_section_data (sec)->this_hdr.contents;
11975 
11976   irel = elf_section_data (sec)->relocs;
11977   irelend = irel + sec->reloc_count;
11978 
11979   /* Actually delete the bytes.  */
11980   memmove (contents + addr, contents + addr + count,
11981 	   (size_t) (sec->size - addr - count));
11982   sec->size -= count;
11983 
11984   /* Adjust all the relocs.  */
11985   for (irel = elf_section_data (sec)->relocs; irel < irelend; irel++)
11986     {
11987       /* Get the new reloc address.  */
11988       if (irel->r_offset > addr)
11989 	irel->r_offset -= count;
11990     }
11991 
11992   BFD_ASSERT (addr % 2 == 0);
11993   BFD_ASSERT (count % 2 == 0);
11994 
11995   /* Adjust the local symbols defined in this section.  */
11996   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
11997   isym = (Elf_Internal_Sym *) symtab_hdr->contents;
11998   for (isymend = isym + symtab_hdr->sh_info; isym < isymend; isym++)
11999     if (isym->st_shndx == sec_shndx && isym->st_value > addr)
12000       isym->st_value -= count;
12001 
12002   /* Now adjust the global symbols defined in this section.  */
12003   symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym)
12004 	      - symtab_hdr->sh_info);
12005   sym_hashes = start_hashes = elf_sym_hashes (abfd);
12006   end_hashes = sym_hashes + symcount;
12007 
12008   for (; sym_hashes < end_hashes; sym_hashes++)
12009     {
12010       struct elf_link_hash_entry *sym_hash = *sym_hashes;
12011 
12012       if ((sym_hash->root.type == bfd_link_hash_defined
12013 	   || sym_hash->root.type == bfd_link_hash_defweak)
12014 	  && sym_hash->root.u.def.section == sec)
12015 	{
12016 	  bfd_vma value = sym_hash->root.u.def.value;
12017 
12018 	  if (ELF_ST_IS_MICROMIPS (sym_hash->other))
12019 	    value &= MINUS_TWO;
12020 	  if (value > addr)
12021 	    sym_hash->root.u.def.value -= count;
12022 	}
12023     }
12024 
12025   return TRUE;
12026 }
12027 
12028 
12029 /* Opcodes needed for microMIPS relaxation as found in
12030    opcodes/micromips-opc.c.  */
12031 
12032 struct opcode_descriptor {
12033   unsigned long match;
12034   unsigned long mask;
12035 };
12036 
12037 /* The $ra register aka $31.  */
12038 
12039 #define RA 31
12040 
12041 /* 32-bit instruction format register fields.  */
12042 
12043 #define OP32_SREG(opcode) (((opcode) >> 16) & 0x1f)
12044 #define OP32_TREG(opcode) (((opcode) >> 21) & 0x1f)
12045 
12046 /* Check if a 5-bit register index can be abbreviated to 3 bits.  */
12047 
12048 #define OP16_VALID_REG(r) \
12049   ((2 <= (r) && (r) <= 7) || (16 <= (r) && (r) <= 17))
12050 
12051 
12052 /* 32-bit and 16-bit branches.  */
12053 
12054 static const struct opcode_descriptor b_insns_32[] = {
12055   { /* "b",	"p",		*/ 0x40400000, 0xffff0000 }, /* bgez 0 */
12056   { /* "b",	"p",		*/ 0x94000000, 0xffff0000 }, /* beq 0, 0 */
12057   { 0, 0 }  /* End marker for find_match().  */
12058 };
12059 
12060 static const struct opcode_descriptor bc_insn_32 =
12061   { /* "bc(1|2)(ft)", "N,p",	*/ 0x42800000, 0xfec30000 };
12062 
12063 static const struct opcode_descriptor bz_insn_32 =
12064   { /* "b(g|l)(e|t)z", "s,p",	*/ 0x40000000, 0xff200000 };
12065 
12066 static const struct opcode_descriptor bzal_insn_32 =
12067   { /* "b(ge|lt)zal", "s,p",	*/ 0x40200000, 0xffa00000 };
12068 
12069 static const struct opcode_descriptor beq_insn_32 =
12070   { /* "b(eq|ne)", "s,t,p",	*/ 0x94000000, 0xdc000000 };
12071 
12072 static const struct opcode_descriptor b_insn_16 =
12073   { /* "b",	"mD",		*/ 0xcc00,     0xfc00 };
12074 
12075 static const struct opcode_descriptor bz_insn_16 =
12076   { /* "b(eq|ne)z", "md,mE",	*/ 0x8c00,     0xdc00 };
12077 
12078 
12079 /* 32-bit and 16-bit branch EQ and NE zero.  */
12080 
12081 /* NOTE: All opcode tables have BEQ/BNE in the same order: first the
12082    eq and second the ne.  This convention is used when replacing a
12083    32-bit BEQ/BNE with the 16-bit version.  */
12084 
12085 #define BZC32_REG_FIELD(r) (((r) & 0x1f) << 16)
12086 
12087 static const struct opcode_descriptor bz_rs_insns_32[] = {
12088   { /* "beqz",	"s,p",		*/ 0x94000000, 0xffe00000 },
12089   { /* "bnez",	"s,p",		*/ 0xb4000000, 0xffe00000 },
12090   { 0, 0 }  /* End marker for find_match().  */
12091 };
12092 
12093 static const struct opcode_descriptor bz_rt_insns_32[] = {
12094   { /* "beqz",	"t,p",		*/ 0x94000000, 0xfc01f000 },
12095   { /* "bnez",	"t,p",		*/ 0xb4000000, 0xfc01f000 },
12096   { 0, 0 }  /* End marker for find_match().  */
12097 };
12098 
12099 static const struct opcode_descriptor bzc_insns_32[] = {
12100   { /* "beqzc",	"s,p",		*/ 0x40e00000, 0xffe00000 },
12101   { /* "bnezc",	"s,p",		*/ 0x40a00000, 0xffe00000 },
12102   { 0, 0 }  /* End marker for find_match().  */
12103 };
12104 
12105 static const struct opcode_descriptor bz_insns_16[] = {
12106   { /* "beqz",	"md,mE",	*/ 0x8c00,     0xfc00 },
12107   { /* "bnez",	"md,mE",	*/ 0xac00,     0xfc00 },
12108   { 0, 0 }  /* End marker for find_match().  */
12109 };
12110 
12111 /* Switch between a 5-bit register index and its 3-bit shorthand.  */
12112 
12113 #define BZ16_REG(opcode) ((((((opcode) >> 7) & 7) + 0x1e) & 0x17) + 2)
12114 #define BZ16_REG_FIELD(r) \
12115   (((2 <= (r) && (r) <= 7) ? (r) : ((r) - 16)) << 7)
12116 
12117 
12118 /* 32-bit instructions with a delay slot.  */
12119 
12120 static const struct opcode_descriptor jal_insn_32_bd16 =
12121   { /* "jals",	"a",		*/ 0x74000000, 0xfc000000 };
12122 
12123 static const struct opcode_descriptor jal_insn_32_bd32 =
12124   { /* "jal",	"a",		*/ 0xf4000000, 0xfc000000 };
12125 
12126 static const struct opcode_descriptor jal_x_insn_32_bd32 =
12127   { /* "jal[x]", "a",		*/ 0xf0000000, 0xf8000000 };
12128 
12129 static const struct opcode_descriptor j_insn_32 =
12130   { /* "j",	"a",		*/ 0xd4000000, 0xfc000000 };
12131 
12132 static const struct opcode_descriptor jalr_insn_32 =
12133   { /* "jalr[.hb]", "t,s",	*/ 0x00000f3c, 0xfc00efff };
12134 
12135 /* This table can be compacted, because no opcode replacement is made.  */
12136 
12137 static const struct opcode_descriptor ds_insns_32_bd16[] = {
12138   { /* "jals",	"a",		*/ 0x74000000, 0xfc000000 },
12139 
12140   { /* "jalrs[.hb]", "t,s",	*/ 0x00004f3c, 0xfc00efff },
12141   { /* "b(ge|lt)zals", "s,p",	*/ 0x42200000, 0xffa00000 },
12142 
12143   { /* "b(g|l)(e|t)z", "s,p",	*/ 0x40000000, 0xff200000 },
12144   { /* "b(eq|ne)", "s,t,p",	*/ 0x94000000, 0xdc000000 },
12145   { /* "j",	"a",		*/ 0xd4000000, 0xfc000000 },
12146   { 0, 0 }  /* End marker for find_match().  */
12147 };
12148 
12149 /* This table can be compacted, because no opcode replacement is made.  */
12150 
12151 static const struct opcode_descriptor ds_insns_32_bd32[] = {
12152   { /* "jal[x]", "a",		*/ 0xf0000000, 0xf8000000 },
12153 
12154   { /* "jalr[.hb]", "t,s",	*/ 0x00000f3c, 0xfc00efff },
12155   { /* "b(ge|lt)zal", "s,p",	*/ 0x40200000, 0xffa00000 },
12156   { 0, 0 }  /* End marker for find_match().  */
12157 };
12158 
12159 
12160 /* 16-bit instructions with a delay slot.  */
12161 
12162 static const struct opcode_descriptor jalr_insn_16_bd16 =
12163   { /* "jalrs",	"my,mj",	*/ 0x45e0,     0xffe0 };
12164 
12165 static const struct opcode_descriptor jalr_insn_16_bd32 =
12166   { /* "jalr",	"my,mj",	*/ 0x45c0,     0xffe0 };
12167 
12168 static const struct opcode_descriptor jr_insn_16 =
12169   { /* "jr",	"mj",		*/ 0x4580,     0xffe0 };
12170 
12171 #define JR16_REG(opcode) ((opcode) & 0x1f)
12172 
12173 /* This table can be compacted, because no opcode replacement is made.  */
12174 
12175 static const struct opcode_descriptor ds_insns_16_bd16[] = {
12176   { /* "jalrs",	"my,mj",	*/ 0x45e0,     0xffe0 },
12177 
12178   { /* "b",	"mD",		*/ 0xcc00,     0xfc00 },
12179   { /* "b(eq|ne)z", "md,mE",	*/ 0x8c00,     0xdc00 },
12180   { /* "jr",	"mj",		*/ 0x4580,     0xffe0 },
12181   { 0, 0 }  /* End marker for find_match().  */
12182 };
12183 
12184 
12185 /* LUI instruction.  */
12186 
12187 static const struct opcode_descriptor lui_insn =
12188  { /* "lui",	"s,u",		*/ 0x41a00000, 0xffe00000 };
12189 
12190 
12191 /* ADDIU instruction.  */
12192 
12193 static const struct opcode_descriptor addiu_insn =
12194   { /* "addiu",	"t,r,j",	*/ 0x30000000, 0xfc000000 };
12195 
12196 static const struct opcode_descriptor addiupc_insn =
12197   { /* "addiu",	"mb,$pc,mQ",	*/ 0x78000000, 0xfc000000 };
12198 
12199 #define ADDIUPC_REG_FIELD(r) \
12200   (((2 <= (r) && (r) <= 7) ? (r) : ((r) - 16)) << 23)
12201 
12202 
12203 /* Relaxable instructions in a JAL delay slot: MOVE.  */
12204 
12205 /* The 16-bit move has rd in 9:5 and rs in 4:0.  The 32-bit moves
12206    (ADDU, OR) have rd in 15:11 and rs in 10:16.  */
12207 #define MOVE32_RD(opcode) (((opcode) >> 11) & 0x1f)
12208 #define MOVE32_RS(opcode) (((opcode) >> 16) & 0x1f)
12209 
12210 #define MOVE16_RD_FIELD(r) (((r) & 0x1f) << 5)
12211 #define MOVE16_RS_FIELD(r) (((r) & 0x1f)     )
12212 
12213 static const struct opcode_descriptor move_insns_32[] = {
12214   { /* "move",	"d,s",		*/ 0x00000150, 0xffe007ff }, /* addu d,s,$0 */
12215   { /* "move",	"d,s",		*/ 0x00000290, 0xffe007ff }, /* or   d,s,$0 */
12216   { 0, 0 }  /* End marker for find_match().  */
12217 };
12218 
12219 static const struct opcode_descriptor move_insn_16 =
12220   { /* "move",	"mp,mj",	*/ 0x0c00,     0xfc00 };
12221 
12222 
12223 /* NOP instructions.  */
12224 
12225 static const struct opcode_descriptor nop_insn_32 =
12226   { /* "nop",	"",		*/ 0x00000000, 0xffffffff };
12227 
12228 static const struct opcode_descriptor nop_insn_16 =
12229   { /* "nop",	"",		*/ 0x0c00,     0xffff };
12230 
12231 
12232 /* Instruction match support.  */
12233 
12234 #define MATCH(opcode, insn) ((opcode & insn.mask) == insn.match)
12235 
12236 static int
12237 find_match (unsigned long opcode, const struct opcode_descriptor insn[])
12238 {
12239   unsigned long indx;
12240 
12241   for (indx = 0; insn[indx].mask != 0; indx++)
12242     if (MATCH (opcode, insn[indx]))
12243       return indx;
12244 
12245   return -1;
12246 }
12247 
12248 
12249 /* Branch and delay slot decoding support.  */
12250 
12251 /* If PTR points to what *might* be a 16-bit branch or jump, then
12252    return the minimum length of its delay slot, otherwise return 0.
12253    Non-zero results are not definitive as we might be checking against
12254    the second half of another instruction.  */
12255 
12256 static int
12257 check_br16_dslot (bfd *abfd, bfd_byte *ptr)
12258 {
12259   unsigned long opcode;
12260   int bdsize;
12261 
12262   opcode = bfd_get_16 (abfd, ptr);
12263   if (MATCH (opcode, jalr_insn_16_bd32) != 0)
12264     /* 16-bit branch/jump with a 32-bit delay slot.  */
12265     bdsize = 4;
12266   else if (MATCH (opcode, jalr_insn_16_bd16) != 0
12267 	   || find_match (opcode, ds_insns_16_bd16) >= 0)
12268     /* 16-bit branch/jump with a 16-bit delay slot.  */
12269     bdsize = 2;
12270   else
12271     /* No delay slot.  */
12272     bdsize = 0;
12273 
12274   return bdsize;
12275 }
12276 
12277 /* If PTR points to what *might* be a 32-bit branch or jump, then
12278    return the minimum length of its delay slot, otherwise return 0.
12279    Non-zero results are not definitive as we might be checking against
12280    the second half of another instruction.  */
12281 
12282 static int
12283 check_br32_dslot (bfd *abfd, bfd_byte *ptr)
12284 {
12285   unsigned long opcode;
12286   int bdsize;
12287 
12288   opcode = bfd_get_micromips_32 (abfd, ptr);
12289   if (find_match (opcode, ds_insns_32_bd32) >= 0)
12290     /* 32-bit branch/jump with a 32-bit delay slot.  */
12291     bdsize = 4;
12292   else if (find_match (opcode, ds_insns_32_bd16) >= 0)
12293     /* 32-bit branch/jump with a 16-bit delay slot.  */
12294     bdsize = 2;
12295   else
12296     /* No delay slot.  */
12297     bdsize = 0;
12298 
12299   return bdsize;
12300 }
12301 
12302 /* If PTR points to a 16-bit branch or jump with a 32-bit delay slot
12303    that doesn't fiddle with REG, then return TRUE, otherwise FALSE.  */
12304 
12305 static bfd_boolean
12306 check_br16 (bfd *abfd, bfd_byte *ptr, unsigned long reg)
12307 {
12308   unsigned long opcode;
12309 
12310   opcode = bfd_get_16 (abfd, ptr);
12311   if (MATCH (opcode, b_insn_16)
12312 						/* B16  */
12313       || (MATCH (opcode, jr_insn_16) && reg != JR16_REG (opcode))
12314 						/* JR16  */
12315       || (MATCH (opcode, bz_insn_16) && reg != BZ16_REG (opcode))
12316 						/* BEQZ16, BNEZ16  */
12317       || (MATCH (opcode, jalr_insn_16_bd32)
12318 						/* JALR16  */
12319 	  && reg != JR16_REG (opcode) && reg != RA))
12320     return TRUE;
12321 
12322   return FALSE;
12323 }
12324 
12325 /* If PTR points to a 32-bit branch or jump that doesn't fiddle with REG,
12326    then return TRUE, otherwise FALSE.  */
12327 
12328 static bfd_boolean
12329 check_br32 (bfd *abfd, bfd_byte *ptr, unsigned long reg)
12330 {
12331   unsigned long opcode;
12332 
12333   opcode = bfd_get_micromips_32 (abfd, ptr);
12334   if (MATCH (opcode, j_insn_32)
12335 						/* J  */
12336       || MATCH (opcode, bc_insn_32)
12337 						/* BC1F, BC1T, BC2F, BC2T  */
12338       || (MATCH (opcode, jal_x_insn_32_bd32) && reg != RA)
12339 						/* JAL, JALX  */
12340       || (MATCH (opcode, bz_insn_32) && reg != OP32_SREG (opcode))
12341 						/* BGEZ, BGTZ, BLEZ, BLTZ  */
12342       || (MATCH (opcode, bzal_insn_32)
12343 						/* BGEZAL, BLTZAL  */
12344 	  && reg != OP32_SREG (opcode) && reg != RA)
12345       || ((MATCH (opcode, jalr_insn_32) || MATCH (opcode, beq_insn_32))
12346 						/* JALR, JALR.HB, BEQ, BNE  */
12347 	  && reg != OP32_SREG (opcode) && reg != OP32_TREG (opcode)))
12348     return TRUE;
12349 
12350   return FALSE;
12351 }
12352 
12353 /* If the instruction encoding at PTR and relocations [INTERNAL_RELOCS,
12354    IRELEND) at OFFSET indicate that there must be a compact branch there,
12355    then return TRUE, otherwise FALSE.  */
12356 
12357 static bfd_boolean
12358 check_relocated_bzc (bfd *abfd, const bfd_byte *ptr, bfd_vma offset,
12359 		     const Elf_Internal_Rela *internal_relocs,
12360 		     const Elf_Internal_Rela *irelend)
12361 {
12362   const Elf_Internal_Rela *irel;
12363   unsigned long opcode;
12364 
12365   opcode = bfd_get_micromips_32 (abfd, ptr);
12366   if (find_match (opcode, bzc_insns_32) < 0)
12367     return FALSE;
12368 
12369   for (irel = internal_relocs; irel < irelend; irel++)
12370     if (irel->r_offset == offset
12371 	&& ELF32_R_TYPE (irel->r_info) == R_MICROMIPS_PC16_S1)
12372       return TRUE;
12373 
12374   return FALSE;
12375 }
12376 
12377 /* Bitsize checking.  */
12378 #define IS_BITSIZE(val, N)						\
12379   (((((val) & ((1ULL << (N)) - 1)) ^ (1ULL << ((N) - 1)))		\
12380     - (1ULL << ((N) - 1))) == (val))
12381 
12382 
12383 bfd_boolean
12384 _bfd_mips_elf_relax_section (bfd *abfd, asection *sec,
12385 			     struct bfd_link_info *link_info,
12386 			     bfd_boolean *again)
12387 {
12388   Elf_Internal_Shdr *symtab_hdr;
12389   Elf_Internal_Rela *internal_relocs;
12390   Elf_Internal_Rela *irel, *irelend;
12391   bfd_byte *contents = NULL;
12392   Elf_Internal_Sym *isymbuf = NULL;
12393 
12394   /* Assume nothing changes.  */
12395   *again = FALSE;
12396 
12397   /* We don't have to do anything for a relocatable link, if
12398      this section does not have relocs, or if this is not a
12399      code section.  */
12400 
12401   if (link_info->relocatable
12402       || (sec->flags & SEC_RELOC) == 0
12403       || sec->reloc_count == 0
12404       || (sec->flags & SEC_CODE) == 0)
12405     return TRUE;
12406 
12407   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
12408 
12409   /* Get a copy of the native relocations.  */
12410   internal_relocs = (_bfd_elf_link_read_relocs
12411 		     (abfd, sec, NULL, (Elf_Internal_Rela *) NULL,
12412 		      link_info->keep_memory));
12413   if (internal_relocs == NULL)
12414     goto error_return;
12415 
12416   /* Walk through them looking for relaxing opportunities.  */
12417   irelend = internal_relocs + sec->reloc_count;
12418   for (irel = internal_relocs; irel < irelend; irel++)
12419     {
12420       unsigned long r_symndx = ELF32_R_SYM (irel->r_info);
12421       unsigned int r_type = ELF32_R_TYPE (irel->r_info);
12422       bfd_boolean target_is_micromips_code_p;
12423       unsigned long opcode;
12424       bfd_vma symval;
12425       bfd_vma pcrval;
12426       bfd_byte *ptr;
12427       int fndopc;
12428 
12429       /* The number of bytes to delete for relaxation and from where
12430          to delete these bytes starting at irel->r_offset.  */
12431       int delcnt = 0;
12432       int deloff = 0;
12433 
12434       /* If this isn't something that can be relaxed, then ignore
12435          this reloc.  */
12436       if (r_type != R_MICROMIPS_HI16
12437 	  && r_type != R_MICROMIPS_PC16_S1
12438 	  && r_type != R_MICROMIPS_26_S1)
12439 	continue;
12440 
12441       /* Get the section contents if we haven't done so already.  */
12442       if (contents == NULL)
12443 	{
12444 	  /* Get cached copy if it exists.  */
12445 	  if (elf_section_data (sec)->this_hdr.contents != NULL)
12446 	    contents = elf_section_data (sec)->this_hdr.contents;
12447 	  /* Go get them off disk.  */
12448 	  else if (!bfd_malloc_and_get_section (abfd, sec, &contents))
12449 	    goto error_return;
12450 	}
12451       ptr = contents + irel->r_offset;
12452 
12453       /* Read this BFD's local symbols if we haven't done so already.  */
12454       if (isymbuf == NULL && symtab_hdr->sh_info != 0)
12455 	{
12456 	  isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
12457 	  if (isymbuf == NULL)
12458 	    isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
12459 					    symtab_hdr->sh_info, 0,
12460 					    NULL, NULL, NULL);
12461 	  if (isymbuf == NULL)
12462 	    goto error_return;
12463 	}
12464 
12465       /* Get the value of the symbol referred to by the reloc.  */
12466       if (r_symndx < symtab_hdr->sh_info)
12467 	{
12468 	  /* A local symbol.  */
12469 	  Elf_Internal_Sym *isym;
12470 	  asection *sym_sec;
12471 
12472 	  isym = isymbuf + r_symndx;
12473 	  if (isym->st_shndx == SHN_UNDEF)
12474 	    sym_sec = bfd_und_section_ptr;
12475 	  else if (isym->st_shndx == SHN_ABS)
12476 	    sym_sec = bfd_abs_section_ptr;
12477 	  else if (isym->st_shndx == SHN_COMMON)
12478 	    sym_sec = bfd_com_section_ptr;
12479 	  else
12480 	    sym_sec = bfd_section_from_elf_index (abfd, isym->st_shndx);
12481 	  symval = (isym->st_value
12482 		    + sym_sec->output_section->vma
12483 		    + sym_sec->output_offset);
12484 	  target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (isym->st_other);
12485 	}
12486       else
12487 	{
12488 	  unsigned long indx;
12489 	  struct elf_link_hash_entry *h;
12490 
12491 	  /* An external symbol.  */
12492 	  indx = r_symndx - symtab_hdr->sh_info;
12493 	  h = elf_sym_hashes (abfd)[indx];
12494 	  BFD_ASSERT (h != NULL);
12495 
12496 	  if (h->root.type != bfd_link_hash_defined
12497 	      && h->root.type != bfd_link_hash_defweak)
12498 	    /* This appears to be a reference to an undefined
12499 	       symbol.  Just ignore it -- it will be caught by the
12500 	       regular reloc processing.  */
12501 	    continue;
12502 
12503 	  symval = (h->root.u.def.value
12504 		    + h->root.u.def.section->output_section->vma
12505 		    + h->root.u.def.section->output_offset);
12506 	  target_is_micromips_code_p = (!h->needs_plt
12507 					&& ELF_ST_IS_MICROMIPS (h->other));
12508 	}
12509 
12510 
12511       /* For simplicity of coding, we are going to modify the
12512          section contents, the section relocs, and the BFD symbol
12513          table.  We must tell the rest of the code not to free up this
12514          information.  It would be possible to instead create a table
12515          of changes which have to be made, as is done in coff-mips.c;
12516          that would be more work, but would require less memory when
12517          the linker is run.  */
12518 
12519       /* Only 32-bit instructions relaxed.  */
12520       if (irel->r_offset + 4 > sec->size)
12521 	continue;
12522 
12523       opcode = bfd_get_micromips_32 (abfd, ptr);
12524 
12525       /* This is the pc-relative distance from the instruction the
12526          relocation is applied to, to the symbol referred.  */
12527       pcrval = (symval
12528 		- (sec->output_section->vma + sec->output_offset)
12529 		- irel->r_offset);
12530 
12531       /* R_MICROMIPS_HI16 / LUI relaxation to nil, performing relaxation
12532          of corresponding R_MICROMIPS_LO16 to R_MICROMIPS_HI0_LO16 or
12533          R_MICROMIPS_PC23_S2.  The R_MICROMIPS_PC23_S2 condition is
12534 
12535            (symval % 4 == 0 && IS_BITSIZE (pcrval, 25))
12536 
12537          where pcrval has first to be adjusted to apply against the LO16
12538          location (we make the adjustment later on, when we have figured
12539          out the offset).  */
12540       if (r_type == R_MICROMIPS_HI16 && MATCH (opcode, lui_insn))
12541 	{
12542 	  bfd_boolean bzc = FALSE;
12543 	  unsigned long nextopc;
12544 	  unsigned long reg;
12545 	  bfd_vma offset;
12546 
12547 	  /* Give up if the previous reloc was a HI16 against this symbol
12548 	     too.  */
12549 	  if (irel > internal_relocs
12550 	      && ELF32_R_TYPE (irel[-1].r_info) == R_MICROMIPS_HI16
12551 	      && ELF32_R_SYM (irel[-1].r_info) == r_symndx)
12552 	    continue;
12553 
12554 	  /* Or if the next reloc is not a LO16 against this symbol.  */
12555 	  if (irel + 1 >= irelend
12556 	      || ELF32_R_TYPE (irel[1].r_info) != R_MICROMIPS_LO16
12557 	      || ELF32_R_SYM (irel[1].r_info) != r_symndx)
12558 	    continue;
12559 
12560 	  /* Or if the second next reloc is a LO16 against this symbol too.  */
12561 	  if (irel + 2 >= irelend
12562 	      && ELF32_R_TYPE (irel[2].r_info) == R_MICROMIPS_LO16
12563 	      && ELF32_R_SYM (irel[2].r_info) == r_symndx)
12564 	    continue;
12565 
12566 	  /* See if the LUI instruction *might* be in a branch delay slot.
12567 	     We check whether what looks like a 16-bit branch or jump is
12568 	     actually an immediate argument to a compact branch, and let
12569 	     it through if so.  */
12570 	  if (irel->r_offset >= 2
12571 	      && check_br16_dslot (abfd, ptr - 2)
12572 	      && !(irel->r_offset >= 4
12573 		   && (bzc = check_relocated_bzc (abfd,
12574 						  ptr - 4, irel->r_offset - 4,
12575 						  internal_relocs, irelend))))
12576 	    continue;
12577 	  if (irel->r_offset >= 4
12578 	      && !bzc
12579 	      && check_br32_dslot (abfd, ptr - 4))
12580 	    continue;
12581 
12582 	  reg = OP32_SREG (opcode);
12583 
12584 	  /* We only relax adjacent instructions or ones separated with
12585 	     a branch or jump that has a delay slot.  The branch or jump
12586 	     must not fiddle with the register used to hold the address.
12587 	     Subtract 4 for the LUI itself.  */
12588 	  offset = irel[1].r_offset - irel[0].r_offset;
12589 	  switch (offset - 4)
12590 	    {
12591 	    case 0:
12592 	      break;
12593 	    case 2:
12594 	      if (check_br16 (abfd, ptr + 4, reg))
12595 		break;
12596 	      continue;
12597 	    case 4:
12598 	      if (check_br32 (abfd, ptr + 4, reg))
12599 		break;
12600 	      continue;
12601 	    default:
12602 	      continue;
12603 	    }
12604 
12605 	  nextopc = bfd_get_micromips_32 (abfd, contents + irel[1].r_offset);
12606 
12607 	  /* Give up unless the same register is used with both
12608 	     relocations.  */
12609 	  if (OP32_SREG (nextopc) != reg)
12610 	    continue;
12611 
12612 	  /* Now adjust pcrval, subtracting the offset to the LO16 reloc
12613 	     and rounding up to take masking of the two LSBs into account.  */
12614 	  pcrval = ((pcrval - offset + 3) | 3) ^ 3;
12615 
12616 	  /* R_MICROMIPS_LO16 relaxation to R_MICROMIPS_HI0_LO16.  */
12617 	  if (IS_BITSIZE (symval, 16))
12618 	    {
12619 	      /* Fix the relocation's type.  */
12620 	      irel[1].r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_HI0_LO16);
12621 
12622 	      /* Instructions using R_MICROMIPS_LO16 have the base or
12623 	         source register in bits 20:16.  This register becomes $0
12624 	         (zero) as the result of the R_MICROMIPS_HI16 being 0.  */
12625 	      nextopc &= ~0x001f0000;
12626 	      bfd_put_16 (abfd, (nextopc >> 16) & 0xffff,
12627 			  contents + irel[1].r_offset);
12628 	    }
12629 
12630 	  /* R_MICROMIPS_LO16 / ADDIU relaxation to R_MICROMIPS_PC23_S2.
12631 	     We add 4 to take LUI deletion into account while checking
12632 	     the PC-relative distance.  */
12633 	  else if (symval % 4 == 0
12634 		   && IS_BITSIZE (pcrval + 4, 25)
12635 		   && MATCH (nextopc, addiu_insn)
12636 		   && OP32_TREG (nextopc) == OP32_SREG (nextopc)
12637 		   && OP16_VALID_REG (OP32_TREG (nextopc)))
12638 	    {
12639 	      /* Fix the relocation's type.  */
12640 	      irel[1].r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC23_S2);
12641 
12642 	      /* Replace ADDIU with the ADDIUPC version.  */
12643 	      nextopc = (addiupc_insn.match
12644 			 | ADDIUPC_REG_FIELD (OP32_TREG (nextopc)));
12645 
12646 	      bfd_put_micromips_32 (abfd, nextopc,
12647 				    contents + irel[1].r_offset);
12648 	    }
12649 
12650 	  /* Can't do anything, give up, sigh...  */
12651 	  else
12652 	    continue;
12653 
12654 	  /* Fix the relocation's type.  */
12655 	  irel->r_info = ELF32_R_INFO (r_symndx, R_MIPS_NONE);
12656 
12657 	  /* Delete the LUI instruction: 4 bytes at irel->r_offset.  */
12658 	  delcnt = 4;
12659 	  deloff = 0;
12660 	}
12661 
12662       /* Compact branch relaxation -- due to the multitude of macros
12663          employed by the compiler/assembler, compact branches are not
12664          always generated.  Obviously, this can/will be fixed elsewhere,
12665          but there is no drawback in double checking it here.  */
12666       else if (r_type == R_MICROMIPS_PC16_S1
12667 	       && irel->r_offset + 5 < sec->size
12668 	       && ((fndopc = find_match (opcode, bz_rs_insns_32)) >= 0
12669 		   || (fndopc = find_match (opcode, bz_rt_insns_32)) >= 0)
12670 	       && MATCH (bfd_get_16 (abfd, ptr + 4), nop_insn_16))
12671 	{
12672 	  unsigned long reg;
12673 
12674 	  reg = OP32_SREG (opcode) ? OP32_SREG (opcode) : OP32_TREG (opcode);
12675 
12676 	  /* Replace BEQZ/BNEZ with the compact version.  */
12677 	  opcode = (bzc_insns_32[fndopc].match
12678 		    | BZC32_REG_FIELD (reg)
12679 		    | (opcode & 0xffff));		/* Addend value.  */
12680 
12681 	  bfd_put_micromips_32 (abfd, opcode, ptr);
12682 
12683 	  /* Delete the 16-bit delay slot NOP: two bytes from
12684 	     irel->offset + 4.  */
12685 	  delcnt = 2;
12686 	  deloff = 4;
12687 	}
12688 
12689       /* R_MICROMIPS_PC16_S1 relaxation to R_MICROMIPS_PC10_S1.  We need
12690          to check the distance from the next instruction, so subtract 2.  */
12691       else if (r_type == R_MICROMIPS_PC16_S1
12692 	       && IS_BITSIZE (pcrval - 2, 11)
12693 	       && find_match (opcode, b_insns_32) >= 0)
12694 	{
12695 	  /* Fix the relocation's type.  */
12696 	  irel->r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC10_S1);
12697 
12698 	  /* Replace the 32-bit opcode with a 16-bit opcode.  */
12699 	  bfd_put_16 (abfd,
12700 		      (b_insn_16.match
12701 		       | (opcode & 0x3ff)),		/* Addend value.  */
12702 		      ptr);
12703 
12704 	  /* Delete 2 bytes from irel->r_offset + 2.  */
12705 	  delcnt = 2;
12706 	  deloff = 2;
12707 	}
12708 
12709       /* R_MICROMIPS_PC16_S1 relaxation to R_MICROMIPS_PC7_S1.  We need
12710          to check the distance from the next instruction, so subtract 2.  */
12711       else if (r_type == R_MICROMIPS_PC16_S1
12712 	       && IS_BITSIZE (pcrval - 2, 8)
12713 	       && (((fndopc = find_match (opcode, bz_rs_insns_32)) >= 0
12714 		    && OP16_VALID_REG (OP32_SREG (opcode)))
12715 		   || ((fndopc = find_match (opcode, bz_rt_insns_32)) >= 0
12716 		       && OP16_VALID_REG (OP32_TREG (opcode)))))
12717 	{
12718 	  unsigned long reg;
12719 
12720 	  reg = OP32_SREG (opcode) ? OP32_SREG (opcode) : OP32_TREG (opcode);
12721 
12722 	  /* Fix the relocation's type.  */
12723 	  irel->r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC7_S1);
12724 
12725 	  /* Replace the 32-bit opcode with a 16-bit opcode.  */
12726 	  bfd_put_16 (abfd,
12727 		      (bz_insns_16[fndopc].match
12728 		       | BZ16_REG_FIELD (reg)
12729 		       | (opcode & 0x7f)),		/* Addend value.  */
12730 		      ptr);
12731 
12732 	  /* Delete 2 bytes from irel->r_offset + 2.  */
12733 	  delcnt = 2;
12734 	  deloff = 2;
12735 	}
12736 
12737       /* R_MICROMIPS_26_S1 -- JAL to JALS relaxation for microMIPS targets.  */
12738       else if (r_type == R_MICROMIPS_26_S1
12739 	       && target_is_micromips_code_p
12740 	       && irel->r_offset + 7 < sec->size
12741 	       && MATCH (opcode, jal_insn_32_bd32))
12742 	{
12743 	  unsigned long n32opc;
12744 	  bfd_boolean relaxed = FALSE;
12745 
12746 	  n32opc = bfd_get_micromips_32 (abfd, ptr + 4);
12747 
12748 	  if (MATCH (n32opc, nop_insn_32))
12749 	    {
12750 	      /* Replace delay slot 32-bit NOP with a 16-bit NOP.  */
12751 	      bfd_put_16 (abfd, nop_insn_16.match, ptr + 4);
12752 
12753 	      relaxed = TRUE;
12754 	    }
12755 	  else if (find_match (n32opc, move_insns_32) >= 0)
12756 	    {
12757 	      /* Replace delay slot 32-bit MOVE with 16-bit MOVE.  */
12758 	      bfd_put_16 (abfd,
12759 			  (move_insn_16.match
12760 			   | MOVE16_RD_FIELD (MOVE32_RD (n32opc))
12761 			   | MOVE16_RS_FIELD (MOVE32_RS (n32opc))),
12762 			  ptr + 4);
12763 
12764 	      relaxed = TRUE;
12765 	    }
12766 	  /* Other 32-bit instructions relaxable to 16-bit
12767 	     instructions will be handled here later.  */
12768 
12769 	  if (relaxed)
12770 	    {
12771 	      /* JAL with 32-bit delay slot that is changed to a JALS
12772 	         with 16-bit delay slot.  */
12773 	      bfd_put_micromips_32 (abfd, jal_insn_32_bd16.match, ptr);
12774 
12775 	      /* Delete 2 bytes from irel->r_offset + 6.  */
12776 	      delcnt = 2;
12777 	      deloff = 6;
12778 	    }
12779 	}
12780 
12781       if (delcnt != 0)
12782 	{
12783 	  /* Note that we've changed the relocs, section contents, etc.  */
12784 	  elf_section_data (sec)->relocs = internal_relocs;
12785 	  elf_section_data (sec)->this_hdr.contents = contents;
12786 	  symtab_hdr->contents = (unsigned char *) isymbuf;
12787 
12788 	  /* Delete bytes depending on the delcnt and deloff.  */
12789 	  if (!mips_elf_relax_delete_bytes (abfd, sec,
12790 					    irel->r_offset + deloff, delcnt))
12791 	    goto error_return;
12792 
12793 	  /* That will change things, so we should relax again.
12794 	     Note that this is not required, and it may be slow.  */
12795 	  *again = TRUE;
12796 	}
12797     }
12798 
12799   if (isymbuf != NULL
12800       && symtab_hdr->contents != (unsigned char *) isymbuf)
12801     {
12802       if (! link_info->keep_memory)
12803 	free (isymbuf);
12804       else
12805 	{
12806 	  /* Cache the symbols for elf_link_input_bfd.  */
12807 	  symtab_hdr->contents = (unsigned char *) isymbuf;
12808 	}
12809     }
12810 
12811   if (contents != NULL
12812       && elf_section_data (sec)->this_hdr.contents != contents)
12813     {
12814       if (! link_info->keep_memory)
12815 	free (contents);
12816       else
12817 	{
12818 	  /* Cache the section contents for elf_link_input_bfd.  */
12819 	  elf_section_data (sec)->this_hdr.contents = contents;
12820 	}
12821     }
12822 
12823   if (internal_relocs != NULL
12824       && elf_section_data (sec)->relocs != internal_relocs)
12825     free (internal_relocs);
12826 
12827   return TRUE;
12828 
12829  error_return:
12830   if (isymbuf != NULL
12831       && symtab_hdr->contents != (unsigned char *) isymbuf)
12832     free (isymbuf);
12833   if (contents != NULL
12834       && elf_section_data (sec)->this_hdr.contents != contents)
12835     free (contents);
12836   if (internal_relocs != NULL
12837       && elf_section_data (sec)->relocs != internal_relocs)
12838     free (internal_relocs);
12839 
12840   return FALSE;
12841 }
12842 
12843 /* Create a MIPS ELF linker hash table.  */
12844 
12845 struct bfd_link_hash_table *
12846 _bfd_mips_elf_link_hash_table_create (bfd *abfd)
12847 {
12848   struct mips_elf_link_hash_table *ret;
12849   bfd_size_type amt = sizeof (struct mips_elf_link_hash_table);
12850 
12851   ret = bfd_zmalloc (amt);
12852   if (ret == NULL)
12853     return NULL;
12854 
12855   if (!_bfd_elf_link_hash_table_init (&ret->root, abfd,
12856 				      mips_elf_link_hash_newfunc,
12857 				      sizeof (struct mips_elf_link_hash_entry),
12858 				      MIPS_ELF_DATA))
12859     {
12860       free (ret);
12861       return NULL;
12862     }
12863 
12864   return &ret->root.root;
12865 }
12866 
12867 /* Likewise, but indicate that the target is VxWorks.  */
12868 
12869 struct bfd_link_hash_table *
12870 _bfd_mips_vxworks_link_hash_table_create (bfd *abfd)
12871 {
12872   struct bfd_link_hash_table *ret;
12873 
12874   ret = _bfd_mips_elf_link_hash_table_create (abfd);
12875   if (ret)
12876     {
12877       struct mips_elf_link_hash_table *htab;
12878 
12879       htab = (struct mips_elf_link_hash_table *) ret;
12880       htab->use_plts_and_copy_relocs = TRUE;
12881       htab->is_vxworks = TRUE;
12882     }
12883   return ret;
12884 }
12885 
12886 /* A function that the linker calls if we are allowed to use PLTs
12887    and copy relocs.  */
12888 
12889 void
12890 _bfd_mips_elf_use_plts_and_copy_relocs (struct bfd_link_info *info)
12891 {
12892   mips_elf_hash_table (info)->use_plts_and_copy_relocs = TRUE;
12893 }
12894 
12895 /* We need to use a special link routine to handle the .reginfo and
12896    the .mdebug sections.  We need to merge all instances of these
12897    sections together, not write them all out sequentially.  */
12898 
12899 bfd_boolean
12900 _bfd_mips_elf_final_link (bfd *abfd, struct bfd_link_info *info)
12901 {
12902   asection *o;
12903   struct bfd_link_order *p;
12904   asection *reginfo_sec, *mdebug_sec, *gptab_data_sec, *gptab_bss_sec;
12905   asection *rtproc_sec;
12906   Elf32_RegInfo reginfo;
12907   struct ecoff_debug_info debug;
12908   struct mips_htab_traverse_info hti;
12909   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
12910   const struct ecoff_debug_swap *swap = bed->elf_backend_ecoff_debug_swap;
12911   HDRR *symhdr = &debug.symbolic_header;
12912   void *mdebug_handle = NULL;
12913   asection *s;
12914   EXTR esym;
12915   unsigned int i;
12916   bfd_size_type amt;
12917   struct mips_elf_link_hash_table *htab;
12918 
12919   static const char * const secname[] =
12920   {
12921     ".text", ".init", ".fini", ".data",
12922     ".rodata", ".sdata", ".sbss", ".bss"
12923   };
12924   static const int sc[] =
12925   {
12926     scText, scInit, scFini, scData,
12927     scRData, scSData, scSBss, scBss
12928   };
12929 
12930   /* Sort the dynamic symbols so that those with GOT entries come after
12931      those without.  */
12932   htab = mips_elf_hash_table (info);
12933   BFD_ASSERT (htab != NULL);
12934 
12935   if (!mips_elf_sort_hash_table (abfd, info))
12936     return FALSE;
12937 
12938   /* Create any scheduled LA25 stubs.  */
12939   hti.info = info;
12940   hti.output_bfd = abfd;
12941   hti.error = FALSE;
12942   htab_traverse (htab->la25_stubs, mips_elf_create_la25_stub, &hti);
12943   if (hti.error)
12944     return FALSE;
12945 
12946   /* Get a value for the GP register.  */
12947   if (elf_gp (abfd) == 0)
12948     {
12949       struct bfd_link_hash_entry *h;
12950 
12951       h = bfd_link_hash_lookup (info->hash, "_gp", FALSE, FALSE, TRUE);
12952       if (h != NULL && h->type == bfd_link_hash_defined)
12953 	elf_gp (abfd) = (h->u.def.value
12954 			 + h->u.def.section->output_section->vma
12955 			 + h->u.def.section->output_offset);
12956       else if (htab->is_vxworks
12957 	       && (h = bfd_link_hash_lookup (info->hash,
12958 					     "_GLOBAL_OFFSET_TABLE_",
12959 					     FALSE, FALSE, TRUE))
12960 	       && h->type == bfd_link_hash_defined)
12961 	elf_gp (abfd) = (h->u.def.section->output_section->vma
12962 			 + h->u.def.section->output_offset
12963 			 + h->u.def.value);
12964       else if (info->relocatable)
12965 	{
12966 	  bfd_vma lo = MINUS_ONE;
12967 
12968 	  /* Find the GP-relative section with the lowest offset.  */
12969 	  for (o = abfd->sections; o != NULL; o = o->next)
12970 	    if (o->vma < lo
12971 		&& (elf_section_data (o)->this_hdr.sh_flags & SHF_MIPS_GPREL))
12972 	      lo = o->vma;
12973 
12974 	  /* And calculate GP relative to that.  */
12975 	  elf_gp (abfd) = lo + ELF_MIPS_GP_OFFSET (info);
12976 	}
12977       else
12978 	{
12979 	  /* If the relocate_section function needs to do a reloc
12980 	     involving the GP value, it should make a reloc_dangerous
12981 	     callback to warn that GP is not defined.  */
12982 	}
12983     }
12984 
12985   /* Go through the sections and collect the .reginfo and .mdebug
12986      information.  */
12987   reginfo_sec = NULL;
12988   mdebug_sec = NULL;
12989   gptab_data_sec = NULL;
12990   gptab_bss_sec = NULL;
12991   for (o = abfd->sections; o != NULL; o = o->next)
12992     {
12993       if (strcmp (o->name, ".reginfo") == 0)
12994 	{
12995 	  memset (&reginfo, 0, sizeof reginfo);
12996 
12997 	  /* We have found the .reginfo section in the output file.
12998 	     Look through all the link_orders comprising it and merge
12999 	     the information together.  */
13000 	  for (p = o->map_head.link_order; p != NULL; p = p->next)
13001 	    {
13002 	      asection *input_section;
13003 	      bfd *input_bfd;
13004 	      Elf32_External_RegInfo ext;
13005 	      Elf32_RegInfo sub;
13006 
13007 	      if (p->type != bfd_indirect_link_order)
13008 		{
13009 		  if (p->type == bfd_data_link_order)
13010 		    continue;
13011 		  abort ();
13012 		}
13013 
13014 	      input_section = p->u.indirect.section;
13015 	      input_bfd = input_section->owner;
13016 
13017 	      if (! bfd_get_section_contents (input_bfd, input_section,
13018 					      &ext, 0, sizeof ext))
13019 		return FALSE;
13020 
13021 	      bfd_mips_elf32_swap_reginfo_in (input_bfd, &ext, &sub);
13022 
13023 	      reginfo.ri_gprmask |= sub.ri_gprmask;
13024 	      reginfo.ri_cprmask[0] |= sub.ri_cprmask[0];
13025 	      reginfo.ri_cprmask[1] |= sub.ri_cprmask[1];
13026 	      reginfo.ri_cprmask[2] |= sub.ri_cprmask[2];
13027 	      reginfo.ri_cprmask[3] |= sub.ri_cprmask[3];
13028 
13029 	      /* ri_gp_value is set by the function
13030 		 mips_elf32_section_processing when the section is
13031 		 finally written out.  */
13032 
13033 	      /* Hack: reset the SEC_HAS_CONTENTS flag so that
13034 		 elf_link_input_bfd ignores this section.  */
13035 	      input_section->flags &= ~SEC_HAS_CONTENTS;
13036 	    }
13037 
13038 	  /* Size has been set in _bfd_mips_elf_always_size_sections.  */
13039 	  BFD_ASSERT(o->size == sizeof (Elf32_External_RegInfo));
13040 
13041 	  /* Skip this section later on (I don't think this currently
13042 	     matters, but someday it might).  */
13043 	  o->map_head.link_order = NULL;
13044 
13045 	  reginfo_sec = o;
13046 	}
13047 
13048       if (strcmp (o->name, ".mdebug") == 0)
13049 	{
13050 	  struct extsym_info einfo;
13051 	  bfd_vma last;
13052 
13053 	  /* We have found the .mdebug section in the output file.
13054 	     Look through all the link_orders comprising it and merge
13055 	     the information together.  */
13056 	  symhdr->magic = swap->sym_magic;
13057 	  /* FIXME: What should the version stamp be?  */
13058 	  symhdr->vstamp = 0;
13059 	  symhdr->ilineMax = 0;
13060 	  symhdr->cbLine = 0;
13061 	  symhdr->idnMax = 0;
13062 	  symhdr->ipdMax = 0;
13063 	  symhdr->isymMax = 0;
13064 	  symhdr->ioptMax = 0;
13065 	  symhdr->iauxMax = 0;
13066 	  symhdr->issMax = 0;
13067 	  symhdr->issExtMax = 0;
13068 	  symhdr->ifdMax = 0;
13069 	  symhdr->crfd = 0;
13070 	  symhdr->iextMax = 0;
13071 
13072 	  /* We accumulate the debugging information itself in the
13073 	     debug_info structure.  */
13074 	  debug.line = NULL;
13075 	  debug.external_dnr = NULL;
13076 	  debug.external_pdr = NULL;
13077 	  debug.external_sym = NULL;
13078 	  debug.external_opt = NULL;
13079 	  debug.external_aux = NULL;
13080 	  debug.ss = NULL;
13081 	  debug.ssext = debug.ssext_end = NULL;
13082 	  debug.external_fdr = NULL;
13083 	  debug.external_rfd = NULL;
13084 	  debug.external_ext = debug.external_ext_end = NULL;
13085 
13086 	  mdebug_handle = bfd_ecoff_debug_init (abfd, &debug, swap, info);
13087 	  if (mdebug_handle == NULL)
13088 	    return FALSE;
13089 
13090 	  esym.jmptbl = 0;
13091 	  esym.cobol_main = 0;
13092 	  esym.weakext = 0;
13093 	  esym.reserved = 0;
13094 	  esym.ifd = ifdNil;
13095 	  esym.asym.iss = issNil;
13096 	  esym.asym.st = stLocal;
13097 	  esym.asym.reserved = 0;
13098 	  esym.asym.index = indexNil;
13099 	  last = 0;
13100 	  for (i = 0; i < sizeof (secname) / sizeof (secname[0]); i++)
13101 	    {
13102 	      esym.asym.sc = sc[i];
13103 	      s = bfd_get_section_by_name (abfd, secname[i]);
13104 	      if (s != NULL)
13105 		{
13106 		  esym.asym.value = s->vma;
13107 		  last = s->vma + s->size;
13108 		}
13109 	      else
13110 		esym.asym.value = last;
13111 	      if (!bfd_ecoff_debug_one_external (abfd, &debug, swap,
13112 						 secname[i], &esym))
13113 		return FALSE;
13114 	    }
13115 
13116 	  for (p = o->map_head.link_order; p != NULL; p = p->next)
13117 	    {
13118 	      asection *input_section;
13119 	      bfd *input_bfd;
13120 	      const struct ecoff_debug_swap *input_swap;
13121 	      struct ecoff_debug_info input_debug;
13122 	      char *eraw_src;
13123 	      char *eraw_end;
13124 
13125 	      if (p->type != bfd_indirect_link_order)
13126 		{
13127 		  if (p->type == bfd_data_link_order)
13128 		    continue;
13129 		  abort ();
13130 		}
13131 
13132 	      input_section = p->u.indirect.section;
13133 	      input_bfd = input_section->owner;
13134 
13135 	      if (!is_mips_elf (input_bfd))
13136 		{
13137 		  /* I don't know what a non MIPS ELF bfd would be
13138 		     doing with a .mdebug section, but I don't really
13139 		     want to deal with it.  */
13140 		  continue;
13141 		}
13142 
13143 	      input_swap = (get_elf_backend_data (input_bfd)
13144 			    ->elf_backend_ecoff_debug_swap);
13145 
13146 	      BFD_ASSERT (p->size == input_section->size);
13147 
13148 	      /* The ECOFF linking code expects that we have already
13149 		 read in the debugging information and set up an
13150 		 ecoff_debug_info structure, so we do that now.  */
13151 	      if (! _bfd_mips_elf_read_ecoff_info (input_bfd, input_section,
13152 						   &input_debug))
13153 		return FALSE;
13154 
13155 	      if (! (bfd_ecoff_debug_accumulate
13156 		     (mdebug_handle, abfd, &debug, swap, input_bfd,
13157 		      &input_debug, input_swap, info)))
13158 		return FALSE;
13159 
13160 	      /* Loop through the external symbols.  For each one with
13161 		 interesting information, try to find the symbol in
13162 		 the linker global hash table and save the information
13163 		 for the output external symbols.  */
13164 	      eraw_src = input_debug.external_ext;
13165 	      eraw_end = (eraw_src
13166 			  + (input_debug.symbolic_header.iextMax
13167 			     * input_swap->external_ext_size));
13168 	      for (;
13169 		   eraw_src < eraw_end;
13170 		   eraw_src += input_swap->external_ext_size)
13171 		{
13172 		  EXTR ext;
13173 		  const char *name;
13174 		  struct mips_elf_link_hash_entry *h;
13175 
13176 		  (*input_swap->swap_ext_in) (input_bfd, eraw_src, &ext);
13177 		  if (ext.asym.sc == scNil
13178 		      || ext.asym.sc == scUndefined
13179 		      || ext.asym.sc == scSUndefined)
13180 		    continue;
13181 
13182 		  name = input_debug.ssext + ext.asym.iss;
13183 		  h = mips_elf_link_hash_lookup (mips_elf_hash_table (info),
13184 						 name, FALSE, FALSE, TRUE);
13185 		  if (h == NULL || h->esym.ifd != -2)
13186 		    continue;
13187 
13188 		  if (ext.ifd != -1)
13189 		    {
13190 		      BFD_ASSERT (ext.ifd
13191 				  < input_debug.symbolic_header.ifdMax);
13192 		      ext.ifd = input_debug.ifdmap[ext.ifd];
13193 		    }
13194 
13195 		  h->esym = ext;
13196 		}
13197 
13198 	      /* Free up the information we just read.  */
13199 	      free (input_debug.line);
13200 	      free (input_debug.external_dnr);
13201 	      free (input_debug.external_pdr);
13202 	      free (input_debug.external_sym);
13203 	      free (input_debug.external_opt);
13204 	      free (input_debug.external_aux);
13205 	      free (input_debug.ss);
13206 	      free (input_debug.ssext);
13207 	      free (input_debug.external_fdr);
13208 	      free (input_debug.external_rfd);
13209 	      free (input_debug.external_ext);
13210 
13211 	      /* Hack: reset the SEC_HAS_CONTENTS flag so that
13212 		 elf_link_input_bfd ignores this section.  */
13213 	      input_section->flags &= ~SEC_HAS_CONTENTS;
13214 	    }
13215 
13216 	  if (SGI_COMPAT (abfd) && info->shared)
13217 	    {
13218 	      /* Create .rtproc section.  */
13219 	      rtproc_sec = bfd_get_linker_section (abfd, ".rtproc");
13220 	      if (rtproc_sec == NULL)
13221 		{
13222 		  flagword flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY
13223 				    | SEC_LINKER_CREATED | SEC_READONLY);
13224 
13225 		  rtproc_sec = bfd_make_section_anyway_with_flags (abfd,
13226 								   ".rtproc",
13227 								   flags);
13228 		  if (rtproc_sec == NULL
13229 		      || ! bfd_set_section_alignment (abfd, rtproc_sec, 4))
13230 		    return FALSE;
13231 		}
13232 
13233 	      if (! mips_elf_create_procedure_table (mdebug_handle, abfd,
13234 						     info, rtproc_sec,
13235 						     &debug))
13236 		return FALSE;
13237 	    }
13238 
13239 	  /* Build the external symbol information.  */
13240 	  einfo.abfd = abfd;
13241 	  einfo.info = info;
13242 	  einfo.debug = &debug;
13243 	  einfo.swap = swap;
13244 	  einfo.failed = FALSE;
13245 	  mips_elf_link_hash_traverse (mips_elf_hash_table (info),
13246 				       mips_elf_output_extsym, &einfo);
13247 	  if (einfo.failed)
13248 	    return FALSE;
13249 
13250 	  /* Set the size of the .mdebug section.  */
13251 	  o->size = bfd_ecoff_debug_size (abfd, &debug, swap);
13252 
13253 	  /* Skip this section later on (I don't think this currently
13254 	     matters, but someday it might).  */
13255 	  o->map_head.link_order = NULL;
13256 
13257 	  mdebug_sec = o;
13258 	}
13259 
13260       if (CONST_STRNEQ (o->name, ".gptab."))
13261 	{
13262 	  const char *subname;
13263 	  unsigned int c;
13264 	  Elf32_gptab *tab;
13265 	  Elf32_External_gptab *ext_tab;
13266 	  unsigned int j;
13267 
13268 	  /* The .gptab.sdata and .gptab.sbss sections hold
13269 	     information describing how the small data area would
13270 	     change depending upon the -G switch.  These sections
13271 	     not used in executables files.  */
13272 	  if (! info->relocatable)
13273 	    {
13274 	      for (p = o->map_head.link_order; p != NULL; p = p->next)
13275 		{
13276 		  asection *input_section;
13277 
13278 		  if (p->type != bfd_indirect_link_order)
13279 		    {
13280 		      if (p->type == bfd_data_link_order)
13281 			continue;
13282 		      abort ();
13283 		    }
13284 
13285 		  input_section = p->u.indirect.section;
13286 
13287 		  /* Hack: reset the SEC_HAS_CONTENTS flag so that
13288 		     elf_link_input_bfd ignores this section.  */
13289 		  input_section->flags &= ~SEC_HAS_CONTENTS;
13290 		}
13291 
13292 	      /* Skip this section later on (I don't think this
13293 		 currently matters, but someday it might).  */
13294 	      o->map_head.link_order = NULL;
13295 
13296 	      /* Really remove the section.  */
13297 	      bfd_section_list_remove (abfd, o);
13298 	      --abfd->section_count;
13299 
13300 	      continue;
13301 	    }
13302 
13303 	  /* There is one gptab for initialized data, and one for
13304 	     uninitialized data.  */
13305 	  if (strcmp (o->name, ".gptab.sdata") == 0)
13306 	    gptab_data_sec = o;
13307 	  else if (strcmp (o->name, ".gptab.sbss") == 0)
13308 	    gptab_bss_sec = o;
13309 	  else
13310 	    {
13311 	      (*_bfd_error_handler)
13312 		(_("%s: illegal section name `%s'"),
13313 		 bfd_get_filename (abfd), o->name);
13314 	      bfd_set_error (bfd_error_nonrepresentable_section);
13315 	      return FALSE;
13316 	    }
13317 
13318 	  /* The linker script always combines .gptab.data and
13319 	     .gptab.sdata into .gptab.sdata, and likewise for
13320 	     .gptab.bss and .gptab.sbss.  It is possible that there is
13321 	     no .sdata or .sbss section in the output file, in which
13322 	     case we must change the name of the output section.  */
13323 	  subname = o->name + sizeof ".gptab" - 1;
13324 	  if (bfd_get_section_by_name (abfd, subname) == NULL)
13325 	    {
13326 	      if (o == gptab_data_sec)
13327 		o->name = ".gptab.data";
13328 	      else
13329 		o->name = ".gptab.bss";
13330 	      subname = o->name + sizeof ".gptab" - 1;
13331 	      BFD_ASSERT (bfd_get_section_by_name (abfd, subname) != NULL);
13332 	    }
13333 
13334 	  /* Set up the first entry.  */
13335 	  c = 1;
13336 	  amt = c * sizeof (Elf32_gptab);
13337 	  tab = bfd_malloc (amt);
13338 	  if (tab == NULL)
13339 	    return FALSE;
13340 	  tab[0].gt_header.gt_current_g_value = elf_gp_size (abfd);
13341 	  tab[0].gt_header.gt_unused = 0;
13342 
13343 	  /* Combine the input sections.  */
13344 	  for (p = o->map_head.link_order; p != NULL; p = p->next)
13345 	    {
13346 	      asection *input_section;
13347 	      bfd *input_bfd;
13348 	      bfd_size_type size;
13349 	      unsigned long last;
13350 	      bfd_size_type gpentry;
13351 
13352 	      if (p->type != bfd_indirect_link_order)
13353 		{
13354 		  if (p->type == bfd_data_link_order)
13355 		    continue;
13356 		  abort ();
13357 		}
13358 
13359 	      input_section = p->u.indirect.section;
13360 	      input_bfd = input_section->owner;
13361 
13362 	      /* Combine the gptab entries for this input section one
13363 		 by one.  We know that the input gptab entries are
13364 		 sorted by ascending -G value.  */
13365 	      size = input_section->size;
13366 	      last = 0;
13367 	      for (gpentry = sizeof (Elf32_External_gptab);
13368 		   gpentry < size;
13369 		   gpentry += sizeof (Elf32_External_gptab))
13370 		{
13371 		  Elf32_External_gptab ext_gptab;
13372 		  Elf32_gptab int_gptab;
13373 		  unsigned long val;
13374 		  unsigned long add;
13375 		  bfd_boolean exact;
13376 		  unsigned int look;
13377 
13378 		  if (! (bfd_get_section_contents
13379 			 (input_bfd, input_section, &ext_gptab, gpentry,
13380 			  sizeof (Elf32_External_gptab))))
13381 		    {
13382 		      free (tab);
13383 		      return FALSE;
13384 		    }
13385 
13386 		  bfd_mips_elf32_swap_gptab_in (input_bfd, &ext_gptab,
13387 						&int_gptab);
13388 		  val = int_gptab.gt_entry.gt_g_value;
13389 		  add = int_gptab.gt_entry.gt_bytes - last;
13390 
13391 		  exact = FALSE;
13392 		  for (look = 1; look < c; look++)
13393 		    {
13394 		      if (tab[look].gt_entry.gt_g_value >= val)
13395 			tab[look].gt_entry.gt_bytes += add;
13396 
13397 		      if (tab[look].gt_entry.gt_g_value == val)
13398 			exact = TRUE;
13399 		    }
13400 
13401 		  if (! exact)
13402 		    {
13403 		      Elf32_gptab *new_tab;
13404 		      unsigned int max;
13405 
13406 		      /* We need a new table entry.  */
13407 		      amt = (bfd_size_type) (c + 1) * sizeof (Elf32_gptab);
13408 		      new_tab = bfd_realloc (tab, amt);
13409 		      if (new_tab == NULL)
13410 			{
13411 			  free (tab);
13412 			  return FALSE;
13413 			}
13414 		      tab = new_tab;
13415 		      tab[c].gt_entry.gt_g_value = val;
13416 		      tab[c].gt_entry.gt_bytes = add;
13417 
13418 		      /* Merge in the size for the next smallest -G
13419 			 value, since that will be implied by this new
13420 			 value.  */
13421 		      max = 0;
13422 		      for (look = 1; look < c; look++)
13423 			{
13424 			  if (tab[look].gt_entry.gt_g_value < val
13425 			      && (max == 0
13426 				  || (tab[look].gt_entry.gt_g_value
13427 				      > tab[max].gt_entry.gt_g_value)))
13428 			    max = look;
13429 			}
13430 		      if (max != 0)
13431 			tab[c].gt_entry.gt_bytes +=
13432 			  tab[max].gt_entry.gt_bytes;
13433 
13434 		      ++c;
13435 		    }
13436 
13437 		  last = int_gptab.gt_entry.gt_bytes;
13438 		}
13439 
13440 	      /* Hack: reset the SEC_HAS_CONTENTS flag so that
13441 		 elf_link_input_bfd ignores this section.  */
13442 	      input_section->flags &= ~SEC_HAS_CONTENTS;
13443 	    }
13444 
13445 	  /* The table must be sorted by -G value.  */
13446 	  if (c > 2)
13447 	    qsort (tab + 1, c - 1, sizeof (tab[0]), gptab_compare);
13448 
13449 	  /* Swap out the table.  */
13450 	  amt = (bfd_size_type) c * sizeof (Elf32_External_gptab);
13451 	  ext_tab = bfd_alloc (abfd, amt);
13452 	  if (ext_tab == NULL)
13453 	    {
13454 	      free (tab);
13455 	      return FALSE;
13456 	    }
13457 
13458 	  for (j = 0; j < c; j++)
13459 	    bfd_mips_elf32_swap_gptab_out (abfd, tab + j, ext_tab + j);
13460 	  free (tab);
13461 
13462 	  o->size = c * sizeof (Elf32_External_gptab);
13463 	  o->contents = (bfd_byte *) ext_tab;
13464 
13465 	  /* Skip this section later on (I don't think this currently
13466 	     matters, but someday it might).  */
13467 	  o->map_head.link_order = NULL;
13468 	}
13469     }
13470 
13471   /* Invoke the regular ELF backend linker to do all the work.  */
13472   if (!bfd_elf_final_link (abfd, info))
13473     return FALSE;
13474 
13475   /* Now write out the computed sections.  */
13476 
13477   if (reginfo_sec != NULL)
13478     {
13479       Elf32_External_RegInfo ext;
13480 
13481       bfd_mips_elf32_swap_reginfo_out (abfd, &reginfo, &ext);
13482       if (! bfd_set_section_contents (abfd, reginfo_sec, &ext, 0, sizeof ext))
13483 	return FALSE;
13484     }
13485 
13486   if (mdebug_sec != NULL)
13487     {
13488       BFD_ASSERT (abfd->output_has_begun);
13489       if (! bfd_ecoff_write_accumulated_debug (mdebug_handle, abfd, &debug,
13490 					       swap, info,
13491 					       mdebug_sec->filepos))
13492 	return FALSE;
13493 
13494       bfd_ecoff_debug_free (mdebug_handle, abfd, &debug, swap, info);
13495     }
13496 
13497   if (gptab_data_sec != NULL)
13498     {
13499       if (! bfd_set_section_contents (abfd, gptab_data_sec,
13500 				      gptab_data_sec->contents,
13501 				      0, gptab_data_sec->size))
13502 	return FALSE;
13503     }
13504 
13505   if (gptab_bss_sec != NULL)
13506     {
13507       if (! bfd_set_section_contents (abfd, gptab_bss_sec,
13508 				      gptab_bss_sec->contents,
13509 				      0, gptab_bss_sec->size))
13510 	return FALSE;
13511     }
13512 
13513   if (SGI_COMPAT (abfd))
13514     {
13515       rtproc_sec = bfd_get_section_by_name (abfd, ".rtproc");
13516       if (rtproc_sec != NULL)
13517 	{
13518 	  if (! bfd_set_section_contents (abfd, rtproc_sec,
13519 					  rtproc_sec->contents,
13520 					  0, rtproc_sec->size))
13521 	    return FALSE;
13522 	}
13523     }
13524 
13525   return TRUE;
13526 }
13527 
13528 /* Structure for saying that BFD machine EXTENSION extends BASE.  */
13529 
13530 struct mips_mach_extension {
13531   unsigned long extension, base;
13532 };
13533 
13534 
13535 /* An array describing how BFD machines relate to one another.  The entries
13536    are ordered topologically with MIPS I extensions listed last.  */
13537 
13538 static const struct mips_mach_extension mips_mach_extensions[] = {
13539   /* MIPS64r2 extensions.  */
13540   { bfd_mach_mips_octeon2, bfd_mach_mips_octeonp },
13541   { bfd_mach_mips_octeonp, bfd_mach_mips_octeon },
13542   { bfd_mach_mips_octeon, bfd_mach_mipsisa64r2 },
13543 
13544   /* MIPS64 extensions.  */
13545   { bfd_mach_mipsisa64r2, bfd_mach_mipsisa64 },
13546   { bfd_mach_mips_sb1, bfd_mach_mipsisa64 },
13547   { bfd_mach_mips_xlr, bfd_mach_mipsisa64 },
13548   { bfd_mach_mips_loongson_3a, bfd_mach_mipsisa64 },
13549 
13550   /* MIPS V extensions.  */
13551   { bfd_mach_mipsisa64, bfd_mach_mips5 },
13552 
13553   /* R10000 extensions.  */
13554   { bfd_mach_mips12000, bfd_mach_mips10000 },
13555   { bfd_mach_mips14000, bfd_mach_mips10000 },
13556   { bfd_mach_mips16000, bfd_mach_mips10000 },
13557 
13558   /* R5000 extensions.  Note: the vr5500 ISA is an extension of the core
13559      vr5400 ISA, but doesn't include the multimedia stuff.  It seems
13560      better to allow vr5400 and vr5500 code to be merged anyway, since
13561      many libraries will just use the core ISA.  Perhaps we could add
13562      some sort of ASE flag if this ever proves a problem.  */
13563   { bfd_mach_mips5500, bfd_mach_mips5400 },
13564   { bfd_mach_mips5400, bfd_mach_mips5000 },
13565 
13566   /* MIPS IV extensions.  */
13567   { bfd_mach_mips5, bfd_mach_mips8000 },
13568   { bfd_mach_mips10000, bfd_mach_mips8000 },
13569   { bfd_mach_mips5000, bfd_mach_mips8000 },
13570   { bfd_mach_mips7000, bfd_mach_mips8000 },
13571   { bfd_mach_mips9000, bfd_mach_mips8000 },
13572 
13573   /* VR4100 extensions.  */
13574   { bfd_mach_mips4120, bfd_mach_mips4100 },
13575   { bfd_mach_mips4111, bfd_mach_mips4100 },
13576 
13577   /* MIPS III extensions.  */
13578   { bfd_mach_mips_loongson_2e, bfd_mach_mips4000 },
13579   { bfd_mach_mips_loongson_2f, bfd_mach_mips4000 },
13580   { bfd_mach_mips8000, bfd_mach_mips4000 },
13581   { bfd_mach_mips4650, bfd_mach_mips4000 },
13582   { bfd_mach_mips4600, bfd_mach_mips4000 },
13583   { bfd_mach_mips4400, bfd_mach_mips4000 },
13584   { bfd_mach_mips4300, bfd_mach_mips4000 },
13585   { bfd_mach_mips4100, bfd_mach_mips4000 },
13586   { bfd_mach_mips4010, bfd_mach_mips4000 },
13587   { bfd_mach_mips5900, bfd_mach_mips4000 },
13588 
13589   /* MIPS32 extensions.  */
13590   { bfd_mach_mipsisa32r2, bfd_mach_mipsisa32 },
13591 
13592   /* MIPS II extensions.  */
13593   { bfd_mach_mips4000, bfd_mach_mips6000 },
13594   { bfd_mach_mipsisa32, bfd_mach_mips6000 },
13595 
13596   /* MIPS I extensions.  */
13597   { bfd_mach_mips6000, bfd_mach_mips3000 },
13598   { bfd_mach_mips3900, bfd_mach_mips3000 }
13599 };
13600 
13601 
13602 /* Return true if bfd machine EXTENSION is an extension of machine BASE.  */
13603 
13604 static bfd_boolean
13605 mips_mach_extends_p (unsigned long base, unsigned long extension)
13606 {
13607   size_t i;
13608 
13609   if (extension == base)
13610     return TRUE;
13611 
13612   if (base == bfd_mach_mipsisa32
13613       && mips_mach_extends_p (bfd_mach_mipsisa64, extension))
13614     return TRUE;
13615 
13616   if (base == bfd_mach_mipsisa32r2
13617       && mips_mach_extends_p (bfd_mach_mipsisa64r2, extension))
13618     return TRUE;
13619 
13620   for (i = 0; i < ARRAY_SIZE (mips_mach_extensions); i++)
13621     if (extension == mips_mach_extensions[i].extension)
13622       {
13623 	extension = mips_mach_extensions[i].base;
13624 	if (extension == base)
13625 	  return TRUE;
13626       }
13627 
13628   return FALSE;
13629 }
13630 
13631 
13632 /* Return true if the given ELF header flags describe a 32-bit binary.  */
13633 
13634 static bfd_boolean
13635 mips_32bit_flags_p (flagword flags)
13636 {
13637   return ((flags & EF_MIPS_32BITMODE) != 0
13638 	  || (flags & EF_MIPS_ABI) == E_MIPS_ABI_O32
13639 	  || (flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32
13640 	  || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1
13641 	  || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2
13642 	  || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32
13643 	  || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2);
13644 }
13645 
13646 
13647 /* Merge object attributes from IBFD into OBFD.  Raise an error if
13648    there are conflicting attributes.  */
13649 static bfd_boolean
13650 mips_elf_merge_obj_attributes (bfd *ibfd, bfd *obfd)
13651 {
13652   obj_attribute *in_attr;
13653   obj_attribute *out_attr;
13654   bfd *abi_fp_bfd;
13655 
13656   abi_fp_bfd = mips_elf_tdata (obfd)->abi_fp_bfd;
13657   in_attr = elf_known_obj_attributes (ibfd)[OBJ_ATTR_GNU];
13658   if (!abi_fp_bfd && in_attr[Tag_GNU_MIPS_ABI_FP].i != 0)
13659     mips_elf_tdata (obfd)->abi_fp_bfd = ibfd;
13660 
13661   if (!elf_known_obj_attributes_proc (obfd)[0].i)
13662     {
13663       /* This is the first object.  Copy the attributes.  */
13664       _bfd_elf_copy_obj_attributes (ibfd, obfd);
13665 
13666       /* Use the Tag_null value to indicate the attributes have been
13667 	 initialized.  */
13668       elf_known_obj_attributes_proc (obfd)[0].i = 1;
13669 
13670       return TRUE;
13671     }
13672 
13673   /* Check for conflicting Tag_GNU_MIPS_ABI_FP attributes and merge
13674      non-conflicting ones.  */
13675   out_attr = elf_known_obj_attributes (obfd)[OBJ_ATTR_GNU];
13676   if (in_attr[Tag_GNU_MIPS_ABI_FP].i != out_attr[Tag_GNU_MIPS_ABI_FP].i)
13677     {
13678       out_attr[Tag_GNU_MIPS_ABI_FP].type = 1;
13679       if (out_attr[Tag_GNU_MIPS_ABI_FP].i == 0)
13680 	out_attr[Tag_GNU_MIPS_ABI_FP].i = in_attr[Tag_GNU_MIPS_ABI_FP].i;
13681       else if (in_attr[Tag_GNU_MIPS_ABI_FP].i != 0)
13682 	switch (out_attr[Tag_GNU_MIPS_ABI_FP].i)
13683 	  {
13684 	  case 1:
13685 	    switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
13686 	      {
13687 	      case 2:
13688 		_bfd_error_handler
13689 		  (_("Warning: %B uses %s (set by %B), %B uses %s"),
13690 		   obfd, abi_fp_bfd, ibfd, "-mdouble-float", "-msingle-float");
13691 		break;
13692 
13693 	      case 3:
13694 		_bfd_error_handler
13695 		  (_("Warning: %B uses %s (set by %B), %B uses %s"),
13696 		   obfd, abi_fp_bfd, ibfd, "-mhard-float", "-msoft-float");
13697 		break;
13698 
13699 	      case 4:
13700 		_bfd_error_handler
13701 		  (_("Warning: %B uses %s (set by %B), %B uses %s"),
13702 		   obfd, abi_fp_bfd, ibfd,
13703 		   "-mdouble-float", "-mips32r2 -mfp64");
13704 		break;
13705 
13706 	      default:
13707 		_bfd_error_handler
13708 		  (_("Warning: %B uses %s (set by %B), "
13709 		     "%B uses unknown floating point ABI %d"),
13710 		   obfd, abi_fp_bfd, ibfd,
13711 		   "-mdouble-float", in_attr[Tag_GNU_MIPS_ABI_FP].i);
13712 		break;
13713 	      }
13714 	    break;
13715 
13716 	  case 2:
13717 	    switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
13718 	      {
13719 	      case 1:
13720 		_bfd_error_handler
13721 		  (_("Warning: %B uses %s (set by %B), %B uses %s"),
13722 		   obfd, abi_fp_bfd, ibfd, "-msingle-float", "-mdouble-float");
13723 		break;
13724 
13725 	      case 3:
13726 		_bfd_error_handler
13727 		  (_("Warning: %B uses %s (set by %B), %B uses %s"),
13728 		   obfd, abi_fp_bfd, ibfd, "-mhard-float", "-msoft-float");
13729 		break;
13730 
13731 	      case 4:
13732 		_bfd_error_handler
13733 		  (_("Warning: %B uses %s (set by %B), %B uses %s"),
13734 		   obfd, abi_fp_bfd, ibfd,
13735 		   "-msingle-float", "-mips32r2 -mfp64");
13736 		break;
13737 
13738 	      default:
13739 		_bfd_error_handler
13740 		  (_("Warning: %B uses %s (set by %B), "
13741 		     "%B uses unknown floating point ABI %d"),
13742 		   obfd, abi_fp_bfd, ibfd,
13743 		   "-msingle-float", in_attr[Tag_GNU_MIPS_ABI_FP].i);
13744 		break;
13745 	      }
13746 	    break;
13747 
13748 	  case 3:
13749 	    switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
13750 	      {
13751 	      case 1:
13752 	      case 2:
13753 	      case 4:
13754 		_bfd_error_handler
13755 		  (_("Warning: %B uses %s (set by %B), %B uses %s"),
13756 		   obfd, abi_fp_bfd, ibfd, "-msoft-float", "-mhard-float");
13757 		break;
13758 
13759 	      default:
13760 		_bfd_error_handler
13761 		  (_("Warning: %B uses %s (set by %B), "
13762 		     "%B uses unknown floating point ABI %d"),
13763 		   obfd, abi_fp_bfd, ibfd,
13764 		   "-msoft-float", in_attr[Tag_GNU_MIPS_ABI_FP].i);
13765 		break;
13766 	      }
13767 	    break;
13768 
13769 	  case 4:
13770 	    switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
13771 	      {
13772 	      case 1:
13773 		_bfd_error_handler
13774 		  (_("Warning: %B uses %s (set by %B), %B uses %s"),
13775 		   obfd, abi_fp_bfd, ibfd,
13776 		   "-mips32r2 -mfp64", "-mdouble-float");
13777 		break;
13778 
13779 	      case 2:
13780 		_bfd_error_handler
13781 		  (_("Warning: %B uses %s (set by %B), %B uses %s"),
13782 		   obfd, abi_fp_bfd, ibfd,
13783 		   "-mips32r2 -mfp64", "-msingle-float");
13784 		break;
13785 
13786 	      case 3:
13787 		_bfd_error_handler
13788 		  (_("Warning: %B uses %s (set by %B), %B uses %s"),
13789 		   obfd, abi_fp_bfd, ibfd, "-mhard-float", "-msoft-float");
13790 		break;
13791 
13792 	      default:
13793 		_bfd_error_handler
13794 		  (_("Warning: %B uses %s (set by %B), "
13795 		     "%B uses unknown floating point ABI %d"),
13796 		   obfd, abi_fp_bfd, ibfd,
13797 		   "-mips32r2 -mfp64", in_attr[Tag_GNU_MIPS_ABI_FP].i);
13798 		break;
13799 	      }
13800 	    break;
13801 
13802 	  default:
13803 	    switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
13804 	      {
13805 	      case 1:
13806 		_bfd_error_handler
13807 		  (_("Warning: %B uses unknown floating point ABI %d "
13808 		     "(set by %B), %B uses %s"),
13809 		   obfd, abi_fp_bfd, ibfd,
13810 		   out_attr[Tag_GNU_MIPS_ABI_FP].i, "-mdouble-float");
13811 		break;
13812 
13813 	      case 2:
13814 		_bfd_error_handler
13815 		  (_("Warning: %B uses unknown floating point ABI %d "
13816 		     "(set by %B), %B uses %s"),
13817 		   obfd, abi_fp_bfd, ibfd,
13818 		   out_attr[Tag_GNU_MIPS_ABI_FP].i, "-msingle-float");
13819 		break;
13820 
13821 	      case 3:
13822 		_bfd_error_handler
13823 		  (_("Warning: %B uses unknown floating point ABI %d "
13824 		     "(set by %B), %B uses %s"),
13825 		   obfd, abi_fp_bfd, ibfd,
13826 		   out_attr[Tag_GNU_MIPS_ABI_FP].i, "-msoft-float");
13827 		break;
13828 
13829 	      case 4:
13830 		_bfd_error_handler
13831 		  (_("Warning: %B uses unknown floating point ABI %d "
13832 		     "(set by %B), %B uses %s"),
13833 		   obfd, abi_fp_bfd, ibfd,
13834 		   out_attr[Tag_GNU_MIPS_ABI_FP].i, "-mips32r2 -mfp64");
13835 		break;
13836 
13837 	      default:
13838 		_bfd_error_handler
13839 		  (_("Warning: %B uses unknown floating point ABI %d "
13840 		     "(set by %B), %B uses unknown floating point ABI %d"),
13841 		   obfd, abi_fp_bfd, ibfd,
13842 		   out_attr[Tag_GNU_MIPS_ABI_FP].i,
13843 		   in_attr[Tag_GNU_MIPS_ABI_FP].i);
13844 		break;
13845 	      }
13846 	    break;
13847 	  }
13848     }
13849 
13850   /* Merge Tag_compatibility attributes and any common GNU ones.  */
13851   _bfd_elf_merge_object_attributes (ibfd, obfd);
13852 
13853   return TRUE;
13854 }
13855 
13856 /* Merge backend specific data from an object file to the output
13857    object file when linking.  */
13858 
13859 bfd_boolean
13860 _bfd_mips_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
13861 {
13862   flagword old_flags;
13863   flagword new_flags;
13864   bfd_boolean ok;
13865   bfd_boolean null_input_bfd = TRUE;
13866   asection *sec;
13867 
13868   /* Check if we have the same endianness.  */
13869   if (! _bfd_generic_verify_endian_match (ibfd, obfd))
13870     {
13871       (*_bfd_error_handler)
13872 	(_("%B: endianness incompatible with that of the selected emulation"),
13873 	 ibfd);
13874       return FALSE;
13875     }
13876 
13877   if (!is_mips_elf (ibfd) || !is_mips_elf (obfd))
13878     return TRUE;
13879 
13880   if (strcmp (bfd_get_target (ibfd), bfd_get_target (obfd)) != 0)
13881     {
13882       (*_bfd_error_handler)
13883 	(_("%B: ABI is incompatible with that of the selected emulation"),
13884 	 ibfd);
13885       return FALSE;
13886     }
13887 
13888   if (!mips_elf_merge_obj_attributes (ibfd, obfd))
13889     return FALSE;
13890 
13891   new_flags = elf_elfheader (ibfd)->e_flags;
13892   elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_NOREORDER;
13893   old_flags = elf_elfheader (obfd)->e_flags;
13894 
13895   if (! elf_flags_init (obfd))
13896     {
13897       elf_flags_init (obfd) = TRUE;
13898       elf_elfheader (obfd)->e_flags = new_flags;
13899       elf_elfheader (obfd)->e_ident[EI_CLASS]
13900 	= elf_elfheader (ibfd)->e_ident[EI_CLASS];
13901 
13902       if (bfd_get_arch (obfd) == bfd_get_arch (ibfd)
13903 	  && (bfd_get_arch_info (obfd)->the_default
13904 	      || mips_mach_extends_p (bfd_get_mach (obfd),
13905 				      bfd_get_mach (ibfd))))
13906 	{
13907 	  if (! bfd_set_arch_mach (obfd, bfd_get_arch (ibfd),
13908 				   bfd_get_mach (ibfd)))
13909 	    return FALSE;
13910 	}
13911 
13912       return TRUE;
13913     }
13914 
13915   /* Check flag compatibility.  */
13916 
13917   new_flags &= ~EF_MIPS_NOREORDER;
13918   old_flags &= ~EF_MIPS_NOREORDER;
13919 
13920   /* Some IRIX 6 BSD-compatibility objects have this bit set.  It
13921      doesn't seem to matter.  */
13922   new_flags &= ~EF_MIPS_XGOT;
13923   old_flags &= ~EF_MIPS_XGOT;
13924 
13925   /* MIPSpro generates ucode info in n64 objects.  Again, we should
13926      just be able to ignore this.  */
13927   new_flags &= ~EF_MIPS_UCODE;
13928   old_flags &= ~EF_MIPS_UCODE;
13929 
13930   /* DSOs should only be linked with CPIC code.  */
13931   if ((ibfd->flags & DYNAMIC) != 0)
13932     new_flags |= EF_MIPS_PIC | EF_MIPS_CPIC;
13933 
13934   if (new_flags == old_flags)
13935     return TRUE;
13936 
13937   /* Check to see if the input BFD actually contains any sections.
13938      If not, its flags may not have been initialised either, but it cannot
13939      actually cause any incompatibility.  */
13940   for (sec = ibfd->sections; sec != NULL; sec = sec->next)
13941     {
13942       /* Ignore synthetic sections and empty .text, .data and .bss sections
13943 	 which are automatically generated by gas.  Also ignore fake
13944 	 (s)common sections, since merely defining a common symbol does
13945 	 not affect compatibility.  */
13946       if ((sec->flags & SEC_IS_COMMON) == 0
13947 	  && strcmp (sec->name, ".reginfo")
13948 	  && strcmp (sec->name, ".mdebug")
13949 	  && (sec->size != 0
13950 	      || (strcmp (sec->name, ".text")
13951 		  && strcmp (sec->name, ".data")
13952 		  && strcmp (sec->name, ".bss"))))
13953 	{
13954 	  null_input_bfd = FALSE;
13955 	  break;
13956 	}
13957     }
13958   if (null_input_bfd)
13959     return TRUE;
13960 
13961   ok = TRUE;
13962 
13963   if (((new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0)
13964       != ((old_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0))
13965     {
13966       (*_bfd_error_handler)
13967 	(_("%B: warning: linking abicalls files with non-abicalls files"),
13968 	 ibfd);
13969       ok = TRUE;
13970     }
13971 
13972   if (new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC))
13973     elf_elfheader (obfd)->e_flags |= EF_MIPS_CPIC;
13974   if (! (new_flags & EF_MIPS_PIC))
13975     elf_elfheader (obfd)->e_flags &= ~EF_MIPS_PIC;
13976 
13977   new_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC);
13978   old_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC);
13979 
13980   /* Compare the ISAs.  */
13981   if (mips_32bit_flags_p (old_flags) != mips_32bit_flags_p (new_flags))
13982     {
13983       (*_bfd_error_handler)
13984 	(_("%B: linking 32-bit code with 64-bit code"),
13985 	 ibfd);
13986       ok = FALSE;
13987     }
13988   else if (!mips_mach_extends_p (bfd_get_mach (ibfd), bfd_get_mach (obfd)))
13989     {
13990       /* OBFD's ISA isn't the same as, or an extension of, IBFD's.  */
13991       if (mips_mach_extends_p (bfd_get_mach (obfd), bfd_get_mach (ibfd)))
13992 	{
13993 	  /* Copy the architecture info from IBFD to OBFD.  Also copy
13994 	     the 32-bit flag (if set) so that we continue to recognise
13995 	     OBFD as a 32-bit binary.  */
13996 	  bfd_set_arch_info (obfd, bfd_get_arch_info (ibfd));
13997 	  elf_elfheader (obfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH);
13998 	  elf_elfheader (obfd)->e_flags
13999 	    |= new_flags & (EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
14000 
14001 	  /* Copy across the ABI flags if OBFD doesn't use them
14002 	     and if that was what caused us to treat IBFD as 32-bit.  */
14003 	  if ((old_flags & EF_MIPS_ABI) == 0
14004 	      && mips_32bit_flags_p (new_flags)
14005 	      && !mips_32bit_flags_p (new_flags & ~EF_MIPS_ABI))
14006 	    elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ABI;
14007 	}
14008       else
14009 	{
14010 	  /* The ISAs aren't compatible.  */
14011 	  (*_bfd_error_handler)
14012 	    (_("%B: linking %s module with previous %s modules"),
14013 	     ibfd,
14014 	     bfd_printable_name (ibfd),
14015 	     bfd_printable_name (obfd));
14016 	  ok = FALSE;
14017 	}
14018     }
14019 
14020   new_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
14021   old_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
14022 
14023   /* Compare ABIs.  The 64-bit ABI does not use EF_MIPS_ABI.  But, it
14024      does set EI_CLASS differently from any 32-bit ABI.  */
14025   if ((new_flags & EF_MIPS_ABI) != (old_flags & EF_MIPS_ABI)
14026       || (elf_elfheader (ibfd)->e_ident[EI_CLASS]
14027 	  != elf_elfheader (obfd)->e_ident[EI_CLASS]))
14028     {
14029       /* Only error if both are set (to different values).  */
14030       if (((new_flags & EF_MIPS_ABI) && (old_flags & EF_MIPS_ABI))
14031 	  || (elf_elfheader (ibfd)->e_ident[EI_CLASS]
14032 	      != elf_elfheader (obfd)->e_ident[EI_CLASS]))
14033 	{
14034 	  (*_bfd_error_handler)
14035 	    (_("%B: ABI mismatch: linking %s module with previous %s modules"),
14036 	     ibfd,
14037 	     elf_mips_abi_name (ibfd),
14038 	     elf_mips_abi_name (obfd));
14039 	  ok = FALSE;
14040 	}
14041       new_flags &= ~EF_MIPS_ABI;
14042       old_flags &= ~EF_MIPS_ABI;
14043     }
14044 
14045   /* Compare ASEs.  Forbid linking MIPS16 and microMIPS ASE modules together
14046      and allow arbitrary mixing of the remaining ASEs (retain the union).  */
14047   if ((new_flags & EF_MIPS_ARCH_ASE) != (old_flags & EF_MIPS_ARCH_ASE))
14048     {
14049       int old_micro = old_flags & EF_MIPS_ARCH_ASE_MICROMIPS;
14050       int new_micro = new_flags & EF_MIPS_ARCH_ASE_MICROMIPS;
14051       int old_m16 = old_flags & EF_MIPS_ARCH_ASE_M16;
14052       int new_m16 = new_flags & EF_MIPS_ARCH_ASE_M16;
14053       int micro_mis = old_m16 && new_micro;
14054       int m16_mis = old_micro && new_m16;
14055 
14056       if (m16_mis || micro_mis)
14057 	{
14058 	  (*_bfd_error_handler)
14059 	    (_("%B: ASE mismatch: linking %s module with previous %s modules"),
14060 	     ibfd,
14061 	     m16_mis ? "MIPS16" : "microMIPS",
14062 	     m16_mis ? "microMIPS" : "MIPS16");
14063 	  ok = FALSE;
14064 	}
14065 
14066       elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ARCH_ASE;
14067 
14068       new_flags &= ~ EF_MIPS_ARCH_ASE;
14069       old_flags &= ~ EF_MIPS_ARCH_ASE;
14070     }
14071 
14072   /* Warn about any other mismatches */
14073   if (new_flags != old_flags)
14074     {
14075       (*_bfd_error_handler)
14076 	(_("%B: uses different e_flags (0x%lx) fields than previous modules (0x%lx)"),
14077 	 ibfd, (unsigned long) new_flags,
14078 	 (unsigned long) old_flags);
14079       ok = FALSE;
14080     }
14081 
14082   if (! ok)
14083     {
14084       bfd_set_error (bfd_error_bad_value);
14085       return FALSE;
14086     }
14087 
14088   return TRUE;
14089 }
14090 
14091 /* Function to keep MIPS specific file flags like as EF_MIPS_PIC.  */
14092 
14093 bfd_boolean
14094 _bfd_mips_elf_set_private_flags (bfd *abfd, flagword flags)
14095 {
14096   BFD_ASSERT (!elf_flags_init (abfd)
14097 	      || elf_elfheader (abfd)->e_flags == flags);
14098 
14099   elf_elfheader (abfd)->e_flags = flags;
14100   elf_flags_init (abfd) = TRUE;
14101   return TRUE;
14102 }
14103 
14104 char *
14105 _bfd_mips_elf_get_target_dtag (bfd_vma dtag)
14106 {
14107   switch (dtag)
14108     {
14109     default: return "";
14110     case DT_MIPS_RLD_VERSION:
14111       return "MIPS_RLD_VERSION";
14112     case DT_MIPS_TIME_STAMP:
14113       return "MIPS_TIME_STAMP";
14114     case DT_MIPS_ICHECKSUM:
14115       return "MIPS_ICHECKSUM";
14116     case DT_MIPS_IVERSION:
14117       return "MIPS_IVERSION";
14118     case DT_MIPS_FLAGS:
14119       return "MIPS_FLAGS";
14120     case DT_MIPS_BASE_ADDRESS:
14121       return "MIPS_BASE_ADDRESS";
14122     case DT_MIPS_MSYM:
14123       return "MIPS_MSYM";
14124     case DT_MIPS_CONFLICT:
14125       return "MIPS_CONFLICT";
14126     case DT_MIPS_LIBLIST:
14127       return "MIPS_LIBLIST";
14128     case DT_MIPS_LOCAL_GOTNO:
14129       return "MIPS_LOCAL_GOTNO";
14130     case DT_MIPS_CONFLICTNO:
14131       return "MIPS_CONFLICTNO";
14132     case DT_MIPS_LIBLISTNO:
14133       return "MIPS_LIBLISTNO";
14134     case DT_MIPS_SYMTABNO:
14135       return "MIPS_SYMTABNO";
14136     case DT_MIPS_UNREFEXTNO:
14137       return "MIPS_UNREFEXTNO";
14138     case DT_MIPS_GOTSYM:
14139       return "MIPS_GOTSYM";
14140     case DT_MIPS_HIPAGENO:
14141       return "MIPS_HIPAGENO";
14142     case DT_MIPS_RLD_MAP:
14143       return "MIPS_RLD_MAP";
14144     case DT_MIPS_DELTA_CLASS:
14145       return "MIPS_DELTA_CLASS";
14146     case DT_MIPS_DELTA_CLASS_NO:
14147       return "MIPS_DELTA_CLASS_NO";
14148     case DT_MIPS_DELTA_INSTANCE:
14149       return "MIPS_DELTA_INSTANCE";
14150     case DT_MIPS_DELTA_INSTANCE_NO:
14151       return "MIPS_DELTA_INSTANCE_NO";
14152     case DT_MIPS_DELTA_RELOC:
14153       return "MIPS_DELTA_RELOC";
14154     case DT_MIPS_DELTA_RELOC_NO:
14155       return "MIPS_DELTA_RELOC_NO";
14156     case DT_MIPS_DELTA_SYM:
14157       return "MIPS_DELTA_SYM";
14158     case DT_MIPS_DELTA_SYM_NO:
14159       return "MIPS_DELTA_SYM_NO";
14160     case DT_MIPS_DELTA_CLASSSYM:
14161       return "MIPS_DELTA_CLASSSYM";
14162     case DT_MIPS_DELTA_CLASSSYM_NO:
14163       return "MIPS_DELTA_CLASSSYM_NO";
14164     case DT_MIPS_CXX_FLAGS:
14165       return "MIPS_CXX_FLAGS";
14166     case DT_MIPS_PIXIE_INIT:
14167       return "MIPS_PIXIE_INIT";
14168     case DT_MIPS_SYMBOL_LIB:
14169       return "MIPS_SYMBOL_LIB";
14170     case DT_MIPS_LOCALPAGE_GOTIDX:
14171       return "MIPS_LOCALPAGE_GOTIDX";
14172     case DT_MIPS_LOCAL_GOTIDX:
14173       return "MIPS_LOCAL_GOTIDX";
14174     case DT_MIPS_HIDDEN_GOTIDX:
14175       return "MIPS_HIDDEN_GOTIDX";
14176     case DT_MIPS_PROTECTED_GOTIDX:
14177       return "MIPS_PROTECTED_GOT_IDX";
14178     case DT_MIPS_OPTIONS:
14179       return "MIPS_OPTIONS";
14180     case DT_MIPS_INTERFACE:
14181       return "MIPS_INTERFACE";
14182     case DT_MIPS_DYNSTR_ALIGN:
14183       return "DT_MIPS_DYNSTR_ALIGN";
14184     case DT_MIPS_INTERFACE_SIZE:
14185       return "DT_MIPS_INTERFACE_SIZE";
14186     case DT_MIPS_RLD_TEXT_RESOLVE_ADDR:
14187       return "DT_MIPS_RLD_TEXT_RESOLVE_ADDR";
14188     case DT_MIPS_PERF_SUFFIX:
14189       return "DT_MIPS_PERF_SUFFIX";
14190     case DT_MIPS_COMPACT_SIZE:
14191       return "DT_MIPS_COMPACT_SIZE";
14192     case DT_MIPS_GP_VALUE:
14193       return "DT_MIPS_GP_VALUE";
14194     case DT_MIPS_AUX_DYNAMIC:
14195       return "DT_MIPS_AUX_DYNAMIC";
14196     case DT_MIPS_PLTGOT:
14197       return "DT_MIPS_PLTGOT";
14198     case DT_MIPS_RWPLT:
14199       return "DT_MIPS_RWPLT";
14200     }
14201 }
14202 
14203 bfd_boolean
14204 _bfd_mips_elf_print_private_bfd_data (bfd *abfd, void *ptr)
14205 {
14206   FILE *file = ptr;
14207 
14208   BFD_ASSERT (abfd != NULL && ptr != NULL);
14209 
14210   /* Print normal ELF private data.  */
14211   _bfd_elf_print_private_bfd_data (abfd, ptr);
14212 
14213   /* xgettext:c-format */
14214   fprintf (file, _("private flags = %lx:"), elf_elfheader (abfd)->e_flags);
14215 
14216   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O32)
14217     fprintf (file, _(" [abi=O32]"));
14218   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O64)
14219     fprintf (file, _(" [abi=O64]"));
14220   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32)
14221     fprintf (file, _(" [abi=EABI32]"));
14222   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI64)
14223     fprintf (file, _(" [abi=EABI64]"));
14224   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI))
14225     fprintf (file, _(" [abi unknown]"));
14226   else if (ABI_N32_P (abfd))
14227     fprintf (file, _(" [abi=N32]"));
14228   else if (ABI_64_P (abfd))
14229     fprintf (file, _(" [abi=64]"));
14230   else
14231     fprintf (file, _(" [no abi set]"));
14232 
14233   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1)
14234     fprintf (file, " [mips1]");
14235   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2)
14236     fprintf (file, " [mips2]");
14237   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_3)
14238     fprintf (file, " [mips3]");
14239   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_4)
14240     fprintf (file, " [mips4]");
14241   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_5)
14242     fprintf (file, " [mips5]");
14243   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32)
14244     fprintf (file, " [mips32]");
14245   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64)
14246     fprintf (file, " [mips64]");
14247   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2)
14248     fprintf (file, " [mips32r2]");
14249   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64R2)
14250     fprintf (file, " [mips64r2]");
14251   else
14252     fprintf (file, _(" [unknown ISA]"));
14253 
14254   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MDMX)
14255     fprintf (file, " [mdmx]");
14256 
14257   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_M16)
14258     fprintf (file, " [mips16]");
14259 
14260   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MICROMIPS)
14261     fprintf (file, " [micromips]");
14262 
14263   if (elf_elfheader (abfd)->e_flags & EF_MIPS_32BITMODE)
14264     fprintf (file, " [32bitmode]");
14265   else
14266     fprintf (file, _(" [not 32bitmode]"));
14267 
14268   if (elf_elfheader (abfd)->e_flags & EF_MIPS_NOREORDER)
14269     fprintf (file, " [noreorder]");
14270 
14271   if (elf_elfheader (abfd)->e_flags & EF_MIPS_PIC)
14272     fprintf (file, " [PIC]");
14273 
14274   if (elf_elfheader (abfd)->e_flags & EF_MIPS_CPIC)
14275     fprintf (file, " [CPIC]");
14276 
14277   if (elf_elfheader (abfd)->e_flags & EF_MIPS_XGOT)
14278     fprintf (file, " [XGOT]");
14279 
14280   if (elf_elfheader (abfd)->e_flags & EF_MIPS_UCODE)
14281     fprintf (file, " [UCODE]");
14282 
14283   fputc ('\n', file);
14284 
14285   return TRUE;
14286 }
14287 
14288 const struct bfd_elf_special_section _bfd_mips_elf_special_sections[] =
14289 {
14290   { STRING_COMMA_LEN (".lit4"),   0, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
14291   { STRING_COMMA_LEN (".lit8"),   0, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
14292   { STRING_COMMA_LEN (".mdebug"), 0, SHT_MIPS_DEBUG, 0 },
14293   { STRING_COMMA_LEN (".sbss"),  -2, SHT_NOBITS,     SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
14294   { STRING_COMMA_LEN (".sdata"), -2, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
14295   { STRING_COMMA_LEN (".ucode"),  0, SHT_MIPS_UCODE, 0 },
14296   { NULL,                     0,  0, 0,              0 }
14297 };
14298 
14299 /* Merge non visibility st_other attributes.  Ensure that the
14300    STO_OPTIONAL flag is copied into h->other, even if this is not a
14301    definiton of the symbol.  */
14302 void
14303 _bfd_mips_elf_merge_symbol_attribute (struct elf_link_hash_entry *h,
14304 				      const Elf_Internal_Sym *isym,
14305 				      bfd_boolean definition,
14306 				      bfd_boolean dynamic ATTRIBUTE_UNUSED)
14307 {
14308   if ((isym->st_other & ~ELF_ST_VISIBILITY (-1)) != 0)
14309     {
14310       unsigned char other;
14311 
14312       other = (definition ? isym->st_other : h->other);
14313       other &= ~ELF_ST_VISIBILITY (-1);
14314       h->other = other | ELF_ST_VISIBILITY (h->other);
14315     }
14316 
14317   if (!definition
14318       && ELF_MIPS_IS_OPTIONAL (isym->st_other))
14319     h->other |= STO_OPTIONAL;
14320 }
14321 
14322 /* Decide whether an undefined symbol is special and can be ignored.
14323    This is the case for OPTIONAL symbols on IRIX.  */
14324 bfd_boolean
14325 _bfd_mips_elf_ignore_undef_symbol (struct elf_link_hash_entry *h)
14326 {
14327   return ELF_MIPS_IS_OPTIONAL (h->other) ? TRUE : FALSE;
14328 }
14329 
14330 bfd_boolean
14331 _bfd_mips_elf_common_definition (Elf_Internal_Sym *sym)
14332 {
14333   return (sym->st_shndx == SHN_COMMON
14334 	  || sym->st_shndx == SHN_MIPS_ACOMMON
14335 	  || sym->st_shndx == SHN_MIPS_SCOMMON);
14336 }
14337 
14338 /* Return address for Ith PLT stub in section PLT, for relocation REL
14339    or (bfd_vma) -1 if it should not be included.  */
14340 
14341 bfd_vma
14342 _bfd_mips_elf_plt_sym_val (bfd_vma i, const asection *plt,
14343 			   const arelent *rel ATTRIBUTE_UNUSED)
14344 {
14345   return (plt->vma
14346 	  + 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry)
14347 	  + i * 4 * ARRAY_SIZE (mips_exec_plt_entry));
14348 }
14349 
14350 void
14351 _bfd_mips_post_process_headers (bfd *abfd, struct bfd_link_info *link_info)
14352 {
14353   struct mips_elf_link_hash_table *htab;
14354   Elf_Internal_Ehdr *i_ehdrp;
14355 
14356   i_ehdrp = elf_elfheader (abfd);
14357   if (link_info)
14358     {
14359       htab = mips_elf_hash_table (link_info);
14360       BFD_ASSERT (htab != NULL);
14361 
14362       if (htab->use_plts_and_copy_relocs && !htab->is_vxworks)
14363 	i_ehdrp->e_ident[EI_ABIVERSION] = 1;
14364     }
14365 }
14366