* elfxx-mips.c (MICROMIPS_P): New macro.
[platform/upstream/binutils.git] / bfd / elfxx-mips.c
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 MIPS16 symbols odd.  This allows the dynamic linker to
10122      treat MIPS16 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
10129   return TRUE;
10130 }
10131
10132 /* Likewise, for VxWorks.  */
10133
10134 bfd_boolean
10135 _bfd_mips_vxworks_finish_dynamic_symbol (bfd *output_bfd,
10136                                          struct bfd_link_info *info,
10137                                          struct elf_link_hash_entry *h,
10138                                          Elf_Internal_Sym *sym)
10139 {
10140   bfd *dynobj;
10141   asection *sgot;
10142   struct mips_got_info *g;
10143   struct mips_elf_link_hash_table *htab;
10144   struct mips_elf_link_hash_entry *hmips;
10145
10146   htab = mips_elf_hash_table (info);
10147   BFD_ASSERT (htab != NULL);
10148   dynobj = elf_hash_table (info)->dynobj;
10149   hmips = (struct mips_elf_link_hash_entry *) h;
10150
10151   if (h->plt.offset != (bfd_vma) -1)
10152     {
10153       bfd_byte *loc;
10154       bfd_vma plt_address, plt_index, got_address, got_offset, branch_offset;
10155       Elf_Internal_Rela rel;
10156       static const bfd_vma *plt_entry;
10157
10158       BFD_ASSERT (h->dynindx != -1);
10159       BFD_ASSERT (htab->splt != NULL);
10160       BFD_ASSERT (h->plt.offset <= htab->splt->size);
10161
10162       /* Calculate the address of the .plt entry.  */
10163       plt_address = (htab->splt->output_section->vma
10164                      + htab->splt->output_offset
10165                      + h->plt.offset);
10166
10167       /* Calculate the index of the entry.  */
10168       plt_index = ((h->plt.offset - htab->plt_header_size)
10169                    / htab->plt_entry_size);
10170
10171       /* Calculate the address of the .got.plt entry.  */
10172       got_address = (htab->sgotplt->output_section->vma
10173                      + htab->sgotplt->output_offset
10174                      + plt_index * 4);
10175
10176       /* Calculate the offset of the .got.plt entry from
10177          _GLOBAL_OFFSET_TABLE_.  */
10178       got_offset = mips_elf_gotplt_index (info, h);
10179
10180       /* Calculate the offset for the branch at the start of the PLT
10181          entry.  The branch jumps to the beginning of .plt.  */
10182       branch_offset = -(h->plt.offset / 4 + 1) & 0xffff;
10183
10184       /* Fill in the initial value of the .got.plt entry.  */
10185       bfd_put_32 (output_bfd, plt_address,
10186                   htab->sgotplt->contents + plt_index * 4);
10187
10188       /* Find out where the .plt entry should go.  */
10189       loc = htab->splt->contents + h->plt.offset;
10190
10191       if (info->shared)
10192         {
10193           plt_entry = mips_vxworks_shared_plt_entry;
10194           bfd_put_32 (output_bfd, plt_entry[0] | branch_offset, loc);
10195           bfd_put_32 (output_bfd, plt_entry[1] | plt_index, loc + 4);
10196         }
10197       else
10198         {
10199           bfd_vma got_address_high, got_address_low;
10200
10201           plt_entry = mips_vxworks_exec_plt_entry;
10202           got_address_high = ((got_address + 0x8000) >> 16) & 0xffff;
10203           got_address_low = got_address & 0xffff;
10204
10205           bfd_put_32 (output_bfd, plt_entry[0] | branch_offset, loc);
10206           bfd_put_32 (output_bfd, plt_entry[1] | plt_index, loc + 4);
10207           bfd_put_32 (output_bfd, plt_entry[2] | got_address_high, loc + 8);
10208           bfd_put_32 (output_bfd, plt_entry[3] | got_address_low, loc + 12);
10209           bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
10210           bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
10211           bfd_put_32 (output_bfd, plt_entry[6], loc + 24);
10212           bfd_put_32 (output_bfd, plt_entry[7], loc + 28);
10213
10214           loc = (htab->srelplt2->contents
10215                  + (plt_index * 3 + 2) * sizeof (Elf32_External_Rela));
10216
10217           /* Emit a relocation for the .got.plt entry.  */
10218           rel.r_offset = got_address;
10219           rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_MIPS_32);
10220           rel.r_addend = h->plt.offset;
10221           bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10222
10223           /* Emit a relocation for the lui of %hi(<.got.plt slot>).  */
10224           loc += sizeof (Elf32_External_Rela);
10225           rel.r_offset = plt_address + 8;
10226           rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
10227           rel.r_addend = got_offset;
10228           bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10229
10230           /* Emit a relocation for the addiu of %lo(<.got.plt slot>).  */
10231           loc += sizeof (Elf32_External_Rela);
10232           rel.r_offset += 4;
10233           rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
10234           bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10235         }
10236
10237       /* Emit an R_MIPS_JUMP_SLOT relocation against the .got.plt entry.  */
10238       loc = htab->srelplt->contents + plt_index * sizeof (Elf32_External_Rela);
10239       rel.r_offset = got_address;
10240       rel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_JUMP_SLOT);
10241       rel.r_addend = 0;
10242       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10243
10244       if (!h->def_regular)
10245         sym->st_shndx = SHN_UNDEF;
10246     }
10247
10248   BFD_ASSERT (h->dynindx != -1 || h->forced_local);
10249
10250   sgot = htab->sgot;
10251   g = htab->got_info;
10252   BFD_ASSERT (g != NULL);
10253
10254   /* See if this symbol has an entry in the GOT.  */
10255   if (hmips->global_got_area != GGA_NONE)
10256     {
10257       bfd_vma offset;
10258       Elf_Internal_Rela outrel;
10259       bfd_byte *loc;
10260       asection *s;
10261
10262       /* Install the symbol value in the GOT.   */
10263       offset = mips_elf_primary_global_got_index (output_bfd, info, h);
10264       MIPS_ELF_PUT_WORD (output_bfd, sym->st_value, sgot->contents + offset);
10265
10266       /* Add a dynamic relocation for it.  */
10267       s = mips_elf_rel_dyn_section (info, FALSE);
10268       loc = s->contents + (s->reloc_count++ * sizeof (Elf32_External_Rela));
10269       outrel.r_offset = (sgot->output_section->vma
10270                          + sgot->output_offset
10271                          + offset);
10272       outrel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_32);
10273       outrel.r_addend = 0;
10274       bfd_elf32_swap_reloca_out (dynobj, &outrel, loc);
10275     }
10276
10277   /* Emit a copy reloc, if needed.  */
10278   if (h->needs_copy)
10279     {
10280       Elf_Internal_Rela rel;
10281
10282       BFD_ASSERT (h->dynindx != -1);
10283
10284       rel.r_offset = (h->root.u.def.section->output_section->vma
10285                       + h->root.u.def.section->output_offset
10286                       + h->root.u.def.value);
10287       rel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_COPY);
10288       rel.r_addend = 0;
10289       bfd_elf32_swap_reloca_out (output_bfd, &rel,
10290                                  htab->srelbss->contents
10291                                  + (htab->srelbss->reloc_count
10292                                     * sizeof (Elf32_External_Rela)));
10293       ++htab->srelbss->reloc_count;
10294     }
10295
10296   /* If this is a mips16/microMIPS symbol, force the value to be even.  */
10297   if (ELF_ST_IS_COMPRESSED (sym->st_other))
10298     sym->st_value &= ~1;
10299
10300   return TRUE;
10301 }
10302
10303 /* Write out a plt0 entry to the beginning of .plt.  */
10304
10305 static void
10306 mips_finish_exec_plt (bfd *output_bfd, struct bfd_link_info *info)
10307 {
10308   bfd_byte *loc;
10309   bfd_vma gotplt_value, gotplt_value_high, gotplt_value_low;
10310   static const bfd_vma *plt_entry;
10311   struct mips_elf_link_hash_table *htab;
10312
10313   htab = mips_elf_hash_table (info);
10314   BFD_ASSERT (htab != NULL);
10315
10316   if (ABI_64_P (output_bfd))
10317     plt_entry = mips_n64_exec_plt0_entry;
10318   else if (ABI_N32_P (output_bfd))
10319     plt_entry = mips_n32_exec_plt0_entry;
10320   else
10321     plt_entry = mips_o32_exec_plt0_entry;
10322
10323   /* Calculate the value of .got.plt.  */
10324   gotplt_value = (htab->sgotplt->output_section->vma
10325                   + htab->sgotplt->output_offset);
10326   gotplt_value_high = ((gotplt_value + 0x8000) >> 16) & 0xffff;
10327   gotplt_value_low = gotplt_value & 0xffff;
10328
10329   /* The PLT sequence is not safe for N64 if .got.plt's address can
10330      not be loaded in two instructions.  */
10331   BFD_ASSERT ((gotplt_value & ~(bfd_vma) 0x7fffffff) == 0
10332               || ~(gotplt_value | 0x7fffffff) == 0);
10333
10334   /* Install the PLT header.  */
10335   loc = htab->splt->contents;
10336   bfd_put_32 (output_bfd, plt_entry[0] | gotplt_value_high, loc);
10337   bfd_put_32 (output_bfd, plt_entry[1] | gotplt_value_low, loc + 4);
10338   bfd_put_32 (output_bfd, plt_entry[2] | gotplt_value_low, loc + 8);
10339   bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
10340   bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
10341   bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
10342   bfd_put_32 (output_bfd, plt_entry[6], loc + 24);
10343   bfd_put_32 (output_bfd, plt_entry[7], loc + 28);
10344 }
10345
10346 /* Install the PLT header for a VxWorks executable and finalize the
10347    contents of .rela.plt.unloaded.  */
10348
10349 static void
10350 mips_vxworks_finish_exec_plt (bfd *output_bfd, struct bfd_link_info *info)
10351 {
10352   Elf_Internal_Rela rela;
10353   bfd_byte *loc;
10354   bfd_vma got_value, got_value_high, got_value_low, plt_address;
10355   static const bfd_vma *plt_entry;
10356   struct mips_elf_link_hash_table *htab;
10357
10358   htab = mips_elf_hash_table (info);
10359   BFD_ASSERT (htab != NULL);
10360
10361   plt_entry = mips_vxworks_exec_plt0_entry;
10362
10363   /* Calculate the value of _GLOBAL_OFFSET_TABLE_.  */
10364   got_value = (htab->root.hgot->root.u.def.section->output_section->vma
10365                + htab->root.hgot->root.u.def.section->output_offset
10366                + htab->root.hgot->root.u.def.value);
10367
10368   got_value_high = ((got_value + 0x8000) >> 16) & 0xffff;
10369   got_value_low = got_value & 0xffff;
10370
10371   /* Calculate the address of the PLT header.  */
10372   plt_address = htab->splt->output_section->vma + htab->splt->output_offset;
10373
10374   /* Install the PLT header.  */
10375   loc = htab->splt->contents;
10376   bfd_put_32 (output_bfd, plt_entry[0] | got_value_high, loc);
10377   bfd_put_32 (output_bfd, plt_entry[1] | got_value_low, loc + 4);
10378   bfd_put_32 (output_bfd, plt_entry[2], loc + 8);
10379   bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
10380   bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
10381   bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
10382
10383   /* Output the relocation for the lui of %hi(_GLOBAL_OFFSET_TABLE_).  */
10384   loc = htab->srelplt2->contents;
10385   rela.r_offset = plt_address;
10386   rela.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
10387   rela.r_addend = 0;
10388   bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
10389   loc += sizeof (Elf32_External_Rela);
10390
10391   /* Output the relocation for the following addiu of
10392      %lo(_GLOBAL_OFFSET_TABLE_).  */
10393   rela.r_offset += 4;
10394   rela.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
10395   bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
10396   loc += sizeof (Elf32_External_Rela);
10397
10398   /* Fix up the remaining relocations.  They may have the wrong
10399      symbol index for _G_O_T_ or _P_L_T_ depending on the order
10400      in which symbols were output.  */
10401   while (loc < htab->srelplt2->contents + htab->srelplt2->size)
10402     {
10403       Elf_Internal_Rela rel;
10404
10405       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
10406       rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_MIPS_32);
10407       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10408       loc += sizeof (Elf32_External_Rela);
10409
10410       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
10411       rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
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_LO16);
10417       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10418       loc += sizeof (Elf32_External_Rela);
10419     }
10420 }
10421
10422 /* Install the PLT header for a VxWorks shared library.  */
10423
10424 static void
10425 mips_vxworks_finish_shared_plt (bfd *output_bfd, struct bfd_link_info *info)
10426 {
10427   unsigned int i;
10428   struct mips_elf_link_hash_table *htab;
10429
10430   htab = mips_elf_hash_table (info);
10431   BFD_ASSERT (htab != NULL);
10432
10433   /* We just need to copy the entry byte-by-byte.  */
10434   for (i = 0; i < ARRAY_SIZE (mips_vxworks_shared_plt0_entry); i++)
10435     bfd_put_32 (output_bfd, mips_vxworks_shared_plt0_entry[i],
10436                 htab->splt->contents + i * 4);
10437 }
10438
10439 /* Finish up the dynamic sections.  */
10440
10441 bfd_boolean
10442 _bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd,
10443                                        struct bfd_link_info *info)
10444 {
10445   bfd *dynobj;
10446   asection *sdyn;
10447   asection *sgot;
10448   struct mips_got_info *gg, *g;
10449   struct mips_elf_link_hash_table *htab;
10450
10451   htab = mips_elf_hash_table (info);
10452   BFD_ASSERT (htab != NULL);
10453
10454   dynobj = elf_hash_table (info)->dynobj;
10455
10456   sdyn = bfd_get_linker_section (dynobj, ".dynamic");
10457
10458   sgot = htab->sgot;
10459   gg = htab->got_info;
10460
10461   if (elf_hash_table (info)->dynamic_sections_created)
10462     {
10463       bfd_byte *b;
10464       int dyn_to_skip = 0, dyn_skipped = 0;
10465
10466       BFD_ASSERT (sdyn != NULL);
10467       BFD_ASSERT (gg != NULL);
10468
10469       g = mips_elf_bfd_got (output_bfd, FALSE);
10470       BFD_ASSERT (g != NULL);
10471
10472       for (b = sdyn->contents;
10473            b < sdyn->contents + sdyn->size;
10474            b += MIPS_ELF_DYN_SIZE (dynobj))
10475         {
10476           Elf_Internal_Dyn dyn;
10477           const char *name;
10478           size_t elemsize;
10479           asection *s;
10480           bfd_boolean swap_out_p;
10481
10482           /* Read in the current dynamic entry.  */
10483           (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
10484
10485           /* Assume that we're going to modify it and write it out.  */
10486           swap_out_p = TRUE;
10487
10488           switch (dyn.d_tag)
10489             {
10490             case DT_RELENT:
10491               dyn.d_un.d_val = MIPS_ELF_REL_SIZE (dynobj);
10492               break;
10493
10494             case DT_RELAENT:
10495               BFD_ASSERT (htab->is_vxworks);
10496               dyn.d_un.d_val = MIPS_ELF_RELA_SIZE (dynobj);
10497               break;
10498
10499             case DT_STRSZ:
10500               /* Rewrite DT_STRSZ.  */
10501               dyn.d_un.d_val =
10502                 _bfd_elf_strtab_size (elf_hash_table (info)->dynstr);
10503               break;
10504
10505             case DT_PLTGOT:
10506               s = htab->sgot;
10507               dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
10508               break;
10509
10510             case DT_MIPS_PLTGOT:
10511               s = htab->sgotplt;
10512               dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
10513               break;
10514
10515             case DT_MIPS_RLD_VERSION:
10516               dyn.d_un.d_val = 1; /* XXX */
10517               break;
10518
10519             case DT_MIPS_FLAGS:
10520               dyn.d_un.d_val = RHF_NOTPOT; /* XXX */
10521               break;
10522
10523             case DT_MIPS_TIME_STAMP:
10524               {
10525                 time_t t;
10526                 time (&t);
10527                 dyn.d_un.d_val = t;
10528               }
10529               break;
10530
10531             case DT_MIPS_ICHECKSUM:
10532               /* XXX FIXME: */
10533               swap_out_p = FALSE;
10534               break;
10535
10536             case DT_MIPS_IVERSION:
10537               /* XXX FIXME: */
10538               swap_out_p = FALSE;
10539               break;
10540
10541             case DT_MIPS_BASE_ADDRESS:
10542               s = output_bfd->sections;
10543               BFD_ASSERT (s != NULL);
10544               dyn.d_un.d_ptr = s->vma & ~(bfd_vma) 0xffff;
10545               break;
10546
10547             case DT_MIPS_LOCAL_GOTNO:
10548               dyn.d_un.d_val = g->local_gotno;
10549               break;
10550
10551             case DT_MIPS_UNREFEXTNO:
10552               /* The index into the dynamic symbol table which is the
10553                  entry of the first external symbol that is not
10554                  referenced within the same object.  */
10555               dyn.d_un.d_val = bfd_count_sections (output_bfd) + 1;
10556               break;
10557
10558             case DT_MIPS_GOTSYM:
10559               if (htab->global_gotsym)
10560                 {
10561                   dyn.d_un.d_val = htab->global_gotsym->dynindx;
10562                   break;
10563                 }
10564               /* In case if we don't have global got symbols we default
10565                  to setting DT_MIPS_GOTSYM to the same value as
10566                  DT_MIPS_SYMTABNO, so we just fall through.  */
10567
10568             case DT_MIPS_SYMTABNO:
10569               name = ".dynsym";
10570               elemsize = MIPS_ELF_SYM_SIZE (output_bfd);
10571               s = bfd_get_section_by_name (output_bfd, name);
10572               BFD_ASSERT (s != NULL);
10573
10574               dyn.d_un.d_val = s->size / elemsize;
10575               break;
10576
10577             case DT_MIPS_HIPAGENO:
10578               dyn.d_un.d_val = g->local_gotno - htab->reserved_gotno;
10579               break;
10580
10581             case DT_MIPS_RLD_MAP:
10582               {
10583                 struct elf_link_hash_entry *h;
10584                 h = mips_elf_hash_table (info)->rld_symbol;
10585                 if (!h)
10586                   {
10587                     dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
10588                     swap_out_p = FALSE;
10589                     break;
10590                   }
10591                 s = h->root.u.def.section;
10592                 dyn.d_un.d_ptr = (s->output_section->vma + s->output_offset
10593                                   + h->root.u.def.value);
10594               }
10595               break;
10596
10597             case DT_MIPS_OPTIONS:
10598               s = (bfd_get_section_by_name
10599                    (output_bfd, MIPS_ELF_OPTIONS_SECTION_NAME (output_bfd)));
10600               dyn.d_un.d_ptr = s->vma;
10601               break;
10602
10603             case DT_RELASZ:
10604               BFD_ASSERT (htab->is_vxworks);
10605               /* The count does not include the JUMP_SLOT relocations.  */
10606               if (htab->srelplt)
10607                 dyn.d_un.d_val -= htab->srelplt->size;
10608               break;
10609
10610             case DT_PLTREL:
10611               BFD_ASSERT (htab->use_plts_and_copy_relocs);
10612               if (htab->is_vxworks)
10613                 dyn.d_un.d_val = DT_RELA;
10614               else
10615                 dyn.d_un.d_val = DT_REL;
10616               break;
10617
10618             case DT_PLTRELSZ:
10619               BFD_ASSERT (htab->use_plts_and_copy_relocs);
10620               dyn.d_un.d_val = htab->srelplt->size;
10621               break;
10622
10623             case DT_JMPREL:
10624               BFD_ASSERT (htab->use_plts_and_copy_relocs);
10625               dyn.d_un.d_ptr = (htab->srelplt->output_section->vma
10626                                 + htab->srelplt->output_offset);
10627               break;
10628
10629             case DT_TEXTREL:
10630               /* If we didn't need any text relocations after all, delete
10631                  the dynamic tag.  */
10632               if (!(info->flags & DF_TEXTREL))
10633                 {
10634                   dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
10635                   swap_out_p = FALSE;
10636                 }
10637               break;
10638
10639             case DT_FLAGS:
10640               /* If we didn't need any text relocations after all, clear
10641                  DF_TEXTREL from DT_FLAGS.  */
10642               if (!(info->flags & DF_TEXTREL))
10643                 dyn.d_un.d_val &= ~DF_TEXTREL;
10644               else
10645                 swap_out_p = FALSE;
10646               break;
10647
10648             default:
10649               swap_out_p = FALSE;
10650               if (htab->is_vxworks
10651                   && elf_vxworks_finish_dynamic_entry (output_bfd, &dyn))
10652                 swap_out_p = TRUE;
10653               break;
10654             }
10655
10656           if (swap_out_p || dyn_skipped)
10657             (*get_elf_backend_data (dynobj)->s->swap_dyn_out)
10658               (dynobj, &dyn, b - dyn_skipped);
10659
10660           if (dyn_to_skip)
10661             {
10662               dyn_skipped += dyn_to_skip;
10663               dyn_to_skip = 0;
10664             }
10665         }
10666
10667       /* Wipe out any trailing entries if we shifted down a dynamic tag.  */
10668       if (dyn_skipped > 0)
10669         memset (b - dyn_skipped, 0, dyn_skipped);
10670     }
10671
10672   if (sgot != NULL && sgot->size > 0
10673       && !bfd_is_abs_section (sgot->output_section))
10674     {
10675       if (htab->is_vxworks)
10676         {
10677           /* The first entry of the global offset table points to the
10678              ".dynamic" section.  The second is initialized by the
10679              loader and contains the shared library identifier.
10680              The third is also initialized by the loader and points
10681              to the lazy resolution stub.  */
10682           MIPS_ELF_PUT_WORD (output_bfd,
10683                              sdyn->output_offset + sdyn->output_section->vma,
10684                              sgot->contents);
10685           MIPS_ELF_PUT_WORD (output_bfd, 0,
10686                              sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd));
10687           MIPS_ELF_PUT_WORD (output_bfd, 0,
10688                              sgot->contents
10689                              + 2 * MIPS_ELF_GOT_SIZE (output_bfd));
10690         }
10691       else
10692         {
10693           /* The first entry of the global offset table will be filled at
10694              runtime. The second entry will be used by some runtime loaders.
10695              This isn't the case of IRIX rld.  */
10696           MIPS_ELF_PUT_WORD (output_bfd, (bfd_vma) 0, sgot->contents);
10697           MIPS_ELF_PUT_WORD (output_bfd, MIPS_ELF_GNU_GOT1_MASK (output_bfd),
10698                              sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd));
10699         }
10700
10701       elf_section_data (sgot->output_section)->this_hdr.sh_entsize
10702          = MIPS_ELF_GOT_SIZE (output_bfd);
10703     }
10704
10705   /* Generate dynamic relocations for the non-primary gots.  */
10706   if (gg != NULL && gg->next)
10707     {
10708       Elf_Internal_Rela rel[3];
10709       bfd_vma addend = 0;
10710
10711       memset (rel, 0, sizeof (rel));
10712       rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_REL32);
10713
10714       for (g = gg->next; g->next != gg; g = g->next)
10715         {
10716           bfd_vma got_index = g->next->local_gotno + g->next->global_gotno
10717             + g->next->tls_gotno;
10718
10719           MIPS_ELF_PUT_WORD (output_bfd, 0, sgot->contents
10720                              + got_index++ * MIPS_ELF_GOT_SIZE (output_bfd));
10721           MIPS_ELF_PUT_WORD (output_bfd, MIPS_ELF_GNU_GOT1_MASK (output_bfd),
10722                              sgot->contents
10723                              + got_index++ * MIPS_ELF_GOT_SIZE (output_bfd));
10724
10725           if (! info->shared)
10726             continue;
10727
10728           while (got_index < g->assigned_gotno)
10729             {
10730               rel[0].r_offset = rel[1].r_offset = rel[2].r_offset
10731                 = got_index++ * MIPS_ELF_GOT_SIZE (output_bfd);
10732               if (!(mips_elf_create_dynamic_relocation
10733                     (output_bfd, info, rel, NULL,
10734                      bfd_abs_section_ptr,
10735                      0, &addend, sgot)))
10736                 return FALSE;
10737               BFD_ASSERT (addend == 0);
10738             }
10739         }
10740     }
10741
10742   /* The generation of dynamic relocations for the non-primary gots
10743      adds more dynamic relocations.  We cannot count them until
10744      here.  */
10745
10746   if (elf_hash_table (info)->dynamic_sections_created)
10747     {
10748       bfd_byte *b;
10749       bfd_boolean swap_out_p;
10750
10751       BFD_ASSERT (sdyn != NULL);
10752
10753       for (b = sdyn->contents;
10754            b < sdyn->contents + sdyn->size;
10755            b += MIPS_ELF_DYN_SIZE (dynobj))
10756         {
10757           Elf_Internal_Dyn dyn;
10758           asection *s;
10759
10760           /* Read in the current dynamic entry.  */
10761           (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
10762
10763           /* Assume that we're going to modify it and write it out.  */
10764           swap_out_p = TRUE;
10765
10766           switch (dyn.d_tag)
10767             {
10768             case DT_RELSZ:
10769               /* Reduce DT_RELSZ to account for any relocations we
10770                  decided not to make.  This is for the n64 irix rld,
10771                  which doesn't seem to apply any relocations if there
10772                  are trailing null entries.  */
10773               s = mips_elf_rel_dyn_section (info, FALSE);
10774               dyn.d_un.d_val = (s->reloc_count
10775                                 * (ABI_64_P (output_bfd)
10776                                    ? sizeof (Elf64_Mips_External_Rel)
10777                                    : sizeof (Elf32_External_Rel)));
10778               /* Adjust the section size too.  Tools like the prelinker
10779                  can reasonably expect the values to the same.  */
10780               elf_section_data (s->output_section)->this_hdr.sh_size
10781                 = dyn.d_un.d_val;
10782               break;
10783
10784             default:
10785               swap_out_p = FALSE;
10786               break;
10787             }
10788
10789           if (swap_out_p)
10790             (*get_elf_backend_data (dynobj)->s->swap_dyn_out)
10791               (dynobj, &dyn, b);
10792         }
10793     }
10794
10795   {
10796     asection *s;
10797     Elf32_compact_rel cpt;
10798
10799     if (SGI_COMPAT (output_bfd))
10800       {
10801         /* Write .compact_rel section out.  */
10802         s = bfd_get_linker_section (dynobj, ".compact_rel");
10803         if (s != NULL)
10804           {
10805             cpt.id1 = 1;
10806             cpt.num = s->reloc_count;
10807             cpt.id2 = 2;
10808             cpt.offset = (s->output_section->filepos
10809                           + sizeof (Elf32_External_compact_rel));
10810             cpt.reserved0 = 0;
10811             cpt.reserved1 = 0;
10812             bfd_elf32_swap_compact_rel_out (output_bfd, &cpt,
10813                                             ((Elf32_External_compact_rel *)
10814                                              s->contents));
10815
10816             /* Clean up a dummy stub function entry in .text.  */
10817             if (htab->sstubs != NULL)
10818               {
10819                 file_ptr dummy_offset;
10820
10821                 BFD_ASSERT (htab->sstubs->size >= htab->function_stub_size);
10822                 dummy_offset = htab->sstubs->size - htab->function_stub_size;
10823                 memset (htab->sstubs->contents + dummy_offset, 0,
10824                         htab->function_stub_size);
10825               }
10826           }
10827       }
10828
10829     /* The psABI says that the dynamic relocations must be sorted in
10830        increasing order of r_symndx.  The VxWorks EABI doesn't require
10831        this, and because the code below handles REL rather than RELA
10832        relocations, using it for VxWorks would be outright harmful.  */
10833     if (!htab->is_vxworks)
10834       {
10835         s = mips_elf_rel_dyn_section (info, FALSE);
10836         if (s != NULL
10837             && s->size > (bfd_vma)2 * MIPS_ELF_REL_SIZE (output_bfd))
10838           {
10839             reldyn_sorting_bfd = output_bfd;
10840
10841             if (ABI_64_P (output_bfd))
10842               qsort ((Elf64_External_Rel *) s->contents + 1,
10843                      s->reloc_count - 1, sizeof (Elf64_Mips_External_Rel),
10844                      sort_dynamic_relocs_64);
10845             else
10846               qsort ((Elf32_External_Rel *) s->contents + 1,
10847                      s->reloc_count - 1, sizeof (Elf32_External_Rel),
10848                      sort_dynamic_relocs);
10849           }
10850       }
10851   }
10852
10853   if (htab->splt && htab->splt->size > 0)
10854     {
10855       if (htab->is_vxworks)
10856         {
10857           if (info->shared)
10858             mips_vxworks_finish_shared_plt (output_bfd, info);
10859           else
10860             mips_vxworks_finish_exec_plt (output_bfd, info);
10861         }
10862       else
10863         {
10864           BFD_ASSERT (!info->shared);
10865           mips_finish_exec_plt (output_bfd, info);
10866         }
10867     }
10868   return TRUE;
10869 }
10870
10871
10872 /* Set ABFD's EF_MIPS_ARCH and EF_MIPS_MACH flags.  */
10873
10874 static void
10875 mips_set_isa_flags (bfd *abfd)
10876 {
10877   flagword val;
10878
10879   switch (bfd_get_mach (abfd))
10880     {
10881     default:
10882     case bfd_mach_mips3000:
10883       val = E_MIPS_ARCH_1;
10884       break;
10885
10886     case bfd_mach_mips3900:
10887       val = E_MIPS_ARCH_1 | E_MIPS_MACH_3900;
10888       break;
10889
10890     case bfd_mach_mips6000:
10891       val = E_MIPS_ARCH_2;
10892       break;
10893
10894     case bfd_mach_mips4000:
10895     case bfd_mach_mips4300:
10896     case bfd_mach_mips4400:
10897     case bfd_mach_mips4600:
10898       val = E_MIPS_ARCH_3;
10899       break;
10900
10901     case bfd_mach_mips4010:
10902       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4010;
10903       break;
10904
10905     case bfd_mach_mips4100:
10906       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4100;
10907       break;
10908
10909     case bfd_mach_mips4111:
10910       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4111;
10911       break;
10912
10913     case bfd_mach_mips4120:
10914       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4120;
10915       break;
10916
10917     case bfd_mach_mips4650:
10918       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4650;
10919       break;
10920
10921     case bfd_mach_mips5400:
10922       val = E_MIPS_ARCH_4 | E_MIPS_MACH_5400;
10923       break;
10924
10925     case bfd_mach_mips5500:
10926       val = E_MIPS_ARCH_4 | E_MIPS_MACH_5500;
10927       break;
10928
10929     case bfd_mach_mips5900:
10930       val = E_MIPS_ARCH_3 | E_MIPS_MACH_5900;
10931       break;
10932
10933     case bfd_mach_mips9000:
10934       val = E_MIPS_ARCH_4 | E_MIPS_MACH_9000;
10935       break;
10936
10937     case bfd_mach_mips5000:
10938     case bfd_mach_mips7000:
10939     case bfd_mach_mips8000:
10940     case bfd_mach_mips10000:
10941     case bfd_mach_mips12000:
10942     case bfd_mach_mips14000:
10943     case bfd_mach_mips16000:
10944       val = E_MIPS_ARCH_4;
10945       break;
10946
10947     case bfd_mach_mips5:
10948       val = E_MIPS_ARCH_5;
10949       break;
10950
10951     case bfd_mach_mips_loongson_2e:
10952       val = E_MIPS_ARCH_3 | E_MIPS_MACH_LS2E;
10953       break;
10954
10955     case bfd_mach_mips_loongson_2f:
10956       val = E_MIPS_ARCH_3 | E_MIPS_MACH_LS2F;
10957       break;
10958
10959     case bfd_mach_mips_sb1:
10960       val = E_MIPS_ARCH_64 | E_MIPS_MACH_SB1;
10961       break;
10962
10963     case bfd_mach_mips_loongson_3a:
10964       val = E_MIPS_ARCH_64 | E_MIPS_MACH_LS3A;
10965       break;
10966
10967     case bfd_mach_mips_octeon:
10968     case bfd_mach_mips_octeonp:
10969       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON;
10970       break;
10971
10972     case bfd_mach_mips_xlr:
10973       val = E_MIPS_ARCH_64 | E_MIPS_MACH_XLR;
10974       break;
10975
10976     case bfd_mach_mips_octeon2:
10977       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON2;
10978       break;
10979
10980     case bfd_mach_mipsisa32:
10981       val = E_MIPS_ARCH_32;
10982       break;
10983
10984     case bfd_mach_mipsisa64:
10985       val = E_MIPS_ARCH_64;
10986       break;
10987
10988     case bfd_mach_mipsisa32r2:
10989       val = E_MIPS_ARCH_32R2;
10990       break;
10991
10992     case bfd_mach_mipsisa64r2:
10993       val = E_MIPS_ARCH_64R2;
10994       break;
10995     }
10996   elf_elfheader (abfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH);
10997   elf_elfheader (abfd)->e_flags |= val;
10998
10999 }
11000
11001
11002 /* The final processing done just before writing out a MIPS ELF object
11003    file.  This gets the MIPS architecture right based on the machine
11004    number.  This is used by both the 32-bit and the 64-bit ABI.  */
11005
11006 void
11007 _bfd_mips_elf_final_write_processing (bfd *abfd,
11008                                       bfd_boolean linker ATTRIBUTE_UNUSED)
11009 {
11010   unsigned int i;
11011   Elf_Internal_Shdr **hdrpp;
11012   const char *name;
11013   asection *sec;
11014
11015   /* Keep the existing EF_MIPS_MACH and EF_MIPS_ARCH flags if the former
11016      is nonzero.  This is for compatibility with old objects, which used
11017      a combination of a 32-bit EF_MIPS_ARCH and a 64-bit EF_MIPS_MACH.  */
11018   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == 0)
11019     mips_set_isa_flags (abfd);
11020
11021   /* Set the sh_info field for .gptab sections and other appropriate
11022      info for each special section.  */
11023   for (i = 1, hdrpp = elf_elfsections (abfd) + 1;
11024        i < elf_numsections (abfd);
11025        i++, hdrpp++)
11026     {
11027       switch ((*hdrpp)->sh_type)
11028         {
11029         case SHT_MIPS_MSYM:
11030         case SHT_MIPS_LIBLIST:
11031           sec = bfd_get_section_by_name (abfd, ".dynstr");
11032           if (sec != NULL)
11033             (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
11034           break;
11035
11036         case SHT_MIPS_GPTAB:
11037           BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
11038           name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
11039           BFD_ASSERT (name != NULL
11040                       && CONST_STRNEQ (name, ".gptab."));
11041           sec = bfd_get_section_by_name (abfd, name + sizeof ".gptab" - 1);
11042           BFD_ASSERT (sec != NULL);
11043           (*hdrpp)->sh_info = elf_section_data (sec)->this_idx;
11044           break;
11045
11046         case SHT_MIPS_CONTENT:
11047           BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
11048           name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
11049           BFD_ASSERT (name != NULL
11050                       && CONST_STRNEQ (name, ".MIPS.content"));
11051           sec = bfd_get_section_by_name (abfd,
11052                                          name + sizeof ".MIPS.content" - 1);
11053           BFD_ASSERT (sec != NULL);
11054           (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
11055           break;
11056
11057         case SHT_MIPS_SYMBOL_LIB:
11058           sec = bfd_get_section_by_name (abfd, ".dynsym");
11059           if (sec != NULL)
11060             (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
11061           sec = bfd_get_section_by_name (abfd, ".liblist");
11062           if (sec != NULL)
11063             (*hdrpp)->sh_info = elf_section_data (sec)->this_idx;
11064           break;
11065
11066         case SHT_MIPS_EVENTS:
11067           BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
11068           name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
11069           BFD_ASSERT (name != NULL);
11070           if (CONST_STRNEQ (name, ".MIPS.events"))
11071             sec = bfd_get_section_by_name (abfd,
11072                                            name + sizeof ".MIPS.events" - 1);
11073           else
11074             {
11075               BFD_ASSERT (CONST_STRNEQ (name, ".MIPS.post_rel"));
11076               sec = bfd_get_section_by_name (abfd,
11077                                              (name
11078                                               + sizeof ".MIPS.post_rel" - 1));
11079             }
11080           BFD_ASSERT (sec != NULL);
11081           (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
11082           break;
11083
11084         }
11085     }
11086 }
11087 \f
11088 /* When creating an IRIX5 executable, we need REGINFO and RTPROC
11089    segments.  */
11090
11091 int
11092 _bfd_mips_elf_additional_program_headers (bfd *abfd,
11093                                           struct bfd_link_info *info ATTRIBUTE_UNUSED)
11094 {
11095   asection *s;
11096   int ret = 0;
11097
11098   /* See if we need a PT_MIPS_REGINFO segment.  */
11099   s = bfd_get_section_by_name (abfd, ".reginfo");
11100   if (s && (s->flags & SEC_LOAD))
11101     ++ret;
11102
11103   /* See if we need a PT_MIPS_OPTIONS segment.  */
11104   if (IRIX_COMPAT (abfd) == ict_irix6
11105       && bfd_get_section_by_name (abfd,
11106                                   MIPS_ELF_OPTIONS_SECTION_NAME (abfd)))
11107     ++ret;
11108
11109   /* See if we need a PT_MIPS_RTPROC segment.  */
11110   if (IRIX_COMPAT (abfd) == ict_irix5
11111       && bfd_get_section_by_name (abfd, ".dynamic")
11112       && bfd_get_section_by_name (abfd, ".mdebug"))
11113     ++ret;
11114
11115   /* Allocate a PT_NULL header in dynamic objects.  See
11116      _bfd_mips_elf_modify_segment_map for details.  */
11117   if (!SGI_COMPAT (abfd)
11118       && bfd_get_section_by_name (abfd, ".dynamic"))
11119     ++ret;
11120
11121   return ret;
11122 }
11123
11124 /* Modify the segment map for an IRIX5 executable.  */
11125
11126 bfd_boolean
11127 _bfd_mips_elf_modify_segment_map (bfd *abfd,
11128                                   struct bfd_link_info *info)
11129 {
11130   asection *s;
11131   struct elf_segment_map *m, **pm;
11132   bfd_size_type amt;
11133
11134   /* If there is a .reginfo section, we need a PT_MIPS_REGINFO
11135      segment.  */
11136   s = bfd_get_section_by_name (abfd, ".reginfo");
11137   if (s != NULL && (s->flags & SEC_LOAD) != 0)
11138     {
11139       for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
11140         if (m->p_type == PT_MIPS_REGINFO)
11141           break;
11142       if (m == NULL)
11143         {
11144           amt = sizeof *m;
11145           m = bfd_zalloc (abfd, amt);
11146           if (m == NULL)
11147             return FALSE;
11148
11149           m->p_type = PT_MIPS_REGINFO;
11150           m->count = 1;
11151           m->sections[0] = s;
11152
11153           /* We want to put it after the PHDR and INTERP segments.  */
11154           pm = &elf_tdata (abfd)->segment_map;
11155           while (*pm != NULL
11156                  && ((*pm)->p_type == PT_PHDR
11157                      || (*pm)->p_type == PT_INTERP))
11158             pm = &(*pm)->next;
11159
11160           m->next = *pm;
11161           *pm = m;
11162         }
11163     }
11164
11165   /* For IRIX 6, we don't have .mdebug sections, nor does anything but
11166      .dynamic end up in PT_DYNAMIC.  However, we do have to insert a
11167      PT_MIPS_OPTIONS segment immediately following the program header
11168      table.  */
11169   if (NEWABI_P (abfd)
11170       /* On non-IRIX6 new abi, we'll have already created a segment
11171          for this section, so don't create another.  I'm not sure this
11172          is not also the case for IRIX 6, but I can't test it right
11173          now.  */
11174       && IRIX_COMPAT (abfd) == ict_irix6)
11175     {
11176       for (s = abfd->sections; s; s = s->next)
11177         if (elf_section_data (s)->this_hdr.sh_type == SHT_MIPS_OPTIONS)
11178           break;
11179
11180       if (s)
11181         {
11182           struct elf_segment_map *options_segment;
11183
11184           pm = &elf_tdata (abfd)->segment_map;
11185           while (*pm != NULL
11186                  && ((*pm)->p_type == PT_PHDR
11187                      || (*pm)->p_type == PT_INTERP))
11188             pm = &(*pm)->next;
11189
11190           if (*pm == NULL || (*pm)->p_type != PT_MIPS_OPTIONS)
11191             {
11192               amt = sizeof (struct elf_segment_map);
11193               options_segment = bfd_zalloc (abfd, amt);
11194               options_segment->next = *pm;
11195               options_segment->p_type = PT_MIPS_OPTIONS;
11196               options_segment->p_flags = PF_R;
11197               options_segment->p_flags_valid = TRUE;
11198               options_segment->count = 1;
11199               options_segment->sections[0] = s;
11200               *pm = options_segment;
11201             }
11202         }
11203     }
11204   else
11205     {
11206       if (IRIX_COMPAT (abfd) == ict_irix5)
11207         {
11208           /* If there are .dynamic and .mdebug sections, we make a room
11209              for the RTPROC header.  FIXME: Rewrite without section names.  */
11210           if (bfd_get_section_by_name (abfd, ".interp") == NULL
11211               && bfd_get_section_by_name (abfd, ".dynamic") != NULL
11212               && bfd_get_section_by_name (abfd, ".mdebug") != NULL)
11213             {
11214               for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
11215                 if (m->p_type == PT_MIPS_RTPROC)
11216                   break;
11217               if (m == NULL)
11218                 {
11219                   amt = sizeof *m;
11220                   m = bfd_zalloc (abfd, amt);
11221                   if (m == NULL)
11222                     return FALSE;
11223
11224                   m->p_type = PT_MIPS_RTPROC;
11225
11226                   s = bfd_get_section_by_name (abfd, ".rtproc");
11227                   if (s == NULL)
11228                     {
11229                       m->count = 0;
11230                       m->p_flags = 0;
11231                       m->p_flags_valid = 1;
11232                     }
11233                   else
11234                     {
11235                       m->count = 1;
11236                       m->sections[0] = s;
11237                     }
11238
11239                   /* We want to put it after the DYNAMIC segment.  */
11240                   pm = &elf_tdata (abfd)->segment_map;
11241                   while (*pm != NULL && (*pm)->p_type != PT_DYNAMIC)
11242                     pm = &(*pm)->next;
11243                   if (*pm != NULL)
11244                     pm = &(*pm)->next;
11245
11246                   m->next = *pm;
11247                   *pm = m;
11248                 }
11249             }
11250         }
11251       /* On IRIX5, the PT_DYNAMIC segment includes the .dynamic,
11252          .dynstr, .dynsym, and .hash sections, and everything in
11253          between.  */
11254       for (pm = &elf_tdata (abfd)->segment_map; *pm != NULL;
11255            pm = &(*pm)->next)
11256         if ((*pm)->p_type == PT_DYNAMIC)
11257           break;
11258       m = *pm;
11259       if (m != NULL && IRIX_COMPAT (abfd) == ict_none)
11260         {
11261           /* For a normal mips executable the permissions for the PT_DYNAMIC
11262              segment are read, write and execute. We do that here since
11263              the code in elf.c sets only the read permission. This matters
11264              sometimes for the dynamic linker.  */
11265           if (bfd_get_section_by_name (abfd, ".dynamic") != NULL)
11266             {
11267               m->p_flags = PF_R | PF_W | PF_X;
11268               m->p_flags_valid = 1;
11269             }
11270         }
11271       /* GNU/Linux binaries do not need the extended PT_DYNAMIC section.
11272          glibc's dynamic linker has traditionally derived the number of
11273          tags from the p_filesz field, and sometimes allocates stack
11274          arrays of that size.  An overly-big PT_DYNAMIC segment can
11275          be actively harmful in such cases.  Making PT_DYNAMIC contain
11276          other sections can also make life hard for the prelinker,
11277          which might move one of the other sections to a different
11278          PT_LOAD segment.  */
11279       if (SGI_COMPAT (abfd)
11280           && m != NULL
11281           && m->count == 1
11282           && strcmp (m->sections[0]->name, ".dynamic") == 0)
11283         {
11284           static const char *sec_names[] =
11285           {
11286             ".dynamic", ".dynstr", ".dynsym", ".hash"
11287           };
11288           bfd_vma low, high;
11289           unsigned int i, c;
11290           struct elf_segment_map *n;
11291
11292           low = ~(bfd_vma) 0;
11293           high = 0;
11294           for (i = 0; i < sizeof sec_names / sizeof sec_names[0]; i++)
11295             {
11296               s = bfd_get_section_by_name (abfd, sec_names[i]);
11297               if (s != NULL && (s->flags & SEC_LOAD) != 0)
11298                 {
11299                   bfd_size_type sz;
11300
11301                   if (low > s->vma)
11302                     low = s->vma;
11303                   sz = s->size;
11304                   if (high < s->vma + sz)
11305                     high = s->vma + sz;
11306                 }
11307             }
11308
11309           c = 0;
11310           for (s = abfd->sections; s != NULL; s = s->next)
11311             if ((s->flags & SEC_LOAD) != 0
11312                 && s->vma >= low
11313                 && s->vma + s->size <= high)
11314               ++c;
11315
11316           amt = sizeof *n + (bfd_size_type) (c - 1) * sizeof (asection *);
11317           n = bfd_zalloc (abfd, amt);
11318           if (n == NULL)
11319             return FALSE;
11320           *n = *m;
11321           n->count = c;
11322
11323           i = 0;
11324           for (s = abfd->sections; s != NULL; s = s->next)
11325             {
11326               if ((s->flags & SEC_LOAD) != 0
11327                   && s->vma >= low
11328                   && s->vma + s->size <= high)
11329                 {
11330                   n->sections[i] = s;
11331                   ++i;
11332                 }
11333             }
11334
11335           *pm = n;
11336         }
11337     }
11338
11339   /* Allocate a spare program header in dynamic objects so that tools
11340      like the prelinker can add an extra PT_LOAD entry.
11341
11342      If the prelinker needs to make room for a new PT_LOAD entry, its
11343      standard procedure is to move the first (read-only) sections into
11344      the new (writable) segment.  However, the MIPS ABI requires
11345      .dynamic to be in a read-only segment, and the section will often
11346      start within sizeof (ElfNN_Phdr) bytes of the last program header.
11347
11348      Although the prelinker could in principle move .dynamic to a
11349      writable segment, it seems better to allocate a spare program
11350      header instead, and avoid the need to move any sections.
11351      There is a long tradition of allocating spare dynamic tags,
11352      so allocating a spare program header seems like a natural
11353      extension.
11354
11355      If INFO is NULL, we may be copying an already prelinked binary
11356      with objcopy or strip, so do not add this header.  */
11357   if (info != NULL
11358       && !SGI_COMPAT (abfd)
11359       && bfd_get_section_by_name (abfd, ".dynamic"))
11360     {
11361       for (pm = &elf_tdata (abfd)->segment_map; *pm != NULL; pm = &(*pm)->next)
11362         if ((*pm)->p_type == PT_NULL)
11363           break;
11364       if (*pm == NULL)
11365         {
11366           m = bfd_zalloc (abfd, sizeof (*m));
11367           if (m == NULL)
11368             return FALSE;
11369
11370           m->p_type = PT_NULL;
11371           *pm = m;
11372         }
11373     }
11374
11375   return TRUE;
11376 }
11377 \f
11378 /* Return the section that should be marked against GC for a given
11379    relocation.  */
11380
11381 asection *
11382 _bfd_mips_elf_gc_mark_hook (asection *sec,
11383                             struct bfd_link_info *info,
11384                             Elf_Internal_Rela *rel,
11385                             struct elf_link_hash_entry *h,
11386                             Elf_Internal_Sym *sym)
11387 {
11388   /* ??? Do mips16 stub sections need to be handled special?  */
11389
11390   if (h != NULL)
11391     switch (ELF_R_TYPE (sec->owner, rel->r_info))
11392       {
11393       case R_MIPS_GNU_VTINHERIT:
11394       case R_MIPS_GNU_VTENTRY:
11395         return NULL;
11396       }
11397
11398   return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
11399 }
11400
11401 /* Update the got entry reference counts for the section being removed.  */
11402
11403 bfd_boolean
11404 _bfd_mips_elf_gc_sweep_hook (bfd *abfd ATTRIBUTE_UNUSED,
11405                              struct bfd_link_info *info ATTRIBUTE_UNUSED,
11406                              asection *sec ATTRIBUTE_UNUSED,
11407                              const Elf_Internal_Rela *relocs ATTRIBUTE_UNUSED)
11408 {
11409 #if 0
11410   Elf_Internal_Shdr *symtab_hdr;
11411   struct elf_link_hash_entry **sym_hashes;
11412   bfd_signed_vma *local_got_refcounts;
11413   const Elf_Internal_Rela *rel, *relend;
11414   unsigned long r_symndx;
11415   struct elf_link_hash_entry *h;
11416
11417   if (info->relocatable)
11418     return TRUE;
11419
11420   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
11421   sym_hashes = elf_sym_hashes (abfd);
11422   local_got_refcounts = elf_local_got_refcounts (abfd);
11423
11424   relend = relocs + sec->reloc_count;
11425   for (rel = relocs; rel < relend; rel++)
11426     switch (ELF_R_TYPE (abfd, rel->r_info))
11427       {
11428       case R_MIPS16_GOT16:
11429       case R_MIPS16_CALL16:
11430       case R_MIPS_GOT16:
11431       case R_MIPS_CALL16:
11432       case R_MIPS_CALL_HI16:
11433       case R_MIPS_CALL_LO16:
11434       case R_MIPS_GOT_HI16:
11435       case R_MIPS_GOT_LO16:
11436       case R_MIPS_GOT_DISP:
11437       case R_MIPS_GOT_PAGE:
11438       case R_MIPS_GOT_OFST:
11439       case R_MICROMIPS_GOT16:
11440       case R_MICROMIPS_CALL16:
11441       case R_MICROMIPS_CALL_HI16:
11442       case R_MICROMIPS_CALL_LO16:
11443       case R_MICROMIPS_GOT_HI16:
11444       case R_MICROMIPS_GOT_LO16:
11445       case R_MICROMIPS_GOT_DISP:
11446       case R_MICROMIPS_GOT_PAGE:
11447       case R_MICROMIPS_GOT_OFST:
11448         /* ??? It would seem that the existing MIPS code does no sort
11449            of reference counting or whatnot on its GOT and PLT entries,
11450            so it is not possible to garbage collect them at this time.  */
11451         break;
11452
11453       default:
11454         break;
11455       }
11456 #endif
11457
11458   return TRUE;
11459 }
11460 \f
11461 /* Copy data from a MIPS ELF indirect symbol to its direct symbol,
11462    hiding the old indirect symbol.  Process additional relocation
11463    information.  Also called for weakdefs, in which case we just let
11464    _bfd_elf_link_hash_copy_indirect copy the flags for us.  */
11465
11466 void
11467 _bfd_mips_elf_copy_indirect_symbol (struct bfd_link_info *info,
11468                                     struct elf_link_hash_entry *dir,
11469                                     struct elf_link_hash_entry *ind)
11470 {
11471   struct mips_elf_link_hash_entry *dirmips, *indmips;
11472
11473   _bfd_elf_link_hash_copy_indirect (info, dir, ind);
11474
11475   dirmips = (struct mips_elf_link_hash_entry *) dir;
11476   indmips = (struct mips_elf_link_hash_entry *) ind;
11477   /* Any absolute non-dynamic relocations against an indirect or weak
11478      definition will be against the target symbol.  */
11479   if (indmips->has_static_relocs)
11480     dirmips->has_static_relocs = TRUE;
11481
11482   if (ind->root.type != bfd_link_hash_indirect)
11483     return;
11484
11485   dirmips->possibly_dynamic_relocs += indmips->possibly_dynamic_relocs;
11486   if (indmips->readonly_reloc)
11487     dirmips->readonly_reloc = TRUE;
11488   if (indmips->no_fn_stub)
11489     dirmips->no_fn_stub = TRUE;
11490   if (indmips->fn_stub)
11491     {
11492       dirmips->fn_stub = indmips->fn_stub;
11493       indmips->fn_stub = NULL;
11494     }
11495   if (indmips->need_fn_stub)
11496     {
11497       dirmips->need_fn_stub = TRUE;
11498       indmips->need_fn_stub = FALSE;
11499     }
11500   if (indmips->call_stub)
11501     {
11502       dirmips->call_stub = indmips->call_stub;
11503       indmips->call_stub = NULL;
11504     }
11505   if (indmips->call_fp_stub)
11506     {
11507       dirmips->call_fp_stub = indmips->call_fp_stub;
11508       indmips->call_fp_stub = NULL;
11509     }
11510   if (indmips->global_got_area < dirmips->global_got_area)
11511     dirmips->global_got_area = indmips->global_got_area;
11512   if (indmips->global_got_area < GGA_NONE)
11513     indmips->global_got_area = GGA_NONE;
11514   if (indmips->has_nonpic_branches)
11515     dirmips->has_nonpic_branches = TRUE;
11516 }
11517 \f
11518 #define PDR_SIZE 32
11519
11520 bfd_boolean
11521 _bfd_mips_elf_discard_info (bfd *abfd, struct elf_reloc_cookie *cookie,
11522                             struct bfd_link_info *info)
11523 {
11524   asection *o;
11525   bfd_boolean ret = FALSE;
11526   unsigned char *tdata;
11527   size_t i, skip;
11528
11529   o = bfd_get_section_by_name (abfd, ".pdr");
11530   if (! o)
11531     return FALSE;
11532   if (o->size == 0)
11533     return FALSE;
11534   if (o->size % PDR_SIZE != 0)
11535     return FALSE;
11536   if (o->output_section != NULL
11537       && bfd_is_abs_section (o->output_section))
11538     return FALSE;
11539
11540   tdata = bfd_zmalloc (o->size / PDR_SIZE);
11541   if (! tdata)
11542     return FALSE;
11543
11544   cookie->rels = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
11545                                             info->keep_memory);
11546   if (!cookie->rels)
11547     {
11548       free (tdata);
11549       return FALSE;
11550     }
11551
11552   cookie->rel = cookie->rels;
11553   cookie->relend = cookie->rels + o->reloc_count;
11554
11555   for (i = 0, skip = 0; i < o->size / PDR_SIZE; i ++)
11556     {
11557       if (bfd_elf_reloc_symbol_deleted_p (i * PDR_SIZE, cookie))
11558         {
11559           tdata[i] = 1;
11560           skip ++;
11561         }
11562     }
11563
11564   if (skip != 0)
11565     {
11566       mips_elf_section_data (o)->u.tdata = tdata;
11567       o->size -= skip * PDR_SIZE;
11568       ret = TRUE;
11569     }
11570   else
11571     free (tdata);
11572
11573   if (! info->keep_memory)
11574     free (cookie->rels);
11575
11576   return ret;
11577 }
11578
11579 bfd_boolean
11580 _bfd_mips_elf_ignore_discarded_relocs (asection *sec)
11581 {
11582   if (strcmp (sec->name, ".pdr") == 0)
11583     return TRUE;
11584   return FALSE;
11585 }
11586
11587 bfd_boolean
11588 _bfd_mips_elf_write_section (bfd *output_bfd,
11589                              struct bfd_link_info *link_info ATTRIBUTE_UNUSED,
11590                              asection *sec, bfd_byte *contents)
11591 {
11592   bfd_byte *to, *from, *end;
11593   int i;
11594
11595   if (strcmp (sec->name, ".pdr") != 0)
11596     return FALSE;
11597
11598   if (mips_elf_section_data (sec)->u.tdata == NULL)
11599     return FALSE;
11600
11601   to = contents;
11602   end = contents + sec->size;
11603   for (from = contents, i = 0;
11604        from < end;
11605        from += PDR_SIZE, i++)
11606     {
11607       if ((mips_elf_section_data (sec)->u.tdata)[i] == 1)
11608         continue;
11609       if (to != from)
11610         memcpy (to, from, PDR_SIZE);
11611       to += PDR_SIZE;
11612     }
11613   bfd_set_section_contents (output_bfd, sec->output_section, contents,
11614                             sec->output_offset, sec->size);
11615   return TRUE;
11616 }
11617 \f
11618 /* microMIPS code retains local labels for linker relaxation.  Omit them
11619    from output by default for clarity.  */
11620
11621 bfd_boolean
11622 _bfd_mips_elf_is_target_special_symbol (bfd *abfd, asymbol *sym)
11623 {
11624   return _bfd_elf_is_local_label_name (abfd, sym->name);
11625 }
11626
11627 /* MIPS ELF uses a special find_nearest_line routine in order the
11628    handle the ECOFF debugging information.  */
11629
11630 struct mips_elf_find_line
11631 {
11632   struct ecoff_debug_info d;
11633   struct ecoff_find_line i;
11634 };
11635
11636 bfd_boolean
11637 _bfd_mips_elf_find_nearest_line (bfd *abfd, asection *section,
11638                                  asymbol **symbols, bfd_vma offset,
11639                                  const char **filename_ptr,
11640                                  const char **functionname_ptr,
11641                                  unsigned int *line_ptr)
11642 {
11643   asection *msec;
11644
11645   if (_bfd_dwarf1_find_nearest_line (abfd, section, symbols, offset,
11646                                      filename_ptr, functionname_ptr,
11647                                      line_ptr))
11648     return TRUE;
11649
11650   if (_bfd_dwarf2_find_nearest_line (abfd, dwarf_debug_sections,
11651                                      section, symbols, offset,
11652                                      filename_ptr, functionname_ptr,
11653                                      line_ptr, NULL, ABI_64_P (abfd) ? 8 : 0,
11654                                      &elf_tdata (abfd)->dwarf2_find_line_info))
11655     return TRUE;
11656
11657   msec = bfd_get_section_by_name (abfd, ".mdebug");
11658   if (msec != NULL)
11659     {
11660       flagword origflags;
11661       struct mips_elf_find_line *fi;
11662       const struct ecoff_debug_swap * const swap =
11663         get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
11664
11665       /* If we are called during a link, mips_elf_final_link may have
11666          cleared the SEC_HAS_CONTENTS field.  We force it back on here
11667          if appropriate (which it normally will be).  */
11668       origflags = msec->flags;
11669       if (elf_section_data (msec)->this_hdr.sh_type != SHT_NOBITS)
11670         msec->flags |= SEC_HAS_CONTENTS;
11671
11672       fi = mips_elf_tdata (abfd)->find_line_info;
11673       if (fi == NULL)
11674         {
11675           bfd_size_type external_fdr_size;
11676           char *fraw_src;
11677           char *fraw_end;
11678           struct fdr *fdr_ptr;
11679           bfd_size_type amt = sizeof (struct mips_elf_find_line);
11680
11681           fi = bfd_zalloc (abfd, amt);
11682           if (fi == NULL)
11683             {
11684               msec->flags = origflags;
11685               return FALSE;
11686             }
11687
11688           if (! _bfd_mips_elf_read_ecoff_info (abfd, msec, &fi->d))
11689             {
11690               msec->flags = origflags;
11691               return FALSE;
11692             }
11693
11694           /* Swap in the FDR information.  */
11695           amt = fi->d.symbolic_header.ifdMax * sizeof (struct fdr);
11696           fi->d.fdr = bfd_alloc (abfd, amt);
11697           if (fi->d.fdr == NULL)
11698             {
11699               msec->flags = origflags;
11700               return FALSE;
11701             }
11702           external_fdr_size = swap->external_fdr_size;
11703           fdr_ptr = fi->d.fdr;
11704           fraw_src = (char *) fi->d.external_fdr;
11705           fraw_end = (fraw_src
11706                       + fi->d.symbolic_header.ifdMax * external_fdr_size);
11707           for (; fraw_src < fraw_end; fraw_src += external_fdr_size, fdr_ptr++)
11708             (*swap->swap_fdr_in) (abfd, fraw_src, fdr_ptr);
11709
11710           mips_elf_tdata (abfd)->find_line_info = fi;
11711
11712           /* Note that we don't bother to ever free this information.
11713              find_nearest_line is either called all the time, as in
11714              objdump -l, so the information should be saved, or it is
11715              rarely called, as in ld error messages, so the memory
11716              wasted is unimportant.  Still, it would probably be a
11717              good idea for free_cached_info to throw it away.  */
11718         }
11719
11720       if (_bfd_ecoff_locate_line (abfd, section, offset, &fi->d, swap,
11721                                   &fi->i, filename_ptr, functionname_ptr,
11722                                   line_ptr))
11723         {
11724           msec->flags = origflags;
11725           return TRUE;
11726         }
11727
11728       msec->flags = origflags;
11729     }
11730
11731   /* Fall back on the generic ELF find_nearest_line routine.  */
11732
11733   return _bfd_elf_find_nearest_line (abfd, section, symbols, offset,
11734                                      filename_ptr, functionname_ptr,
11735                                      line_ptr);
11736 }
11737
11738 bfd_boolean
11739 _bfd_mips_elf_find_inliner_info (bfd *abfd,
11740                                  const char **filename_ptr,
11741                                  const char **functionname_ptr,
11742                                  unsigned int *line_ptr)
11743 {
11744   bfd_boolean found;
11745   found = _bfd_dwarf2_find_inliner_info (abfd, filename_ptr,
11746                                          functionname_ptr, line_ptr,
11747                                          & elf_tdata (abfd)->dwarf2_find_line_info);
11748   return found;
11749 }
11750
11751 \f
11752 /* When are writing out the .options or .MIPS.options section,
11753    remember the bytes we are writing out, so that we can install the
11754    GP value in the section_processing routine.  */
11755
11756 bfd_boolean
11757 _bfd_mips_elf_set_section_contents (bfd *abfd, sec_ptr section,
11758                                     const void *location,
11759                                     file_ptr offset, bfd_size_type count)
11760 {
11761   if (MIPS_ELF_OPTIONS_SECTION_NAME_P (section->name))
11762     {
11763       bfd_byte *c;
11764
11765       if (elf_section_data (section) == NULL)
11766         {
11767           bfd_size_type amt = sizeof (struct bfd_elf_section_data);
11768           section->used_by_bfd = bfd_zalloc (abfd, amt);
11769           if (elf_section_data (section) == NULL)
11770             return FALSE;
11771         }
11772       c = mips_elf_section_data (section)->u.tdata;
11773       if (c == NULL)
11774         {
11775           c = bfd_zalloc (abfd, section->size);
11776           if (c == NULL)
11777             return FALSE;
11778           mips_elf_section_data (section)->u.tdata = c;
11779         }
11780
11781       memcpy (c + offset, location, count);
11782     }
11783
11784   return _bfd_elf_set_section_contents (abfd, section, location, offset,
11785                                         count);
11786 }
11787
11788 /* This is almost identical to bfd_generic_get_... except that some
11789    MIPS relocations need to be handled specially.  Sigh.  */
11790
11791 bfd_byte *
11792 _bfd_elf_mips_get_relocated_section_contents
11793   (bfd *abfd,
11794    struct bfd_link_info *link_info,
11795    struct bfd_link_order *link_order,
11796    bfd_byte *data,
11797    bfd_boolean relocatable,
11798    asymbol **symbols)
11799 {
11800   /* Get enough memory to hold the stuff */
11801   bfd *input_bfd = link_order->u.indirect.section->owner;
11802   asection *input_section = link_order->u.indirect.section;
11803   bfd_size_type sz;
11804
11805   long reloc_size = bfd_get_reloc_upper_bound (input_bfd, input_section);
11806   arelent **reloc_vector = NULL;
11807   long reloc_count;
11808
11809   if (reloc_size < 0)
11810     goto error_return;
11811
11812   reloc_vector = bfd_malloc (reloc_size);
11813   if (reloc_vector == NULL && reloc_size != 0)
11814     goto error_return;
11815
11816   /* read in the section */
11817   sz = input_section->rawsize ? input_section->rawsize : input_section->size;
11818   if (!bfd_get_section_contents (input_bfd, input_section, data, 0, sz))
11819     goto error_return;
11820
11821   reloc_count = bfd_canonicalize_reloc (input_bfd,
11822                                         input_section,
11823                                         reloc_vector,
11824                                         symbols);
11825   if (reloc_count < 0)
11826     goto error_return;
11827
11828   if (reloc_count > 0)
11829     {
11830       arelent **parent;
11831       /* for mips */
11832       int gp_found;
11833       bfd_vma gp = 0x12345678;  /* initialize just to shut gcc up */
11834
11835       {
11836         struct bfd_hash_entry *h;
11837         struct bfd_link_hash_entry *lh;
11838         /* Skip all this stuff if we aren't mixing formats.  */
11839         if (abfd && input_bfd
11840             && abfd->xvec == input_bfd->xvec)
11841           lh = 0;
11842         else
11843           {
11844             h = bfd_hash_lookup (&link_info->hash->table, "_gp", FALSE, FALSE);
11845             lh = (struct bfd_link_hash_entry *) h;
11846           }
11847       lookup:
11848         if (lh)
11849           {
11850             switch (lh->type)
11851               {
11852               case bfd_link_hash_undefined:
11853               case bfd_link_hash_undefweak:
11854               case bfd_link_hash_common:
11855                 gp_found = 0;
11856                 break;
11857               case bfd_link_hash_defined:
11858               case bfd_link_hash_defweak:
11859                 gp_found = 1;
11860                 gp = lh->u.def.value;
11861                 break;
11862               case bfd_link_hash_indirect:
11863               case bfd_link_hash_warning:
11864                 lh = lh->u.i.link;
11865                 /* @@FIXME  ignoring warning for now */
11866                 goto lookup;
11867               case bfd_link_hash_new:
11868               default:
11869                 abort ();
11870               }
11871           }
11872         else
11873           gp_found = 0;
11874       }
11875       /* end mips */
11876       for (parent = reloc_vector; *parent != NULL; parent++)
11877         {
11878           char *error_message = NULL;
11879           bfd_reloc_status_type r;
11880
11881           /* Specific to MIPS: Deal with relocation types that require
11882              knowing the gp of the output bfd.  */
11883           asymbol *sym = *(*parent)->sym_ptr_ptr;
11884
11885           /* If we've managed to find the gp and have a special
11886              function for the relocation then go ahead, else default
11887              to the generic handling.  */
11888           if (gp_found
11889               && (*parent)->howto->special_function
11890               == _bfd_mips_elf32_gprel16_reloc)
11891             r = _bfd_mips_elf_gprel16_with_gp (input_bfd, sym, *parent,
11892                                                input_section, relocatable,
11893                                                data, gp);
11894           else
11895             r = bfd_perform_relocation (input_bfd, *parent, data,
11896                                         input_section,
11897                                         relocatable ? abfd : NULL,
11898                                         &error_message);
11899
11900           if (relocatable)
11901             {
11902               asection *os = input_section->output_section;
11903
11904               /* A partial link, so keep the relocs */
11905               os->orelocation[os->reloc_count] = *parent;
11906               os->reloc_count++;
11907             }
11908
11909           if (r != bfd_reloc_ok)
11910             {
11911               switch (r)
11912                 {
11913                 case bfd_reloc_undefined:
11914                   if (!((*link_info->callbacks->undefined_symbol)
11915                         (link_info, bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
11916                          input_bfd, input_section, (*parent)->address, TRUE)))
11917                     goto error_return;
11918                   break;
11919                 case bfd_reloc_dangerous:
11920                   BFD_ASSERT (error_message != NULL);
11921                   if (!((*link_info->callbacks->reloc_dangerous)
11922                         (link_info, error_message, input_bfd, input_section,
11923                          (*parent)->address)))
11924                     goto error_return;
11925                   break;
11926                 case bfd_reloc_overflow:
11927                   if (!((*link_info->callbacks->reloc_overflow)
11928                         (link_info, NULL,
11929                          bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
11930                          (*parent)->howto->name, (*parent)->addend,
11931                          input_bfd, input_section, (*parent)->address)))
11932                     goto error_return;
11933                   break;
11934                 case bfd_reloc_outofrange:
11935                 default:
11936                   abort ();
11937                   break;
11938                 }
11939
11940             }
11941         }
11942     }
11943   if (reloc_vector != NULL)
11944     free (reloc_vector);
11945   return data;
11946
11947 error_return:
11948   if (reloc_vector != NULL)
11949     free (reloc_vector);
11950   return NULL;
11951 }
11952 \f
11953 static bfd_boolean
11954 mips_elf_relax_delete_bytes (bfd *abfd,
11955                              asection *sec, bfd_vma addr, int count)
11956 {
11957   Elf_Internal_Shdr *symtab_hdr;
11958   unsigned int sec_shndx;
11959   bfd_byte *contents;
11960   Elf_Internal_Rela *irel, *irelend;
11961   Elf_Internal_Sym *isym;
11962   Elf_Internal_Sym *isymend;
11963   struct elf_link_hash_entry **sym_hashes;
11964   struct elf_link_hash_entry **end_hashes;
11965   struct elf_link_hash_entry **start_hashes;
11966   unsigned int symcount;
11967
11968   sec_shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
11969   contents = elf_section_data (sec)->this_hdr.contents;
11970
11971   irel = elf_section_data (sec)->relocs;
11972   irelend = irel + sec->reloc_count;
11973
11974   /* Actually delete the bytes.  */
11975   memmove (contents + addr, contents + addr + count,
11976            (size_t) (sec->size - addr - count));
11977   sec->size -= count;
11978
11979   /* Adjust all the relocs.  */
11980   for (irel = elf_section_data (sec)->relocs; irel < irelend; irel++)
11981     {
11982       /* Get the new reloc address.  */
11983       if (irel->r_offset > addr)
11984         irel->r_offset -= count;
11985     }
11986
11987   BFD_ASSERT (addr % 2 == 0);
11988   BFD_ASSERT (count % 2 == 0);
11989
11990   /* Adjust the local symbols defined in this section.  */
11991   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
11992   isym = (Elf_Internal_Sym *) symtab_hdr->contents;
11993   for (isymend = isym + symtab_hdr->sh_info; isym < isymend; isym++)
11994     if (isym->st_shndx == sec_shndx && isym->st_value > addr)
11995       isym->st_value -= count;
11996
11997   /* Now adjust the global symbols defined in this section.  */
11998   symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym)
11999               - symtab_hdr->sh_info);
12000   sym_hashes = start_hashes = elf_sym_hashes (abfd);
12001   end_hashes = sym_hashes + symcount;
12002
12003   for (; sym_hashes < end_hashes; sym_hashes++)
12004     {
12005       struct elf_link_hash_entry *sym_hash = *sym_hashes;
12006
12007       if ((sym_hash->root.type == bfd_link_hash_defined
12008            || sym_hash->root.type == bfd_link_hash_defweak)
12009           && sym_hash->root.u.def.section == sec)
12010         {
12011           bfd_vma value = sym_hash->root.u.def.value;
12012
12013           if (ELF_ST_IS_MICROMIPS (sym_hash->other))
12014             value &= MINUS_TWO;
12015           if (value > addr)
12016             sym_hash->root.u.def.value -= count;
12017         }
12018     }
12019
12020   return TRUE;
12021 }
12022
12023
12024 /* Opcodes needed for microMIPS relaxation as found in
12025    opcodes/micromips-opc.c.  */
12026
12027 struct opcode_descriptor {
12028   unsigned long match;
12029   unsigned long mask;
12030 };
12031
12032 /* The $ra register aka $31.  */
12033
12034 #define RA 31
12035
12036 /* 32-bit instruction format register fields.  */
12037
12038 #define OP32_SREG(opcode) (((opcode) >> 16) & 0x1f)
12039 #define OP32_TREG(opcode) (((opcode) >> 21) & 0x1f)
12040
12041 /* Check if a 5-bit register index can be abbreviated to 3 bits.  */
12042
12043 #define OP16_VALID_REG(r) \
12044   ((2 <= (r) && (r) <= 7) || (16 <= (r) && (r) <= 17))
12045
12046
12047 /* 32-bit and 16-bit branches.  */
12048
12049 static const struct opcode_descriptor b_insns_32[] = {
12050   { /* "b",     "p",            */ 0x40400000, 0xffff0000 }, /* bgez 0 */
12051   { /* "b",     "p",            */ 0x94000000, 0xffff0000 }, /* beq 0, 0 */
12052   { 0, 0 }  /* End marker for find_match().  */
12053 };
12054
12055 static const struct opcode_descriptor bc_insn_32 =
12056   { /* "bc(1|2)(ft)", "N,p",    */ 0x42800000, 0xfec30000 };
12057
12058 static const struct opcode_descriptor bz_insn_32 =
12059   { /* "b(g|l)(e|t)z", "s,p",   */ 0x40000000, 0xff200000 };
12060
12061 static const struct opcode_descriptor bzal_insn_32 =
12062   { /* "b(ge|lt)zal", "s,p",    */ 0x40200000, 0xffa00000 };
12063
12064 static const struct opcode_descriptor beq_insn_32 =
12065   { /* "b(eq|ne)", "s,t,p",     */ 0x94000000, 0xdc000000 };
12066
12067 static const struct opcode_descriptor b_insn_16 =
12068   { /* "b",     "mD",           */ 0xcc00,     0xfc00 };
12069
12070 static const struct opcode_descriptor bz_insn_16 =
12071   { /* "b(eq|ne)z", "md,mE",    */ 0x8c00,     0xdc00 };
12072
12073
12074 /* 32-bit and 16-bit branch EQ and NE zero.  */
12075
12076 /* NOTE: All opcode tables have BEQ/BNE in the same order: first the
12077    eq and second the ne.  This convention is used when replacing a
12078    32-bit BEQ/BNE with the 16-bit version.  */
12079
12080 #define BZC32_REG_FIELD(r) (((r) & 0x1f) << 16)
12081
12082 static const struct opcode_descriptor bz_rs_insns_32[] = {
12083   { /* "beqz",  "s,p",          */ 0x94000000, 0xffe00000 },
12084   { /* "bnez",  "s,p",          */ 0xb4000000, 0xffe00000 },
12085   { 0, 0 }  /* End marker for find_match().  */
12086 };
12087
12088 static const struct opcode_descriptor bz_rt_insns_32[] = {
12089   { /* "beqz",  "t,p",          */ 0x94000000, 0xfc01f000 },
12090   { /* "bnez",  "t,p",          */ 0xb4000000, 0xfc01f000 },
12091   { 0, 0 }  /* End marker for find_match().  */
12092 };
12093
12094 static const struct opcode_descriptor bzc_insns_32[] = {
12095   { /* "beqzc", "s,p",          */ 0x40e00000, 0xffe00000 },
12096   { /* "bnezc", "s,p",          */ 0x40a00000, 0xffe00000 },
12097   { 0, 0 }  /* End marker for find_match().  */
12098 };
12099
12100 static const struct opcode_descriptor bz_insns_16[] = {
12101   { /* "beqz",  "md,mE",        */ 0x8c00,     0xfc00 },
12102   { /* "bnez",  "md,mE",        */ 0xac00,     0xfc00 },
12103   { 0, 0 }  /* End marker for find_match().  */
12104 };
12105
12106 /* Switch between a 5-bit register index and its 3-bit shorthand.  */
12107
12108 #define BZ16_REG(opcode) ((((((opcode) >> 7) & 7) + 0x1e) & 0x17) + 2)
12109 #define BZ16_REG_FIELD(r) \
12110   (((2 <= (r) && (r) <= 7) ? (r) : ((r) - 16)) << 7)
12111
12112
12113 /* 32-bit instructions with a delay slot.  */
12114
12115 static const struct opcode_descriptor jal_insn_32_bd16 =
12116   { /* "jals",  "a",            */ 0x74000000, 0xfc000000 };
12117
12118 static const struct opcode_descriptor jal_insn_32_bd32 =
12119   { /* "jal",   "a",            */ 0xf4000000, 0xfc000000 };
12120
12121 static const struct opcode_descriptor jal_x_insn_32_bd32 =
12122   { /* "jal[x]", "a",           */ 0xf0000000, 0xf8000000 };
12123
12124 static const struct opcode_descriptor j_insn_32 =
12125   { /* "j",     "a",            */ 0xd4000000, 0xfc000000 };
12126
12127 static const struct opcode_descriptor jalr_insn_32 =
12128   { /* "jalr[.hb]", "t,s",      */ 0x00000f3c, 0xfc00efff };
12129
12130 /* This table can be compacted, because no opcode replacement is made.  */
12131
12132 static const struct opcode_descriptor ds_insns_32_bd16[] = {
12133   { /* "jals",  "a",            */ 0x74000000, 0xfc000000 },
12134
12135   { /* "jalrs[.hb]", "t,s",     */ 0x00004f3c, 0xfc00efff },
12136   { /* "b(ge|lt)zals", "s,p",   */ 0x42200000, 0xffa00000 },
12137
12138   { /* "b(g|l)(e|t)z", "s,p",   */ 0x40000000, 0xff200000 },
12139   { /* "b(eq|ne)", "s,t,p",     */ 0x94000000, 0xdc000000 },
12140   { /* "j",     "a",            */ 0xd4000000, 0xfc000000 },
12141   { 0, 0 }  /* End marker for find_match().  */
12142 };
12143
12144 /* This table can be compacted, because no opcode replacement is made.  */
12145
12146 static const struct opcode_descriptor ds_insns_32_bd32[] = {
12147   { /* "jal[x]", "a",           */ 0xf0000000, 0xf8000000 },
12148
12149   { /* "jalr[.hb]", "t,s",      */ 0x00000f3c, 0xfc00efff },
12150   { /* "b(ge|lt)zal", "s,p",    */ 0x40200000, 0xffa00000 },
12151   { 0, 0 }  /* End marker for find_match().  */
12152 };
12153
12154
12155 /* 16-bit instructions with a delay slot.  */
12156
12157 static const struct opcode_descriptor jalr_insn_16_bd16 =
12158   { /* "jalrs", "my,mj",        */ 0x45e0,     0xffe0 };
12159
12160 static const struct opcode_descriptor jalr_insn_16_bd32 =
12161   { /* "jalr",  "my,mj",        */ 0x45c0,     0xffe0 };
12162
12163 static const struct opcode_descriptor jr_insn_16 =
12164   { /* "jr",    "mj",           */ 0x4580,     0xffe0 };
12165
12166 #define JR16_REG(opcode) ((opcode) & 0x1f)
12167
12168 /* This table can be compacted, because no opcode replacement is made.  */
12169
12170 static const struct opcode_descriptor ds_insns_16_bd16[] = {
12171   { /* "jalrs", "my,mj",        */ 0x45e0,     0xffe0 },
12172
12173   { /* "b",     "mD",           */ 0xcc00,     0xfc00 },
12174   { /* "b(eq|ne)z", "md,mE",    */ 0x8c00,     0xdc00 },
12175   { /* "jr",    "mj",           */ 0x4580,     0xffe0 },
12176   { 0, 0 }  /* End marker for find_match().  */
12177 };
12178
12179
12180 /* LUI instruction.  */
12181
12182 static const struct opcode_descriptor lui_insn =
12183  { /* "lui",    "s,u",          */ 0x41a00000, 0xffe00000 };
12184
12185
12186 /* ADDIU instruction.  */
12187
12188 static const struct opcode_descriptor addiu_insn =
12189   { /* "addiu", "t,r,j",        */ 0x30000000, 0xfc000000 };
12190
12191 static const struct opcode_descriptor addiupc_insn =
12192   { /* "addiu", "mb,$pc,mQ",    */ 0x78000000, 0xfc000000 };
12193
12194 #define ADDIUPC_REG_FIELD(r) \
12195   (((2 <= (r) && (r) <= 7) ? (r) : ((r) - 16)) << 23)
12196
12197
12198 /* Relaxable instructions in a JAL delay slot: MOVE.  */
12199
12200 /* The 16-bit move has rd in 9:5 and rs in 4:0.  The 32-bit moves
12201    (ADDU, OR) have rd in 15:11 and rs in 10:16.  */
12202 #define MOVE32_RD(opcode) (((opcode) >> 11) & 0x1f)
12203 #define MOVE32_RS(opcode) (((opcode) >> 16) & 0x1f)
12204
12205 #define MOVE16_RD_FIELD(r) (((r) & 0x1f) << 5)
12206 #define MOVE16_RS_FIELD(r) (((r) & 0x1f)     )
12207
12208 static const struct opcode_descriptor move_insns_32[] = {
12209   { /* "move",  "d,s",          */ 0x00000150, 0xffe007ff }, /* addu d,s,$0 */
12210   { /* "move",  "d,s",          */ 0x00000290, 0xffe007ff }, /* or   d,s,$0 */
12211   { 0, 0 }  /* End marker for find_match().  */
12212 };
12213
12214 static const struct opcode_descriptor move_insn_16 =
12215   { /* "move",  "mp,mj",        */ 0x0c00,     0xfc00 };
12216
12217
12218 /* NOP instructions.  */
12219
12220 static const struct opcode_descriptor nop_insn_32 =
12221   { /* "nop",   "",             */ 0x00000000, 0xffffffff };
12222
12223 static const struct opcode_descriptor nop_insn_16 =
12224   { /* "nop",   "",             */ 0x0c00,     0xffff };
12225
12226
12227 /* Instruction match support.  */
12228
12229 #define MATCH(opcode, insn) ((opcode & insn.mask) == insn.match)
12230
12231 static int
12232 find_match (unsigned long opcode, const struct opcode_descriptor insn[])
12233 {
12234   unsigned long indx;
12235
12236   for (indx = 0; insn[indx].mask != 0; indx++)
12237     if (MATCH (opcode, insn[indx]))
12238       return indx;
12239
12240   return -1;
12241 }
12242
12243
12244 /* Branch and delay slot decoding support.  */
12245
12246 /* If PTR points to what *might* be a 16-bit branch or jump, then
12247    return the minimum length of its delay slot, otherwise return 0.
12248    Non-zero results are not definitive as we might be checking against
12249    the second half of another instruction.  */
12250
12251 static int
12252 check_br16_dslot (bfd *abfd, bfd_byte *ptr)
12253 {
12254   unsigned long opcode;
12255   int bdsize;
12256
12257   opcode = bfd_get_16 (abfd, ptr);
12258   if (MATCH (opcode, jalr_insn_16_bd32) != 0)
12259     /* 16-bit branch/jump with a 32-bit delay slot.  */
12260     bdsize = 4;
12261   else if (MATCH (opcode, jalr_insn_16_bd16) != 0
12262            || find_match (opcode, ds_insns_16_bd16) >= 0)
12263     /* 16-bit branch/jump with a 16-bit delay slot.  */
12264     bdsize = 2;
12265   else
12266     /* No delay slot.  */
12267     bdsize = 0;
12268
12269   return bdsize;
12270 }
12271
12272 /* If PTR points to what *might* be a 32-bit branch or jump, then
12273    return the minimum length of its delay slot, otherwise return 0.
12274    Non-zero results are not definitive as we might be checking against
12275    the second half of another instruction.  */
12276
12277 static int
12278 check_br32_dslot (bfd *abfd, bfd_byte *ptr)
12279 {
12280   unsigned long opcode;
12281   int bdsize;
12282
12283   opcode = bfd_get_micromips_32 (abfd, ptr);
12284   if (find_match (opcode, ds_insns_32_bd32) >= 0)
12285     /* 32-bit branch/jump with a 32-bit delay slot.  */
12286     bdsize = 4;
12287   else if (find_match (opcode, ds_insns_32_bd16) >= 0)
12288     /* 32-bit branch/jump with a 16-bit delay slot.  */
12289     bdsize = 2;
12290   else
12291     /* No delay slot.  */
12292     bdsize = 0;
12293
12294   return bdsize;
12295 }
12296
12297 /* If PTR points to a 16-bit branch or jump with a 32-bit delay slot
12298    that doesn't fiddle with REG, then return TRUE, otherwise FALSE.  */
12299
12300 static bfd_boolean
12301 check_br16 (bfd *abfd, bfd_byte *ptr, unsigned long reg)
12302 {
12303   unsigned long opcode;
12304
12305   opcode = bfd_get_16 (abfd, ptr);
12306   if (MATCH (opcode, b_insn_16)
12307                                                 /* B16  */
12308       || (MATCH (opcode, jr_insn_16) && reg != JR16_REG (opcode))
12309                                                 /* JR16  */
12310       || (MATCH (opcode, bz_insn_16) && reg != BZ16_REG (opcode))
12311                                                 /* BEQZ16, BNEZ16  */
12312       || (MATCH (opcode, jalr_insn_16_bd32)
12313                                                 /* JALR16  */
12314           && reg != JR16_REG (opcode) && reg != RA))
12315     return TRUE;
12316
12317   return FALSE;
12318 }
12319
12320 /* If PTR points to a 32-bit branch or jump that doesn't fiddle with REG,
12321    then return TRUE, otherwise FALSE.  */
12322
12323 static bfd_boolean
12324 check_br32 (bfd *abfd, bfd_byte *ptr, unsigned long reg)
12325 {
12326   unsigned long opcode;
12327
12328   opcode = bfd_get_micromips_32 (abfd, ptr);
12329   if (MATCH (opcode, j_insn_32)
12330                                                 /* J  */
12331       || MATCH (opcode, bc_insn_32)
12332                                                 /* BC1F, BC1T, BC2F, BC2T  */
12333       || (MATCH (opcode, jal_x_insn_32_bd32) && reg != RA)
12334                                                 /* JAL, JALX  */
12335       || (MATCH (opcode, bz_insn_32) && reg != OP32_SREG (opcode))
12336                                                 /* BGEZ, BGTZ, BLEZ, BLTZ  */
12337       || (MATCH (opcode, bzal_insn_32)
12338                                                 /* BGEZAL, BLTZAL  */
12339           && reg != OP32_SREG (opcode) && reg != RA)
12340       || ((MATCH (opcode, jalr_insn_32) || MATCH (opcode, beq_insn_32))
12341                                                 /* JALR, JALR.HB, BEQ, BNE  */
12342           && reg != OP32_SREG (opcode) && reg != OP32_TREG (opcode)))
12343     return TRUE;
12344
12345   return FALSE;
12346 }
12347
12348 /* If the instruction encoding at PTR and relocations [INTERNAL_RELOCS,
12349    IRELEND) at OFFSET indicate that there must be a compact branch there,
12350    then return TRUE, otherwise FALSE.  */
12351
12352 static bfd_boolean
12353 check_relocated_bzc (bfd *abfd, const bfd_byte *ptr, bfd_vma offset,
12354                      const Elf_Internal_Rela *internal_relocs,
12355                      const Elf_Internal_Rela *irelend)
12356 {
12357   const Elf_Internal_Rela *irel;
12358   unsigned long opcode;
12359
12360   opcode = bfd_get_micromips_32 (abfd, ptr);
12361   if (find_match (opcode, bzc_insns_32) < 0)
12362     return FALSE;
12363
12364   for (irel = internal_relocs; irel < irelend; irel++)
12365     if (irel->r_offset == offset
12366         && ELF32_R_TYPE (irel->r_info) == R_MICROMIPS_PC16_S1)
12367       return TRUE;
12368
12369   return FALSE;
12370 }
12371
12372 /* Bitsize checking.  */
12373 #define IS_BITSIZE(val, N)                                              \
12374   (((((val) & ((1ULL << (N)) - 1)) ^ (1ULL << ((N) - 1)))               \
12375     - (1ULL << ((N) - 1))) == (val))
12376
12377 \f
12378 bfd_boolean
12379 _bfd_mips_elf_relax_section (bfd *abfd, asection *sec,
12380                              struct bfd_link_info *link_info,
12381                              bfd_boolean *again)
12382 {
12383   Elf_Internal_Shdr *symtab_hdr;
12384   Elf_Internal_Rela *internal_relocs;
12385   Elf_Internal_Rela *irel, *irelend;
12386   bfd_byte *contents = NULL;
12387   Elf_Internal_Sym *isymbuf = NULL;
12388
12389   /* Assume nothing changes.  */
12390   *again = FALSE;
12391
12392   /* We don't have to do anything for a relocatable link, if
12393      this section does not have relocs, or if this is not a
12394      code section.  */
12395
12396   if (link_info->relocatable
12397       || (sec->flags & SEC_RELOC) == 0
12398       || sec->reloc_count == 0
12399       || (sec->flags & SEC_CODE) == 0)
12400     return TRUE;
12401
12402   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
12403
12404   /* Get a copy of the native relocations.  */
12405   internal_relocs = (_bfd_elf_link_read_relocs
12406                      (abfd, sec, NULL, (Elf_Internal_Rela *) NULL,
12407                       link_info->keep_memory));
12408   if (internal_relocs == NULL)
12409     goto error_return;
12410
12411   /* Walk through them looking for relaxing opportunities.  */
12412   irelend = internal_relocs + sec->reloc_count;
12413   for (irel = internal_relocs; irel < irelend; irel++)
12414     {
12415       unsigned long r_symndx = ELF32_R_SYM (irel->r_info);
12416       unsigned int r_type = ELF32_R_TYPE (irel->r_info);
12417       bfd_boolean target_is_micromips_code_p;
12418       unsigned long opcode;
12419       bfd_vma symval;
12420       bfd_vma pcrval;
12421       bfd_byte *ptr;
12422       int fndopc;
12423
12424       /* The number of bytes to delete for relaxation and from where
12425          to delete these bytes starting at irel->r_offset.  */
12426       int delcnt = 0;
12427       int deloff = 0;
12428
12429       /* If this isn't something that can be relaxed, then ignore
12430          this reloc.  */
12431       if (r_type != R_MICROMIPS_HI16
12432           && r_type != R_MICROMIPS_PC16_S1
12433           && r_type != R_MICROMIPS_26_S1)
12434         continue;
12435
12436       /* Get the section contents if we haven't done so already.  */
12437       if (contents == NULL)
12438         {
12439           /* Get cached copy if it exists.  */
12440           if (elf_section_data (sec)->this_hdr.contents != NULL)
12441             contents = elf_section_data (sec)->this_hdr.contents;
12442           /* Go get them off disk.  */
12443           else if (!bfd_malloc_and_get_section (abfd, sec, &contents))
12444             goto error_return;
12445         }
12446       ptr = contents + irel->r_offset;
12447
12448       /* Read this BFD's local symbols if we haven't done so already.  */
12449       if (isymbuf == NULL && symtab_hdr->sh_info != 0)
12450         {
12451           isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
12452           if (isymbuf == NULL)
12453             isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
12454                                             symtab_hdr->sh_info, 0,
12455                                             NULL, NULL, NULL);
12456           if (isymbuf == NULL)
12457             goto error_return;
12458         }
12459
12460       /* Get the value of the symbol referred to by the reloc.  */
12461       if (r_symndx < symtab_hdr->sh_info)
12462         {
12463           /* A local symbol.  */
12464           Elf_Internal_Sym *isym;
12465           asection *sym_sec;
12466
12467           isym = isymbuf + r_symndx;
12468           if (isym->st_shndx == SHN_UNDEF)
12469             sym_sec = bfd_und_section_ptr;
12470           else if (isym->st_shndx == SHN_ABS)
12471             sym_sec = bfd_abs_section_ptr;
12472           else if (isym->st_shndx == SHN_COMMON)
12473             sym_sec = bfd_com_section_ptr;
12474           else
12475             sym_sec = bfd_section_from_elf_index (abfd, isym->st_shndx);
12476           symval = (isym->st_value
12477                     + sym_sec->output_section->vma
12478                     + sym_sec->output_offset);
12479           target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (isym->st_other);
12480         }
12481       else
12482         {
12483           unsigned long indx;
12484           struct elf_link_hash_entry *h;
12485
12486           /* An external symbol.  */
12487           indx = r_symndx - symtab_hdr->sh_info;
12488           h = elf_sym_hashes (abfd)[indx];
12489           BFD_ASSERT (h != NULL);
12490
12491           if (h->root.type != bfd_link_hash_defined
12492               && h->root.type != bfd_link_hash_defweak)
12493             /* This appears to be a reference to an undefined
12494                symbol.  Just ignore it -- it will be caught by the
12495                regular reloc processing.  */
12496             continue;
12497
12498           symval = (h->root.u.def.value
12499                     + h->root.u.def.section->output_section->vma
12500                     + h->root.u.def.section->output_offset);
12501           target_is_micromips_code_p = (!h->needs_plt
12502                                         && ELF_ST_IS_MICROMIPS (h->other));
12503         }
12504
12505
12506       /* For simplicity of coding, we are going to modify the
12507          section contents, the section relocs, and the BFD symbol
12508          table.  We must tell the rest of the code not to free up this
12509          information.  It would be possible to instead create a table
12510          of changes which have to be made, as is done in coff-mips.c;
12511          that would be more work, but would require less memory when
12512          the linker is run.  */
12513
12514       /* Only 32-bit instructions relaxed.  */
12515       if (irel->r_offset + 4 > sec->size)
12516         continue;
12517
12518       opcode = bfd_get_micromips_32 (abfd, ptr);
12519
12520       /* This is the pc-relative distance from the instruction the
12521          relocation is applied to, to the symbol referred.  */
12522       pcrval = (symval
12523                 - (sec->output_section->vma + sec->output_offset)
12524                 - irel->r_offset);
12525
12526       /* R_MICROMIPS_HI16 / LUI relaxation to nil, performing relaxation
12527          of corresponding R_MICROMIPS_LO16 to R_MICROMIPS_HI0_LO16 or
12528          R_MICROMIPS_PC23_S2.  The R_MICROMIPS_PC23_S2 condition is
12529
12530            (symval % 4 == 0 && IS_BITSIZE (pcrval, 25))
12531
12532          where pcrval has first to be adjusted to apply against the LO16
12533          location (we make the adjustment later on, when we have figured
12534          out the offset).  */
12535       if (r_type == R_MICROMIPS_HI16 && MATCH (opcode, lui_insn))
12536         {
12537           bfd_boolean bzc = FALSE;
12538           unsigned long nextopc;
12539           unsigned long reg;
12540           bfd_vma offset;
12541
12542           /* Give up if the previous reloc was a HI16 against this symbol
12543              too.  */
12544           if (irel > internal_relocs
12545               && ELF32_R_TYPE (irel[-1].r_info) == R_MICROMIPS_HI16
12546               && ELF32_R_SYM (irel[-1].r_info) == r_symndx)
12547             continue;
12548
12549           /* Or if the next reloc is not a LO16 against this symbol.  */
12550           if (irel + 1 >= irelend
12551               || ELF32_R_TYPE (irel[1].r_info) != R_MICROMIPS_LO16
12552               || ELF32_R_SYM (irel[1].r_info) != r_symndx)
12553             continue;
12554
12555           /* Or if the second next reloc is a LO16 against this symbol too.  */
12556           if (irel + 2 >= irelend
12557               && ELF32_R_TYPE (irel[2].r_info) == R_MICROMIPS_LO16
12558               && ELF32_R_SYM (irel[2].r_info) == r_symndx)
12559             continue;
12560
12561           /* See if the LUI instruction *might* be in a branch delay slot.
12562              We check whether what looks like a 16-bit branch or jump is
12563              actually an immediate argument to a compact branch, and let
12564              it through if so.  */
12565           if (irel->r_offset >= 2
12566               && check_br16_dslot (abfd, ptr - 2)
12567               && !(irel->r_offset >= 4
12568                    && (bzc = check_relocated_bzc (abfd,
12569                                                   ptr - 4, irel->r_offset - 4,
12570                                                   internal_relocs, irelend))))
12571             continue;
12572           if (irel->r_offset >= 4
12573               && !bzc
12574               && check_br32_dslot (abfd, ptr - 4))
12575             continue;
12576
12577           reg = OP32_SREG (opcode);
12578
12579           /* We only relax adjacent instructions or ones separated with
12580              a branch or jump that has a delay slot.  The branch or jump
12581              must not fiddle with the register used to hold the address.
12582              Subtract 4 for the LUI itself.  */
12583           offset = irel[1].r_offset - irel[0].r_offset;
12584           switch (offset - 4)
12585             {
12586             case 0:
12587               break;
12588             case 2:
12589               if (check_br16 (abfd, ptr + 4, reg))
12590                 break;
12591               continue;
12592             case 4:
12593               if (check_br32 (abfd, ptr + 4, reg))
12594                 break;
12595               continue;
12596             default:
12597               continue;
12598             }
12599
12600           nextopc = bfd_get_micromips_32 (abfd, contents + irel[1].r_offset);
12601
12602           /* Give up unless the same register is used with both
12603              relocations.  */
12604           if (OP32_SREG (nextopc) != reg)
12605             continue;
12606
12607           /* Now adjust pcrval, subtracting the offset to the LO16 reloc
12608              and rounding up to take masking of the two LSBs into account.  */
12609           pcrval = ((pcrval - offset + 3) | 3) ^ 3;
12610
12611           /* R_MICROMIPS_LO16 relaxation to R_MICROMIPS_HI0_LO16.  */
12612           if (IS_BITSIZE (symval, 16))
12613             {
12614               /* Fix the relocation's type.  */
12615               irel[1].r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_HI0_LO16);
12616
12617               /* Instructions using R_MICROMIPS_LO16 have the base or
12618                  source register in bits 20:16.  This register becomes $0
12619                  (zero) as the result of the R_MICROMIPS_HI16 being 0.  */
12620               nextopc &= ~0x001f0000;
12621               bfd_put_16 (abfd, (nextopc >> 16) & 0xffff,
12622                           contents + irel[1].r_offset);
12623             }
12624
12625           /* R_MICROMIPS_LO16 / ADDIU relaxation to R_MICROMIPS_PC23_S2.
12626              We add 4 to take LUI deletion into account while checking
12627              the PC-relative distance.  */
12628           else if (symval % 4 == 0
12629                    && IS_BITSIZE (pcrval + 4, 25)
12630                    && MATCH (nextopc, addiu_insn)
12631                    && OP32_TREG (nextopc) == OP32_SREG (nextopc)
12632                    && OP16_VALID_REG (OP32_TREG (nextopc)))
12633             {
12634               /* Fix the relocation's type.  */
12635               irel[1].r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC23_S2);
12636
12637               /* Replace ADDIU with the ADDIUPC version.  */
12638               nextopc = (addiupc_insn.match
12639                          | ADDIUPC_REG_FIELD (OP32_TREG (nextopc)));
12640
12641               bfd_put_micromips_32 (abfd, nextopc,
12642                                     contents + irel[1].r_offset);
12643             }
12644
12645           /* Can't do anything, give up, sigh...  */
12646           else
12647             continue;
12648
12649           /* Fix the relocation's type.  */
12650           irel->r_info = ELF32_R_INFO (r_symndx, R_MIPS_NONE);
12651
12652           /* Delete the LUI instruction: 4 bytes at irel->r_offset.  */
12653           delcnt = 4;
12654           deloff = 0;
12655         }
12656
12657       /* Compact branch relaxation -- due to the multitude of macros
12658          employed by the compiler/assembler, compact branches are not
12659          always generated.  Obviously, this can/will be fixed elsewhere,
12660          but there is no drawback in double checking it here.  */
12661       else if (r_type == R_MICROMIPS_PC16_S1
12662                && irel->r_offset + 5 < sec->size
12663                && ((fndopc = find_match (opcode, bz_rs_insns_32)) >= 0
12664                    || (fndopc = find_match (opcode, bz_rt_insns_32)) >= 0)
12665                && MATCH (bfd_get_16 (abfd, ptr + 4), nop_insn_16))
12666         {
12667           unsigned long reg;
12668
12669           reg = OP32_SREG (opcode) ? OP32_SREG (opcode) : OP32_TREG (opcode);
12670
12671           /* Replace BEQZ/BNEZ with the compact version.  */
12672           opcode = (bzc_insns_32[fndopc].match
12673                     | BZC32_REG_FIELD (reg)
12674                     | (opcode & 0xffff));               /* Addend value.  */
12675
12676           bfd_put_micromips_32 (abfd, opcode, ptr);
12677
12678           /* Delete the 16-bit delay slot NOP: two bytes from
12679              irel->offset + 4.  */
12680           delcnt = 2;
12681           deloff = 4;
12682         }
12683
12684       /* R_MICROMIPS_PC16_S1 relaxation to R_MICROMIPS_PC10_S1.  We need
12685          to check the distance from the next instruction, so subtract 2.  */
12686       else if (r_type == R_MICROMIPS_PC16_S1
12687                && IS_BITSIZE (pcrval - 2, 11)
12688                && find_match (opcode, b_insns_32) >= 0)
12689         {
12690           /* Fix the relocation's type.  */
12691           irel->r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC10_S1);
12692
12693           /* Replace the 32-bit opcode with a 16-bit opcode.  */
12694           bfd_put_16 (abfd,
12695                       (b_insn_16.match
12696                        | (opcode & 0x3ff)),             /* Addend value.  */
12697                       ptr);
12698
12699           /* Delete 2 bytes from irel->r_offset + 2.  */
12700           delcnt = 2;
12701           deloff = 2;
12702         }
12703
12704       /* R_MICROMIPS_PC16_S1 relaxation to R_MICROMIPS_PC7_S1.  We need
12705          to check the distance from the next instruction, so subtract 2.  */
12706       else if (r_type == R_MICROMIPS_PC16_S1
12707                && IS_BITSIZE (pcrval - 2, 8)
12708                && (((fndopc = find_match (opcode, bz_rs_insns_32)) >= 0
12709                     && OP16_VALID_REG (OP32_SREG (opcode)))
12710                    || ((fndopc = find_match (opcode, bz_rt_insns_32)) >= 0
12711                        && OP16_VALID_REG (OP32_TREG (opcode)))))
12712         {
12713           unsigned long reg;
12714
12715           reg = OP32_SREG (opcode) ? OP32_SREG (opcode) : OP32_TREG (opcode);
12716
12717           /* Fix the relocation's type.  */
12718           irel->r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC7_S1);
12719
12720           /* Replace the 32-bit opcode with a 16-bit opcode.  */
12721           bfd_put_16 (abfd,
12722                       (bz_insns_16[fndopc].match
12723                        | BZ16_REG_FIELD (reg)
12724                        | (opcode & 0x7f)),              /* Addend value.  */
12725                       ptr);
12726
12727           /* Delete 2 bytes from irel->r_offset + 2.  */
12728           delcnt = 2;
12729           deloff = 2;
12730         }
12731
12732       /* R_MICROMIPS_26_S1 -- JAL to JALS relaxation for microMIPS targets.  */
12733       else if (r_type == R_MICROMIPS_26_S1
12734                && target_is_micromips_code_p
12735                && irel->r_offset + 7 < sec->size
12736                && MATCH (opcode, jal_insn_32_bd32))
12737         {
12738           unsigned long n32opc;
12739           bfd_boolean relaxed = FALSE;
12740
12741           n32opc = bfd_get_micromips_32 (abfd, ptr + 4);
12742
12743           if (MATCH (n32opc, nop_insn_32))
12744             {
12745               /* Replace delay slot 32-bit NOP with a 16-bit NOP.  */
12746               bfd_put_16 (abfd, nop_insn_16.match, ptr + 4);
12747
12748               relaxed = TRUE;
12749             }
12750           else if (find_match (n32opc, move_insns_32) >= 0)
12751             {
12752               /* Replace delay slot 32-bit MOVE with 16-bit MOVE.  */
12753               bfd_put_16 (abfd,
12754                           (move_insn_16.match
12755                            | MOVE16_RD_FIELD (MOVE32_RD (n32opc))
12756                            | MOVE16_RS_FIELD (MOVE32_RS (n32opc))),
12757                           ptr + 4);
12758
12759               relaxed = TRUE;
12760             }
12761           /* Other 32-bit instructions relaxable to 16-bit
12762              instructions will be handled here later.  */
12763
12764           if (relaxed)
12765             {
12766               /* JAL with 32-bit delay slot that is changed to a JALS
12767                  with 16-bit delay slot.  */
12768               bfd_put_micromips_32 (abfd, jal_insn_32_bd16.match, ptr);
12769
12770               /* Delete 2 bytes from irel->r_offset + 6.  */
12771               delcnt = 2;
12772               deloff = 6;
12773             }
12774         }
12775
12776       if (delcnt != 0)
12777         {
12778           /* Note that we've changed the relocs, section contents, etc.  */
12779           elf_section_data (sec)->relocs = internal_relocs;
12780           elf_section_data (sec)->this_hdr.contents = contents;
12781           symtab_hdr->contents = (unsigned char *) isymbuf;
12782
12783           /* Delete bytes depending on the delcnt and deloff.  */
12784           if (!mips_elf_relax_delete_bytes (abfd, sec,
12785                                             irel->r_offset + deloff, delcnt))
12786             goto error_return;
12787
12788           /* That will change things, so we should relax again.
12789              Note that this is not required, and it may be slow.  */
12790           *again = TRUE;
12791         }
12792     }
12793
12794   if (isymbuf != NULL
12795       && symtab_hdr->contents != (unsigned char *) isymbuf)
12796     {
12797       if (! link_info->keep_memory)
12798         free (isymbuf);
12799       else
12800         {
12801           /* Cache the symbols for elf_link_input_bfd.  */
12802           symtab_hdr->contents = (unsigned char *) isymbuf;
12803         }
12804     }
12805
12806   if (contents != NULL
12807       && elf_section_data (sec)->this_hdr.contents != contents)
12808     {
12809       if (! link_info->keep_memory)
12810         free (contents);
12811       else
12812         {
12813           /* Cache the section contents for elf_link_input_bfd.  */
12814           elf_section_data (sec)->this_hdr.contents = contents;
12815         }
12816     }
12817
12818   if (internal_relocs != NULL
12819       && elf_section_data (sec)->relocs != internal_relocs)
12820     free (internal_relocs);
12821
12822   return TRUE;
12823
12824  error_return:
12825   if (isymbuf != NULL
12826       && symtab_hdr->contents != (unsigned char *) isymbuf)
12827     free (isymbuf);
12828   if (contents != NULL
12829       && elf_section_data (sec)->this_hdr.contents != contents)
12830     free (contents);
12831   if (internal_relocs != NULL
12832       && elf_section_data (sec)->relocs != internal_relocs)
12833     free (internal_relocs);
12834
12835   return FALSE;
12836 }
12837 \f
12838 /* Create a MIPS ELF linker hash table.  */
12839
12840 struct bfd_link_hash_table *
12841 _bfd_mips_elf_link_hash_table_create (bfd *abfd)
12842 {
12843   struct mips_elf_link_hash_table *ret;
12844   bfd_size_type amt = sizeof (struct mips_elf_link_hash_table);
12845
12846   ret = bfd_zmalloc (amt);
12847   if (ret == NULL)
12848     return NULL;
12849
12850   if (!_bfd_elf_link_hash_table_init (&ret->root, abfd,
12851                                       mips_elf_link_hash_newfunc,
12852                                       sizeof (struct mips_elf_link_hash_entry),
12853                                       MIPS_ELF_DATA))
12854     {
12855       free (ret);
12856       return NULL;
12857     }
12858
12859   return &ret->root.root;
12860 }
12861
12862 /* Likewise, but indicate that the target is VxWorks.  */
12863
12864 struct bfd_link_hash_table *
12865 _bfd_mips_vxworks_link_hash_table_create (bfd *abfd)
12866 {
12867   struct bfd_link_hash_table *ret;
12868
12869   ret = _bfd_mips_elf_link_hash_table_create (abfd);
12870   if (ret)
12871     {
12872       struct mips_elf_link_hash_table *htab;
12873
12874       htab = (struct mips_elf_link_hash_table *) ret;
12875       htab->use_plts_and_copy_relocs = TRUE;
12876       htab->is_vxworks = TRUE;
12877     }
12878   return ret;
12879 }
12880
12881 /* A function that the linker calls if we are allowed to use PLTs
12882    and copy relocs.  */
12883
12884 void
12885 _bfd_mips_elf_use_plts_and_copy_relocs (struct bfd_link_info *info)
12886 {
12887   mips_elf_hash_table (info)->use_plts_and_copy_relocs = TRUE;
12888 }
12889 \f
12890 /* We need to use a special link routine to handle the .reginfo and
12891    the .mdebug sections.  We need to merge all instances of these
12892    sections together, not write them all out sequentially.  */
12893
12894 bfd_boolean
12895 _bfd_mips_elf_final_link (bfd *abfd, struct bfd_link_info *info)
12896 {
12897   asection *o;
12898   struct bfd_link_order *p;
12899   asection *reginfo_sec, *mdebug_sec, *gptab_data_sec, *gptab_bss_sec;
12900   asection *rtproc_sec;
12901   Elf32_RegInfo reginfo;
12902   struct ecoff_debug_info debug;
12903   struct mips_htab_traverse_info hti;
12904   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
12905   const struct ecoff_debug_swap *swap = bed->elf_backend_ecoff_debug_swap;
12906   HDRR *symhdr = &debug.symbolic_header;
12907   void *mdebug_handle = NULL;
12908   asection *s;
12909   EXTR esym;
12910   unsigned int i;
12911   bfd_size_type amt;
12912   struct mips_elf_link_hash_table *htab;
12913
12914   static const char * const secname[] =
12915   {
12916     ".text", ".init", ".fini", ".data",
12917     ".rodata", ".sdata", ".sbss", ".bss"
12918   };
12919   static const int sc[] =
12920   {
12921     scText, scInit, scFini, scData,
12922     scRData, scSData, scSBss, scBss
12923   };
12924
12925   /* Sort the dynamic symbols so that those with GOT entries come after
12926      those without.  */
12927   htab = mips_elf_hash_table (info);
12928   BFD_ASSERT (htab != NULL);
12929
12930   if (!mips_elf_sort_hash_table (abfd, info))
12931     return FALSE;
12932
12933   /* Create any scheduled LA25 stubs.  */
12934   hti.info = info;
12935   hti.output_bfd = abfd;
12936   hti.error = FALSE;
12937   htab_traverse (htab->la25_stubs, mips_elf_create_la25_stub, &hti);
12938   if (hti.error)
12939     return FALSE;
12940
12941   /* Get a value for the GP register.  */
12942   if (elf_gp (abfd) == 0)
12943     {
12944       struct bfd_link_hash_entry *h;
12945
12946       h = bfd_link_hash_lookup (info->hash, "_gp", FALSE, FALSE, TRUE);
12947       if (h != NULL && h->type == bfd_link_hash_defined)
12948         elf_gp (abfd) = (h->u.def.value
12949                          + h->u.def.section->output_section->vma
12950                          + h->u.def.section->output_offset);
12951       else if (htab->is_vxworks
12952                && (h = bfd_link_hash_lookup (info->hash,
12953                                              "_GLOBAL_OFFSET_TABLE_",
12954                                              FALSE, FALSE, TRUE))
12955                && h->type == bfd_link_hash_defined)
12956         elf_gp (abfd) = (h->u.def.section->output_section->vma
12957                          + h->u.def.section->output_offset
12958                          + h->u.def.value);
12959       else if (info->relocatable)
12960         {
12961           bfd_vma lo = MINUS_ONE;
12962
12963           /* Find the GP-relative section with the lowest offset.  */
12964           for (o = abfd->sections; o != NULL; o = o->next)
12965             if (o->vma < lo
12966                 && (elf_section_data (o)->this_hdr.sh_flags & SHF_MIPS_GPREL))
12967               lo = o->vma;
12968
12969           /* And calculate GP relative to that.  */
12970           elf_gp (abfd) = lo + ELF_MIPS_GP_OFFSET (info);
12971         }
12972       else
12973         {
12974           /* If the relocate_section function needs to do a reloc
12975              involving the GP value, it should make a reloc_dangerous
12976              callback to warn that GP is not defined.  */
12977         }
12978     }
12979
12980   /* Go through the sections and collect the .reginfo and .mdebug
12981      information.  */
12982   reginfo_sec = NULL;
12983   mdebug_sec = NULL;
12984   gptab_data_sec = NULL;
12985   gptab_bss_sec = NULL;
12986   for (o = abfd->sections; o != NULL; o = o->next)
12987     {
12988       if (strcmp (o->name, ".reginfo") == 0)
12989         {
12990           memset (&reginfo, 0, sizeof reginfo);
12991
12992           /* We have found the .reginfo section in the output file.
12993              Look through all the link_orders comprising it and merge
12994              the information together.  */
12995           for (p = o->map_head.link_order; p != NULL; p = p->next)
12996             {
12997               asection *input_section;
12998               bfd *input_bfd;
12999               Elf32_External_RegInfo ext;
13000               Elf32_RegInfo sub;
13001
13002               if (p->type != bfd_indirect_link_order)
13003                 {
13004                   if (p->type == bfd_data_link_order)
13005                     continue;
13006                   abort ();
13007                 }
13008
13009               input_section = p->u.indirect.section;
13010               input_bfd = input_section->owner;
13011
13012               if (! bfd_get_section_contents (input_bfd, input_section,
13013                                               &ext, 0, sizeof ext))
13014                 return FALSE;
13015
13016               bfd_mips_elf32_swap_reginfo_in (input_bfd, &ext, &sub);
13017
13018               reginfo.ri_gprmask |= sub.ri_gprmask;
13019               reginfo.ri_cprmask[0] |= sub.ri_cprmask[0];
13020               reginfo.ri_cprmask[1] |= sub.ri_cprmask[1];
13021               reginfo.ri_cprmask[2] |= sub.ri_cprmask[2];
13022               reginfo.ri_cprmask[3] |= sub.ri_cprmask[3];
13023
13024               /* ri_gp_value is set by the function
13025                  mips_elf32_section_processing when the section is
13026                  finally written out.  */
13027
13028               /* Hack: reset the SEC_HAS_CONTENTS flag so that
13029                  elf_link_input_bfd ignores this section.  */
13030               input_section->flags &= ~SEC_HAS_CONTENTS;
13031             }
13032
13033           /* Size has been set in _bfd_mips_elf_always_size_sections.  */
13034           BFD_ASSERT(o->size == sizeof (Elf32_External_RegInfo));
13035
13036           /* Skip this section later on (I don't think this currently
13037              matters, but someday it might).  */
13038           o->map_head.link_order = NULL;
13039
13040           reginfo_sec = o;
13041         }
13042
13043       if (strcmp (o->name, ".mdebug") == 0)
13044         {
13045           struct extsym_info einfo;
13046           bfd_vma last;
13047
13048           /* We have found the .mdebug section in the output file.
13049              Look through all the link_orders comprising it and merge
13050              the information together.  */
13051           symhdr->magic = swap->sym_magic;
13052           /* FIXME: What should the version stamp be?  */
13053           symhdr->vstamp = 0;
13054           symhdr->ilineMax = 0;
13055           symhdr->cbLine = 0;
13056           symhdr->idnMax = 0;
13057           symhdr->ipdMax = 0;
13058           symhdr->isymMax = 0;
13059           symhdr->ioptMax = 0;
13060           symhdr->iauxMax = 0;
13061           symhdr->issMax = 0;
13062           symhdr->issExtMax = 0;
13063           symhdr->ifdMax = 0;
13064           symhdr->crfd = 0;
13065           symhdr->iextMax = 0;
13066
13067           /* We accumulate the debugging information itself in the
13068              debug_info structure.  */
13069           debug.line = NULL;
13070           debug.external_dnr = NULL;
13071           debug.external_pdr = NULL;
13072           debug.external_sym = NULL;
13073           debug.external_opt = NULL;
13074           debug.external_aux = NULL;
13075           debug.ss = NULL;
13076           debug.ssext = debug.ssext_end = NULL;
13077           debug.external_fdr = NULL;
13078           debug.external_rfd = NULL;
13079           debug.external_ext = debug.external_ext_end = NULL;
13080
13081           mdebug_handle = bfd_ecoff_debug_init (abfd, &debug, swap, info);
13082           if (mdebug_handle == NULL)
13083             return FALSE;
13084
13085           esym.jmptbl = 0;
13086           esym.cobol_main = 0;
13087           esym.weakext = 0;
13088           esym.reserved = 0;
13089           esym.ifd = ifdNil;
13090           esym.asym.iss = issNil;
13091           esym.asym.st = stLocal;
13092           esym.asym.reserved = 0;
13093           esym.asym.index = indexNil;
13094           last = 0;
13095           for (i = 0; i < sizeof (secname) / sizeof (secname[0]); i++)
13096             {
13097               esym.asym.sc = sc[i];
13098               s = bfd_get_section_by_name (abfd, secname[i]);
13099               if (s != NULL)
13100                 {
13101                   esym.asym.value = s->vma;
13102                   last = s->vma + s->size;
13103                 }
13104               else
13105                 esym.asym.value = last;
13106               if (!bfd_ecoff_debug_one_external (abfd, &debug, swap,
13107                                                  secname[i], &esym))
13108                 return FALSE;
13109             }
13110
13111           for (p = o->map_head.link_order; p != NULL; p = p->next)
13112             {
13113               asection *input_section;
13114               bfd *input_bfd;
13115               const struct ecoff_debug_swap *input_swap;
13116               struct ecoff_debug_info input_debug;
13117               char *eraw_src;
13118               char *eraw_end;
13119
13120               if (p->type != bfd_indirect_link_order)
13121                 {
13122                   if (p->type == bfd_data_link_order)
13123                     continue;
13124                   abort ();
13125                 }
13126
13127               input_section = p->u.indirect.section;
13128               input_bfd = input_section->owner;
13129
13130               if (!is_mips_elf (input_bfd))
13131                 {
13132                   /* I don't know what a non MIPS ELF bfd would be
13133                      doing with a .mdebug section, but I don't really
13134                      want to deal with it.  */
13135                   continue;
13136                 }
13137
13138               input_swap = (get_elf_backend_data (input_bfd)
13139                             ->elf_backend_ecoff_debug_swap);
13140
13141               BFD_ASSERT (p->size == input_section->size);
13142
13143               /* The ECOFF linking code expects that we have already
13144                  read in the debugging information and set up an
13145                  ecoff_debug_info structure, so we do that now.  */
13146               if (! _bfd_mips_elf_read_ecoff_info (input_bfd, input_section,
13147                                                    &input_debug))
13148                 return FALSE;
13149
13150               if (! (bfd_ecoff_debug_accumulate
13151                      (mdebug_handle, abfd, &debug, swap, input_bfd,
13152                       &input_debug, input_swap, info)))
13153                 return FALSE;
13154
13155               /* Loop through the external symbols.  For each one with
13156                  interesting information, try to find the symbol in
13157                  the linker global hash table and save the information
13158                  for the output external symbols.  */
13159               eraw_src = input_debug.external_ext;
13160               eraw_end = (eraw_src
13161                           + (input_debug.symbolic_header.iextMax
13162                              * input_swap->external_ext_size));
13163               for (;
13164                    eraw_src < eraw_end;
13165                    eraw_src += input_swap->external_ext_size)
13166                 {
13167                   EXTR ext;
13168                   const char *name;
13169                   struct mips_elf_link_hash_entry *h;
13170
13171                   (*input_swap->swap_ext_in) (input_bfd, eraw_src, &ext);
13172                   if (ext.asym.sc == scNil
13173                       || ext.asym.sc == scUndefined
13174                       || ext.asym.sc == scSUndefined)
13175                     continue;
13176
13177                   name = input_debug.ssext + ext.asym.iss;
13178                   h = mips_elf_link_hash_lookup (mips_elf_hash_table (info),
13179                                                  name, FALSE, FALSE, TRUE);
13180                   if (h == NULL || h->esym.ifd != -2)
13181                     continue;
13182
13183                   if (ext.ifd != -1)
13184                     {
13185                       BFD_ASSERT (ext.ifd
13186                                   < input_debug.symbolic_header.ifdMax);
13187                       ext.ifd = input_debug.ifdmap[ext.ifd];
13188                     }
13189
13190                   h->esym = ext;
13191                 }
13192
13193               /* Free up the information we just read.  */
13194               free (input_debug.line);
13195               free (input_debug.external_dnr);
13196               free (input_debug.external_pdr);
13197               free (input_debug.external_sym);
13198               free (input_debug.external_opt);
13199               free (input_debug.external_aux);
13200               free (input_debug.ss);
13201               free (input_debug.ssext);
13202               free (input_debug.external_fdr);
13203               free (input_debug.external_rfd);
13204               free (input_debug.external_ext);
13205
13206               /* Hack: reset the SEC_HAS_CONTENTS flag so that
13207                  elf_link_input_bfd ignores this section.  */
13208               input_section->flags &= ~SEC_HAS_CONTENTS;
13209             }
13210
13211           if (SGI_COMPAT (abfd) && info->shared)
13212             {
13213               /* Create .rtproc section.  */
13214               rtproc_sec = bfd_get_linker_section (abfd, ".rtproc");
13215               if (rtproc_sec == NULL)
13216                 {
13217                   flagword flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY
13218                                     | SEC_LINKER_CREATED | SEC_READONLY);
13219
13220                   rtproc_sec = bfd_make_section_anyway_with_flags (abfd,
13221                                                                    ".rtproc",
13222                                                                    flags);
13223                   if (rtproc_sec == NULL
13224                       || ! bfd_set_section_alignment (abfd, rtproc_sec, 4))
13225                     return FALSE;
13226                 }
13227
13228               if (! mips_elf_create_procedure_table (mdebug_handle, abfd,
13229                                                      info, rtproc_sec,
13230                                                      &debug))
13231                 return FALSE;
13232             }
13233
13234           /* Build the external symbol information.  */
13235           einfo.abfd = abfd;
13236           einfo.info = info;
13237           einfo.debug = &debug;
13238           einfo.swap = swap;
13239           einfo.failed = FALSE;
13240           mips_elf_link_hash_traverse (mips_elf_hash_table (info),
13241                                        mips_elf_output_extsym, &einfo);
13242           if (einfo.failed)
13243             return FALSE;
13244
13245           /* Set the size of the .mdebug section.  */
13246           o->size = bfd_ecoff_debug_size (abfd, &debug, swap);
13247
13248           /* Skip this section later on (I don't think this currently
13249              matters, but someday it might).  */
13250           o->map_head.link_order = NULL;
13251
13252           mdebug_sec = o;
13253         }
13254
13255       if (CONST_STRNEQ (o->name, ".gptab."))
13256         {
13257           const char *subname;
13258           unsigned int c;
13259           Elf32_gptab *tab;
13260           Elf32_External_gptab *ext_tab;
13261           unsigned int j;
13262
13263           /* The .gptab.sdata and .gptab.sbss sections hold
13264              information describing how the small data area would
13265              change depending upon the -G switch.  These sections
13266              not used in executables files.  */
13267           if (! info->relocatable)
13268             {
13269               for (p = o->map_head.link_order; p != NULL; p = p->next)
13270                 {
13271                   asection *input_section;
13272
13273                   if (p->type != bfd_indirect_link_order)
13274                     {
13275                       if (p->type == bfd_data_link_order)
13276                         continue;
13277                       abort ();
13278                     }
13279
13280                   input_section = p->u.indirect.section;
13281
13282                   /* Hack: reset the SEC_HAS_CONTENTS flag so that
13283                      elf_link_input_bfd ignores this section.  */
13284                   input_section->flags &= ~SEC_HAS_CONTENTS;
13285                 }
13286
13287               /* Skip this section later on (I don't think this
13288                  currently matters, but someday it might).  */
13289               o->map_head.link_order = NULL;
13290
13291               /* Really remove the section.  */
13292               bfd_section_list_remove (abfd, o);
13293               --abfd->section_count;
13294
13295               continue;
13296             }
13297
13298           /* There is one gptab for initialized data, and one for
13299              uninitialized data.  */
13300           if (strcmp (o->name, ".gptab.sdata") == 0)
13301             gptab_data_sec = o;
13302           else if (strcmp (o->name, ".gptab.sbss") == 0)
13303             gptab_bss_sec = o;
13304           else
13305             {
13306               (*_bfd_error_handler)
13307                 (_("%s: illegal section name `%s'"),
13308                  bfd_get_filename (abfd), o->name);
13309               bfd_set_error (bfd_error_nonrepresentable_section);
13310               return FALSE;
13311             }
13312
13313           /* The linker script always combines .gptab.data and
13314              .gptab.sdata into .gptab.sdata, and likewise for
13315              .gptab.bss and .gptab.sbss.  It is possible that there is
13316              no .sdata or .sbss section in the output file, in which
13317              case we must change the name of the output section.  */
13318           subname = o->name + sizeof ".gptab" - 1;
13319           if (bfd_get_section_by_name (abfd, subname) == NULL)
13320             {
13321               if (o == gptab_data_sec)
13322                 o->name = ".gptab.data";
13323               else
13324                 o->name = ".gptab.bss";
13325               subname = o->name + sizeof ".gptab" - 1;
13326               BFD_ASSERT (bfd_get_section_by_name (abfd, subname) != NULL);
13327             }
13328
13329           /* Set up the first entry.  */
13330           c = 1;
13331           amt = c * sizeof (Elf32_gptab);
13332           tab = bfd_malloc (amt);
13333           if (tab == NULL)
13334             return FALSE;
13335           tab[0].gt_header.gt_current_g_value = elf_gp_size (abfd);
13336           tab[0].gt_header.gt_unused = 0;
13337
13338           /* Combine the input sections.  */
13339           for (p = o->map_head.link_order; p != NULL; p = p->next)
13340             {
13341               asection *input_section;
13342               bfd *input_bfd;
13343               bfd_size_type size;
13344               unsigned long last;
13345               bfd_size_type gpentry;
13346
13347               if (p->type != bfd_indirect_link_order)
13348                 {
13349                   if (p->type == bfd_data_link_order)
13350                     continue;
13351                   abort ();
13352                 }
13353
13354               input_section = p->u.indirect.section;
13355               input_bfd = input_section->owner;
13356
13357               /* Combine the gptab entries for this input section one
13358                  by one.  We know that the input gptab entries are
13359                  sorted by ascending -G value.  */
13360               size = input_section->size;
13361               last = 0;
13362               for (gpentry = sizeof (Elf32_External_gptab);
13363                    gpentry < size;
13364                    gpentry += sizeof (Elf32_External_gptab))
13365                 {
13366                   Elf32_External_gptab ext_gptab;
13367                   Elf32_gptab int_gptab;
13368                   unsigned long val;
13369                   unsigned long add;
13370                   bfd_boolean exact;
13371                   unsigned int look;
13372
13373                   if (! (bfd_get_section_contents
13374                          (input_bfd, input_section, &ext_gptab, gpentry,
13375                           sizeof (Elf32_External_gptab))))
13376                     {
13377                       free (tab);
13378                       return FALSE;
13379                     }
13380
13381                   bfd_mips_elf32_swap_gptab_in (input_bfd, &ext_gptab,
13382                                                 &int_gptab);
13383                   val = int_gptab.gt_entry.gt_g_value;
13384                   add = int_gptab.gt_entry.gt_bytes - last;
13385
13386                   exact = FALSE;
13387                   for (look = 1; look < c; look++)
13388                     {
13389                       if (tab[look].gt_entry.gt_g_value >= val)
13390                         tab[look].gt_entry.gt_bytes += add;
13391
13392                       if (tab[look].gt_entry.gt_g_value == val)
13393                         exact = TRUE;
13394                     }
13395
13396                   if (! exact)
13397                     {
13398                       Elf32_gptab *new_tab;
13399                       unsigned int max;
13400
13401                       /* We need a new table entry.  */
13402                       amt = (bfd_size_type) (c + 1) * sizeof (Elf32_gptab);
13403                       new_tab = bfd_realloc (tab, amt);
13404                       if (new_tab == NULL)
13405                         {
13406                           free (tab);
13407                           return FALSE;
13408                         }
13409                       tab = new_tab;
13410                       tab[c].gt_entry.gt_g_value = val;
13411                       tab[c].gt_entry.gt_bytes = add;
13412
13413                       /* Merge in the size for the next smallest -G
13414                          value, since that will be implied by this new
13415                          value.  */
13416                       max = 0;
13417                       for (look = 1; look < c; look++)
13418                         {
13419                           if (tab[look].gt_entry.gt_g_value < val
13420                               && (max == 0
13421                                   || (tab[look].gt_entry.gt_g_value
13422                                       > tab[max].gt_entry.gt_g_value)))
13423                             max = look;
13424                         }
13425                       if (max != 0)
13426                         tab[c].gt_entry.gt_bytes +=
13427                           tab[max].gt_entry.gt_bytes;
13428
13429                       ++c;
13430                     }
13431
13432                   last = int_gptab.gt_entry.gt_bytes;
13433                 }
13434
13435               /* Hack: reset the SEC_HAS_CONTENTS flag so that
13436                  elf_link_input_bfd ignores this section.  */
13437               input_section->flags &= ~SEC_HAS_CONTENTS;
13438             }
13439
13440           /* The table must be sorted by -G value.  */
13441           if (c > 2)
13442             qsort (tab + 1, c - 1, sizeof (tab[0]), gptab_compare);
13443
13444           /* Swap out the table.  */
13445           amt = (bfd_size_type) c * sizeof (Elf32_External_gptab);
13446           ext_tab = bfd_alloc (abfd, amt);
13447           if (ext_tab == NULL)
13448             {
13449               free (tab);
13450               return FALSE;
13451             }
13452
13453           for (j = 0; j < c; j++)
13454             bfd_mips_elf32_swap_gptab_out (abfd, tab + j, ext_tab + j);
13455           free (tab);
13456
13457           o->size = c * sizeof (Elf32_External_gptab);
13458           o->contents = (bfd_byte *) ext_tab;
13459
13460           /* Skip this section later on (I don't think this currently
13461              matters, but someday it might).  */
13462           o->map_head.link_order = NULL;
13463         }
13464     }
13465
13466   /* Invoke the regular ELF backend linker to do all the work.  */
13467   if (!bfd_elf_final_link (abfd, info))
13468     return FALSE;
13469
13470   /* Now write out the computed sections.  */
13471
13472   if (reginfo_sec != NULL)
13473     {
13474       Elf32_External_RegInfo ext;
13475
13476       bfd_mips_elf32_swap_reginfo_out (abfd, &reginfo, &ext);
13477       if (! bfd_set_section_contents (abfd, reginfo_sec, &ext, 0, sizeof ext))
13478         return FALSE;
13479     }
13480
13481   if (mdebug_sec != NULL)
13482     {
13483       BFD_ASSERT (abfd->output_has_begun);
13484       if (! bfd_ecoff_write_accumulated_debug (mdebug_handle, abfd, &debug,
13485                                                swap, info,
13486                                                mdebug_sec->filepos))
13487         return FALSE;
13488
13489       bfd_ecoff_debug_free (mdebug_handle, abfd, &debug, swap, info);
13490     }
13491
13492   if (gptab_data_sec != NULL)
13493     {
13494       if (! bfd_set_section_contents (abfd, gptab_data_sec,
13495                                       gptab_data_sec->contents,
13496                                       0, gptab_data_sec->size))
13497         return FALSE;
13498     }
13499
13500   if (gptab_bss_sec != NULL)
13501     {
13502       if (! bfd_set_section_contents (abfd, gptab_bss_sec,
13503                                       gptab_bss_sec->contents,
13504                                       0, gptab_bss_sec->size))
13505         return FALSE;
13506     }
13507
13508   if (SGI_COMPAT (abfd))
13509     {
13510       rtproc_sec = bfd_get_section_by_name (abfd, ".rtproc");
13511       if (rtproc_sec != NULL)
13512         {
13513           if (! bfd_set_section_contents (abfd, rtproc_sec,
13514                                           rtproc_sec->contents,
13515                                           0, rtproc_sec->size))
13516             return FALSE;
13517         }
13518     }
13519
13520   return TRUE;
13521 }
13522 \f
13523 /* Structure for saying that BFD machine EXTENSION extends BASE.  */
13524
13525 struct mips_mach_extension {
13526   unsigned long extension, base;
13527 };
13528
13529
13530 /* An array describing how BFD machines relate to one another.  The entries
13531    are ordered topologically with MIPS I extensions listed last.  */
13532
13533 static const struct mips_mach_extension mips_mach_extensions[] = {
13534   /* MIPS64r2 extensions.  */
13535   { bfd_mach_mips_octeon2, bfd_mach_mips_octeonp },
13536   { bfd_mach_mips_octeonp, bfd_mach_mips_octeon },
13537   { bfd_mach_mips_octeon, bfd_mach_mipsisa64r2 },
13538
13539   /* MIPS64 extensions.  */
13540   { bfd_mach_mipsisa64r2, bfd_mach_mipsisa64 },
13541   { bfd_mach_mips_sb1, bfd_mach_mipsisa64 },
13542   { bfd_mach_mips_xlr, bfd_mach_mipsisa64 },
13543   { bfd_mach_mips_loongson_3a, bfd_mach_mipsisa64 },
13544
13545   /* MIPS V extensions.  */
13546   { bfd_mach_mipsisa64, bfd_mach_mips5 },
13547
13548   /* R10000 extensions.  */
13549   { bfd_mach_mips12000, bfd_mach_mips10000 },
13550   { bfd_mach_mips14000, bfd_mach_mips10000 },
13551   { bfd_mach_mips16000, bfd_mach_mips10000 },
13552
13553   /* R5000 extensions.  Note: the vr5500 ISA is an extension of the core
13554      vr5400 ISA, but doesn't include the multimedia stuff.  It seems
13555      better to allow vr5400 and vr5500 code to be merged anyway, since
13556      many libraries will just use the core ISA.  Perhaps we could add
13557      some sort of ASE flag if this ever proves a problem.  */
13558   { bfd_mach_mips5500, bfd_mach_mips5400 },
13559   { bfd_mach_mips5400, bfd_mach_mips5000 },
13560
13561   /* MIPS IV extensions.  */
13562   { bfd_mach_mips5, bfd_mach_mips8000 },
13563   { bfd_mach_mips10000, bfd_mach_mips8000 },
13564   { bfd_mach_mips5000, bfd_mach_mips8000 },
13565   { bfd_mach_mips7000, bfd_mach_mips8000 },
13566   { bfd_mach_mips9000, bfd_mach_mips8000 },
13567
13568   /* VR4100 extensions.  */
13569   { bfd_mach_mips4120, bfd_mach_mips4100 },
13570   { bfd_mach_mips4111, bfd_mach_mips4100 },
13571
13572   /* MIPS III extensions.  */
13573   { bfd_mach_mips_loongson_2e, bfd_mach_mips4000 },
13574   { bfd_mach_mips_loongson_2f, bfd_mach_mips4000 },
13575   { bfd_mach_mips8000, bfd_mach_mips4000 },
13576   { bfd_mach_mips4650, bfd_mach_mips4000 },
13577   { bfd_mach_mips4600, bfd_mach_mips4000 },
13578   { bfd_mach_mips4400, bfd_mach_mips4000 },
13579   { bfd_mach_mips4300, bfd_mach_mips4000 },
13580   { bfd_mach_mips4100, bfd_mach_mips4000 },
13581   { bfd_mach_mips4010, bfd_mach_mips4000 },
13582   { bfd_mach_mips5900, bfd_mach_mips4000 },
13583
13584   /* MIPS32 extensions.  */
13585   { bfd_mach_mipsisa32r2, bfd_mach_mipsisa32 },
13586
13587   /* MIPS II extensions.  */
13588   { bfd_mach_mips4000, bfd_mach_mips6000 },
13589   { bfd_mach_mipsisa32, bfd_mach_mips6000 },
13590
13591   /* MIPS I extensions.  */
13592   { bfd_mach_mips6000, bfd_mach_mips3000 },
13593   { bfd_mach_mips3900, bfd_mach_mips3000 }
13594 };
13595
13596
13597 /* Return true if bfd machine EXTENSION is an extension of machine BASE.  */
13598
13599 static bfd_boolean
13600 mips_mach_extends_p (unsigned long base, unsigned long extension)
13601 {
13602   size_t i;
13603
13604   if (extension == base)
13605     return TRUE;
13606
13607   if (base == bfd_mach_mipsisa32
13608       && mips_mach_extends_p (bfd_mach_mipsisa64, extension))
13609     return TRUE;
13610
13611   if (base == bfd_mach_mipsisa32r2
13612       && mips_mach_extends_p (bfd_mach_mipsisa64r2, extension))
13613     return TRUE;
13614
13615   for (i = 0; i < ARRAY_SIZE (mips_mach_extensions); i++)
13616     if (extension == mips_mach_extensions[i].extension)
13617       {
13618         extension = mips_mach_extensions[i].base;
13619         if (extension == base)
13620           return TRUE;
13621       }
13622
13623   return FALSE;
13624 }
13625
13626
13627 /* Return true if the given ELF header flags describe a 32-bit binary.  */
13628
13629 static bfd_boolean
13630 mips_32bit_flags_p (flagword flags)
13631 {
13632   return ((flags & EF_MIPS_32BITMODE) != 0
13633           || (flags & EF_MIPS_ABI) == E_MIPS_ABI_O32
13634           || (flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32
13635           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1
13636           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2
13637           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32
13638           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2);
13639 }
13640
13641
13642 /* Merge object attributes from IBFD into OBFD.  Raise an error if
13643    there are conflicting attributes.  */
13644 static bfd_boolean
13645 mips_elf_merge_obj_attributes (bfd *ibfd, bfd *obfd)
13646 {
13647   obj_attribute *in_attr;
13648   obj_attribute *out_attr;
13649   bfd *abi_fp_bfd;
13650
13651   abi_fp_bfd = mips_elf_tdata (obfd)->abi_fp_bfd;
13652   in_attr = elf_known_obj_attributes (ibfd)[OBJ_ATTR_GNU];
13653   if (!abi_fp_bfd && in_attr[Tag_GNU_MIPS_ABI_FP].i != 0)
13654     mips_elf_tdata (obfd)->abi_fp_bfd = ibfd;
13655
13656   if (!elf_known_obj_attributes_proc (obfd)[0].i)
13657     {
13658       /* This is the first object.  Copy the attributes.  */
13659       _bfd_elf_copy_obj_attributes (ibfd, obfd);
13660
13661       /* Use the Tag_null value to indicate the attributes have been
13662          initialized.  */
13663       elf_known_obj_attributes_proc (obfd)[0].i = 1;
13664
13665       return TRUE;
13666     }
13667
13668   /* Check for conflicting Tag_GNU_MIPS_ABI_FP attributes and merge
13669      non-conflicting ones.  */
13670   out_attr = elf_known_obj_attributes (obfd)[OBJ_ATTR_GNU];
13671   if (in_attr[Tag_GNU_MIPS_ABI_FP].i != out_attr[Tag_GNU_MIPS_ABI_FP].i)
13672     {
13673       out_attr[Tag_GNU_MIPS_ABI_FP].type = 1;
13674       if (out_attr[Tag_GNU_MIPS_ABI_FP].i == 0)
13675         out_attr[Tag_GNU_MIPS_ABI_FP].i = in_attr[Tag_GNU_MIPS_ABI_FP].i;
13676       else if (in_attr[Tag_GNU_MIPS_ABI_FP].i != 0)
13677         switch (out_attr[Tag_GNU_MIPS_ABI_FP].i)
13678           {
13679           case 1:
13680             switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
13681               {
13682               case 2:
13683                 _bfd_error_handler
13684                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13685                    obfd, abi_fp_bfd, ibfd, "-mdouble-float", "-msingle-float");
13686                 break;
13687
13688               case 3:
13689                 _bfd_error_handler
13690                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13691                    obfd, abi_fp_bfd, ibfd, "-mhard-float", "-msoft-float");
13692                 break;
13693
13694               case 4:
13695                 _bfd_error_handler
13696                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13697                    obfd, abi_fp_bfd, ibfd,
13698                    "-mdouble-float", "-mips32r2 -mfp64");
13699                 break;
13700
13701               default:
13702                 _bfd_error_handler
13703                   (_("Warning: %B uses %s (set by %B), "
13704                      "%B uses unknown floating point ABI %d"),
13705                    obfd, abi_fp_bfd, ibfd,
13706                    "-mdouble-float", in_attr[Tag_GNU_MIPS_ABI_FP].i);
13707                 break;
13708               }
13709             break;
13710
13711           case 2:
13712             switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
13713               {
13714               case 1:
13715                 _bfd_error_handler
13716                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13717                    obfd, abi_fp_bfd, ibfd, "-msingle-float", "-mdouble-float");
13718                 break;
13719
13720               case 3:
13721                 _bfd_error_handler
13722                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13723                    obfd, abi_fp_bfd, ibfd, "-mhard-float", "-msoft-float");
13724                 break;
13725
13726               case 4:
13727                 _bfd_error_handler
13728                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13729                    obfd, abi_fp_bfd, ibfd,
13730                    "-msingle-float", "-mips32r2 -mfp64");
13731                 break;
13732
13733               default:
13734                 _bfd_error_handler
13735                   (_("Warning: %B uses %s (set by %B), "
13736                      "%B uses unknown floating point ABI %d"),
13737                    obfd, abi_fp_bfd, ibfd,
13738                    "-msingle-float", in_attr[Tag_GNU_MIPS_ABI_FP].i);
13739                 break;
13740               }
13741             break;
13742
13743           case 3:
13744             switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
13745               {
13746               case 1:
13747               case 2:
13748               case 4:
13749                 _bfd_error_handler
13750                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13751                    obfd, abi_fp_bfd, ibfd, "-msoft-float", "-mhard-float");
13752                 break;
13753
13754               default:
13755                 _bfd_error_handler
13756                   (_("Warning: %B uses %s (set by %B), "
13757                      "%B uses unknown floating point ABI %d"),
13758                    obfd, abi_fp_bfd, ibfd,
13759                    "-msoft-float", in_attr[Tag_GNU_MIPS_ABI_FP].i);
13760                 break;
13761               }
13762             break;
13763
13764           case 4:
13765             switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
13766               {
13767               case 1:
13768                 _bfd_error_handler
13769                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13770                    obfd, abi_fp_bfd, ibfd,
13771                    "-mips32r2 -mfp64", "-mdouble-float");
13772                 break;
13773
13774               case 2:
13775                 _bfd_error_handler
13776                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13777                    obfd, abi_fp_bfd, ibfd,
13778                    "-mips32r2 -mfp64", "-msingle-float");
13779                 break;
13780
13781               case 3:
13782                 _bfd_error_handler
13783                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13784                    obfd, abi_fp_bfd, ibfd, "-mhard-float", "-msoft-float");
13785                 break;
13786
13787               default:
13788                 _bfd_error_handler
13789                   (_("Warning: %B uses %s (set by %B), "
13790                      "%B uses unknown floating point ABI %d"),
13791                    obfd, abi_fp_bfd, ibfd,
13792                    "-mips32r2 -mfp64", in_attr[Tag_GNU_MIPS_ABI_FP].i);
13793                 break;
13794               }
13795             break;
13796
13797           default:
13798             switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
13799               {
13800               case 1:
13801                 _bfd_error_handler
13802                   (_("Warning: %B uses unknown floating point ABI %d "
13803                      "(set by %B), %B uses %s"),
13804                    obfd, abi_fp_bfd, ibfd,
13805                    out_attr[Tag_GNU_MIPS_ABI_FP].i, "-mdouble-float");
13806                 break;
13807
13808               case 2:
13809                 _bfd_error_handler
13810                   (_("Warning: %B uses unknown floating point ABI %d "
13811                      "(set by %B), %B uses %s"),
13812                    obfd, abi_fp_bfd, ibfd,
13813                    out_attr[Tag_GNU_MIPS_ABI_FP].i, "-msingle-float");
13814                 break;
13815
13816               case 3:
13817                 _bfd_error_handler
13818                   (_("Warning: %B uses unknown floating point ABI %d "
13819                      "(set by %B), %B uses %s"),
13820                    obfd, abi_fp_bfd, ibfd,
13821                    out_attr[Tag_GNU_MIPS_ABI_FP].i, "-msoft-float");
13822                 break;
13823
13824               case 4:
13825                 _bfd_error_handler
13826                   (_("Warning: %B uses unknown floating point ABI %d "
13827                      "(set by %B), %B uses %s"),
13828                    obfd, abi_fp_bfd, ibfd,
13829                    out_attr[Tag_GNU_MIPS_ABI_FP].i, "-mips32r2 -mfp64");
13830                 break;
13831
13832               default:
13833                 _bfd_error_handler
13834                   (_("Warning: %B uses unknown floating point ABI %d "
13835                      "(set by %B), %B uses unknown floating point ABI %d"),
13836                    obfd, abi_fp_bfd, ibfd,
13837                    out_attr[Tag_GNU_MIPS_ABI_FP].i,
13838                    in_attr[Tag_GNU_MIPS_ABI_FP].i);
13839                 break;
13840               }
13841             break;
13842           }
13843     }
13844
13845   /* Merge Tag_compatibility attributes and any common GNU ones.  */
13846   _bfd_elf_merge_object_attributes (ibfd, obfd);
13847
13848   return TRUE;
13849 }
13850
13851 /* Merge backend specific data from an object file to the output
13852    object file when linking.  */
13853
13854 bfd_boolean
13855 _bfd_mips_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
13856 {
13857   flagword old_flags;
13858   flagword new_flags;
13859   bfd_boolean ok;
13860   bfd_boolean null_input_bfd = TRUE;
13861   asection *sec;
13862
13863   /* Check if we have the same endianness.  */
13864   if (! _bfd_generic_verify_endian_match (ibfd, obfd))
13865     {
13866       (*_bfd_error_handler)
13867         (_("%B: endianness incompatible with that of the selected emulation"),
13868          ibfd);
13869       return FALSE;
13870     }
13871
13872   if (!is_mips_elf (ibfd) || !is_mips_elf (obfd))
13873     return TRUE;
13874
13875   if (strcmp (bfd_get_target (ibfd), bfd_get_target (obfd)) != 0)
13876     {
13877       (*_bfd_error_handler)
13878         (_("%B: ABI is incompatible with that of the selected emulation"),
13879          ibfd);
13880       return FALSE;
13881     }
13882
13883   if (!mips_elf_merge_obj_attributes (ibfd, obfd))
13884     return FALSE;
13885
13886   new_flags = elf_elfheader (ibfd)->e_flags;
13887   elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_NOREORDER;
13888   old_flags = elf_elfheader (obfd)->e_flags;
13889
13890   if (! elf_flags_init (obfd))
13891     {
13892       elf_flags_init (obfd) = TRUE;
13893       elf_elfheader (obfd)->e_flags = new_flags;
13894       elf_elfheader (obfd)->e_ident[EI_CLASS]
13895         = elf_elfheader (ibfd)->e_ident[EI_CLASS];
13896
13897       if (bfd_get_arch (obfd) == bfd_get_arch (ibfd)
13898           && (bfd_get_arch_info (obfd)->the_default
13899               || mips_mach_extends_p (bfd_get_mach (obfd),
13900                                       bfd_get_mach (ibfd))))
13901         {
13902           if (! bfd_set_arch_mach (obfd, bfd_get_arch (ibfd),
13903                                    bfd_get_mach (ibfd)))
13904             return FALSE;
13905         }
13906
13907       return TRUE;
13908     }
13909
13910   /* Check flag compatibility.  */
13911
13912   new_flags &= ~EF_MIPS_NOREORDER;
13913   old_flags &= ~EF_MIPS_NOREORDER;
13914
13915   /* Some IRIX 6 BSD-compatibility objects have this bit set.  It
13916      doesn't seem to matter.  */
13917   new_flags &= ~EF_MIPS_XGOT;
13918   old_flags &= ~EF_MIPS_XGOT;
13919
13920   /* MIPSpro generates ucode info in n64 objects.  Again, we should
13921      just be able to ignore this.  */
13922   new_flags &= ~EF_MIPS_UCODE;
13923   old_flags &= ~EF_MIPS_UCODE;
13924
13925   /* DSOs should only be linked with CPIC code.  */
13926   if ((ibfd->flags & DYNAMIC) != 0)
13927     new_flags |= EF_MIPS_PIC | EF_MIPS_CPIC;
13928
13929   if (new_flags == old_flags)
13930     return TRUE;
13931
13932   /* Check to see if the input BFD actually contains any sections.
13933      If not, its flags may not have been initialised either, but it cannot
13934      actually cause any incompatibility.  */
13935   for (sec = ibfd->sections; sec != NULL; sec = sec->next)
13936     {
13937       /* Ignore synthetic sections and empty .text, .data and .bss sections
13938          which are automatically generated by gas.  Also ignore fake
13939          (s)common sections, since merely defining a common symbol does
13940          not affect compatibility.  */
13941       if ((sec->flags & SEC_IS_COMMON) == 0
13942           && strcmp (sec->name, ".reginfo")
13943           && strcmp (sec->name, ".mdebug")
13944           && (sec->size != 0
13945               || (strcmp (sec->name, ".text")
13946                   && strcmp (sec->name, ".data")
13947                   && strcmp (sec->name, ".bss"))))
13948         {
13949           null_input_bfd = FALSE;
13950           break;
13951         }
13952     }
13953   if (null_input_bfd)
13954     return TRUE;
13955
13956   ok = TRUE;
13957
13958   if (((new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0)
13959       != ((old_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0))
13960     {
13961       (*_bfd_error_handler)
13962         (_("%B: warning: linking abicalls files with non-abicalls files"),
13963          ibfd);
13964       ok = TRUE;
13965     }
13966
13967   if (new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC))
13968     elf_elfheader (obfd)->e_flags |= EF_MIPS_CPIC;
13969   if (! (new_flags & EF_MIPS_PIC))
13970     elf_elfheader (obfd)->e_flags &= ~EF_MIPS_PIC;
13971
13972   new_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC);
13973   old_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC);
13974
13975   /* Compare the ISAs.  */
13976   if (mips_32bit_flags_p (old_flags) != mips_32bit_flags_p (new_flags))
13977     {
13978       (*_bfd_error_handler)
13979         (_("%B: linking 32-bit code with 64-bit code"),
13980          ibfd);
13981       ok = FALSE;
13982     }
13983   else if (!mips_mach_extends_p (bfd_get_mach (ibfd), bfd_get_mach (obfd)))
13984     {
13985       /* OBFD's ISA isn't the same as, or an extension of, IBFD's.  */
13986       if (mips_mach_extends_p (bfd_get_mach (obfd), bfd_get_mach (ibfd)))
13987         {
13988           /* Copy the architecture info from IBFD to OBFD.  Also copy
13989              the 32-bit flag (if set) so that we continue to recognise
13990              OBFD as a 32-bit binary.  */
13991           bfd_set_arch_info (obfd, bfd_get_arch_info (ibfd));
13992           elf_elfheader (obfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH);
13993           elf_elfheader (obfd)->e_flags
13994             |= new_flags & (EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
13995
13996           /* Copy across the ABI flags if OBFD doesn't use them
13997              and if that was what caused us to treat IBFD as 32-bit.  */
13998           if ((old_flags & EF_MIPS_ABI) == 0
13999               && mips_32bit_flags_p (new_flags)
14000               && !mips_32bit_flags_p (new_flags & ~EF_MIPS_ABI))
14001             elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ABI;
14002         }
14003       else
14004         {
14005           /* The ISAs aren't compatible.  */
14006           (*_bfd_error_handler)
14007             (_("%B: linking %s module with previous %s modules"),
14008              ibfd,
14009              bfd_printable_name (ibfd),
14010              bfd_printable_name (obfd));
14011           ok = FALSE;
14012         }
14013     }
14014
14015   new_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
14016   old_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
14017
14018   /* Compare ABIs.  The 64-bit ABI does not use EF_MIPS_ABI.  But, it
14019      does set EI_CLASS differently from any 32-bit ABI.  */
14020   if ((new_flags & EF_MIPS_ABI) != (old_flags & EF_MIPS_ABI)
14021       || (elf_elfheader (ibfd)->e_ident[EI_CLASS]
14022           != elf_elfheader (obfd)->e_ident[EI_CLASS]))
14023     {
14024       /* Only error if both are set (to different values).  */
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           (*_bfd_error_handler)
14030             (_("%B: ABI mismatch: linking %s module with previous %s modules"),
14031              ibfd,
14032              elf_mips_abi_name (ibfd),
14033              elf_mips_abi_name (obfd));
14034           ok = FALSE;
14035         }
14036       new_flags &= ~EF_MIPS_ABI;
14037       old_flags &= ~EF_MIPS_ABI;
14038     }
14039
14040   /* Compare ASEs.  Forbid linking MIPS16 and microMIPS ASE modules together
14041      and allow arbitrary mixing of the remaining ASEs (retain the union).  */
14042   if ((new_flags & EF_MIPS_ARCH_ASE) != (old_flags & EF_MIPS_ARCH_ASE))
14043     {
14044       int old_micro = old_flags & EF_MIPS_ARCH_ASE_MICROMIPS;
14045       int new_micro = new_flags & EF_MIPS_ARCH_ASE_MICROMIPS;
14046       int old_m16 = old_flags & EF_MIPS_ARCH_ASE_M16;
14047       int new_m16 = new_flags & EF_MIPS_ARCH_ASE_M16;
14048       int micro_mis = old_m16 && new_micro;
14049       int m16_mis = old_micro && new_m16;
14050
14051       if (m16_mis || micro_mis)
14052         {
14053           (*_bfd_error_handler)
14054             (_("%B: ASE mismatch: linking %s module with previous %s modules"),
14055              ibfd,
14056              m16_mis ? "MIPS16" : "microMIPS",
14057              m16_mis ? "microMIPS" : "MIPS16");
14058           ok = FALSE;
14059         }
14060
14061       elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ARCH_ASE;
14062
14063       new_flags &= ~ EF_MIPS_ARCH_ASE;
14064       old_flags &= ~ EF_MIPS_ARCH_ASE;
14065     }
14066
14067   /* Warn about any other mismatches */
14068   if (new_flags != old_flags)
14069     {
14070       (*_bfd_error_handler)
14071         (_("%B: uses different e_flags (0x%lx) fields than previous modules (0x%lx)"),
14072          ibfd, (unsigned long) new_flags,
14073          (unsigned long) old_flags);
14074       ok = FALSE;
14075     }
14076
14077   if (! ok)
14078     {
14079       bfd_set_error (bfd_error_bad_value);
14080       return FALSE;
14081     }
14082
14083   return TRUE;
14084 }
14085
14086 /* Function to keep MIPS specific file flags like as EF_MIPS_PIC.  */
14087
14088 bfd_boolean
14089 _bfd_mips_elf_set_private_flags (bfd *abfd, flagword flags)
14090 {
14091   BFD_ASSERT (!elf_flags_init (abfd)
14092               || elf_elfheader (abfd)->e_flags == flags);
14093
14094   elf_elfheader (abfd)->e_flags = flags;
14095   elf_flags_init (abfd) = TRUE;
14096   return TRUE;
14097 }
14098
14099 char *
14100 _bfd_mips_elf_get_target_dtag (bfd_vma dtag)
14101 {
14102   switch (dtag)
14103     {
14104     default: return "";
14105     case DT_MIPS_RLD_VERSION:
14106       return "MIPS_RLD_VERSION";
14107     case DT_MIPS_TIME_STAMP:
14108       return "MIPS_TIME_STAMP";
14109     case DT_MIPS_ICHECKSUM:
14110       return "MIPS_ICHECKSUM";
14111     case DT_MIPS_IVERSION:
14112       return "MIPS_IVERSION";
14113     case DT_MIPS_FLAGS:
14114       return "MIPS_FLAGS";
14115     case DT_MIPS_BASE_ADDRESS:
14116       return "MIPS_BASE_ADDRESS";
14117     case DT_MIPS_MSYM:
14118       return "MIPS_MSYM";
14119     case DT_MIPS_CONFLICT:
14120       return "MIPS_CONFLICT";
14121     case DT_MIPS_LIBLIST:
14122       return "MIPS_LIBLIST";
14123     case DT_MIPS_LOCAL_GOTNO:
14124       return "MIPS_LOCAL_GOTNO";
14125     case DT_MIPS_CONFLICTNO:
14126       return "MIPS_CONFLICTNO";
14127     case DT_MIPS_LIBLISTNO:
14128       return "MIPS_LIBLISTNO";
14129     case DT_MIPS_SYMTABNO:
14130       return "MIPS_SYMTABNO";
14131     case DT_MIPS_UNREFEXTNO:
14132       return "MIPS_UNREFEXTNO";
14133     case DT_MIPS_GOTSYM:
14134       return "MIPS_GOTSYM";
14135     case DT_MIPS_HIPAGENO:
14136       return "MIPS_HIPAGENO";
14137     case DT_MIPS_RLD_MAP:
14138       return "MIPS_RLD_MAP";
14139     case DT_MIPS_DELTA_CLASS:
14140       return "MIPS_DELTA_CLASS";
14141     case DT_MIPS_DELTA_CLASS_NO:
14142       return "MIPS_DELTA_CLASS_NO";
14143     case DT_MIPS_DELTA_INSTANCE:
14144       return "MIPS_DELTA_INSTANCE";
14145     case DT_MIPS_DELTA_INSTANCE_NO:
14146       return "MIPS_DELTA_INSTANCE_NO";
14147     case DT_MIPS_DELTA_RELOC:
14148       return "MIPS_DELTA_RELOC";
14149     case DT_MIPS_DELTA_RELOC_NO:
14150       return "MIPS_DELTA_RELOC_NO";
14151     case DT_MIPS_DELTA_SYM:
14152       return "MIPS_DELTA_SYM";
14153     case DT_MIPS_DELTA_SYM_NO:
14154       return "MIPS_DELTA_SYM_NO";
14155     case DT_MIPS_DELTA_CLASSSYM:
14156       return "MIPS_DELTA_CLASSSYM";
14157     case DT_MIPS_DELTA_CLASSSYM_NO:
14158       return "MIPS_DELTA_CLASSSYM_NO";
14159     case DT_MIPS_CXX_FLAGS:
14160       return "MIPS_CXX_FLAGS";
14161     case DT_MIPS_PIXIE_INIT:
14162       return "MIPS_PIXIE_INIT";
14163     case DT_MIPS_SYMBOL_LIB:
14164       return "MIPS_SYMBOL_LIB";
14165     case DT_MIPS_LOCALPAGE_GOTIDX:
14166       return "MIPS_LOCALPAGE_GOTIDX";
14167     case DT_MIPS_LOCAL_GOTIDX:
14168       return "MIPS_LOCAL_GOTIDX";
14169     case DT_MIPS_HIDDEN_GOTIDX:
14170       return "MIPS_HIDDEN_GOTIDX";
14171     case DT_MIPS_PROTECTED_GOTIDX:
14172       return "MIPS_PROTECTED_GOT_IDX";
14173     case DT_MIPS_OPTIONS:
14174       return "MIPS_OPTIONS";
14175     case DT_MIPS_INTERFACE:
14176       return "MIPS_INTERFACE";
14177     case DT_MIPS_DYNSTR_ALIGN:
14178       return "DT_MIPS_DYNSTR_ALIGN";
14179     case DT_MIPS_INTERFACE_SIZE:
14180       return "DT_MIPS_INTERFACE_SIZE";
14181     case DT_MIPS_RLD_TEXT_RESOLVE_ADDR:
14182       return "DT_MIPS_RLD_TEXT_RESOLVE_ADDR";
14183     case DT_MIPS_PERF_SUFFIX:
14184       return "DT_MIPS_PERF_SUFFIX";
14185     case DT_MIPS_COMPACT_SIZE:
14186       return "DT_MIPS_COMPACT_SIZE";
14187     case DT_MIPS_GP_VALUE:
14188       return "DT_MIPS_GP_VALUE";
14189     case DT_MIPS_AUX_DYNAMIC:
14190       return "DT_MIPS_AUX_DYNAMIC";
14191     case DT_MIPS_PLTGOT:
14192       return "DT_MIPS_PLTGOT";
14193     case DT_MIPS_RWPLT:
14194       return "DT_MIPS_RWPLT";
14195     }
14196 }
14197
14198 bfd_boolean
14199 _bfd_mips_elf_print_private_bfd_data (bfd *abfd, void *ptr)
14200 {
14201   FILE *file = ptr;
14202
14203   BFD_ASSERT (abfd != NULL && ptr != NULL);
14204
14205   /* Print normal ELF private data.  */
14206   _bfd_elf_print_private_bfd_data (abfd, ptr);
14207
14208   /* xgettext:c-format */
14209   fprintf (file, _("private flags = %lx:"), elf_elfheader (abfd)->e_flags);
14210
14211   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O32)
14212     fprintf (file, _(" [abi=O32]"));
14213   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O64)
14214     fprintf (file, _(" [abi=O64]"));
14215   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32)
14216     fprintf (file, _(" [abi=EABI32]"));
14217   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI64)
14218     fprintf (file, _(" [abi=EABI64]"));
14219   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI))
14220     fprintf (file, _(" [abi unknown]"));
14221   else if (ABI_N32_P (abfd))
14222     fprintf (file, _(" [abi=N32]"));
14223   else if (ABI_64_P (abfd))
14224     fprintf (file, _(" [abi=64]"));
14225   else
14226     fprintf (file, _(" [no abi set]"));
14227
14228   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1)
14229     fprintf (file, " [mips1]");
14230   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2)
14231     fprintf (file, " [mips2]");
14232   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_3)
14233     fprintf (file, " [mips3]");
14234   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_4)
14235     fprintf (file, " [mips4]");
14236   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_5)
14237     fprintf (file, " [mips5]");
14238   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32)
14239     fprintf (file, " [mips32]");
14240   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64)
14241     fprintf (file, " [mips64]");
14242   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2)
14243     fprintf (file, " [mips32r2]");
14244   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64R2)
14245     fprintf (file, " [mips64r2]");
14246   else
14247     fprintf (file, _(" [unknown ISA]"));
14248
14249   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MDMX)
14250     fprintf (file, " [mdmx]");
14251
14252   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_M16)
14253     fprintf (file, " [mips16]");
14254
14255   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MICROMIPS)
14256     fprintf (file, " [micromips]");
14257
14258   if (elf_elfheader (abfd)->e_flags & EF_MIPS_32BITMODE)
14259     fprintf (file, " [32bitmode]");
14260   else
14261     fprintf (file, _(" [not 32bitmode]"));
14262
14263   if (elf_elfheader (abfd)->e_flags & EF_MIPS_NOREORDER)
14264     fprintf (file, " [noreorder]");
14265
14266   if (elf_elfheader (abfd)->e_flags & EF_MIPS_PIC)
14267     fprintf (file, " [PIC]");
14268
14269   if (elf_elfheader (abfd)->e_flags & EF_MIPS_CPIC)
14270     fprintf (file, " [CPIC]");
14271
14272   if (elf_elfheader (abfd)->e_flags & EF_MIPS_XGOT)
14273     fprintf (file, " [XGOT]");
14274
14275   if (elf_elfheader (abfd)->e_flags & EF_MIPS_UCODE)
14276     fprintf (file, " [UCODE]");
14277
14278   fputc ('\n', file);
14279
14280   return TRUE;
14281 }
14282
14283 const struct bfd_elf_special_section _bfd_mips_elf_special_sections[] =
14284 {
14285   { STRING_COMMA_LEN (".lit4"),   0, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
14286   { STRING_COMMA_LEN (".lit8"),   0, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
14287   { STRING_COMMA_LEN (".mdebug"), 0, SHT_MIPS_DEBUG, 0 },
14288   { STRING_COMMA_LEN (".sbss"),  -2, SHT_NOBITS,     SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
14289   { STRING_COMMA_LEN (".sdata"), -2, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
14290   { STRING_COMMA_LEN (".ucode"),  0, SHT_MIPS_UCODE, 0 },
14291   { NULL,                     0,  0, 0,              0 }
14292 };
14293
14294 /* Merge non visibility st_other attributes.  Ensure that the
14295    STO_OPTIONAL flag is copied into h->other, even if this is not a
14296    definiton of the symbol.  */
14297 void
14298 _bfd_mips_elf_merge_symbol_attribute (struct elf_link_hash_entry *h,
14299                                       const Elf_Internal_Sym *isym,
14300                                       bfd_boolean definition,
14301                                       bfd_boolean dynamic ATTRIBUTE_UNUSED)
14302 {
14303   if ((isym->st_other & ~ELF_ST_VISIBILITY (-1)) != 0)
14304     {
14305       unsigned char other;
14306
14307       other = (definition ? isym->st_other : h->other);
14308       other &= ~ELF_ST_VISIBILITY (-1);
14309       h->other = other | ELF_ST_VISIBILITY (h->other);
14310     }
14311
14312   if (!definition
14313       && ELF_MIPS_IS_OPTIONAL (isym->st_other))
14314     h->other |= STO_OPTIONAL;
14315 }
14316
14317 /* Decide whether an undefined symbol is special and can be ignored.
14318    This is the case for OPTIONAL symbols on IRIX.  */
14319 bfd_boolean
14320 _bfd_mips_elf_ignore_undef_symbol (struct elf_link_hash_entry *h)
14321 {
14322   return ELF_MIPS_IS_OPTIONAL (h->other) ? TRUE : FALSE;
14323 }
14324
14325 bfd_boolean
14326 _bfd_mips_elf_common_definition (Elf_Internal_Sym *sym)
14327 {
14328   return (sym->st_shndx == SHN_COMMON
14329           || sym->st_shndx == SHN_MIPS_ACOMMON
14330           || sym->st_shndx == SHN_MIPS_SCOMMON);
14331 }
14332
14333 /* Return address for Ith PLT stub in section PLT, for relocation REL
14334    or (bfd_vma) -1 if it should not be included.  */
14335
14336 bfd_vma
14337 _bfd_mips_elf_plt_sym_val (bfd_vma i, const asection *plt,
14338                            const arelent *rel ATTRIBUTE_UNUSED)
14339 {
14340   return (plt->vma
14341           + 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry)
14342           + i * 4 * ARRAY_SIZE (mips_exec_plt_entry));
14343 }
14344
14345 void
14346 _bfd_mips_post_process_headers (bfd *abfd, struct bfd_link_info *link_info)
14347 {
14348   struct mips_elf_link_hash_table *htab;
14349   Elf_Internal_Ehdr *i_ehdrp;
14350
14351   i_ehdrp = elf_elfheader (abfd);
14352   if (link_info)
14353     {
14354       htab = mips_elf_hash_table (link_info);
14355       BFD_ASSERT (htab != NULL);
14356
14357       if (htab->use_plts_and_copy_relocs && !htab->is_vxworks)
14358         i_ehdrp->e_ident[EI_ABIVERSION] = 1;
14359     }
14360 }