bfd/
[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 /* This structure is used to hold information about one GOT entry.
51    There are three types of entry:
52
53       (1) absolute addresses
54             (abfd == NULL)
55       (2) SYMBOL + OFFSET addresses, where SYMBOL is local to an input bfd
56             (abfd != NULL, symndx >= 0)
57       (3) SYMBOL addresses, where SYMBOL is not local to an input bfd
58             (abfd != NULL, symndx == -1)
59
60    Type (3) entries are treated differently for different types of GOT.
61    In the "master" GOT -- i.e.  the one that describes every GOT
62    reference needed in the link -- the mips_got_entry is keyed on both
63    the symbol and the input bfd that references it.  If it turns out
64    that we need multiple GOTs, we can then use this information to
65    create separate GOTs for each input bfd.
66
67    However, we want each of these separate GOTs to have at most one
68    entry for a given symbol, so their type (3) entries are keyed only
69    on the symbol.  The input bfd given by the "abfd" field is somewhat
70    arbitrary in this case.
71
72    This means that when there are multiple GOTs, each GOT has a unique
73    mips_got_entry for every symbol within it.  We can therefore use the
74    mips_got_entry fields (tls_type and gotidx) to track the symbol's
75    GOT index.
76
77    However, if it turns out that we need only a single GOT, we continue
78    to use the master GOT to describe it.  There may therefore be several
79    mips_got_entries for the same symbol, each with a different input bfd.
80    We want to make sure that each symbol gets a unique GOT entry, so when
81    there's a single GOT, we use the symbol's hash entry, not the
82    mips_got_entry fields, to track a symbol's GOT index.  */
83 struct mips_got_entry
84 {
85   /* The input bfd in which the symbol is defined.  */
86   bfd *abfd;
87   /* The index of the symbol, as stored in the relocation r_info, if
88      we have a local symbol; -1 otherwise.  */
89   long symndx;
90   union
91   {
92     /* If abfd == NULL, an address that must be stored in the got.  */
93     bfd_vma address;
94     /* If abfd != NULL && symndx != -1, the addend of the relocation
95        that should be added to the symbol value.  */
96     bfd_vma addend;
97     /* If abfd != NULL && symndx == -1, the hash table entry
98        corresponding to symbol in the GOT.  The symbol's entry
99        is in the local area if h->global_got_area is GGA_NONE,
100        otherwise it is in the global area.  */
101     struct mips_elf_link_hash_entry *h;
102   } d;
103
104   /* The TLS types included in this GOT entry (specifically, GD and
105      IE).  The GD and IE flags can be added as we encounter new
106      relocations.  LDM can also be set; it will always be alone, not
107      combined with any GD or IE flags.  An LDM GOT entry will be
108      a local symbol entry with r_symndx == 0.  */
109   unsigned char tls_type;
110
111   /* The offset from the beginning of the .got section to the entry
112      corresponding to this symbol+addend.  If it's a global symbol
113      whose offset is yet to be decided, it's going to be -1.  */
114   long gotidx;
115 };
116
117 /* This structure describes a range of addends: [MIN_ADDEND, MAX_ADDEND].
118    The structures form a non-overlapping list that is sorted by increasing
119    MIN_ADDEND.  */
120 struct mips_got_page_range
121 {
122   struct mips_got_page_range *next;
123   bfd_signed_vma min_addend;
124   bfd_signed_vma max_addend;
125 };
126
127 /* This structure describes the range of addends that are applied to page
128    relocations against a given symbol.  */
129 struct mips_got_page_entry
130 {
131   /* The input bfd in which the symbol is defined.  */
132   bfd *abfd;
133   /* The index of the symbol, as stored in the relocation r_info.  */
134   long symndx;
135   /* The ranges for this page entry.  */
136   struct mips_got_page_range *ranges;
137   /* The maximum number of page entries needed for RANGES.  */
138   bfd_vma num_pages;
139 };
140
141 /* This structure is used to hold .got information when linking.  */
142
143 struct mips_got_info
144 {
145   /* The global symbol in the GOT with the lowest index in the dynamic
146      symbol table.  */
147   struct elf_link_hash_entry *global_gotsym;
148   /* The number of global .got entries.  */
149   unsigned int global_gotno;
150   /* The number of global .got entries that are in the GGA_RELOC_ONLY area.  */
151   unsigned int reloc_only_gotno;
152   /* The number of .got slots used for TLS.  */
153   unsigned int tls_gotno;
154   /* The first unused TLS .got entry.  Used only during
155      mips_elf_initialize_tls_index.  */
156   unsigned int tls_assigned_gotno;
157   /* The number of local .got entries, eventually including page entries.  */
158   unsigned int local_gotno;
159   /* The maximum number of page entries needed.  */
160   unsigned int page_gotno;
161   /* The number of local .got entries we have used.  */
162   unsigned int assigned_gotno;
163   /* A hash table holding members of the got.  */
164   struct htab *got_entries;
165   /* A hash table of mips_got_page_entry structures.  */
166   struct htab *got_page_entries;
167   /* A hash table mapping input bfds to other mips_got_info.  NULL
168      unless multi-got was necessary.  */
169   struct htab *bfd2got;
170   /* In multi-got links, a pointer to the next got (err, rather, most
171      of the time, it points to the previous got).  */
172   struct mips_got_info *next;
173   /* This is the GOT index of the TLS LDM entry for the GOT, MINUS_ONE
174      for none, or MINUS_TWO for not yet assigned.  This is needed
175      because a single-GOT link may have multiple hash table entries
176      for the LDM.  It does not get initialized in multi-GOT mode.  */
177   bfd_vma tls_ldm_offset;
178 };
179
180 /* Map an input bfd to a got in a multi-got link.  */
181
182 struct mips_elf_bfd2got_hash
183 {
184   bfd *bfd;
185   struct mips_got_info *g;
186 };
187
188 /* Structure passed when traversing the bfd2got hash table, used to
189    create and merge bfd's gots.  */
190
191 struct mips_elf_got_per_bfd_arg
192 {
193   /* A hashtable that maps bfds to gots.  */
194   htab_t bfd2got;
195   /* The output bfd.  */
196   bfd *obfd;
197   /* The link information.  */
198   struct bfd_link_info *info;
199   /* A pointer to the primary got, i.e., the one that's going to get
200      the implicit relocations from DT_MIPS_LOCAL_GOTNO and
201      DT_MIPS_GOTSYM.  */
202   struct mips_got_info *primary;
203   /* A non-primary got we're trying to merge with other input bfd's
204      gots.  */
205   struct mips_got_info *current;
206   /* The maximum number of got entries that can be addressed with a
207      16-bit offset.  */
208   unsigned int max_count;
209   /* The maximum number of page entries needed by each got.  */
210   unsigned int max_pages;
211   /* The total number of global entries which will live in the
212      primary got and be automatically relocated.  This includes
213      those not referenced by the primary GOT but included in
214      the "master" GOT.  */
215   unsigned int global_count;
216 };
217
218 /* Another structure used to pass arguments for got entries traversal.  */
219
220 struct mips_elf_set_global_got_offset_arg
221 {
222   struct mips_got_info *g;
223   int value;
224   unsigned int needed_relocs;
225   struct bfd_link_info *info;
226 };
227
228 /* A structure used to count TLS relocations or GOT entries, for GOT
229    entry or ELF symbol table traversal.  */
230
231 struct mips_elf_count_tls_arg
232 {
233   struct bfd_link_info *info;
234   unsigned int needed;
235 };
236
237 struct _mips_elf_section_data
238 {
239   struct bfd_elf_section_data elf;
240   union
241   {
242     bfd_byte *tdata;
243   } u;
244 };
245
246 #define mips_elf_section_data(sec) \
247   ((struct _mips_elf_section_data *) elf_section_data (sec))
248
249 #define is_mips_elf(bfd)                                \
250   (bfd_get_flavour (bfd) == bfd_target_elf_flavour      \
251    && elf_tdata (bfd) != NULL                           \
252    && elf_object_id (bfd) == MIPS_ELF_DATA)
253
254 /* The ABI says that every symbol used by dynamic relocations must have
255    a global GOT entry.  Among other things, this provides the dynamic
256    linker with a free, directly-indexed cache.  The GOT can therefore
257    contain symbols that are not referenced by GOT relocations themselves
258    (in other words, it may have symbols that are not referenced by things
259    like R_MIPS_GOT16 and R_MIPS_GOT_PAGE).
260
261    GOT relocations are less likely to overflow if we put the associated
262    GOT entries towards the beginning.  We therefore divide the global
263    GOT entries into two areas: "normal" and "reloc-only".  Entries in
264    the first area can be used for both dynamic relocations and GP-relative
265    accesses, while those in the "reloc-only" area are for dynamic
266    relocations only.
267
268    These GGA_* ("Global GOT Area") values are organised so that lower
269    values are more general than higher values.  Also, non-GGA_NONE
270    values are ordered by the position of the area in the GOT.  */
271 #define GGA_NORMAL 0
272 #define GGA_RELOC_ONLY 1
273 #define GGA_NONE 2
274
275 /* Information about a non-PIC interface to a PIC function.  There are
276    two ways of creating these interfaces.  The first is to add:
277
278         lui     $25,%hi(func)
279         addiu   $25,$25,%lo(func)
280
281    immediately before a PIC function "func".  The second is to add:
282
283         lui     $25,%hi(func)
284         j       func
285         addiu   $25,$25,%lo(func)
286
287    to a separate trampoline section.
288
289    Stubs of the first kind go in a new section immediately before the
290    target function.  Stubs of the second kind go in a single section
291    pointed to by the hash table's "strampoline" field.  */
292 struct mips_elf_la25_stub {
293   /* The generated section that contains this stub.  */
294   asection *stub_section;
295
296   /* The offset of the stub from the start of STUB_SECTION.  */
297   bfd_vma offset;
298
299   /* One symbol for the original function.  Its location is available
300      in H->root.root.u.def.  */
301   struct mips_elf_link_hash_entry *h;
302 };
303
304 /* Macros for populating a mips_elf_la25_stub.  */
305
306 #define LA25_LUI(VAL) (0x3c190000 | (VAL))      /* lui t9,VAL */
307 #define LA25_J(VAL) (0x08000000 | (((VAL) >> 2) & 0x3ffffff)) /* j VAL */
308 #define LA25_ADDIU(VAL) (0x27390000 | (VAL))    /* addiu t9,t9,VAL */
309 #define LA25_LUI_MICROMIPS(VAL)                                         \
310   (0x41b90000 | (VAL))                          /* lui t9,VAL */
311 #define LA25_J_MICROMIPS(VAL)                                           \
312   (0xd4000000 | (((VAL) >> 1) & 0x3ffffff))     /* j VAL */
313 #define LA25_ADDIU_MICROMIPS(VAL)                                       \
314   (0x33390000 | (VAL))                          /* addiu t9,t9,VAL */
315
316 /* This structure is passed to mips_elf_sort_hash_table_f when sorting
317    the dynamic symbols.  */
318
319 struct mips_elf_hash_sort_data
320 {
321   /* The symbol in the global GOT with the lowest dynamic symbol table
322      index.  */
323   struct elf_link_hash_entry *low;
324   /* The least dynamic symbol table index corresponding to a non-TLS
325      symbol with a GOT entry.  */
326   long min_got_dynindx;
327   /* The greatest dynamic symbol table index corresponding to a symbol
328      with a GOT entry that is not referenced (e.g., a dynamic symbol
329      with dynamic relocations pointing to it from non-primary GOTs).  */
330   long max_unref_got_dynindx;
331   /* The greatest dynamic symbol table index not corresponding to a
332      symbol without a GOT entry.  */
333   long max_non_got_dynindx;
334 };
335
336 /* The MIPS ELF linker needs additional information for each symbol in
337    the global hash table.  */
338
339 struct mips_elf_link_hash_entry
340 {
341   struct elf_link_hash_entry root;
342
343   /* External symbol information.  */
344   EXTR esym;
345
346   /* The la25 stub we have created for ths symbol, if any.  */
347   struct mips_elf_la25_stub *la25_stub;
348
349   /* Number of R_MIPS_32, R_MIPS_REL32, or R_MIPS_64 relocs against
350      this symbol.  */
351   unsigned int possibly_dynamic_relocs;
352
353   /* If there is a stub that 32 bit functions should use to call this
354      16 bit function, this points to the section containing the stub.  */
355   asection *fn_stub;
356
357   /* If there is a stub that 16 bit functions should use to call this
358      32 bit function, this points to the section containing the stub.  */
359   asection *call_stub;
360
361   /* This is like the call_stub field, but it is used if the function
362      being called returns a floating point value.  */
363   asection *call_fp_stub;
364
365 #define GOT_NORMAL      0
366 #define GOT_TLS_GD      1
367 #define GOT_TLS_LDM     2
368 #define GOT_TLS_IE      4
369 #define GOT_TLS_OFFSET_DONE    0x40
370 #define GOT_TLS_DONE    0x80
371   unsigned char tls_type;
372
373   /* This is only used in single-GOT mode; in multi-GOT mode there
374      is one mips_got_entry per GOT entry, so the offset is stored
375      there.  In single-GOT mode there may be many mips_got_entry
376      structures all referring to the same GOT slot.  It might be
377      possible to use root.got.offset instead, but that field is
378      overloaded already.  */
379   bfd_vma tls_got_offset;
380
381   /* The highest GGA_* value that satisfies all references to this symbol.  */
382   unsigned int global_got_area : 2;
383
384   /* True if all GOT relocations against this symbol are for calls.  This is
385      a looser condition than no_fn_stub below, because there may be other
386      non-call non-GOT relocations against the symbol.  */
387   unsigned int got_only_for_calls : 1;
388
389   /* True if one of the relocations described by possibly_dynamic_relocs
390      is against a readonly section.  */
391   unsigned int readonly_reloc : 1;
392
393   /* True if there is a relocation against this symbol that must be
394      resolved by the static linker (in other words, if the relocation
395      cannot possibly be made dynamic).  */
396   unsigned int has_static_relocs : 1;
397
398   /* True if we must not create a .MIPS.stubs entry for this symbol.
399      This is set, for example, if there are relocations related to
400      taking the function's address, i.e. any but R_MIPS_CALL*16 ones.
401      See "MIPS ABI Supplement, 3rd Edition", p. 4-20.  */
402   unsigned int no_fn_stub : 1;
403
404   /* Whether we need the fn_stub; this is true if this symbol appears
405      in any relocs other than a 16 bit call.  */
406   unsigned int need_fn_stub : 1;
407
408   /* True if this symbol is referenced by branch relocations from
409      any non-PIC input file.  This is used to determine whether an
410      la25 stub is required.  */
411   unsigned int has_nonpic_branches : 1;
412
413   /* Does this symbol need a traditional MIPS lazy-binding stub
414      (as opposed to a PLT entry)?  */
415   unsigned int needs_lazy_stub : 1;
416 };
417
418 /* MIPS ELF linker hash table.  */
419
420 struct mips_elf_link_hash_table
421 {
422   struct elf_link_hash_table root;
423
424   /* The number of .rtproc entries.  */
425   bfd_size_type procedure_count;
426
427   /* The size of the .compact_rel section (if SGI_COMPAT).  */
428   bfd_size_type compact_rel_size;
429
430   /* This flag indicates that the value of DT_MIPS_RLD_MAP dynamic entry
431      is set to the address of __rld_obj_head as in IRIX5 and IRIX6.  */
432   bfd_boolean use_rld_obj_head;
433
434   /* The  __rld_map or __rld_obj_head symbol. */
435   struct elf_link_hash_entry *rld_symbol;
436
437   /* This is set if we see any mips16 stub sections.  */
438   bfd_boolean mips16_stubs_seen;
439
440   /* True if we can generate copy relocs and PLTs.  */
441   bfd_boolean use_plts_and_copy_relocs;
442
443   /* True if we're generating code for VxWorks.  */
444   bfd_boolean is_vxworks;
445
446   /* True if we already reported the small-data section overflow.  */
447   bfd_boolean small_data_overflow_reported;
448
449   /* Shortcuts to some dynamic sections, or NULL if they are not
450      being used.  */
451   asection *srelbss;
452   asection *sdynbss;
453   asection *srelplt;
454   asection *srelplt2;
455   asection *sgotplt;
456   asection *splt;
457   asection *sstubs;
458   asection *sgot;
459
460   /* The master GOT information.  */
461   struct mips_got_info *got_info;
462
463   /* The size of the PLT header in bytes.  */
464   bfd_vma plt_header_size;
465
466   /* The size of a PLT entry in bytes.  */
467   bfd_vma plt_entry_size;
468
469   /* The number of functions that need a lazy-binding stub.  */
470   bfd_vma lazy_stub_count;
471
472   /* The size of a function stub entry in bytes.  */
473   bfd_vma function_stub_size;
474
475   /* The number of reserved entries at the beginning of the GOT.  */
476   unsigned int reserved_gotno;
477
478   /* The section used for mips_elf_la25_stub trampolines.
479      See the comment above that structure for details.  */
480   asection *strampoline;
481
482   /* A table of mips_elf_la25_stubs, indexed by (input_section, offset)
483      pairs.  */
484   htab_t la25_stubs;
485
486   /* A function FN (NAME, IS, OS) that creates a new input section
487      called NAME and links it to output section OS.  If IS is nonnull,
488      the new section should go immediately before it, otherwise it
489      should go at the (current) beginning of OS.
490
491      The function returns the new section on success, otherwise it
492      returns null.  */
493   asection *(*add_stub_section) (const char *, asection *, asection *);
494 };
495
496 /* Get the MIPS ELF linker hash table from a link_info structure.  */
497
498 #define mips_elf_hash_table(p) \
499   (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
500   == MIPS_ELF_DATA ? ((struct mips_elf_link_hash_table *) ((p)->hash)) : NULL)
501
502 /* A structure used to communicate with htab_traverse callbacks.  */
503 struct mips_htab_traverse_info
504 {
505   /* The usual link-wide information.  */
506   struct bfd_link_info *info;
507   bfd *output_bfd;
508
509   /* Starts off FALSE and is set to TRUE if the link should be aborted.  */
510   bfd_boolean error;
511 };
512
513 /* MIPS ELF private object data.  */
514
515 struct mips_elf_obj_tdata
516 {
517   /* Generic ELF private object data.  */
518   struct elf_obj_tdata root;
519
520   /* Input BFD providing Tag_GNU_MIPS_ABI_FP attribute for output.  */
521   bfd *abi_fp_bfd;
522 };
523
524 /* Get MIPS ELF private object data from BFD's tdata.  */
525
526 #define mips_elf_tdata(bfd) \
527   ((struct mips_elf_obj_tdata *) (bfd)->tdata.any)
528
529 #define TLS_RELOC_P(r_type) \
530   (r_type == R_MIPS_TLS_DTPMOD32                \
531    || r_type == R_MIPS_TLS_DTPMOD64             \
532    || r_type == R_MIPS_TLS_DTPREL32             \
533    || r_type == R_MIPS_TLS_DTPREL64             \
534    || r_type == R_MIPS_TLS_GD                   \
535    || r_type == R_MIPS_TLS_LDM                  \
536    || r_type == R_MIPS_TLS_DTPREL_HI16          \
537    || r_type == R_MIPS_TLS_DTPREL_LO16          \
538    || r_type == R_MIPS_TLS_GOTTPREL             \
539    || r_type == R_MIPS_TLS_TPREL32              \
540    || r_type == R_MIPS_TLS_TPREL64              \
541    || r_type == R_MIPS_TLS_TPREL_HI16           \
542    || r_type == R_MIPS_TLS_TPREL_LO16           \
543    || r_type == R_MIPS16_TLS_GD                 \
544    || r_type == R_MIPS16_TLS_LDM                \
545    || r_type == R_MIPS16_TLS_DTPREL_HI16        \
546    || r_type == R_MIPS16_TLS_DTPREL_LO16        \
547    || r_type == R_MIPS16_TLS_GOTTPREL           \
548    || r_type == R_MIPS16_TLS_TPREL_HI16         \
549    || r_type == R_MIPS16_TLS_TPREL_LO16         \
550    || r_type == R_MICROMIPS_TLS_GD              \
551    || r_type == R_MICROMIPS_TLS_LDM             \
552    || r_type == R_MICROMIPS_TLS_DTPREL_HI16     \
553    || r_type == R_MICROMIPS_TLS_DTPREL_LO16     \
554    || r_type == R_MICROMIPS_TLS_GOTTPREL        \
555    || r_type == R_MICROMIPS_TLS_TPREL_HI16      \
556    || r_type == R_MICROMIPS_TLS_TPREL_LO16)
557
558 /* Structure used to pass information to mips_elf_output_extsym.  */
559
560 struct extsym_info
561 {
562   bfd *abfd;
563   struct bfd_link_info *info;
564   struct ecoff_debug_info *debug;
565   const struct ecoff_debug_swap *swap;
566   bfd_boolean failed;
567 };
568
569 /* The names of the runtime procedure table symbols used on IRIX5.  */
570
571 static const char * const mips_elf_dynsym_rtproc_names[] =
572 {
573   "_procedure_table",
574   "_procedure_string_table",
575   "_procedure_table_size",
576   NULL
577 };
578
579 /* These structures are used to generate the .compact_rel section on
580    IRIX5.  */
581
582 typedef struct
583 {
584   unsigned long id1;            /* Always one?  */
585   unsigned long num;            /* Number of compact relocation entries.  */
586   unsigned long id2;            /* Always two?  */
587   unsigned long offset;         /* The file offset of the first relocation.  */
588   unsigned long reserved0;      /* Zero?  */
589   unsigned long reserved1;      /* Zero?  */
590 } Elf32_compact_rel;
591
592 typedef struct
593 {
594   bfd_byte id1[4];
595   bfd_byte num[4];
596   bfd_byte id2[4];
597   bfd_byte offset[4];
598   bfd_byte reserved0[4];
599   bfd_byte reserved1[4];
600 } Elf32_External_compact_rel;
601
602 typedef struct
603 {
604   unsigned int ctype : 1;       /* 1: long 0: short format. See below.  */
605   unsigned int rtype : 4;       /* Relocation types. See below.  */
606   unsigned int dist2to : 8;
607   unsigned int relvaddr : 19;   /* (VADDR - vaddr of the previous entry)/ 4 */
608   unsigned long konst;          /* KONST field. See below.  */
609   unsigned long vaddr;          /* VADDR to be relocated.  */
610 } Elf32_crinfo;
611
612 typedef struct
613 {
614   unsigned int ctype : 1;       /* 1: long 0: short format. See below.  */
615   unsigned int rtype : 4;       /* Relocation types. See below.  */
616   unsigned int dist2to : 8;
617   unsigned int relvaddr : 19;   /* (VADDR - vaddr of the previous entry)/ 4 */
618   unsigned long konst;          /* KONST field. See below.  */
619 } Elf32_crinfo2;
620
621 typedef struct
622 {
623   bfd_byte info[4];
624   bfd_byte konst[4];
625   bfd_byte vaddr[4];
626 } Elf32_External_crinfo;
627
628 typedef struct
629 {
630   bfd_byte info[4];
631   bfd_byte konst[4];
632 } Elf32_External_crinfo2;
633
634 /* These are the constants used to swap the bitfields in a crinfo.  */
635
636 #define CRINFO_CTYPE (0x1)
637 #define CRINFO_CTYPE_SH (31)
638 #define CRINFO_RTYPE (0xf)
639 #define CRINFO_RTYPE_SH (27)
640 #define CRINFO_DIST2TO (0xff)
641 #define CRINFO_DIST2TO_SH (19)
642 #define CRINFO_RELVADDR (0x7ffff)
643 #define CRINFO_RELVADDR_SH (0)
644
645 /* A compact relocation info has long (3 words) or short (2 words)
646    formats.  A short format doesn't have VADDR field and relvaddr
647    fields contains ((VADDR - vaddr of the previous entry) >> 2).  */
648 #define CRF_MIPS_LONG                   1
649 #define CRF_MIPS_SHORT                  0
650
651 /* There are 4 types of compact relocation at least. The value KONST
652    has different meaning for each type:
653
654    (type)               (konst)
655    CT_MIPS_REL32        Address in data
656    CT_MIPS_WORD         Address in word (XXX)
657    CT_MIPS_GPHI_LO      GP - vaddr
658    CT_MIPS_JMPAD        Address to jump
659    */
660
661 #define CRT_MIPS_REL32                  0xa
662 #define CRT_MIPS_WORD                   0xb
663 #define CRT_MIPS_GPHI_LO                0xc
664 #define CRT_MIPS_JMPAD                  0xd
665
666 #define mips_elf_set_cr_format(x,format)        ((x).ctype = (format))
667 #define mips_elf_set_cr_type(x,type)            ((x).rtype = (type))
668 #define mips_elf_set_cr_dist2to(x,v)            ((x).dist2to = (v))
669 #define mips_elf_set_cr_relvaddr(x,d)           ((x).relvaddr = (d)<<2)
670 \f
671 /* The structure of the runtime procedure descriptor created by the
672    loader for use by the static exception system.  */
673
674 typedef struct runtime_pdr {
675         bfd_vma adr;            /* Memory address of start of procedure.  */
676         long    regmask;        /* Save register mask.  */
677         long    regoffset;      /* Save register offset.  */
678         long    fregmask;       /* Save floating point register mask.  */
679         long    fregoffset;     /* Save floating point register offset.  */
680         long    frameoffset;    /* Frame size.  */
681         short   framereg;       /* Frame pointer register.  */
682         short   pcreg;          /* Offset or reg of return pc.  */
683         long    irpss;          /* Index into the runtime string table.  */
684         long    reserved;
685         struct exception_info *exception_info;/* Pointer to exception array.  */
686 } RPDR, *pRPDR;
687 #define cbRPDR sizeof (RPDR)
688 #define rpdNil ((pRPDR) 0)
689 \f
690 static struct mips_got_entry *mips_elf_create_local_got_entry
691   (bfd *, struct bfd_link_info *, bfd *, bfd_vma, unsigned long,
692    struct mips_elf_link_hash_entry *, int);
693 static bfd_boolean mips_elf_sort_hash_table_f
694   (struct mips_elf_link_hash_entry *, void *);
695 static bfd_vma mips_elf_high
696   (bfd_vma);
697 static bfd_boolean mips_elf_create_dynamic_relocation
698   (bfd *, struct bfd_link_info *, const Elf_Internal_Rela *,
699    struct mips_elf_link_hash_entry *, asection *, bfd_vma,
700    bfd_vma *, asection *);
701 static hashval_t mips_elf_got_entry_hash
702   (const void *);
703 static bfd_vma mips_elf_adjust_gp
704   (bfd *, struct mips_got_info *, bfd *);
705 static struct mips_got_info *mips_elf_got_for_ibfd
706   (struct mips_got_info *, bfd *);
707
708 /* This will be used when we sort the dynamic relocation records.  */
709 static bfd *reldyn_sorting_bfd;
710
711 /* True if ABFD is for CPUs with load interlocking that include
712    non-MIPS1 CPUs and R3900.  */
713 #define LOAD_INTERLOCKS_P(abfd) \
714   (   ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) != E_MIPS_ARCH_1) \
715    || ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == E_MIPS_MACH_3900))
716
717 /* True if ABFD is for CPUs that are faster if JAL is converted to BAL.
718    This should be safe for all architectures.  We enable this predicate
719    for RM9000 for now.  */
720 #define JAL_TO_BAL_P(abfd) \
721   ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == E_MIPS_MACH_9000)
722
723 /* True if ABFD is for CPUs that are faster if JALR is converted to BAL.
724    This should be safe for all architectures.  We enable this predicate for
725    all CPUs.  */
726 #define JALR_TO_BAL_P(abfd) 1
727
728 /* True if ABFD is for CPUs that are faster if JR is converted to B.
729    This should be safe for all architectures.  We enable this predicate for
730    all CPUs.  */
731 #define JR_TO_B_P(abfd) 1
732
733 /* True if ABFD is a PIC object.  */
734 #define PIC_OBJECT_P(abfd) \
735   ((elf_elfheader (abfd)->e_flags & EF_MIPS_PIC) != 0)
736
737 /* Nonzero if ABFD is using the N32 ABI.  */
738 #define ABI_N32_P(abfd) \
739   ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI2) != 0)
740
741 /* Nonzero if ABFD is using the N64 ABI.  */
742 #define ABI_64_P(abfd) \
743   (get_elf_backend_data (abfd)->s->elfclass == ELFCLASS64)
744
745 /* Nonzero if ABFD is using NewABI conventions.  */
746 #define NEWABI_P(abfd) (ABI_N32_P (abfd) || ABI_64_P (abfd))
747
748 /* The IRIX compatibility level we are striving for.  */
749 #define IRIX_COMPAT(abfd) \
750   (get_elf_backend_data (abfd)->elf_backend_mips_irix_compat (abfd))
751
752 /* Whether we are trying to be compatible with IRIX at all.  */
753 #define SGI_COMPAT(abfd) \
754   (IRIX_COMPAT (abfd) != ict_none)
755
756 /* The name of the options section.  */
757 #define MIPS_ELF_OPTIONS_SECTION_NAME(abfd) \
758   (NEWABI_P (abfd) ? ".MIPS.options" : ".options")
759
760 /* True if NAME is the recognized name of any SHT_MIPS_OPTIONS section.
761    Some IRIX system files do not use MIPS_ELF_OPTIONS_SECTION_NAME.  */
762 #define MIPS_ELF_OPTIONS_SECTION_NAME_P(NAME) \
763   (strcmp (NAME, ".MIPS.options") == 0 || strcmp (NAME, ".options") == 0)
764
765 /* Whether the section is readonly.  */
766 #define MIPS_ELF_READONLY_SECTION(sec) \
767   ((sec->flags & (SEC_ALLOC | SEC_LOAD | SEC_READONLY))         \
768    == (SEC_ALLOC | SEC_LOAD | SEC_READONLY))
769
770 /* The name of the stub section.  */
771 #define MIPS_ELF_STUB_SECTION_NAME(abfd) ".MIPS.stubs"
772
773 /* The size of an external REL relocation.  */
774 #define MIPS_ELF_REL_SIZE(abfd) \
775   (get_elf_backend_data (abfd)->s->sizeof_rel)
776
777 /* The size of an external RELA relocation.  */
778 #define MIPS_ELF_RELA_SIZE(abfd) \
779   (get_elf_backend_data (abfd)->s->sizeof_rela)
780
781 /* The size of an external dynamic table entry.  */
782 #define MIPS_ELF_DYN_SIZE(abfd) \
783   (get_elf_backend_data (abfd)->s->sizeof_dyn)
784
785 /* The size of a GOT entry.  */
786 #define MIPS_ELF_GOT_SIZE(abfd) \
787   (get_elf_backend_data (abfd)->s->arch_size / 8)
788
789 /* The size of the .rld_map section. */
790 #define MIPS_ELF_RLD_MAP_SIZE(abfd) \
791   (get_elf_backend_data (abfd)->s->arch_size / 8)
792
793 /* The size of a symbol-table entry.  */
794 #define MIPS_ELF_SYM_SIZE(abfd) \
795   (get_elf_backend_data (abfd)->s->sizeof_sym)
796
797 /* The default alignment for sections, as a power of two.  */
798 #define MIPS_ELF_LOG_FILE_ALIGN(abfd)                           \
799   (get_elf_backend_data (abfd)->s->log_file_align)
800
801 /* Get word-sized data.  */
802 #define MIPS_ELF_GET_WORD(abfd, ptr) \
803   (ABI_64_P (abfd) ? bfd_get_64 (abfd, ptr) : bfd_get_32 (abfd, ptr))
804
805 /* Put out word-sized data.  */
806 #define MIPS_ELF_PUT_WORD(abfd, val, ptr)       \
807   (ABI_64_P (abfd)                              \
808    ? bfd_put_64 (abfd, val, ptr)                \
809    : bfd_put_32 (abfd, val, ptr))
810
811 /* The opcode for word-sized loads (LW or LD).  */
812 #define MIPS_ELF_LOAD_WORD(abfd) \
813   (ABI_64_P (abfd) ? 0xdc000000 : 0x8c000000)
814
815 /* Add a dynamic symbol table-entry.  */
816 #define MIPS_ELF_ADD_DYNAMIC_ENTRY(info, tag, val)      \
817   _bfd_elf_add_dynamic_entry (info, tag, val)
818
819 #define MIPS_ELF_RTYPE_TO_HOWTO(abfd, rtype, rela)                      \
820   (get_elf_backend_data (abfd)->elf_backend_mips_rtype_to_howto (rtype, rela))
821
822 /* The name of the dynamic relocation section.  */
823 #define MIPS_ELF_REL_DYN_NAME(INFO) \
824   (mips_elf_hash_table (INFO)->is_vxworks ? ".rela.dyn" : ".rel.dyn")
825
826 /* In case we're on a 32-bit machine, construct a 64-bit "-1" value
827    from smaller values.  Start with zero, widen, *then* decrement.  */
828 #define MINUS_ONE       (((bfd_vma)0) - 1)
829 #define MINUS_TWO       (((bfd_vma)0) - 2)
830
831 /* The value to write into got[1] for SVR4 targets, to identify it is
832    a GNU object.  The dynamic linker can then use got[1] to store the
833    module pointer.  */
834 #define MIPS_ELF_GNU_GOT1_MASK(abfd) \
835   ((bfd_vma) 1 << (ABI_64_P (abfd) ? 63 : 31))
836
837 /* The offset of $gp from the beginning of the .got section.  */
838 #define ELF_MIPS_GP_OFFSET(INFO) \
839   (mips_elf_hash_table (INFO)->is_vxworks ? 0x0 : 0x7ff0)
840
841 /* The maximum size of the GOT for it to be addressable using 16-bit
842    offsets from $gp.  */
843 #define MIPS_ELF_GOT_MAX_SIZE(INFO) (ELF_MIPS_GP_OFFSET (INFO) + 0x7fff)
844
845 /* Instructions which appear in a stub.  */
846 #define STUB_LW(abfd)                                                   \
847   ((ABI_64_P (abfd)                                                     \
848     ? 0xdf998010                                /* ld t9,0x8010(gp) */  \
849     : 0x8f998010))                              /* lw t9,0x8010(gp) */
850 #define STUB_MOVE(abfd)                                                 \
851    ((ABI_64_P (abfd)                                                    \
852      ? 0x03e0782d                               /* daddu t7,ra */       \
853      : 0x03e07821))                             /* addu t7,ra */
854 #define STUB_LUI(VAL) (0x3c180000 + (VAL))      /* lui t8,VAL */
855 #define STUB_JALR 0x0320f809                    /* jalr t9,ra */
856 #define STUB_ORI(VAL) (0x37180000 + (VAL))      /* ori t8,t8,VAL */
857 #define STUB_LI16U(VAL) (0x34180000 + (VAL))    /* ori t8,zero,VAL unsigned */
858 #define STUB_LI16S(abfd, VAL)                                           \
859    ((ABI_64_P (abfd)                                                    \
860     ? (0x64180000 + (VAL))      /* daddiu t8,zero,VAL sign extended */  \
861     : (0x24180000 + (VAL))))    /* addiu t8,zero,VAL sign extended */
862
863 #define MIPS_FUNCTION_STUB_NORMAL_SIZE 16
864 #define MIPS_FUNCTION_STUB_BIG_SIZE 20
865
866 /* The name of the dynamic interpreter.  This is put in the .interp
867    section.  */
868
869 #define ELF_DYNAMIC_INTERPRETER(abfd)           \
870    (ABI_N32_P (abfd) ? "/usr/lib32/libc.so.1"   \
871     : ABI_64_P (abfd) ? "/usr/lib64/libc.so.1"  \
872     : "/usr/lib/libc.so.1")
873
874 #ifdef BFD64
875 #define MNAME(bfd,pre,pos) \
876   (ABI_64_P (bfd) ? CONCAT4 (pre,64,_,pos) : CONCAT4 (pre,32,_,pos))
877 #define ELF_R_SYM(bfd, i)                                       \
878   (ABI_64_P (bfd) ? ELF64_R_SYM (i) : ELF32_R_SYM (i))
879 #define ELF_R_TYPE(bfd, i)                                      \
880   (ABI_64_P (bfd) ? ELF64_MIPS_R_TYPE (i) : ELF32_R_TYPE (i))
881 #define ELF_R_INFO(bfd, s, t)                                   \
882   (ABI_64_P (bfd) ? ELF64_R_INFO (s, t) : ELF32_R_INFO (s, t))
883 #else
884 #define MNAME(bfd,pre,pos) CONCAT4 (pre,32,_,pos)
885 #define ELF_R_SYM(bfd, i)                                       \
886   (ELF32_R_SYM (i))
887 #define ELF_R_TYPE(bfd, i)                                      \
888   (ELF32_R_TYPE (i))
889 #define ELF_R_INFO(bfd, s, t)                                   \
890   (ELF32_R_INFO (s, t))
891 #endif
892 \f
893   /* The mips16 compiler uses a couple of special sections to handle
894      floating point arguments.
895
896      Section names that look like .mips16.fn.FNNAME contain stubs that
897      copy floating point arguments from the fp regs to the gp regs and
898      then jump to FNNAME.  If any 32 bit function calls FNNAME, the
899      call should be redirected to the stub instead.  If no 32 bit
900      function calls FNNAME, the stub should be discarded.  We need to
901      consider any reference to the function, not just a call, because
902      if the address of the function is taken we will need the stub,
903      since the address might be passed to a 32 bit function.
904
905      Section names that look like .mips16.call.FNNAME contain stubs
906      that copy floating point arguments from the gp regs to the fp
907      regs and then jump to FNNAME.  If FNNAME is a 32 bit function,
908      then any 16 bit function that calls FNNAME should be redirected
909      to the stub instead.  If FNNAME is not a 32 bit function, the
910      stub should be discarded.
911
912      .mips16.call.fp.FNNAME sections are similar, but contain stubs
913      which call FNNAME and then copy the return value from the fp regs
914      to the gp regs.  These stubs store the return value in $18 while
915      calling FNNAME; any function which might call one of these stubs
916      must arrange to save $18 around the call.  (This case is not
917      needed for 32 bit functions that call 16 bit functions, because
918      16 bit functions always return floating point values in both
919      $f0/$f1 and $2/$3.)
920
921      Note that in all cases FNNAME might be defined statically.
922      Therefore, FNNAME is not used literally.  Instead, the relocation
923      information will indicate which symbol the section is for.
924
925      We record any stubs that we find in the symbol table.  */
926
927 #define FN_STUB ".mips16.fn."
928 #define CALL_STUB ".mips16.call."
929 #define CALL_FP_STUB ".mips16.call.fp."
930
931 #define FN_STUB_P(name) CONST_STRNEQ (name, FN_STUB)
932 #define CALL_STUB_P(name) CONST_STRNEQ (name, CALL_STUB)
933 #define CALL_FP_STUB_P(name) CONST_STRNEQ (name, CALL_FP_STUB)
934 \f
935 /* The format of the first PLT entry in an O32 executable.  */
936 static const bfd_vma mips_o32_exec_plt0_entry[] =
937 {
938   0x3c1c0000,   /* lui $28, %hi(&GOTPLT[0])                             */
939   0x8f990000,   /* lw $25, %lo(&GOTPLT[0])($28)                         */
940   0x279c0000,   /* addiu $28, $28, %lo(&GOTPLT[0])                      */
941   0x031cc023,   /* subu $24, $24, $28                                   */
942   0x03e07821,   /* move $15, $31        # 32-bit move (addu)            */
943   0x0018c082,   /* srl $24, $24, 2                                      */
944   0x0320f809,   /* jalr $25                                             */
945   0x2718fffe    /* subu $24, $24, 2                                     */
946 };
947
948 /* The format of the first PLT entry in an N32 executable.  Different
949    because gp ($28) is not available; we use t2 ($14) instead.  */
950 static const bfd_vma mips_n32_exec_plt0_entry[] =
951 {
952   0x3c0e0000,   /* lui $14, %hi(&GOTPLT[0])                             */
953   0x8dd90000,   /* lw $25, %lo(&GOTPLT[0])($14)                         */
954   0x25ce0000,   /* addiu $14, $14, %lo(&GOTPLT[0])                      */
955   0x030ec023,   /* subu $24, $24, $14                                   */
956   0x03e07821,   /* move $15, $31        # 32-bit move (addu)            */
957   0x0018c082,   /* srl $24, $24, 2                                      */
958   0x0320f809,   /* jalr $25                                             */
959   0x2718fffe    /* subu $24, $24, 2                                     */
960 };
961
962 /* The format of the first PLT entry in an N64 executable.  Different
963    from N32 because of the increased size of GOT entries.  */
964 static const bfd_vma mips_n64_exec_plt0_entry[] =
965 {
966   0x3c0e0000,   /* lui $14, %hi(&GOTPLT[0])                             */
967   0xddd90000,   /* ld $25, %lo(&GOTPLT[0])($14)                         */
968   0x25ce0000,   /* addiu $14, $14, %lo(&GOTPLT[0])                      */
969   0x030ec023,   /* subu $24, $24, $14                                   */
970   0x03e0782d,   /* move $15, $31        # 64-bit move (daddu)           */
971   0x0018c0c2,   /* srl $24, $24, 3                                      */
972   0x0320f809,   /* jalr $25                                             */
973   0x2718fffe    /* subu $24, $24, 2                                     */
974 };
975
976 /* The format of subsequent PLT entries.  */
977 static const bfd_vma mips_exec_plt_entry[] =
978 {
979   0x3c0f0000,   /* lui $15, %hi(.got.plt entry)                 */
980   0x01f90000,   /* l[wd] $25, %lo(.got.plt entry)($15)          */
981   0x25f80000,   /* addiu $24, $15, %lo(.got.plt entry)          */
982   0x03200008    /* jr $25                                       */
983 };
984
985 /* The format of the first PLT entry in a VxWorks executable.  */
986 static const bfd_vma mips_vxworks_exec_plt0_entry[] =
987 {
988   0x3c190000,   /* lui t9, %hi(_GLOBAL_OFFSET_TABLE_)           */
989   0x27390000,   /* addiu t9, t9, %lo(_GLOBAL_OFFSET_TABLE_)     */
990   0x8f390008,   /* lw t9, 8(t9)                                 */
991   0x00000000,   /* nop                                          */
992   0x03200008,   /* jr t9                                        */
993   0x00000000    /* nop                                          */
994 };
995
996 /* The format of subsequent PLT entries.  */
997 static const bfd_vma mips_vxworks_exec_plt_entry[] =
998 {
999   0x10000000,   /* b .PLT_resolver                      */
1000   0x24180000,   /* li t8, <pltindex>                    */
1001   0x3c190000,   /* lui t9, %hi(<.got.plt slot>)         */
1002   0x27390000,   /* addiu t9, t9, %lo(<.got.plt slot>)   */
1003   0x8f390000,   /* lw t9, 0(t9)                         */
1004   0x00000000,   /* nop                                  */
1005   0x03200008,   /* jr t9                                */
1006   0x00000000    /* nop                                  */
1007 };
1008
1009 /* The format of the first PLT entry in a VxWorks shared object.  */
1010 static const bfd_vma mips_vxworks_shared_plt0_entry[] =
1011 {
1012   0x8f990008,   /* lw t9, 8(gp)         */
1013   0x00000000,   /* nop                  */
1014   0x03200008,   /* jr t9                */
1015   0x00000000,   /* nop                  */
1016   0x00000000,   /* nop                  */
1017   0x00000000    /* nop                  */
1018 };
1019
1020 /* The format of subsequent PLT entries.  */
1021 static const bfd_vma mips_vxworks_shared_plt_entry[] =
1022 {
1023   0x10000000,   /* b .PLT_resolver      */
1024   0x24180000    /* li t8, <pltindex>    */
1025 };
1026 \f
1027 /* microMIPS 32-bit opcode helper installer.  */
1028
1029 static void
1030 bfd_put_micromips_32 (const bfd *abfd, bfd_vma opcode, bfd_byte *ptr)
1031 {
1032   bfd_put_16 (abfd, (opcode >> 16) & 0xffff, ptr);
1033   bfd_put_16 (abfd,  opcode        & 0xffff, ptr + 2);
1034 }
1035
1036 /* microMIPS 32-bit opcode helper retriever.  */
1037
1038 static bfd_vma
1039 bfd_get_micromips_32 (const bfd *abfd, const bfd_byte *ptr)
1040 {
1041   return (bfd_get_16 (abfd, ptr) << 16) | bfd_get_16 (abfd, ptr + 2);
1042 }
1043 \f
1044 /* Look up an entry in a MIPS ELF linker hash table.  */
1045
1046 #define mips_elf_link_hash_lookup(table, string, create, copy, follow)  \
1047   ((struct mips_elf_link_hash_entry *)                                  \
1048    elf_link_hash_lookup (&(table)->root, (string), (create),            \
1049                          (copy), (follow)))
1050
1051 /* Traverse a MIPS ELF linker hash table.  */
1052
1053 #define mips_elf_link_hash_traverse(table, func, info)                  \
1054   (elf_link_hash_traverse                                               \
1055    (&(table)->root,                                                     \
1056     (bfd_boolean (*) (struct elf_link_hash_entry *, void *)) (func),    \
1057     (info)))
1058
1059 /* Find the base offsets for thread-local storage in this object,
1060    for GD/LD and IE/LE respectively.  */
1061
1062 #define TP_OFFSET 0x7000
1063 #define DTP_OFFSET 0x8000
1064
1065 static bfd_vma
1066 dtprel_base (struct bfd_link_info *info)
1067 {
1068   /* If tls_sec is NULL, we should have signalled an error already.  */
1069   if (elf_hash_table (info)->tls_sec == NULL)
1070     return 0;
1071   return elf_hash_table (info)->tls_sec->vma + DTP_OFFSET;
1072 }
1073
1074 static bfd_vma
1075 tprel_base (struct bfd_link_info *info)
1076 {
1077   /* If tls_sec is NULL, we should have signalled an error already.  */
1078   if (elf_hash_table (info)->tls_sec == NULL)
1079     return 0;
1080   return elf_hash_table (info)->tls_sec->vma + TP_OFFSET;
1081 }
1082
1083 /* Create an entry in a MIPS ELF linker hash table.  */
1084
1085 static struct bfd_hash_entry *
1086 mips_elf_link_hash_newfunc (struct bfd_hash_entry *entry,
1087                             struct bfd_hash_table *table, const char *string)
1088 {
1089   struct mips_elf_link_hash_entry *ret =
1090     (struct mips_elf_link_hash_entry *) entry;
1091
1092   /* Allocate the structure if it has not already been allocated by a
1093      subclass.  */
1094   if (ret == NULL)
1095     ret = bfd_hash_allocate (table, sizeof (struct mips_elf_link_hash_entry));
1096   if (ret == NULL)
1097     return (struct bfd_hash_entry *) ret;
1098
1099   /* Call the allocation method of the superclass.  */
1100   ret = ((struct mips_elf_link_hash_entry *)
1101          _bfd_elf_link_hash_newfunc ((struct bfd_hash_entry *) ret,
1102                                      table, string));
1103   if (ret != NULL)
1104     {
1105       /* Set local fields.  */
1106       memset (&ret->esym, 0, sizeof (EXTR));
1107       /* We use -2 as a marker to indicate that the information has
1108          not been set.  -1 means there is no associated ifd.  */
1109       ret->esym.ifd = -2;
1110       ret->la25_stub = 0;
1111       ret->possibly_dynamic_relocs = 0;
1112       ret->fn_stub = NULL;
1113       ret->call_stub = NULL;
1114       ret->call_fp_stub = NULL;
1115       ret->tls_type = GOT_NORMAL;
1116       ret->global_got_area = GGA_NONE;
1117       ret->got_only_for_calls = TRUE;
1118       ret->readonly_reloc = FALSE;
1119       ret->has_static_relocs = FALSE;
1120       ret->no_fn_stub = FALSE;
1121       ret->need_fn_stub = FALSE;
1122       ret->has_nonpic_branches = FALSE;
1123       ret->needs_lazy_stub = FALSE;
1124     }
1125
1126   return (struct bfd_hash_entry *) ret;
1127 }
1128
1129 /* Allocate MIPS ELF private object data.  */
1130
1131 bfd_boolean
1132 _bfd_mips_elf_mkobject (bfd *abfd)
1133 {
1134   return bfd_elf_allocate_object (abfd, sizeof (struct mips_elf_obj_tdata),
1135                                   MIPS_ELF_DATA);
1136 }
1137
1138 bfd_boolean
1139 _bfd_mips_elf_new_section_hook (bfd *abfd, asection *sec)
1140 {
1141   if (!sec->used_by_bfd)
1142     {
1143       struct _mips_elf_section_data *sdata;
1144       bfd_size_type amt = sizeof (*sdata);
1145
1146       sdata = bfd_zalloc (abfd, amt);
1147       if (sdata == NULL)
1148         return FALSE;
1149       sec->used_by_bfd = sdata;
1150     }
1151
1152   return _bfd_elf_new_section_hook (abfd, sec);
1153 }
1154 \f
1155 /* Read ECOFF debugging information from a .mdebug section into a
1156    ecoff_debug_info structure.  */
1157
1158 bfd_boolean
1159 _bfd_mips_elf_read_ecoff_info (bfd *abfd, asection *section,
1160                                struct ecoff_debug_info *debug)
1161 {
1162   HDRR *symhdr;
1163   const struct ecoff_debug_swap *swap;
1164   char *ext_hdr;
1165
1166   swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
1167   memset (debug, 0, sizeof (*debug));
1168
1169   ext_hdr = bfd_malloc (swap->external_hdr_size);
1170   if (ext_hdr == NULL && swap->external_hdr_size != 0)
1171     goto error_return;
1172
1173   if (! bfd_get_section_contents (abfd, section, ext_hdr, 0,
1174                                   swap->external_hdr_size))
1175     goto error_return;
1176
1177   symhdr = &debug->symbolic_header;
1178   (*swap->swap_hdr_in) (abfd, ext_hdr, symhdr);
1179
1180   /* The symbolic header contains absolute file offsets and sizes to
1181      read.  */
1182 #define READ(ptr, offset, count, size, type)                            \
1183   if (symhdr->count == 0)                                               \
1184     debug->ptr = NULL;                                                  \
1185   else                                                                  \
1186     {                                                                   \
1187       bfd_size_type amt = (bfd_size_type) size * symhdr->count;         \
1188       debug->ptr = bfd_malloc (amt);                                    \
1189       if (debug->ptr == NULL)                                           \
1190         goto error_return;                                              \
1191       if (bfd_seek (abfd, symhdr->offset, SEEK_SET) != 0                \
1192           || bfd_bread (debug->ptr, amt, abfd) != amt)                  \
1193         goto error_return;                                              \
1194     }
1195
1196   READ (line, cbLineOffset, cbLine, sizeof (unsigned char), unsigned char *);
1197   READ (external_dnr, cbDnOffset, idnMax, swap->external_dnr_size, void *);
1198   READ (external_pdr, cbPdOffset, ipdMax, swap->external_pdr_size, void *);
1199   READ (external_sym, cbSymOffset, isymMax, swap->external_sym_size, void *);
1200   READ (external_opt, cbOptOffset, ioptMax, swap->external_opt_size, void *);
1201   READ (external_aux, cbAuxOffset, iauxMax, sizeof (union aux_ext),
1202         union aux_ext *);
1203   READ (ss, cbSsOffset, issMax, sizeof (char), char *);
1204   READ (ssext, cbSsExtOffset, issExtMax, sizeof (char), char *);
1205   READ (external_fdr, cbFdOffset, ifdMax, swap->external_fdr_size, void *);
1206   READ (external_rfd, cbRfdOffset, crfd, swap->external_rfd_size, void *);
1207   READ (external_ext, cbExtOffset, iextMax, swap->external_ext_size, void *);
1208 #undef READ
1209
1210   debug->fdr = NULL;
1211
1212   return TRUE;
1213
1214  error_return:
1215   if (ext_hdr != NULL)
1216     free (ext_hdr);
1217   if (debug->line != NULL)
1218     free (debug->line);
1219   if (debug->external_dnr != NULL)
1220     free (debug->external_dnr);
1221   if (debug->external_pdr != NULL)
1222     free (debug->external_pdr);
1223   if (debug->external_sym != NULL)
1224     free (debug->external_sym);
1225   if (debug->external_opt != NULL)
1226     free (debug->external_opt);
1227   if (debug->external_aux != NULL)
1228     free (debug->external_aux);
1229   if (debug->ss != NULL)
1230     free (debug->ss);
1231   if (debug->ssext != NULL)
1232     free (debug->ssext);
1233   if (debug->external_fdr != NULL)
1234     free (debug->external_fdr);
1235   if (debug->external_rfd != NULL)
1236     free (debug->external_rfd);
1237   if (debug->external_ext != NULL)
1238     free (debug->external_ext);
1239   return FALSE;
1240 }
1241 \f
1242 /* Swap RPDR (runtime procedure table entry) for output.  */
1243
1244 static void
1245 ecoff_swap_rpdr_out (bfd *abfd, const RPDR *in, struct rpdr_ext *ex)
1246 {
1247   H_PUT_S32 (abfd, in->adr, ex->p_adr);
1248   H_PUT_32 (abfd, in->regmask, ex->p_regmask);
1249   H_PUT_32 (abfd, in->regoffset, ex->p_regoffset);
1250   H_PUT_32 (abfd, in->fregmask, ex->p_fregmask);
1251   H_PUT_32 (abfd, in->fregoffset, ex->p_fregoffset);
1252   H_PUT_32 (abfd, in->frameoffset, ex->p_frameoffset);
1253
1254   H_PUT_16 (abfd, in->framereg, ex->p_framereg);
1255   H_PUT_16 (abfd, in->pcreg, ex->p_pcreg);
1256
1257   H_PUT_32 (abfd, in->irpss, ex->p_irpss);
1258 }
1259
1260 /* Create a runtime procedure table from the .mdebug section.  */
1261
1262 static bfd_boolean
1263 mips_elf_create_procedure_table (void *handle, bfd *abfd,
1264                                  struct bfd_link_info *info, asection *s,
1265                                  struct ecoff_debug_info *debug)
1266 {
1267   const struct ecoff_debug_swap *swap;
1268   HDRR *hdr = &debug->symbolic_header;
1269   RPDR *rpdr, *rp;
1270   struct rpdr_ext *erp;
1271   void *rtproc;
1272   struct pdr_ext *epdr;
1273   struct sym_ext *esym;
1274   char *ss, **sv;
1275   char *str;
1276   bfd_size_type size;
1277   bfd_size_type count;
1278   unsigned long sindex;
1279   unsigned long i;
1280   PDR pdr;
1281   SYMR sym;
1282   const char *no_name_func = _("static procedure (no name)");
1283
1284   epdr = NULL;
1285   rpdr = NULL;
1286   esym = NULL;
1287   ss = NULL;
1288   sv = NULL;
1289
1290   swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
1291
1292   sindex = strlen (no_name_func) + 1;
1293   count = hdr->ipdMax;
1294   if (count > 0)
1295     {
1296       size = swap->external_pdr_size;
1297
1298       epdr = bfd_malloc (size * count);
1299       if (epdr == NULL)
1300         goto error_return;
1301
1302       if (! _bfd_ecoff_get_accumulated_pdr (handle, (bfd_byte *) epdr))
1303         goto error_return;
1304
1305       size = sizeof (RPDR);
1306       rp = rpdr = bfd_malloc (size * count);
1307       if (rpdr == NULL)
1308         goto error_return;
1309
1310       size = sizeof (char *);
1311       sv = bfd_malloc (size * count);
1312       if (sv == NULL)
1313         goto error_return;
1314
1315       count = hdr->isymMax;
1316       size = swap->external_sym_size;
1317       esym = bfd_malloc (size * count);
1318       if (esym == NULL)
1319         goto error_return;
1320
1321       if (! _bfd_ecoff_get_accumulated_sym (handle, (bfd_byte *) esym))
1322         goto error_return;
1323
1324       count = hdr->issMax;
1325       ss = bfd_malloc (count);
1326       if (ss == NULL)
1327         goto error_return;
1328       if (! _bfd_ecoff_get_accumulated_ss (handle, (bfd_byte *) ss))
1329         goto error_return;
1330
1331       count = hdr->ipdMax;
1332       for (i = 0; i < (unsigned long) count; i++, rp++)
1333         {
1334           (*swap->swap_pdr_in) (abfd, epdr + i, &pdr);
1335           (*swap->swap_sym_in) (abfd, &esym[pdr.isym], &sym);
1336           rp->adr = sym.value;
1337           rp->regmask = pdr.regmask;
1338           rp->regoffset = pdr.regoffset;
1339           rp->fregmask = pdr.fregmask;
1340           rp->fregoffset = pdr.fregoffset;
1341           rp->frameoffset = pdr.frameoffset;
1342           rp->framereg = pdr.framereg;
1343           rp->pcreg = pdr.pcreg;
1344           rp->irpss = sindex;
1345           sv[i] = ss + sym.iss;
1346           sindex += strlen (sv[i]) + 1;
1347         }
1348     }
1349
1350   size = sizeof (struct rpdr_ext) * (count + 2) + sindex;
1351   size = BFD_ALIGN (size, 16);
1352   rtproc = bfd_alloc (abfd, size);
1353   if (rtproc == NULL)
1354     {
1355       mips_elf_hash_table (info)->procedure_count = 0;
1356       goto error_return;
1357     }
1358
1359   mips_elf_hash_table (info)->procedure_count = count + 2;
1360
1361   erp = rtproc;
1362   memset (erp, 0, sizeof (struct rpdr_ext));
1363   erp++;
1364   str = (char *) rtproc + sizeof (struct rpdr_ext) * (count + 2);
1365   strcpy (str, no_name_func);
1366   str += strlen (no_name_func) + 1;
1367   for (i = 0; i < count; i++)
1368     {
1369       ecoff_swap_rpdr_out (abfd, rpdr + i, erp + i);
1370       strcpy (str, sv[i]);
1371       str += strlen (sv[i]) + 1;
1372     }
1373   H_PUT_S32 (abfd, -1, (erp + count)->p_adr);
1374
1375   /* Set the size and contents of .rtproc section.  */
1376   s->size = size;
1377   s->contents = rtproc;
1378
1379   /* Skip this section later on (I don't think this currently
1380      matters, but someday it might).  */
1381   s->map_head.link_order = NULL;
1382
1383   if (epdr != NULL)
1384     free (epdr);
1385   if (rpdr != NULL)
1386     free (rpdr);
1387   if (esym != NULL)
1388     free (esym);
1389   if (ss != NULL)
1390     free (ss);
1391   if (sv != NULL)
1392     free (sv);
1393
1394   return TRUE;
1395
1396  error_return:
1397   if (epdr != NULL)
1398     free (epdr);
1399   if (rpdr != NULL)
1400     free (rpdr);
1401   if (esym != NULL)
1402     free (esym);
1403   if (ss != NULL)
1404     free (ss);
1405   if (sv != NULL)
1406     free (sv);
1407   return FALSE;
1408 }
1409 \f
1410 /* We're going to create a stub for H.  Create a symbol for the stub's
1411    value and size, to help make the disassembly easier to read.  */
1412
1413 static bfd_boolean
1414 mips_elf_create_stub_symbol (struct bfd_link_info *info,
1415                              struct mips_elf_link_hash_entry *h,
1416                              const char *prefix, asection *s, bfd_vma value,
1417                              bfd_vma size)
1418 {
1419   struct bfd_link_hash_entry *bh;
1420   struct elf_link_hash_entry *elfh;
1421   const char *name;
1422
1423   if (ELF_ST_IS_MICROMIPS (h->root.other))
1424     value |= 1;
1425
1426   /* Create a new symbol.  */
1427   name = ACONCAT ((prefix, h->root.root.root.string, NULL));
1428   bh = NULL;
1429   if (!_bfd_generic_link_add_one_symbol (info, s->owner, name,
1430                                          BSF_LOCAL, s, value, NULL,
1431                                          TRUE, FALSE, &bh))
1432     return FALSE;
1433
1434   /* Make it a local function.  */
1435   elfh = (struct elf_link_hash_entry *) bh;
1436   elfh->type = ELF_ST_INFO (STB_LOCAL, STT_FUNC);
1437   elfh->size = size;
1438   elfh->forced_local = 1;
1439   return TRUE;
1440 }
1441
1442 /* We're about to redefine H.  Create a symbol to represent H's
1443    current value and size, to help make the disassembly easier
1444    to read.  */
1445
1446 static bfd_boolean
1447 mips_elf_create_shadow_symbol (struct bfd_link_info *info,
1448                                struct mips_elf_link_hash_entry *h,
1449                                const char *prefix)
1450 {
1451   struct bfd_link_hash_entry *bh;
1452   struct elf_link_hash_entry *elfh;
1453   const char *name;
1454   asection *s;
1455   bfd_vma value;
1456
1457   /* Read the symbol's value.  */
1458   BFD_ASSERT (h->root.root.type == bfd_link_hash_defined
1459               || h->root.root.type == bfd_link_hash_defweak);
1460   s = h->root.root.u.def.section;
1461   value = h->root.root.u.def.value;
1462
1463   /* Create a new symbol.  */
1464   name = ACONCAT ((prefix, h->root.root.root.string, NULL));
1465   bh = NULL;
1466   if (!_bfd_generic_link_add_one_symbol (info, s->owner, name,
1467                                          BSF_LOCAL, s, value, NULL,
1468                                          TRUE, FALSE, &bh))
1469     return FALSE;
1470
1471   /* Make it local and copy the other attributes from H.  */
1472   elfh = (struct elf_link_hash_entry *) bh;
1473   elfh->type = ELF_ST_INFO (STB_LOCAL, ELF_ST_TYPE (h->root.type));
1474   elfh->other = h->root.other;
1475   elfh->size = h->root.size;
1476   elfh->forced_local = 1;
1477   return TRUE;
1478 }
1479
1480 /* Return TRUE if relocations in SECTION can refer directly to a MIPS16
1481    function rather than to a hard-float stub.  */
1482
1483 static bfd_boolean
1484 section_allows_mips16_refs_p (asection *section)
1485 {
1486   const char *name;
1487
1488   name = bfd_get_section_name (section->owner, section);
1489   return (FN_STUB_P (name)
1490           || CALL_STUB_P (name)
1491           || CALL_FP_STUB_P (name)
1492           || strcmp (name, ".pdr") == 0);
1493 }
1494
1495 /* [RELOCS, RELEND) are the relocations against SEC, which is a MIPS16
1496    stub section of some kind.  Return the R_SYMNDX of the target
1497    function, or 0 if we can't decide which function that is.  */
1498
1499 static unsigned long
1500 mips16_stub_symndx (const struct elf_backend_data *bed,
1501                     asection *sec ATTRIBUTE_UNUSED,
1502                     const Elf_Internal_Rela *relocs,
1503                     const Elf_Internal_Rela *relend)
1504 {
1505   int int_rels_per_ext_rel = bed->s->int_rels_per_ext_rel;
1506   const Elf_Internal_Rela *rel;
1507
1508   /* Trust the first R_MIPS_NONE relocation, if any, but not a subsequent
1509      one in a compound relocation.  */
1510   for (rel = relocs; rel < relend; rel += int_rels_per_ext_rel)
1511     if (ELF_R_TYPE (sec->owner, rel->r_info) == R_MIPS_NONE)
1512       return ELF_R_SYM (sec->owner, rel->r_info);
1513
1514   /* Otherwise trust the first relocation, whatever its kind.  This is
1515      the traditional behavior.  */
1516   if (relocs < relend)
1517     return ELF_R_SYM (sec->owner, relocs->r_info);
1518
1519   return 0;
1520 }
1521
1522 /* Check the mips16 stubs for a particular symbol, and see if we can
1523    discard them.  */
1524
1525 static void
1526 mips_elf_check_mips16_stubs (struct bfd_link_info *info,
1527                              struct mips_elf_link_hash_entry *h)
1528 {
1529   /* Dynamic symbols must use the standard call interface, in case other
1530      objects try to call them.  */
1531   if (h->fn_stub != NULL
1532       && h->root.dynindx != -1)
1533     {
1534       mips_elf_create_shadow_symbol (info, h, ".mips16.");
1535       h->need_fn_stub = TRUE;
1536     }
1537
1538   if (h->fn_stub != NULL
1539       && ! h->need_fn_stub)
1540     {
1541       /* We don't need the fn_stub; the only references to this symbol
1542          are 16 bit calls.  Clobber the size to 0 to prevent it from
1543          being included in the link.  */
1544       h->fn_stub->size = 0;
1545       h->fn_stub->flags &= ~SEC_RELOC;
1546       h->fn_stub->reloc_count = 0;
1547       h->fn_stub->flags |= SEC_EXCLUDE;
1548     }
1549
1550   if (h->call_stub != NULL
1551       && ELF_ST_IS_MIPS16 (h->root.other))
1552     {
1553       /* We don't need the call_stub; this is a 16 bit function, so
1554          calls from other 16 bit functions are OK.  Clobber the size
1555          to 0 to prevent it from being included in the link.  */
1556       h->call_stub->size = 0;
1557       h->call_stub->flags &= ~SEC_RELOC;
1558       h->call_stub->reloc_count = 0;
1559       h->call_stub->flags |= SEC_EXCLUDE;
1560     }
1561
1562   if (h->call_fp_stub != NULL
1563       && ELF_ST_IS_MIPS16 (h->root.other))
1564     {
1565       /* We don't need the call_stub; this is a 16 bit function, so
1566          calls from other 16 bit functions are OK.  Clobber the size
1567          to 0 to prevent it from being included in the link.  */
1568       h->call_fp_stub->size = 0;
1569       h->call_fp_stub->flags &= ~SEC_RELOC;
1570       h->call_fp_stub->reloc_count = 0;
1571       h->call_fp_stub->flags |= SEC_EXCLUDE;
1572     }
1573 }
1574
1575 /* Hashtable callbacks for mips_elf_la25_stubs.  */
1576
1577 static hashval_t
1578 mips_elf_la25_stub_hash (const void *entry_)
1579 {
1580   const struct mips_elf_la25_stub *entry;
1581
1582   entry = (struct mips_elf_la25_stub *) entry_;
1583   return entry->h->root.root.u.def.section->id
1584     + entry->h->root.root.u.def.value;
1585 }
1586
1587 static int
1588 mips_elf_la25_stub_eq (const void *entry1_, const void *entry2_)
1589 {
1590   const struct mips_elf_la25_stub *entry1, *entry2;
1591
1592   entry1 = (struct mips_elf_la25_stub *) entry1_;
1593   entry2 = (struct mips_elf_la25_stub *) entry2_;
1594   return ((entry1->h->root.root.u.def.section
1595            == entry2->h->root.root.u.def.section)
1596           && (entry1->h->root.root.u.def.value
1597               == entry2->h->root.root.u.def.value));
1598 }
1599
1600 /* Called by the linker to set up the la25 stub-creation code.  FN is
1601    the linker's implementation of add_stub_function.  Return true on
1602    success.  */
1603
1604 bfd_boolean
1605 _bfd_mips_elf_init_stubs (struct bfd_link_info *info,
1606                           asection *(*fn) (const char *, asection *,
1607                                            asection *))
1608 {
1609   struct mips_elf_link_hash_table *htab;
1610
1611   htab = mips_elf_hash_table (info);
1612   if (htab == NULL)
1613     return FALSE;
1614
1615   htab->add_stub_section = fn;
1616   htab->la25_stubs = htab_try_create (1, mips_elf_la25_stub_hash,
1617                                       mips_elf_la25_stub_eq, NULL);
1618   if (htab->la25_stubs == NULL)
1619     return FALSE;
1620
1621   return TRUE;
1622 }
1623
1624 /* Return true if H is a locally-defined PIC function, in the sense
1625    that it or its fn_stub might need $25 to be valid on entry.
1626    Note that MIPS16 functions set up $gp using PC-relative instructions,
1627    so they themselves never need $25 to be valid.  Only non-MIPS16
1628    entry points are of interest here.  */
1629
1630 static bfd_boolean
1631 mips_elf_local_pic_function_p (struct mips_elf_link_hash_entry *h)
1632 {
1633   return ((h->root.root.type == bfd_link_hash_defined
1634            || h->root.root.type == bfd_link_hash_defweak)
1635           && h->root.def_regular
1636           && !bfd_is_abs_section (h->root.root.u.def.section)
1637           && (!ELF_ST_IS_MIPS16 (h->root.other)
1638               || (h->fn_stub && h->need_fn_stub))
1639           && (PIC_OBJECT_P (h->root.root.u.def.section->owner)
1640               || ELF_ST_IS_MIPS_PIC (h->root.other)));
1641 }
1642
1643 /* Set *SEC to the input section that contains the target of STUB.
1644    Return the offset of the target from the start of that section.  */
1645
1646 static bfd_vma
1647 mips_elf_get_la25_target (struct mips_elf_la25_stub *stub,
1648                           asection **sec)
1649 {
1650   if (ELF_ST_IS_MIPS16 (stub->h->root.other))
1651     {
1652       BFD_ASSERT (stub->h->need_fn_stub);
1653       *sec = stub->h->fn_stub;
1654       return 0;
1655     }
1656   else
1657     {
1658       *sec = stub->h->root.root.u.def.section;
1659       return stub->h->root.root.u.def.value;
1660     }
1661 }
1662
1663 /* STUB describes an la25 stub that we have decided to implement
1664    by inserting an LUI/ADDIU pair before the target function.
1665    Create the section and redirect the function symbol to it.  */
1666
1667 static bfd_boolean
1668 mips_elf_add_la25_intro (struct mips_elf_la25_stub *stub,
1669                          struct bfd_link_info *info)
1670 {
1671   struct mips_elf_link_hash_table *htab;
1672   char *name;
1673   asection *s, *input_section;
1674   unsigned int align;
1675
1676   htab = mips_elf_hash_table (info);
1677   if (htab == NULL)
1678     return FALSE;
1679
1680   /* Create a unique name for the new section.  */
1681   name = bfd_malloc (11 + sizeof (".text.stub."));
1682   if (name == NULL)
1683     return FALSE;
1684   sprintf (name, ".text.stub.%d", (int) htab_elements (htab->la25_stubs));
1685
1686   /* Create the section.  */
1687   mips_elf_get_la25_target (stub, &input_section);
1688   s = htab->add_stub_section (name, input_section,
1689                               input_section->output_section);
1690   if (s == NULL)
1691     return FALSE;
1692
1693   /* Make sure that any padding goes before the stub.  */
1694   align = input_section->alignment_power;
1695   if (!bfd_set_section_alignment (s->owner, s, align))
1696     return FALSE;
1697   if (align > 3)
1698     s->size = (1 << align) - 8;
1699
1700   /* Create a symbol for the stub.  */
1701   mips_elf_create_stub_symbol (info, stub->h, ".pic.", s, s->size, 8);
1702   stub->stub_section = s;
1703   stub->offset = s->size;
1704
1705   /* Allocate room for it.  */
1706   s->size += 8;
1707   return TRUE;
1708 }
1709
1710 /* STUB describes an la25 stub that we have decided to implement
1711    with a separate trampoline.  Allocate room for it and redirect
1712    the function symbol to it.  */
1713
1714 static bfd_boolean
1715 mips_elf_add_la25_trampoline (struct mips_elf_la25_stub *stub,
1716                               struct bfd_link_info *info)
1717 {
1718   struct mips_elf_link_hash_table *htab;
1719   asection *s;
1720
1721   htab = mips_elf_hash_table (info);
1722   if (htab == NULL)
1723     return FALSE;
1724
1725   /* Create a trampoline section, if we haven't already.  */
1726   s = htab->strampoline;
1727   if (s == NULL)
1728     {
1729       asection *input_section = stub->h->root.root.u.def.section;
1730       s = htab->add_stub_section (".text", NULL,
1731                                   input_section->output_section);
1732       if (s == NULL || !bfd_set_section_alignment (s->owner, s, 4))
1733         return FALSE;
1734       htab->strampoline = s;
1735     }
1736
1737   /* Create a symbol for the stub.  */
1738   mips_elf_create_stub_symbol (info, stub->h, ".pic.", s, s->size, 16);
1739   stub->stub_section = s;
1740   stub->offset = s->size;
1741
1742   /* Allocate room for it.  */
1743   s->size += 16;
1744   return TRUE;
1745 }
1746
1747 /* H describes a symbol that needs an la25 stub.  Make sure that an
1748    appropriate stub exists and point H at it.  */
1749
1750 static bfd_boolean
1751 mips_elf_add_la25_stub (struct bfd_link_info *info,
1752                         struct mips_elf_link_hash_entry *h)
1753 {
1754   struct mips_elf_link_hash_table *htab;
1755   struct mips_elf_la25_stub search, *stub;
1756   bfd_boolean use_trampoline_p;
1757   asection *s;
1758   bfd_vma value;
1759   void **slot;
1760
1761   /* Describe the stub we want.  */
1762   search.stub_section = NULL;
1763   search.offset = 0;
1764   search.h = h;
1765
1766   /* See if we've already created an equivalent stub.  */
1767   htab = mips_elf_hash_table (info);
1768   if (htab == NULL)
1769     return FALSE;
1770
1771   slot = htab_find_slot (htab->la25_stubs, &search, INSERT);
1772   if (slot == NULL)
1773     return FALSE;
1774
1775   stub = (struct mips_elf_la25_stub *) *slot;
1776   if (stub != NULL)
1777     {
1778       /* We can reuse the existing stub.  */
1779       h->la25_stub = stub;
1780       return TRUE;
1781     }
1782
1783   /* Create a permanent copy of ENTRY and add it to the hash table.  */
1784   stub = bfd_malloc (sizeof (search));
1785   if (stub == NULL)
1786     return FALSE;
1787   *stub = search;
1788   *slot = stub;
1789
1790   /* Prefer to use LUI/ADDIU stubs if the function is at the beginning
1791      of the section and if we would need no more than 2 nops.  */
1792   value = mips_elf_get_la25_target (stub, &s);
1793   use_trampoline_p = (value != 0 || s->alignment_power > 4);
1794
1795   h->la25_stub = stub;
1796   return (use_trampoline_p
1797           ? mips_elf_add_la25_trampoline (stub, info)
1798           : mips_elf_add_la25_intro (stub, info));
1799 }
1800
1801 /* A mips_elf_link_hash_traverse callback that is called before sizing
1802    sections.  DATA points to a mips_htab_traverse_info structure.  */
1803
1804 static bfd_boolean
1805 mips_elf_check_symbols (struct mips_elf_link_hash_entry *h, void *data)
1806 {
1807   struct mips_htab_traverse_info *hti;
1808
1809   hti = (struct mips_htab_traverse_info *) data;
1810   if (!hti->info->relocatable)
1811     mips_elf_check_mips16_stubs (hti->info, h);
1812
1813   if (mips_elf_local_pic_function_p (h))
1814     {
1815       /* PR 12845: If H is in a section that has been garbage
1816          collected it will have its output section set to *ABS*.  */
1817       if (bfd_is_abs_section (h->root.root.u.def.section->output_section))
1818         return TRUE;
1819
1820       /* H is a function that might need $25 to be valid on entry.
1821          If we're creating a non-PIC relocatable object, mark H as
1822          being PIC.  If we're creating a non-relocatable object with
1823          non-PIC branches and jumps to H, make sure that H has an la25
1824          stub.  */
1825       if (hti->info->relocatable)
1826         {
1827           if (!PIC_OBJECT_P (hti->output_bfd))
1828             h->root.other = ELF_ST_SET_MIPS_PIC (h->root.other);
1829         }
1830       else if (h->has_nonpic_branches && !mips_elf_add_la25_stub (hti->info, h))
1831         {
1832           hti->error = TRUE;
1833           return FALSE;
1834         }
1835     }
1836   return TRUE;
1837 }
1838 \f
1839 /* R_MIPS16_26 is used for the mips16 jal and jalx instructions.
1840    Most mips16 instructions are 16 bits, but these instructions
1841    are 32 bits.
1842
1843    The format of these instructions is:
1844
1845    +--------------+--------------------------------+
1846    |     JALX     | X|   Imm 20:16  |   Imm 25:21  |
1847    +--------------+--------------------------------+
1848    |                Immediate  15:0                |
1849    +-----------------------------------------------+
1850
1851    JALX is the 5-bit value 00011.  X is 0 for jal, 1 for jalx.
1852    Note that the immediate value in the first word is swapped.
1853
1854    When producing a relocatable object file, R_MIPS16_26 is
1855    handled mostly like R_MIPS_26.  In particular, the addend is
1856    stored as a straight 26-bit value in a 32-bit instruction.
1857    (gas makes life simpler for itself by never adjusting a
1858    R_MIPS16_26 reloc to be against a section, so the addend is
1859    always zero).  However, the 32 bit instruction is stored as 2
1860    16-bit values, rather than a single 32-bit value.  In a
1861    big-endian file, the result is the same; in a little-endian
1862    file, the two 16-bit halves of the 32 bit value are swapped.
1863    This is so that a disassembler can recognize the jal
1864    instruction.
1865
1866    When doing a final link, R_MIPS16_26 is treated as a 32 bit
1867    instruction stored as two 16-bit values.  The addend A is the
1868    contents of the targ26 field.  The calculation is the same as
1869    R_MIPS_26.  When storing the calculated value, reorder the
1870    immediate value as shown above, and don't forget to store the
1871    value as two 16-bit values.
1872
1873    To put it in MIPS ABI terms, the relocation field is T-targ26-16,
1874    defined as
1875
1876    big-endian:
1877    +--------+----------------------+
1878    |        |                      |
1879    |        |    targ26-16         |
1880    |31    26|25                   0|
1881    +--------+----------------------+
1882
1883    little-endian:
1884    +----------+------+-------------+
1885    |          |      |             |
1886    |  sub1    |      |     sub2    |
1887    |0        9|10  15|16         31|
1888    +----------+--------------------+
1889    where targ26-16 is sub1 followed by sub2 (i.e., the addend field A is
1890    ((sub1 << 16) | sub2)).
1891
1892    When producing a relocatable object file, the calculation is
1893    (((A < 2) | ((P + 4) & 0xf0000000) + S) >> 2)
1894    When producing a fully linked file, the calculation is
1895    let R = (((A < 2) | ((P + 4) & 0xf0000000) + S) >> 2)
1896    ((R & 0x1f0000) << 5) | ((R & 0x3e00000) >> 5) | (R & 0xffff)
1897
1898    The table below lists the other MIPS16 instruction relocations.
1899    Each one is calculated in the same way as the non-MIPS16 relocation
1900    given on the right, but using the extended MIPS16 layout of 16-bit
1901    immediate fields:
1902
1903         R_MIPS16_GPREL          R_MIPS_GPREL16
1904         R_MIPS16_GOT16          R_MIPS_GOT16
1905         R_MIPS16_CALL16         R_MIPS_CALL16
1906         R_MIPS16_HI16           R_MIPS_HI16
1907         R_MIPS16_LO16           R_MIPS_LO16
1908
1909    A typical instruction will have a format like this:
1910
1911    +--------------+--------------------------------+
1912    |    EXTEND    |     Imm 10:5    |   Imm 15:11  |
1913    +--------------+--------------------------------+
1914    |    Major     |   rx   |   ry   |   Imm  4:0   |
1915    +--------------+--------------------------------+
1916
1917    EXTEND is the five bit value 11110.  Major is the instruction
1918    opcode.
1919
1920    All we need to do here is shuffle the bits appropriately.
1921    As above, the two 16-bit halves must be swapped on a
1922    little-endian system.  */
1923
1924 static inline bfd_boolean
1925 mips16_reloc_p (int r_type)
1926 {
1927   switch (r_type)
1928     {
1929     case R_MIPS16_26:
1930     case R_MIPS16_GPREL:
1931     case R_MIPS16_GOT16:
1932     case R_MIPS16_CALL16:
1933     case R_MIPS16_HI16:
1934     case R_MIPS16_LO16:
1935     case R_MIPS16_TLS_GD:
1936     case R_MIPS16_TLS_LDM:
1937     case R_MIPS16_TLS_DTPREL_HI16:
1938     case R_MIPS16_TLS_DTPREL_LO16:
1939     case R_MIPS16_TLS_GOTTPREL:
1940     case R_MIPS16_TLS_TPREL_HI16:
1941     case R_MIPS16_TLS_TPREL_LO16:
1942       return TRUE;
1943
1944     default:
1945       return FALSE;
1946     }
1947 }
1948
1949 /* Check if a microMIPS reloc.  */
1950
1951 static inline bfd_boolean
1952 micromips_reloc_p (unsigned int r_type)
1953 {
1954   return r_type >= R_MICROMIPS_min && r_type < R_MICROMIPS_max;
1955 }
1956
1957 /* Similar to MIPS16, the two 16-bit halves in microMIPS must be swapped
1958    on a little-endian system.  This does not apply to R_MICROMIPS_PC7_S1
1959    and R_MICROMIPS_PC10_S1 relocs that apply to 16-bit instructions.  */
1960
1961 static inline bfd_boolean
1962 micromips_reloc_shuffle_p (unsigned int r_type)
1963 {
1964   return (micromips_reloc_p (r_type)
1965           && r_type != R_MICROMIPS_PC7_S1
1966           && r_type != R_MICROMIPS_PC10_S1);
1967 }
1968
1969 static inline bfd_boolean
1970 got16_reloc_p (int r_type)
1971 {
1972   return (r_type == R_MIPS_GOT16
1973           || r_type == R_MIPS16_GOT16
1974           || r_type == R_MICROMIPS_GOT16);
1975 }
1976
1977 static inline bfd_boolean
1978 call16_reloc_p (int r_type)
1979 {
1980   return (r_type == R_MIPS_CALL16
1981           || r_type == R_MIPS16_CALL16
1982           || r_type == R_MICROMIPS_CALL16);
1983 }
1984
1985 static inline bfd_boolean
1986 got_disp_reloc_p (unsigned int r_type)
1987 {
1988   return r_type == R_MIPS_GOT_DISP || r_type == R_MICROMIPS_GOT_DISP;
1989 }
1990
1991 static inline bfd_boolean
1992 got_page_reloc_p (unsigned int r_type)
1993 {
1994   return r_type == R_MIPS_GOT_PAGE || r_type == R_MICROMIPS_GOT_PAGE;
1995 }
1996
1997 static inline bfd_boolean
1998 got_ofst_reloc_p (unsigned int r_type)
1999 {
2000   return r_type == R_MIPS_GOT_OFST || r_type == R_MICROMIPS_GOT_OFST;
2001 }
2002
2003 static inline bfd_boolean
2004 got_hi16_reloc_p (unsigned int r_type)
2005 {
2006   return r_type == R_MIPS_GOT_HI16 || r_type == R_MICROMIPS_GOT_HI16;
2007 }
2008
2009 static inline bfd_boolean
2010 got_lo16_reloc_p (unsigned int r_type)
2011 {
2012   return r_type == R_MIPS_GOT_LO16 || r_type == R_MICROMIPS_GOT_LO16;
2013 }
2014
2015 static inline bfd_boolean
2016 call_hi16_reloc_p (unsigned int r_type)
2017 {
2018   return r_type == R_MIPS_CALL_HI16 || r_type == R_MICROMIPS_CALL_HI16;
2019 }
2020
2021 static inline bfd_boolean
2022 call_lo16_reloc_p (unsigned int r_type)
2023 {
2024   return r_type == R_MIPS_CALL_LO16 || r_type == R_MICROMIPS_CALL_LO16;
2025 }
2026
2027 static inline bfd_boolean
2028 hi16_reloc_p (int r_type)
2029 {
2030   return (r_type == R_MIPS_HI16
2031           || r_type == R_MIPS16_HI16
2032           || r_type == R_MICROMIPS_HI16);
2033 }
2034
2035 static inline bfd_boolean
2036 lo16_reloc_p (int r_type)
2037 {
2038   return (r_type == R_MIPS_LO16
2039           || r_type == R_MIPS16_LO16
2040           || r_type == R_MICROMIPS_LO16);
2041 }
2042
2043 static inline bfd_boolean
2044 mips16_call_reloc_p (int r_type)
2045 {
2046   return r_type == R_MIPS16_26 || r_type == R_MIPS16_CALL16;
2047 }
2048
2049 static inline bfd_boolean
2050 jal_reloc_p (int r_type)
2051 {
2052   return (r_type == R_MIPS_26
2053           || r_type == R_MIPS16_26
2054           || r_type == R_MICROMIPS_26_S1);
2055 }
2056
2057 static inline bfd_boolean
2058 micromips_branch_reloc_p (int r_type)
2059 {
2060   return (r_type == R_MICROMIPS_26_S1
2061           || r_type == R_MICROMIPS_PC16_S1
2062           || r_type == R_MICROMIPS_PC10_S1
2063           || r_type == R_MICROMIPS_PC7_S1);
2064 }
2065
2066 static inline bfd_boolean
2067 tls_gd_reloc_p (unsigned int r_type)
2068 {
2069   return (r_type == R_MIPS_TLS_GD
2070           || r_type == R_MIPS16_TLS_GD
2071           || r_type == R_MICROMIPS_TLS_GD);
2072 }
2073
2074 static inline bfd_boolean
2075 tls_ldm_reloc_p (unsigned int r_type)
2076 {
2077   return (r_type == R_MIPS_TLS_LDM
2078           || r_type == R_MIPS16_TLS_LDM
2079           || r_type == R_MICROMIPS_TLS_LDM);
2080 }
2081
2082 static inline bfd_boolean
2083 tls_gottprel_reloc_p (unsigned int r_type)
2084 {
2085   return (r_type == R_MIPS_TLS_GOTTPREL
2086           || r_type == R_MIPS16_TLS_GOTTPREL
2087           || r_type == R_MICROMIPS_TLS_GOTTPREL);
2088 }
2089
2090 void
2091 _bfd_mips_elf_reloc_unshuffle (bfd *abfd, int r_type,
2092                                bfd_boolean jal_shuffle, bfd_byte *data)
2093 {
2094   bfd_vma first, second, val;
2095
2096   if (!mips16_reloc_p (r_type) && !micromips_reloc_shuffle_p (r_type))
2097     return;
2098
2099   /* Pick up the first and second halfwords of the instruction.  */
2100   first = bfd_get_16 (abfd, data);
2101   second = bfd_get_16 (abfd, data + 2);
2102   if (micromips_reloc_p (r_type) || (r_type == R_MIPS16_26 && !jal_shuffle))
2103     val = first << 16 | second;
2104   else if (r_type != R_MIPS16_26)
2105     val = (((first & 0xf800) << 16) | ((second & 0xffe0) << 11)
2106            | ((first & 0x1f) << 11) | (first & 0x7e0) | (second & 0x1f));
2107   else
2108     val = (((first & 0xfc00) << 16) | ((first & 0x3e0) << 11)
2109            | ((first & 0x1f) << 21) | second);
2110   bfd_put_32 (abfd, val, data);
2111 }
2112
2113 void
2114 _bfd_mips_elf_reloc_shuffle (bfd *abfd, int r_type,
2115                              bfd_boolean jal_shuffle, bfd_byte *data)
2116 {
2117   bfd_vma first, second, val;
2118
2119   if (!mips16_reloc_p (r_type) && !micromips_reloc_shuffle_p (r_type))
2120     return;
2121
2122   val = bfd_get_32 (abfd, data);
2123   if (micromips_reloc_p (r_type) || (r_type == R_MIPS16_26 && !jal_shuffle))
2124     {
2125       second = val & 0xffff;
2126       first = val >> 16;
2127     }
2128   else if (r_type != R_MIPS16_26)
2129     {
2130       second = ((val >> 11) & 0xffe0) | (val & 0x1f);
2131       first = ((val >> 16) & 0xf800) | ((val >> 11) & 0x1f) | (val & 0x7e0);
2132     }
2133   else
2134     {
2135       second = val & 0xffff;
2136       first = ((val >> 16) & 0xfc00) | ((val >> 11) & 0x3e0)
2137                | ((val >> 21) & 0x1f);
2138     }
2139   bfd_put_16 (abfd, second, data + 2);
2140   bfd_put_16 (abfd, first, data);
2141 }
2142
2143 bfd_reloc_status_type
2144 _bfd_mips_elf_gprel16_with_gp (bfd *abfd, asymbol *symbol,
2145                                arelent *reloc_entry, asection *input_section,
2146                                bfd_boolean relocatable, void *data, bfd_vma gp)
2147 {
2148   bfd_vma relocation;
2149   bfd_signed_vma val;
2150   bfd_reloc_status_type status;
2151
2152   if (bfd_is_com_section (symbol->section))
2153     relocation = 0;
2154   else
2155     relocation = symbol->value;
2156
2157   relocation += symbol->section->output_section->vma;
2158   relocation += symbol->section->output_offset;
2159
2160   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2161     return bfd_reloc_outofrange;
2162
2163   /* Set val to the offset into the section or symbol.  */
2164   val = reloc_entry->addend;
2165
2166   _bfd_mips_elf_sign_extend (val, 16);
2167
2168   /* Adjust val for the final section location and GP value.  If we
2169      are producing relocatable output, we don't want to do this for
2170      an external symbol.  */
2171   if (! relocatable
2172       || (symbol->flags & BSF_SECTION_SYM) != 0)
2173     val += relocation - gp;
2174
2175   if (reloc_entry->howto->partial_inplace)
2176     {
2177       status = _bfd_relocate_contents (reloc_entry->howto, abfd, val,
2178                                        (bfd_byte *) data
2179                                        + reloc_entry->address);
2180       if (status != bfd_reloc_ok)
2181         return status;
2182     }
2183   else
2184     reloc_entry->addend = val;
2185
2186   if (relocatable)
2187     reloc_entry->address += input_section->output_offset;
2188
2189   return bfd_reloc_ok;
2190 }
2191
2192 /* Used to store a REL high-part relocation such as R_MIPS_HI16 or
2193    R_MIPS_GOT16.  REL is the relocation, INPUT_SECTION is the section
2194    that contains the relocation field and DATA points to the start of
2195    INPUT_SECTION.  */
2196
2197 struct mips_hi16
2198 {
2199   struct mips_hi16 *next;
2200   bfd_byte *data;
2201   asection *input_section;
2202   arelent rel;
2203 };
2204
2205 /* FIXME: This should not be a static variable.  */
2206
2207 static struct mips_hi16 *mips_hi16_list;
2208
2209 /* A howto special_function for REL *HI16 relocations.  We can only
2210    calculate the correct value once we've seen the partnering
2211    *LO16 relocation, so just save the information for later.
2212
2213    The ABI requires that the *LO16 immediately follow the *HI16.
2214    However, as a GNU extension, we permit an arbitrary number of
2215    *HI16s to be associated with a single *LO16.  This significantly
2216    simplies the relocation handling in gcc.  */
2217
2218 bfd_reloc_status_type
2219 _bfd_mips_elf_hi16_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry,
2220                           asymbol *symbol ATTRIBUTE_UNUSED, void *data,
2221                           asection *input_section, bfd *output_bfd,
2222                           char **error_message ATTRIBUTE_UNUSED)
2223 {
2224   struct mips_hi16 *n;
2225
2226   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2227     return bfd_reloc_outofrange;
2228
2229   n = bfd_malloc (sizeof *n);
2230   if (n == NULL)
2231     return bfd_reloc_outofrange;
2232
2233   n->next = mips_hi16_list;
2234   n->data = data;
2235   n->input_section = input_section;
2236   n->rel = *reloc_entry;
2237   mips_hi16_list = n;
2238
2239   if (output_bfd != NULL)
2240     reloc_entry->address += input_section->output_offset;
2241
2242   return bfd_reloc_ok;
2243 }
2244
2245 /* A howto special_function for REL R_MIPS*_GOT16 relocations.  This is just
2246    like any other 16-bit relocation when applied to global symbols, but is
2247    treated in the same as R_MIPS_HI16 when applied to local symbols.  */
2248
2249 bfd_reloc_status_type
2250 _bfd_mips_elf_got16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2251                            void *data, asection *input_section,
2252                            bfd *output_bfd, char **error_message)
2253 {
2254   if ((symbol->flags & (BSF_GLOBAL | BSF_WEAK)) != 0
2255       || bfd_is_und_section (bfd_get_section (symbol))
2256       || bfd_is_com_section (bfd_get_section (symbol)))
2257     /* The relocation is against a global symbol.  */
2258     return _bfd_mips_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2259                                         input_section, output_bfd,
2260                                         error_message);
2261
2262   return _bfd_mips_elf_hi16_reloc (abfd, reloc_entry, symbol, data,
2263                                    input_section, output_bfd, error_message);
2264 }
2265
2266 /* A howto special_function for REL *LO16 relocations.  The *LO16 itself
2267    is a straightforward 16 bit inplace relocation, but we must deal with
2268    any partnering high-part relocations as well.  */
2269
2270 bfd_reloc_status_type
2271 _bfd_mips_elf_lo16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2272                           void *data, asection *input_section,
2273                           bfd *output_bfd, char **error_message)
2274 {
2275   bfd_vma vallo;
2276   bfd_byte *location = (bfd_byte *) data + reloc_entry->address;
2277
2278   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2279     return bfd_reloc_outofrange;
2280
2281   _bfd_mips_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, FALSE,
2282                                  location);
2283   vallo = bfd_get_32 (abfd, location);
2284   _bfd_mips_elf_reloc_shuffle (abfd, reloc_entry->howto->type, FALSE,
2285                                location);
2286
2287   while (mips_hi16_list != NULL)
2288     {
2289       bfd_reloc_status_type ret;
2290       struct mips_hi16 *hi;
2291
2292       hi = mips_hi16_list;
2293
2294       /* R_MIPS*_GOT16 relocations are something of a special case.  We
2295          want to install the addend in the same way as for a R_MIPS*_HI16
2296          relocation (with a rightshift of 16).  However, since GOT16
2297          relocations can also be used with global symbols, their howto
2298          has a rightshift of 0.  */
2299       if (hi->rel.howto->type == R_MIPS_GOT16)
2300         hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MIPS_HI16, FALSE);
2301       else if (hi->rel.howto->type == R_MIPS16_GOT16)
2302         hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MIPS16_HI16, FALSE);
2303       else if (hi->rel.howto->type == R_MICROMIPS_GOT16)
2304         hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MICROMIPS_HI16, FALSE);
2305
2306       /* VALLO is a signed 16-bit number.  Bias it by 0x8000 so that any
2307          carry or borrow will induce a change of +1 or -1 in the high part.  */
2308       hi->rel.addend += (vallo + 0x8000) & 0xffff;
2309
2310       ret = _bfd_mips_elf_generic_reloc (abfd, &hi->rel, symbol, hi->data,
2311                                          hi->input_section, output_bfd,
2312                                          error_message);
2313       if (ret != bfd_reloc_ok)
2314         return ret;
2315
2316       mips_hi16_list = hi->next;
2317       free (hi);
2318     }
2319
2320   return _bfd_mips_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2321                                       input_section, output_bfd,
2322                                       error_message);
2323 }
2324
2325 /* A generic howto special_function.  This calculates and installs the
2326    relocation itself, thus avoiding the oft-discussed problems in
2327    bfd_perform_relocation and bfd_install_relocation.  */
2328
2329 bfd_reloc_status_type
2330 _bfd_mips_elf_generic_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry,
2331                              asymbol *symbol, void *data ATTRIBUTE_UNUSED,
2332                              asection *input_section, bfd *output_bfd,
2333                              char **error_message ATTRIBUTE_UNUSED)
2334 {
2335   bfd_signed_vma val;
2336   bfd_reloc_status_type status;
2337   bfd_boolean relocatable;
2338
2339   relocatable = (output_bfd != NULL);
2340
2341   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2342     return bfd_reloc_outofrange;
2343
2344   /* Build up the field adjustment in VAL.  */
2345   val = 0;
2346   if (!relocatable || (symbol->flags & BSF_SECTION_SYM) != 0)
2347     {
2348       /* Either we're calculating the final field value or we have a
2349          relocation against a section symbol.  Add in the section's
2350          offset or address.  */
2351       val += symbol->section->output_section->vma;
2352       val += symbol->section->output_offset;
2353     }
2354
2355   if (!relocatable)
2356     {
2357       /* We're calculating the final field value.  Add in the symbol's value
2358          and, if pc-relative, subtract the address of the field itself.  */
2359       val += symbol->value;
2360       if (reloc_entry->howto->pc_relative)
2361         {
2362           val -= input_section->output_section->vma;
2363           val -= input_section->output_offset;
2364           val -= reloc_entry->address;
2365         }
2366     }
2367
2368   /* VAL is now the final adjustment.  If we're keeping this relocation
2369      in the output file, and if the relocation uses a separate addend,
2370      we just need to add VAL to that addend.  Otherwise we need to add
2371      VAL to the relocation field itself.  */
2372   if (relocatable && !reloc_entry->howto->partial_inplace)
2373     reloc_entry->addend += val;
2374   else
2375     {
2376       bfd_byte *location = (bfd_byte *) data + reloc_entry->address;
2377
2378       /* Add in the separate addend, if any.  */
2379       val += reloc_entry->addend;
2380
2381       /* Add VAL to the relocation field.  */
2382       _bfd_mips_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, FALSE,
2383                                      location);
2384       status = _bfd_relocate_contents (reloc_entry->howto, abfd, val,
2385                                        location);
2386       _bfd_mips_elf_reloc_shuffle (abfd, reloc_entry->howto->type, FALSE,
2387                                    location);
2388
2389       if (status != bfd_reloc_ok)
2390         return status;
2391     }
2392
2393   if (relocatable)
2394     reloc_entry->address += input_section->output_offset;
2395
2396   return bfd_reloc_ok;
2397 }
2398 \f
2399 /* Swap an entry in a .gptab section.  Note that these routines rely
2400    on the equivalence of the two elements of the union.  */
2401
2402 static void
2403 bfd_mips_elf32_swap_gptab_in (bfd *abfd, const Elf32_External_gptab *ex,
2404                               Elf32_gptab *in)
2405 {
2406   in->gt_entry.gt_g_value = H_GET_32 (abfd, ex->gt_entry.gt_g_value);
2407   in->gt_entry.gt_bytes = H_GET_32 (abfd, ex->gt_entry.gt_bytes);
2408 }
2409
2410 static void
2411 bfd_mips_elf32_swap_gptab_out (bfd *abfd, const Elf32_gptab *in,
2412                                Elf32_External_gptab *ex)
2413 {
2414   H_PUT_32 (abfd, in->gt_entry.gt_g_value, ex->gt_entry.gt_g_value);
2415   H_PUT_32 (abfd, in->gt_entry.gt_bytes, ex->gt_entry.gt_bytes);
2416 }
2417
2418 static void
2419 bfd_elf32_swap_compact_rel_out (bfd *abfd, const Elf32_compact_rel *in,
2420                                 Elf32_External_compact_rel *ex)
2421 {
2422   H_PUT_32 (abfd, in->id1, ex->id1);
2423   H_PUT_32 (abfd, in->num, ex->num);
2424   H_PUT_32 (abfd, in->id2, ex->id2);
2425   H_PUT_32 (abfd, in->offset, ex->offset);
2426   H_PUT_32 (abfd, in->reserved0, ex->reserved0);
2427   H_PUT_32 (abfd, in->reserved1, ex->reserved1);
2428 }
2429
2430 static void
2431 bfd_elf32_swap_crinfo_out (bfd *abfd, const Elf32_crinfo *in,
2432                            Elf32_External_crinfo *ex)
2433 {
2434   unsigned long l;
2435
2436   l = (((in->ctype & CRINFO_CTYPE) << CRINFO_CTYPE_SH)
2437        | ((in->rtype & CRINFO_RTYPE) << CRINFO_RTYPE_SH)
2438        | ((in->dist2to & CRINFO_DIST2TO) << CRINFO_DIST2TO_SH)
2439        | ((in->relvaddr & CRINFO_RELVADDR) << CRINFO_RELVADDR_SH));
2440   H_PUT_32 (abfd, l, ex->info);
2441   H_PUT_32 (abfd, in->konst, ex->konst);
2442   H_PUT_32 (abfd, in->vaddr, ex->vaddr);
2443 }
2444 \f
2445 /* A .reginfo section holds a single Elf32_RegInfo structure.  These
2446    routines swap this structure in and out.  They are used outside of
2447    BFD, so they are globally visible.  */
2448
2449 void
2450 bfd_mips_elf32_swap_reginfo_in (bfd *abfd, const Elf32_External_RegInfo *ex,
2451                                 Elf32_RegInfo *in)
2452 {
2453   in->ri_gprmask = H_GET_32 (abfd, ex->ri_gprmask);
2454   in->ri_cprmask[0] = H_GET_32 (abfd, ex->ri_cprmask[0]);
2455   in->ri_cprmask[1] = H_GET_32 (abfd, ex->ri_cprmask[1]);
2456   in->ri_cprmask[2] = H_GET_32 (abfd, ex->ri_cprmask[2]);
2457   in->ri_cprmask[3] = H_GET_32 (abfd, ex->ri_cprmask[3]);
2458   in->ri_gp_value = H_GET_32 (abfd, ex->ri_gp_value);
2459 }
2460
2461 void
2462 bfd_mips_elf32_swap_reginfo_out (bfd *abfd, const Elf32_RegInfo *in,
2463                                  Elf32_External_RegInfo *ex)
2464 {
2465   H_PUT_32 (abfd, in->ri_gprmask, ex->ri_gprmask);
2466   H_PUT_32 (abfd, in->ri_cprmask[0], ex->ri_cprmask[0]);
2467   H_PUT_32 (abfd, in->ri_cprmask[1], ex->ri_cprmask[1]);
2468   H_PUT_32 (abfd, in->ri_cprmask[2], ex->ri_cprmask[2]);
2469   H_PUT_32 (abfd, in->ri_cprmask[3], ex->ri_cprmask[3]);
2470   H_PUT_32 (abfd, in->ri_gp_value, ex->ri_gp_value);
2471 }
2472
2473 /* In the 64 bit ABI, the .MIPS.options section holds register
2474    information in an Elf64_Reginfo structure.  These routines swap
2475    them in and out.  They are globally visible because they are used
2476    outside of BFD.  These routines are here so that gas can call them
2477    without worrying about whether the 64 bit ABI has been included.  */
2478
2479 void
2480 bfd_mips_elf64_swap_reginfo_in (bfd *abfd, const Elf64_External_RegInfo *ex,
2481                                 Elf64_Internal_RegInfo *in)
2482 {
2483   in->ri_gprmask = H_GET_32 (abfd, ex->ri_gprmask);
2484   in->ri_pad = H_GET_32 (abfd, ex->ri_pad);
2485   in->ri_cprmask[0] = H_GET_32 (abfd, ex->ri_cprmask[0]);
2486   in->ri_cprmask[1] = H_GET_32 (abfd, ex->ri_cprmask[1]);
2487   in->ri_cprmask[2] = H_GET_32 (abfd, ex->ri_cprmask[2]);
2488   in->ri_cprmask[3] = H_GET_32 (abfd, ex->ri_cprmask[3]);
2489   in->ri_gp_value = H_GET_64 (abfd, ex->ri_gp_value);
2490 }
2491
2492 void
2493 bfd_mips_elf64_swap_reginfo_out (bfd *abfd, const Elf64_Internal_RegInfo *in,
2494                                  Elf64_External_RegInfo *ex)
2495 {
2496   H_PUT_32 (abfd, in->ri_gprmask, ex->ri_gprmask);
2497   H_PUT_32 (abfd, in->ri_pad, ex->ri_pad);
2498   H_PUT_32 (abfd, in->ri_cprmask[0], ex->ri_cprmask[0]);
2499   H_PUT_32 (abfd, in->ri_cprmask[1], ex->ri_cprmask[1]);
2500   H_PUT_32 (abfd, in->ri_cprmask[2], ex->ri_cprmask[2]);
2501   H_PUT_32 (abfd, in->ri_cprmask[3], ex->ri_cprmask[3]);
2502   H_PUT_64 (abfd, in->ri_gp_value, ex->ri_gp_value);
2503 }
2504
2505 /* Swap in an options header.  */
2506
2507 void
2508 bfd_mips_elf_swap_options_in (bfd *abfd, const Elf_External_Options *ex,
2509                               Elf_Internal_Options *in)
2510 {
2511   in->kind = H_GET_8 (abfd, ex->kind);
2512   in->size = H_GET_8 (abfd, ex->size);
2513   in->section = H_GET_16 (abfd, ex->section);
2514   in->info = H_GET_32 (abfd, ex->info);
2515 }
2516
2517 /* Swap out an options header.  */
2518
2519 void
2520 bfd_mips_elf_swap_options_out (bfd *abfd, const Elf_Internal_Options *in,
2521                                Elf_External_Options *ex)
2522 {
2523   H_PUT_8 (abfd, in->kind, ex->kind);
2524   H_PUT_8 (abfd, in->size, ex->size);
2525   H_PUT_16 (abfd, in->section, ex->section);
2526   H_PUT_32 (abfd, in->info, ex->info);
2527 }
2528 \f
2529 /* This function is called via qsort() to sort the dynamic relocation
2530    entries by increasing r_symndx value.  */
2531
2532 static int
2533 sort_dynamic_relocs (const void *arg1, const void *arg2)
2534 {
2535   Elf_Internal_Rela int_reloc1;
2536   Elf_Internal_Rela int_reloc2;
2537   int diff;
2538
2539   bfd_elf32_swap_reloc_in (reldyn_sorting_bfd, arg1, &int_reloc1);
2540   bfd_elf32_swap_reloc_in (reldyn_sorting_bfd, arg2, &int_reloc2);
2541
2542   diff = ELF32_R_SYM (int_reloc1.r_info) - ELF32_R_SYM (int_reloc2.r_info);
2543   if (diff != 0)
2544     return diff;
2545
2546   if (int_reloc1.r_offset < int_reloc2.r_offset)
2547     return -1;
2548   if (int_reloc1.r_offset > int_reloc2.r_offset)
2549     return 1;
2550   return 0;
2551 }
2552
2553 /* Like sort_dynamic_relocs, but used for elf64 relocations.  */
2554
2555 static int
2556 sort_dynamic_relocs_64 (const void *arg1 ATTRIBUTE_UNUSED,
2557                         const void *arg2 ATTRIBUTE_UNUSED)
2558 {
2559 #ifdef BFD64
2560   Elf_Internal_Rela int_reloc1[3];
2561   Elf_Internal_Rela int_reloc2[3];
2562
2563   (*get_elf_backend_data (reldyn_sorting_bfd)->s->swap_reloc_in)
2564     (reldyn_sorting_bfd, arg1, int_reloc1);
2565   (*get_elf_backend_data (reldyn_sorting_bfd)->s->swap_reloc_in)
2566     (reldyn_sorting_bfd, arg2, int_reloc2);
2567
2568   if (ELF64_R_SYM (int_reloc1[0].r_info) < ELF64_R_SYM (int_reloc2[0].r_info))
2569     return -1;
2570   if (ELF64_R_SYM (int_reloc1[0].r_info) > ELF64_R_SYM (int_reloc2[0].r_info))
2571     return 1;
2572
2573   if (int_reloc1[0].r_offset < int_reloc2[0].r_offset)
2574     return -1;
2575   if (int_reloc1[0].r_offset > int_reloc2[0].r_offset)
2576     return 1;
2577   return 0;
2578 #else
2579   abort ();
2580 #endif
2581 }
2582
2583
2584 /* This routine is used to write out ECOFF debugging external symbol
2585    information.  It is called via mips_elf_link_hash_traverse.  The
2586    ECOFF external symbol information must match the ELF external
2587    symbol information.  Unfortunately, at this point we don't know
2588    whether a symbol is required by reloc information, so the two
2589    tables may wind up being different.  We must sort out the external
2590    symbol information before we can set the final size of the .mdebug
2591    section, and we must set the size of the .mdebug section before we
2592    can relocate any sections, and we can't know which symbols are
2593    required by relocation until we relocate the sections.
2594    Fortunately, it is relatively unlikely that any symbol will be
2595    stripped but required by a reloc.  In particular, it can not happen
2596    when generating a final executable.  */
2597
2598 static bfd_boolean
2599 mips_elf_output_extsym (struct mips_elf_link_hash_entry *h, void *data)
2600 {
2601   struct extsym_info *einfo = data;
2602   bfd_boolean strip;
2603   asection *sec, *output_section;
2604
2605   if (h->root.indx == -2)
2606     strip = FALSE;
2607   else if ((h->root.def_dynamic
2608             || h->root.ref_dynamic
2609             || h->root.type == bfd_link_hash_new)
2610            && !h->root.def_regular
2611            && !h->root.ref_regular)
2612     strip = TRUE;
2613   else if (einfo->info->strip == strip_all
2614            || (einfo->info->strip == strip_some
2615                && bfd_hash_lookup (einfo->info->keep_hash,
2616                                    h->root.root.root.string,
2617                                    FALSE, FALSE) == NULL))
2618     strip = TRUE;
2619   else
2620     strip = FALSE;
2621
2622   if (strip)
2623     return TRUE;
2624
2625   if (h->esym.ifd == -2)
2626     {
2627       h->esym.jmptbl = 0;
2628       h->esym.cobol_main = 0;
2629       h->esym.weakext = 0;
2630       h->esym.reserved = 0;
2631       h->esym.ifd = ifdNil;
2632       h->esym.asym.value = 0;
2633       h->esym.asym.st = stGlobal;
2634
2635       if (h->root.root.type == bfd_link_hash_undefined
2636           || h->root.root.type == bfd_link_hash_undefweak)
2637         {
2638           const char *name;
2639
2640           /* Use undefined class.  Also, set class and type for some
2641              special symbols.  */
2642           name = h->root.root.root.string;
2643           if (strcmp (name, mips_elf_dynsym_rtproc_names[0]) == 0
2644               || strcmp (name, mips_elf_dynsym_rtproc_names[1]) == 0)
2645             {
2646               h->esym.asym.sc = scData;
2647               h->esym.asym.st = stLabel;
2648               h->esym.asym.value = 0;
2649             }
2650           else if (strcmp (name, mips_elf_dynsym_rtproc_names[2]) == 0)
2651             {
2652               h->esym.asym.sc = scAbs;
2653               h->esym.asym.st = stLabel;
2654               h->esym.asym.value =
2655                 mips_elf_hash_table (einfo->info)->procedure_count;
2656             }
2657           else if (strcmp (name, "_gp_disp") == 0 && ! NEWABI_P (einfo->abfd))
2658             {
2659               h->esym.asym.sc = scAbs;
2660               h->esym.asym.st = stLabel;
2661               h->esym.asym.value = elf_gp (einfo->abfd);
2662             }
2663           else
2664             h->esym.asym.sc = scUndefined;
2665         }
2666       else if (h->root.root.type != bfd_link_hash_defined
2667           && h->root.root.type != bfd_link_hash_defweak)
2668         h->esym.asym.sc = scAbs;
2669       else
2670         {
2671           const char *name;
2672
2673           sec = h->root.root.u.def.section;
2674           output_section = sec->output_section;
2675
2676           /* When making a shared library and symbol h is the one from
2677              the another shared library, OUTPUT_SECTION may be null.  */
2678           if (output_section == NULL)
2679             h->esym.asym.sc = scUndefined;
2680           else
2681             {
2682               name = bfd_section_name (output_section->owner, output_section);
2683
2684               if (strcmp (name, ".text") == 0)
2685                 h->esym.asym.sc = scText;
2686               else if (strcmp (name, ".data") == 0)
2687                 h->esym.asym.sc = scData;
2688               else if (strcmp (name, ".sdata") == 0)
2689                 h->esym.asym.sc = scSData;
2690               else if (strcmp (name, ".rodata") == 0
2691                        || strcmp (name, ".rdata") == 0)
2692                 h->esym.asym.sc = scRData;
2693               else if (strcmp (name, ".bss") == 0)
2694                 h->esym.asym.sc = scBss;
2695               else if (strcmp (name, ".sbss") == 0)
2696                 h->esym.asym.sc = scSBss;
2697               else if (strcmp (name, ".init") == 0)
2698                 h->esym.asym.sc = scInit;
2699               else if (strcmp (name, ".fini") == 0)
2700                 h->esym.asym.sc = scFini;
2701               else
2702                 h->esym.asym.sc = scAbs;
2703             }
2704         }
2705
2706       h->esym.asym.reserved = 0;
2707       h->esym.asym.index = indexNil;
2708     }
2709
2710   if (h->root.root.type == bfd_link_hash_common)
2711     h->esym.asym.value = h->root.root.u.c.size;
2712   else if (h->root.root.type == bfd_link_hash_defined
2713            || h->root.root.type == bfd_link_hash_defweak)
2714     {
2715       if (h->esym.asym.sc == scCommon)
2716         h->esym.asym.sc = scBss;
2717       else if (h->esym.asym.sc == scSCommon)
2718         h->esym.asym.sc = scSBss;
2719
2720       sec = h->root.root.u.def.section;
2721       output_section = sec->output_section;
2722       if (output_section != NULL)
2723         h->esym.asym.value = (h->root.root.u.def.value
2724                               + sec->output_offset
2725                               + output_section->vma);
2726       else
2727         h->esym.asym.value = 0;
2728     }
2729   else
2730     {
2731       struct mips_elf_link_hash_entry *hd = h;
2732
2733       while (hd->root.root.type == bfd_link_hash_indirect)
2734         hd = (struct mips_elf_link_hash_entry *)h->root.root.u.i.link;
2735
2736       if (hd->needs_lazy_stub)
2737         {
2738           /* Set type and value for a symbol with a function stub.  */
2739           h->esym.asym.st = stProc;
2740           sec = hd->root.root.u.def.section;
2741           if (sec == NULL)
2742             h->esym.asym.value = 0;
2743           else
2744             {
2745               output_section = sec->output_section;
2746               if (output_section != NULL)
2747                 h->esym.asym.value = (hd->root.plt.offset
2748                                       + sec->output_offset
2749                                       + output_section->vma);
2750               else
2751                 h->esym.asym.value = 0;
2752             }
2753         }
2754     }
2755
2756   if (! bfd_ecoff_debug_one_external (einfo->abfd, einfo->debug, einfo->swap,
2757                                       h->root.root.root.string,
2758                                       &h->esym))
2759     {
2760       einfo->failed = TRUE;
2761       return FALSE;
2762     }
2763
2764   return TRUE;
2765 }
2766
2767 /* A comparison routine used to sort .gptab entries.  */
2768
2769 static int
2770 gptab_compare (const void *p1, const void *p2)
2771 {
2772   const Elf32_gptab *a1 = p1;
2773   const Elf32_gptab *a2 = p2;
2774
2775   return a1->gt_entry.gt_g_value - a2->gt_entry.gt_g_value;
2776 }
2777 \f
2778 /* Functions to manage the got entry hash table.  */
2779
2780 /* Use all 64 bits of a bfd_vma for the computation of a 32-bit
2781    hash number.  */
2782
2783 static INLINE hashval_t
2784 mips_elf_hash_bfd_vma (bfd_vma addr)
2785 {
2786 #ifdef BFD64
2787   return addr + (addr >> 32);
2788 #else
2789   return addr;
2790 #endif
2791 }
2792
2793 /* got_entries only match if they're identical, except for gotidx, so
2794    use all fields to compute the hash, and compare the appropriate
2795    union members.  */
2796
2797 static hashval_t
2798 mips_elf_got_entry_hash (const void *entry_)
2799 {
2800   const struct mips_got_entry *entry = (struct mips_got_entry *)entry_;
2801
2802   return entry->symndx
2803     + ((entry->tls_type & GOT_TLS_LDM) << 17)
2804     + (! entry->abfd ? mips_elf_hash_bfd_vma (entry->d.address)
2805        : entry->abfd->id
2806          + (entry->symndx >= 0 ? mips_elf_hash_bfd_vma (entry->d.addend)
2807             : entry->d.h->root.root.root.hash));
2808 }
2809
2810 static int
2811 mips_elf_got_entry_eq (const void *entry1, const void *entry2)
2812 {
2813   const struct mips_got_entry *e1 = (struct mips_got_entry *)entry1;
2814   const struct mips_got_entry *e2 = (struct mips_got_entry *)entry2;
2815
2816   /* An LDM entry can only match another LDM entry.  */
2817   if ((e1->tls_type ^ e2->tls_type) & GOT_TLS_LDM)
2818     return 0;
2819
2820   return e1->abfd == e2->abfd && e1->symndx == e2->symndx
2821     && (! e1->abfd ? e1->d.address == e2->d.address
2822         : e1->symndx >= 0 ? e1->d.addend == e2->d.addend
2823         : e1->d.h == e2->d.h);
2824 }
2825
2826 /* multi_got_entries are still a match in the case of global objects,
2827    even if the input bfd in which they're referenced differs, so the
2828    hash computation and compare functions are adjusted
2829    accordingly.  */
2830
2831 static hashval_t
2832 mips_elf_multi_got_entry_hash (const void *entry_)
2833 {
2834   const struct mips_got_entry *entry = (struct mips_got_entry *)entry_;
2835
2836   return entry->symndx
2837     + (! entry->abfd
2838        ? mips_elf_hash_bfd_vma (entry->d.address)
2839        : entry->symndx >= 0
2840        ? ((entry->tls_type & GOT_TLS_LDM)
2841           ? (GOT_TLS_LDM << 17)
2842           : (entry->abfd->id
2843              + mips_elf_hash_bfd_vma (entry->d.addend)))
2844        : entry->d.h->root.root.root.hash);
2845 }
2846
2847 static int
2848 mips_elf_multi_got_entry_eq (const void *entry1, const void *entry2)
2849 {
2850   const struct mips_got_entry *e1 = (struct mips_got_entry *)entry1;
2851   const struct mips_got_entry *e2 = (struct mips_got_entry *)entry2;
2852
2853   /* Any two LDM entries match.  */
2854   if (e1->tls_type & e2->tls_type & GOT_TLS_LDM)
2855     return 1;
2856
2857   /* Nothing else matches an LDM entry.  */
2858   if ((e1->tls_type ^ e2->tls_type) & GOT_TLS_LDM)
2859     return 0;
2860
2861   return e1->symndx == e2->symndx
2862     && (e1->symndx >= 0 ? e1->abfd == e2->abfd && e1->d.addend == e2->d.addend
2863         : e1->abfd == NULL || e2->abfd == NULL
2864         ? e1->abfd == e2->abfd && e1->d.address == e2->d.address
2865         : e1->d.h == e2->d.h);
2866 }
2867
2868 static hashval_t
2869 mips_got_page_entry_hash (const void *entry_)
2870 {
2871   const struct mips_got_page_entry *entry;
2872
2873   entry = (const struct mips_got_page_entry *) entry_;
2874   return entry->abfd->id + entry->symndx;
2875 }
2876
2877 static int
2878 mips_got_page_entry_eq (const void *entry1_, const void *entry2_)
2879 {
2880   const struct mips_got_page_entry *entry1, *entry2;
2881
2882   entry1 = (const struct mips_got_page_entry *) entry1_;
2883   entry2 = (const struct mips_got_page_entry *) entry2_;
2884   return entry1->abfd == entry2->abfd && entry1->symndx == entry2->symndx;
2885 }
2886 \f
2887 /* Return the dynamic relocation section.  If it doesn't exist, try to
2888    create a new it if CREATE_P, otherwise return NULL.  Also return NULL
2889    if creation fails.  */
2890
2891 static asection *
2892 mips_elf_rel_dyn_section (struct bfd_link_info *info, bfd_boolean create_p)
2893 {
2894   const char *dname;
2895   asection *sreloc;
2896   bfd *dynobj;
2897
2898   dname = MIPS_ELF_REL_DYN_NAME (info);
2899   dynobj = elf_hash_table (info)->dynobj;
2900   sreloc = bfd_get_linker_section (dynobj, dname);
2901   if (sreloc == NULL && create_p)
2902     {
2903       sreloc = bfd_make_section_anyway_with_flags (dynobj, dname,
2904                                                    (SEC_ALLOC
2905                                                     | SEC_LOAD
2906                                                     | SEC_HAS_CONTENTS
2907                                                     | SEC_IN_MEMORY
2908                                                     | SEC_LINKER_CREATED
2909                                                     | SEC_READONLY));
2910       if (sreloc == NULL
2911           || ! bfd_set_section_alignment (dynobj, sreloc,
2912                                           MIPS_ELF_LOG_FILE_ALIGN (dynobj)))
2913         return NULL;
2914     }
2915   return sreloc;
2916 }
2917
2918 /* Count the number of relocations needed for a TLS GOT entry, with
2919    access types from TLS_TYPE, and symbol H (or a local symbol if H
2920    is NULL).  */
2921
2922 static int
2923 mips_tls_got_relocs (struct bfd_link_info *info, unsigned char tls_type,
2924                      struct elf_link_hash_entry *h)
2925 {
2926   int indx = 0;
2927   int ret = 0;
2928   bfd_boolean need_relocs = FALSE;
2929   bfd_boolean dyn = elf_hash_table (info)->dynamic_sections_created;
2930
2931   if (h && WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h)
2932       && (!info->shared || !SYMBOL_REFERENCES_LOCAL (info, h)))
2933     indx = h->dynindx;
2934
2935   if ((info->shared || indx != 0)
2936       && (h == NULL
2937           || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
2938           || h->root.type != bfd_link_hash_undefweak))
2939     need_relocs = TRUE;
2940
2941   if (!need_relocs)
2942     return FALSE;
2943
2944   if (tls_type & GOT_TLS_GD)
2945     {
2946       ret++;
2947       if (indx != 0)
2948         ret++;
2949     }
2950
2951   if (tls_type & GOT_TLS_IE)
2952     ret++;
2953
2954   if ((tls_type & GOT_TLS_LDM) && info->shared)
2955     ret++;
2956
2957   return ret;
2958 }
2959
2960 /* Count the number of TLS relocations required for the GOT entry in
2961    ARG1, if it describes a local symbol.  */
2962
2963 static int
2964 mips_elf_count_local_tls_relocs (void **arg1, void *arg2)
2965 {
2966   struct mips_got_entry *entry = * (struct mips_got_entry **) arg1;
2967   struct mips_elf_count_tls_arg *arg = arg2;
2968
2969   if (entry->abfd != NULL && entry->symndx != -1)
2970     arg->needed += mips_tls_got_relocs (arg->info, entry->tls_type, NULL);
2971
2972   return 1;
2973 }
2974
2975 /* Count the number of TLS GOT entries required for the global (or
2976    forced-local) symbol in ARG1.  */
2977
2978 static int
2979 mips_elf_count_global_tls_entries (void *arg1, void *arg2)
2980 {
2981   struct mips_elf_link_hash_entry *hm
2982     = (struct mips_elf_link_hash_entry *) arg1;
2983   struct mips_elf_count_tls_arg *arg = arg2;
2984
2985   if (hm->root.root.type == bfd_link_hash_indirect
2986       || hm->root.root.type == bfd_link_hash_warning)
2987     return 1;
2988
2989   if (hm->tls_type & GOT_TLS_GD)
2990     arg->needed += 2;
2991   if (hm->tls_type & GOT_TLS_IE)
2992     arg->needed += 1;
2993
2994   return 1;
2995 }
2996
2997 /* Count the number of TLS relocations required for the global (or
2998    forced-local) symbol in ARG1.  */
2999
3000 static int
3001 mips_elf_count_global_tls_relocs (void *arg1, void *arg2)
3002 {
3003   struct mips_elf_link_hash_entry *hm
3004     = (struct mips_elf_link_hash_entry *) arg1;
3005   struct mips_elf_count_tls_arg *arg = arg2;
3006
3007   if (hm->root.root.type == bfd_link_hash_indirect
3008       || hm->root.root.type == bfd_link_hash_warning)
3009     return 1;
3010
3011   arg->needed += mips_tls_got_relocs (arg->info, hm->tls_type, &hm->root);
3012
3013   return 1;
3014 }
3015
3016 /* Output a simple dynamic relocation into SRELOC.  */
3017
3018 static void
3019 mips_elf_output_dynamic_relocation (bfd *output_bfd,
3020                                     asection *sreloc,
3021                                     unsigned long reloc_index,
3022                                     unsigned long indx,
3023                                     int r_type,
3024                                     bfd_vma offset)
3025 {
3026   Elf_Internal_Rela rel[3];
3027
3028   memset (rel, 0, sizeof (rel));
3029
3030   rel[0].r_info = ELF_R_INFO (output_bfd, indx, r_type);
3031   rel[0].r_offset = rel[1].r_offset = rel[2].r_offset = offset;
3032
3033   if (ABI_64_P (output_bfd))
3034     {
3035       (*get_elf_backend_data (output_bfd)->s->swap_reloc_out)
3036         (output_bfd, &rel[0],
3037          (sreloc->contents
3038           + reloc_index * sizeof (Elf64_Mips_External_Rel)));
3039     }
3040   else
3041     bfd_elf32_swap_reloc_out
3042       (output_bfd, &rel[0],
3043        (sreloc->contents
3044         + reloc_index * sizeof (Elf32_External_Rel)));
3045 }
3046
3047 /* Initialize a set of TLS GOT entries for one symbol.  */
3048
3049 static void
3050 mips_elf_initialize_tls_slots (bfd *abfd, bfd_vma got_offset,
3051                                unsigned char *tls_type_p,
3052                                struct bfd_link_info *info,
3053                                struct mips_elf_link_hash_entry *h,
3054                                bfd_vma value)
3055 {
3056   struct mips_elf_link_hash_table *htab;
3057   int indx;
3058   asection *sreloc, *sgot;
3059   bfd_vma offset, offset2;
3060   bfd_boolean need_relocs = FALSE;
3061
3062   htab = mips_elf_hash_table (info);
3063   if (htab == NULL)
3064     return;
3065
3066   sgot = htab->sgot;
3067
3068   indx = 0;
3069   if (h != NULL)
3070     {
3071       bfd_boolean dyn = elf_hash_table (info)->dynamic_sections_created;
3072
3073       if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, &h->root)
3074           && (!info->shared || !SYMBOL_REFERENCES_LOCAL (info, &h->root)))
3075         indx = h->root.dynindx;
3076     }
3077
3078   if (*tls_type_p & GOT_TLS_DONE)
3079     return;
3080
3081   if ((info->shared || indx != 0)
3082       && (h == NULL
3083           || ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT
3084           || h->root.type != bfd_link_hash_undefweak))
3085     need_relocs = TRUE;
3086
3087   /* MINUS_ONE means the symbol is not defined in this object.  It may not
3088      be defined at all; assume that the value doesn't matter in that
3089      case.  Otherwise complain if we would use the value.  */
3090   BFD_ASSERT (value != MINUS_ONE || (indx != 0 && need_relocs)
3091               || h->root.root.type == bfd_link_hash_undefweak);
3092
3093   /* Emit necessary relocations.  */
3094   sreloc = mips_elf_rel_dyn_section (info, FALSE);
3095
3096   /* General Dynamic.  */
3097   if (*tls_type_p & GOT_TLS_GD)
3098     {
3099       offset = got_offset;
3100       offset2 = offset + MIPS_ELF_GOT_SIZE (abfd);
3101
3102       if (need_relocs)
3103         {
3104           mips_elf_output_dynamic_relocation
3105             (abfd, sreloc, sreloc->reloc_count++, indx,
3106              ABI_64_P (abfd) ? R_MIPS_TLS_DTPMOD64 : R_MIPS_TLS_DTPMOD32,
3107              sgot->output_offset + sgot->output_section->vma + offset);
3108
3109           if (indx)
3110             mips_elf_output_dynamic_relocation
3111               (abfd, sreloc, sreloc->reloc_count++, indx,
3112                ABI_64_P (abfd) ? R_MIPS_TLS_DTPREL64 : R_MIPS_TLS_DTPREL32,
3113                sgot->output_offset + sgot->output_section->vma + offset2);
3114           else
3115             MIPS_ELF_PUT_WORD (abfd, value - dtprel_base (info),
3116                                sgot->contents + offset2);
3117         }
3118       else
3119         {
3120           MIPS_ELF_PUT_WORD (abfd, 1,
3121                              sgot->contents + offset);
3122           MIPS_ELF_PUT_WORD (abfd, value - dtprel_base (info),
3123                              sgot->contents + offset2);
3124         }
3125
3126       got_offset += 2 * MIPS_ELF_GOT_SIZE (abfd);
3127     }
3128
3129   /* Initial Exec model.  */
3130   if (*tls_type_p & GOT_TLS_IE)
3131     {
3132       offset = got_offset;
3133
3134       if (need_relocs)
3135         {
3136           if (indx == 0)
3137             MIPS_ELF_PUT_WORD (abfd, value - elf_hash_table (info)->tls_sec->vma,
3138                                sgot->contents + offset);
3139           else
3140             MIPS_ELF_PUT_WORD (abfd, 0,
3141                                sgot->contents + offset);
3142
3143           mips_elf_output_dynamic_relocation
3144             (abfd, sreloc, sreloc->reloc_count++, indx,
3145              ABI_64_P (abfd) ? R_MIPS_TLS_TPREL64 : R_MIPS_TLS_TPREL32,
3146              sgot->output_offset + sgot->output_section->vma + offset);
3147         }
3148       else
3149         MIPS_ELF_PUT_WORD (abfd, value - tprel_base (info),
3150                            sgot->contents + offset);
3151     }
3152
3153   if (*tls_type_p & GOT_TLS_LDM)
3154     {
3155       /* The initial offset is zero, and the LD offsets will include the
3156          bias by DTP_OFFSET.  */
3157       MIPS_ELF_PUT_WORD (abfd, 0,
3158                          sgot->contents + got_offset
3159                          + MIPS_ELF_GOT_SIZE (abfd));
3160
3161       if (!info->shared)
3162         MIPS_ELF_PUT_WORD (abfd, 1,
3163                            sgot->contents + got_offset);
3164       else
3165         mips_elf_output_dynamic_relocation
3166           (abfd, sreloc, sreloc->reloc_count++, indx,
3167            ABI_64_P (abfd) ? R_MIPS_TLS_DTPMOD64 : R_MIPS_TLS_DTPMOD32,
3168            sgot->output_offset + sgot->output_section->vma + got_offset);
3169     }
3170
3171   *tls_type_p |= GOT_TLS_DONE;
3172 }
3173
3174 /* Return the GOT index to use for a relocation of type R_TYPE against
3175    a symbol accessed using TLS_TYPE models.  The GOT entries for this
3176    symbol in this GOT start at GOT_INDEX.  This function initializes the
3177    GOT entries and corresponding relocations.  */
3178
3179 static bfd_vma
3180 mips_tls_got_index (bfd *abfd, bfd_vma got_index, unsigned char *tls_type,
3181                     int r_type, struct bfd_link_info *info,
3182                     struct mips_elf_link_hash_entry *h, bfd_vma symbol)
3183 {
3184   BFD_ASSERT (tls_gottprel_reloc_p (r_type)
3185               || tls_gd_reloc_p (r_type)
3186               || tls_ldm_reloc_p (r_type));
3187
3188   mips_elf_initialize_tls_slots (abfd, got_index, tls_type, info, h, symbol);
3189
3190   if (tls_gottprel_reloc_p (r_type))
3191     {
3192       BFD_ASSERT (*tls_type & GOT_TLS_IE);
3193       if (*tls_type & GOT_TLS_GD)
3194         return got_index + 2 * MIPS_ELF_GOT_SIZE (abfd);
3195       else
3196         return got_index;
3197     }
3198
3199   if (tls_gd_reloc_p (r_type))
3200     {
3201       BFD_ASSERT (*tls_type & GOT_TLS_GD);
3202       return got_index;
3203     }
3204
3205   if (tls_ldm_reloc_p (r_type))
3206     {
3207       BFD_ASSERT (*tls_type & GOT_TLS_LDM);
3208       return got_index;
3209     }
3210
3211   return got_index;
3212 }
3213
3214 /* Return the offset from _GLOBAL_OFFSET_TABLE_ of the .got.plt entry
3215    for global symbol H.  .got.plt comes before the GOT, so the offset
3216    will be negative.  */
3217
3218 static bfd_vma
3219 mips_elf_gotplt_index (struct bfd_link_info *info,
3220                        struct elf_link_hash_entry *h)
3221 {
3222   bfd_vma plt_index, got_address, got_value;
3223   struct mips_elf_link_hash_table *htab;
3224
3225   htab = mips_elf_hash_table (info);
3226   BFD_ASSERT (htab != NULL);
3227
3228   BFD_ASSERT (h->plt.offset != (bfd_vma) -1);
3229
3230   /* This function only works for VxWorks, because a non-VxWorks .got.plt
3231      section starts with reserved entries.  */
3232   BFD_ASSERT (htab->is_vxworks);
3233
3234   /* Calculate the index of the symbol's PLT entry.  */
3235   plt_index = (h->plt.offset - htab->plt_header_size) / htab->plt_entry_size;
3236
3237   /* Calculate the address of the associated .got.plt entry.  */
3238   got_address = (htab->sgotplt->output_section->vma
3239                  + htab->sgotplt->output_offset
3240                  + plt_index * 4);
3241
3242   /* Calculate the value of _GLOBAL_OFFSET_TABLE_.  */
3243   got_value = (htab->root.hgot->root.u.def.section->output_section->vma
3244                + htab->root.hgot->root.u.def.section->output_offset
3245                + htab->root.hgot->root.u.def.value);
3246
3247   return got_address - got_value;
3248 }
3249
3250 /* Return the GOT offset for address VALUE.   If there is not yet a GOT
3251    entry for this value, create one.  If R_SYMNDX refers to a TLS symbol,
3252    create a TLS GOT entry instead.  Return -1 if no satisfactory GOT
3253    offset can be found.  */
3254
3255 static bfd_vma
3256 mips_elf_local_got_index (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
3257                           bfd_vma value, unsigned long r_symndx,
3258                           struct mips_elf_link_hash_entry *h, int r_type)
3259 {
3260   struct mips_elf_link_hash_table *htab;
3261   struct mips_got_entry *entry;
3262
3263   htab = mips_elf_hash_table (info);
3264   BFD_ASSERT (htab != NULL);
3265
3266   entry = mips_elf_create_local_got_entry (abfd, info, ibfd, value,
3267                                            r_symndx, h, r_type);
3268   if (!entry)
3269     return MINUS_ONE;
3270
3271   if (TLS_RELOC_P (r_type))
3272     {
3273       if (entry->symndx == -1 && htab->got_info->next == NULL)
3274         /* A type (3) entry in the single-GOT case.  We use the symbol's
3275            hash table entry to track the index.  */
3276         return mips_tls_got_index (abfd, h->tls_got_offset, &h->tls_type,
3277                                    r_type, info, h, value);
3278       else
3279         return mips_tls_got_index (abfd, entry->gotidx, &entry->tls_type,
3280                                    r_type, info, h, value);
3281     }
3282   else
3283     return entry->gotidx;
3284 }
3285
3286 /* Returns the GOT index for the global symbol indicated by H.  */
3287
3288 static bfd_vma
3289 mips_elf_global_got_index (bfd *abfd, bfd *ibfd, struct elf_link_hash_entry *h,
3290                            int r_type, struct bfd_link_info *info)
3291 {
3292   struct mips_elf_link_hash_table *htab;
3293   bfd_vma got_index;
3294   struct mips_got_info *g, *gg;
3295   long global_got_dynindx = 0;
3296
3297   htab = mips_elf_hash_table (info);
3298   BFD_ASSERT (htab != NULL);
3299
3300   gg = g = htab->got_info;
3301   if (g->bfd2got && ibfd)
3302     {
3303       struct mips_got_entry e, *p;
3304
3305       BFD_ASSERT (h->dynindx >= 0);
3306
3307       g = mips_elf_got_for_ibfd (g, ibfd);
3308       if (g->next != gg || TLS_RELOC_P (r_type))
3309         {
3310           e.abfd = ibfd;
3311           e.symndx = -1;
3312           e.d.h = (struct mips_elf_link_hash_entry *)h;
3313           e.tls_type = 0;
3314
3315           p = htab_find (g->got_entries, &e);
3316
3317           BFD_ASSERT (p->gotidx > 0);
3318
3319           if (TLS_RELOC_P (r_type))
3320             {
3321               bfd_vma value = MINUS_ONE;
3322               if ((h->root.type == bfd_link_hash_defined
3323                    || h->root.type == bfd_link_hash_defweak)
3324                   && h->root.u.def.section->output_section)
3325                 value = (h->root.u.def.value
3326                          + h->root.u.def.section->output_offset
3327                          + h->root.u.def.section->output_section->vma);
3328
3329               return mips_tls_got_index (abfd, p->gotidx, &p->tls_type, r_type,
3330                                          info, e.d.h, value);
3331             }
3332           else
3333             return p->gotidx;
3334         }
3335     }
3336
3337   if (gg->global_gotsym != NULL)
3338     global_got_dynindx = gg->global_gotsym->dynindx;
3339
3340   if (TLS_RELOC_P (r_type))
3341     {
3342       struct mips_elf_link_hash_entry *hm
3343         = (struct mips_elf_link_hash_entry *) h;
3344       bfd_vma value = MINUS_ONE;
3345
3346       if ((h->root.type == bfd_link_hash_defined
3347            || h->root.type == bfd_link_hash_defweak)
3348           && h->root.u.def.section->output_section)
3349         value = (h->root.u.def.value
3350                  + h->root.u.def.section->output_offset
3351                  + h->root.u.def.section->output_section->vma);
3352
3353       got_index = mips_tls_got_index (abfd, hm->tls_got_offset, &hm->tls_type,
3354                                       r_type, info, hm, value);
3355     }
3356   else
3357     {
3358       /* Once we determine the global GOT entry with the lowest dynamic
3359          symbol table index, we must put all dynamic symbols with greater
3360          indices into the GOT.  That makes it easy to calculate the GOT
3361          offset.  */
3362       BFD_ASSERT (h->dynindx >= global_got_dynindx);
3363       got_index = ((h->dynindx - global_got_dynindx + g->local_gotno)
3364                    * MIPS_ELF_GOT_SIZE (abfd));
3365     }
3366   BFD_ASSERT (got_index < htab->sgot->size);
3367
3368   return got_index;
3369 }
3370
3371 /* Find a GOT page entry that points to within 32KB of VALUE.  These
3372    entries are supposed to be placed at small offsets in the GOT, i.e.,
3373    within 32KB of GP.  Return the index of the GOT entry, or -1 if no
3374    entry could be created.  If OFFSETP is nonnull, use it to return the
3375    offset of the GOT entry from VALUE.  */
3376
3377 static bfd_vma
3378 mips_elf_got_page (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
3379                    bfd_vma value, bfd_vma *offsetp)
3380 {
3381   bfd_vma page, got_index;
3382   struct mips_got_entry *entry;
3383
3384   page = (value + 0x8000) & ~(bfd_vma) 0xffff;
3385   entry = mips_elf_create_local_got_entry (abfd, info, ibfd, page, 0,
3386                                            NULL, R_MIPS_GOT_PAGE);
3387
3388   if (!entry)
3389     return MINUS_ONE;
3390
3391   got_index = entry->gotidx;
3392
3393   if (offsetp)
3394     *offsetp = value - entry->d.address;
3395
3396   return got_index;
3397 }
3398
3399 /* Find a local GOT entry for an R_MIPS*_GOT16 relocation against VALUE.
3400    EXTERNAL is true if the relocation was originally against a global
3401    symbol that binds locally.  */
3402
3403 static bfd_vma
3404 mips_elf_got16_entry (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
3405                       bfd_vma value, bfd_boolean external)
3406 {
3407   struct mips_got_entry *entry;
3408
3409   /* GOT16 relocations against local symbols are followed by a LO16
3410      relocation; those against global symbols are not.  Thus if the
3411      symbol was originally local, the GOT16 relocation should load the
3412      equivalent of %hi(VALUE), otherwise it should load VALUE itself.  */
3413   if (! external)
3414     value = mips_elf_high (value) << 16;
3415
3416   /* It doesn't matter whether the original relocation was R_MIPS_GOT16,
3417      R_MIPS16_GOT16, R_MIPS_CALL16, etc.  The format of the entry is the
3418      same in all cases.  */
3419   entry = mips_elf_create_local_got_entry (abfd, info, ibfd, value, 0,
3420                                            NULL, R_MIPS_GOT16);
3421   if (entry)
3422     return entry->gotidx;
3423   else
3424     return MINUS_ONE;
3425 }
3426
3427 /* Returns the offset for the entry at the INDEXth position
3428    in the GOT.  */
3429
3430 static bfd_vma
3431 mips_elf_got_offset_from_index (struct bfd_link_info *info, bfd *output_bfd,
3432                                 bfd *input_bfd, bfd_vma got_index)
3433 {
3434   struct mips_elf_link_hash_table *htab;
3435   asection *sgot;
3436   bfd_vma gp;
3437
3438   htab = mips_elf_hash_table (info);
3439   BFD_ASSERT (htab != NULL);
3440
3441   sgot = htab->sgot;
3442   gp = _bfd_get_gp_value (output_bfd)
3443     + mips_elf_adjust_gp (output_bfd, htab->got_info, input_bfd);
3444
3445   return sgot->output_section->vma + sgot->output_offset + got_index - gp;
3446 }
3447
3448 /* Create and return a local GOT entry for VALUE, which was calculated
3449    from a symbol belonging to INPUT_SECTON.  Return NULL if it could not
3450    be created.  If R_SYMNDX refers to a TLS symbol, create a TLS entry
3451    instead.  */
3452
3453 static struct mips_got_entry *
3454 mips_elf_create_local_got_entry (bfd *abfd, struct bfd_link_info *info,
3455                                  bfd *ibfd, bfd_vma value,
3456                                  unsigned long r_symndx,
3457                                  struct mips_elf_link_hash_entry *h,
3458                                  int r_type)
3459 {
3460   struct mips_got_entry entry, **loc;
3461   struct mips_got_info *g;
3462   struct mips_elf_link_hash_table *htab;
3463
3464   htab = mips_elf_hash_table (info);
3465   BFD_ASSERT (htab != NULL);
3466
3467   entry.abfd = NULL;
3468   entry.symndx = -1;
3469   entry.d.address = value;
3470   entry.tls_type = 0;
3471
3472   g = mips_elf_got_for_ibfd (htab->got_info, ibfd);
3473   if (g == NULL)
3474     {
3475       g = mips_elf_got_for_ibfd (htab->got_info, abfd);
3476       BFD_ASSERT (g != NULL);
3477     }
3478
3479   /* This function shouldn't be called for symbols that live in the global
3480      area of the GOT.  */
3481   BFD_ASSERT (h == NULL || h->global_got_area == GGA_NONE);
3482   if (TLS_RELOC_P (r_type))
3483     {
3484       struct mips_got_entry *p;
3485
3486       entry.abfd = ibfd;
3487       if (tls_ldm_reloc_p (r_type))
3488         {
3489           entry.tls_type = GOT_TLS_LDM;
3490           entry.symndx = 0;
3491           entry.d.addend = 0;
3492         }
3493       else if (h == NULL)
3494         {
3495           entry.symndx = r_symndx;
3496           entry.d.addend = 0;
3497         }
3498       else
3499         entry.d.h = h;
3500
3501       p = (struct mips_got_entry *)
3502         htab_find (g->got_entries, &entry);
3503
3504       BFD_ASSERT (p);
3505       return p;
3506     }
3507
3508   loc = (struct mips_got_entry **) htab_find_slot (g->got_entries, &entry,
3509                                                    INSERT);
3510   if (*loc)
3511     return *loc;
3512
3513   entry.gotidx = MIPS_ELF_GOT_SIZE (abfd) * g->assigned_gotno++;
3514   entry.tls_type = 0;
3515
3516   *loc = (struct mips_got_entry *)bfd_alloc (abfd, sizeof entry);
3517
3518   if (! *loc)
3519     return NULL;
3520
3521   memcpy (*loc, &entry, sizeof entry);
3522
3523   if (g->assigned_gotno > g->local_gotno)
3524     {
3525       (*loc)->gotidx = -1;
3526       /* We didn't allocate enough space in the GOT.  */
3527       (*_bfd_error_handler)
3528         (_("not enough GOT space for local GOT entries"));
3529       bfd_set_error (bfd_error_bad_value);
3530       return NULL;
3531     }
3532
3533   MIPS_ELF_PUT_WORD (abfd, value,
3534                      (htab->sgot->contents + entry.gotidx));
3535
3536   /* These GOT entries need a dynamic relocation on VxWorks.  */
3537   if (htab->is_vxworks)
3538     {
3539       Elf_Internal_Rela outrel;
3540       asection *s;
3541       bfd_byte *rloc;
3542       bfd_vma got_address;
3543
3544       s = mips_elf_rel_dyn_section (info, FALSE);
3545       got_address = (htab->sgot->output_section->vma
3546                      + htab->sgot->output_offset
3547                      + entry.gotidx);
3548
3549       rloc = s->contents + (s->reloc_count++ * sizeof (Elf32_External_Rela));
3550       outrel.r_offset = got_address;
3551       outrel.r_info = ELF32_R_INFO (STN_UNDEF, R_MIPS_32);
3552       outrel.r_addend = value;
3553       bfd_elf32_swap_reloca_out (abfd, &outrel, rloc);
3554     }
3555
3556   return *loc;
3557 }
3558
3559 /* Return the number of dynamic section symbols required by OUTPUT_BFD.
3560    The number might be exact or a worst-case estimate, depending on how
3561    much information is available to elf_backend_omit_section_dynsym at
3562    the current linking stage.  */
3563
3564 static bfd_size_type
3565 count_section_dynsyms (bfd *output_bfd, struct bfd_link_info *info)
3566 {
3567   bfd_size_type count;
3568
3569   count = 0;
3570   if (info->shared || elf_hash_table (info)->is_relocatable_executable)
3571     {
3572       asection *p;
3573       const struct elf_backend_data *bed;
3574
3575       bed = get_elf_backend_data (output_bfd);
3576       for (p = output_bfd->sections; p ; p = p->next)
3577         if ((p->flags & SEC_EXCLUDE) == 0
3578             && (p->flags & SEC_ALLOC) != 0
3579             && !(*bed->elf_backend_omit_section_dynsym) (output_bfd, info, p))
3580           ++count;
3581     }
3582   return count;
3583 }
3584
3585 /* Sort the dynamic symbol table so that symbols that need GOT entries
3586    appear towards the end.  */
3587
3588 static bfd_boolean
3589 mips_elf_sort_hash_table (bfd *abfd, struct bfd_link_info *info)
3590 {
3591   struct mips_elf_link_hash_table *htab;
3592   struct mips_elf_hash_sort_data hsd;
3593   struct mips_got_info *g;
3594
3595   if (elf_hash_table (info)->dynsymcount == 0)
3596     return TRUE;
3597
3598   htab = mips_elf_hash_table (info);
3599   BFD_ASSERT (htab != NULL);
3600
3601   g = htab->got_info;
3602   if (g == NULL)
3603     return TRUE;
3604
3605   hsd.low = NULL;
3606   hsd.max_unref_got_dynindx
3607     = hsd.min_got_dynindx
3608     = (elf_hash_table (info)->dynsymcount - g->reloc_only_gotno);
3609   hsd.max_non_got_dynindx = count_section_dynsyms (abfd, info) + 1;
3610   mips_elf_link_hash_traverse (((struct mips_elf_link_hash_table *)
3611                                 elf_hash_table (info)),
3612                                mips_elf_sort_hash_table_f,
3613                                &hsd);
3614
3615   /* There should have been enough room in the symbol table to
3616      accommodate both the GOT and non-GOT symbols.  */
3617   BFD_ASSERT (hsd.max_non_got_dynindx <= hsd.min_got_dynindx);
3618   BFD_ASSERT ((unsigned long) hsd.max_unref_got_dynindx
3619               == elf_hash_table (info)->dynsymcount);
3620   BFD_ASSERT (elf_hash_table (info)->dynsymcount - hsd.min_got_dynindx
3621               == g->global_gotno);
3622
3623   /* Now we know which dynamic symbol has the lowest dynamic symbol
3624      table index in the GOT.  */
3625   g->global_gotsym = hsd.low;
3626
3627   return TRUE;
3628 }
3629
3630 /* If H needs a GOT entry, assign it the highest available dynamic
3631    index.  Otherwise, assign it the lowest available dynamic
3632    index.  */
3633
3634 static bfd_boolean
3635 mips_elf_sort_hash_table_f (struct mips_elf_link_hash_entry *h, void *data)
3636 {
3637   struct mips_elf_hash_sort_data *hsd = data;
3638
3639   /* Symbols without dynamic symbol table entries aren't interesting
3640      at all.  */
3641   if (h->root.dynindx == -1)
3642     return TRUE;
3643
3644   switch (h->global_got_area)
3645     {
3646     case GGA_NONE:
3647       h->root.dynindx = hsd->max_non_got_dynindx++;
3648       break;
3649
3650     case GGA_NORMAL:
3651       h->root.dynindx = --hsd->min_got_dynindx;
3652       hsd->low = (struct elf_link_hash_entry *) h;
3653       break;
3654
3655     case GGA_RELOC_ONLY:
3656       if (hsd->max_unref_got_dynindx == hsd->min_got_dynindx)
3657         hsd->low = (struct elf_link_hash_entry *) h;
3658       h->root.dynindx = hsd->max_unref_got_dynindx++;
3659       break;
3660     }
3661
3662   return TRUE;
3663 }
3664
3665 /* If H is a symbol that needs a global GOT entry, but has a dynamic
3666    symbol table index lower than any we've seen to date, record it for
3667    posterity.  FOR_CALL is true if the caller is only interested in
3668    using the GOT entry for calls.  */
3669
3670 static bfd_boolean
3671 mips_elf_record_global_got_symbol (struct elf_link_hash_entry *h,
3672                                    bfd *abfd, struct bfd_link_info *info,
3673                                    bfd_boolean for_call,
3674                                    unsigned char tls_flag)
3675 {
3676   struct mips_elf_link_hash_table *htab;
3677   struct mips_elf_link_hash_entry *hmips;
3678   struct mips_got_entry entry, **loc;
3679   struct mips_got_info *g;
3680
3681   htab = mips_elf_hash_table (info);
3682   BFD_ASSERT (htab != NULL);
3683
3684   hmips = (struct mips_elf_link_hash_entry *) h;
3685   if (!for_call)
3686     hmips->got_only_for_calls = FALSE;
3687
3688   /* A global symbol in the GOT must also be in the dynamic symbol
3689      table.  */
3690   if (h->dynindx == -1)
3691     {
3692       switch (ELF_ST_VISIBILITY (h->other))
3693         {
3694         case STV_INTERNAL:
3695         case STV_HIDDEN:
3696           _bfd_elf_link_hash_hide_symbol (info, h, TRUE);
3697           break;
3698         }
3699       if (!bfd_elf_link_record_dynamic_symbol (info, h))
3700         return FALSE;
3701     }
3702
3703   /* Make sure we have a GOT to put this entry into.  */
3704   g = htab->got_info;
3705   BFD_ASSERT (g != NULL);
3706
3707   entry.abfd = abfd;
3708   entry.symndx = -1;
3709   entry.d.h = (struct mips_elf_link_hash_entry *) h;
3710   entry.tls_type = 0;
3711
3712   loc = (struct mips_got_entry **) htab_find_slot (g->got_entries, &entry,
3713                                                    INSERT);
3714
3715   /* If we've already marked this entry as needing GOT space, we don't
3716      need to do it again.  */
3717   if (*loc)
3718     {
3719       (*loc)->tls_type |= tls_flag;
3720       return TRUE;
3721     }
3722
3723   *loc = (struct mips_got_entry *)bfd_alloc (abfd, sizeof entry);
3724
3725   if (! *loc)
3726     return FALSE;
3727
3728   entry.gotidx = -1;
3729   entry.tls_type = tls_flag;
3730
3731   memcpy (*loc, &entry, sizeof entry);
3732
3733   if (tls_flag == 0)
3734     hmips->global_got_area = GGA_NORMAL;
3735
3736   return TRUE;
3737 }
3738
3739 /* Reserve space in G for a GOT entry containing the value of symbol
3740    SYMNDX in input bfd ABDF, plus ADDEND.  */
3741
3742 static bfd_boolean
3743 mips_elf_record_local_got_symbol (bfd *abfd, long symndx, bfd_vma addend,
3744                                   struct bfd_link_info *info,
3745                                   unsigned char tls_flag)
3746 {
3747   struct mips_elf_link_hash_table *htab;
3748   struct mips_got_info *g;
3749   struct mips_got_entry entry, **loc;
3750
3751   htab = mips_elf_hash_table (info);
3752   BFD_ASSERT (htab != NULL);
3753
3754   g = htab->got_info;
3755   BFD_ASSERT (g != NULL);
3756
3757   entry.abfd = abfd;
3758   entry.symndx = symndx;
3759   entry.d.addend = addend;
3760   entry.tls_type = tls_flag;
3761   loc = (struct mips_got_entry **)
3762     htab_find_slot (g->got_entries, &entry, INSERT);
3763
3764   if (*loc)
3765     {
3766       if (tls_flag == GOT_TLS_GD && !((*loc)->tls_type & GOT_TLS_GD))
3767         {
3768           g->tls_gotno += 2;
3769           (*loc)->tls_type |= tls_flag;
3770         }
3771       else if (tls_flag == GOT_TLS_IE && !((*loc)->tls_type & GOT_TLS_IE))
3772         {
3773           g->tls_gotno += 1;
3774           (*loc)->tls_type |= tls_flag;
3775         }
3776       return TRUE;
3777     }
3778
3779   if (tls_flag != 0)
3780     {
3781       entry.gotidx = -1;
3782       entry.tls_type = tls_flag;
3783       if (tls_flag == GOT_TLS_IE)
3784         g->tls_gotno += 1;
3785       else if (tls_flag == GOT_TLS_GD)
3786         g->tls_gotno += 2;
3787       else if (g->tls_ldm_offset == MINUS_ONE)
3788         {
3789           g->tls_ldm_offset = MINUS_TWO;
3790           g->tls_gotno += 2;
3791         }
3792     }
3793   else
3794     {
3795       entry.gotidx = g->local_gotno++;
3796       entry.tls_type = 0;
3797     }
3798
3799   *loc = (struct mips_got_entry *)bfd_alloc (abfd, sizeof entry);
3800
3801   if (! *loc)
3802     return FALSE;
3803
3804   memcpy (*loc, &entry, sizeof entry);
3805
3806   return TRUE;
3807 }
3808
3809 /* Return the maximum number of GOT page entries required for RANGE.  */
3810
3811 static bfd_vma
3812 mips_elf_pages_for_range (const struct mips_got_page_range *range)
3813 {
3814   return (range->max_addend - range->min_addend + 0x1ffff) >> 16;
3815 }
3816
3817 /* Record that ABFD has a page relocation against symbol SYMNDX and
3818    that ADDEND is the addend for that relocation.
3819
3820    This function creates an upper bound on the number of GOT slots
3821    required; no attempt is made to combine references to non-overridable
3822    global symbols across multiple input files.  */
3823
3824 static bfd_boolean
3825 mips_elf_record_got_page_entry (struct bfd_link_info *info, bfd *abfd,
3826                                 long symndx, bfd_signed_vma addend)
3827 {
3828   struct mips_elf_link_hash_table *htab;
3829   struct mips_got_info *g;
3830   struct mips_got_page_entry lookup, *entry;
3831   struct mips_got_page_range **range_ptr, *range;
3832   bfd_vma old_pages, new_pages;
3833   void **loc;
3834
3835   htab = mips_elf_hash_table (info);
3836   BFD_ASSERT (htab != NULL);
3837
3838   g = htab->got_info;
3839   BFD_ASSERT (g != NULL);
3840
3841   /* Find the mips_got_page_entry hash table entry for this symbol.  */
3842   lookup.abfd = abfd;
3843   lookup.symndx = symndx;
3844   loc = htab_find_slot (g->got_page_entries, &lookup, INSERT);
3845   if (loc == NULL)
3846     return FALSE;
3847
3848   /* Create a mips_got_page_entry if this is the first time we've
3849      seen the symbol.  */
3850   entry = (struct mips_got_page_entry *) *loc;
3851   if (!entry)
3852     {
3853       entry = bfd_alloc (abfd, sizeof (*entry));
3854       if (!entry)
3855         return FALSE;
3856
3857       entry->abfd = abfd;
3858       entry->symndx = symndx;
3859       entry->ranges = NULL;
3860       entry->num_pages = 0;
3861       *loc = entry;
3862     }
3863
3864   /* Skip over ranges whose maximum extent cannot share a page entry
3865      with ADDEND.  */
3866   range_ptr = &entry->ranges;
3867   while (*range_ptr && addend > (*range_ptr)->max_addend + 0xffff)
3868     range_ptr = &(*range_ptr)->next;
3869
3870   /* If we scanned to the end of the list, or found a range whose
3871      minimum extent cannot share a page entry with ADDEND, create
3872      a new singleton range.  */
3873   range = *range_ptr;
3874   if (!range || addend < range->min_addend - 0xffff)
3875     {
3876       range = bfd_alloc (abfd, sizeof (*range));
3877       if (!range)
3878         return FALSE;
3879
3880       range->next = *range_ptr;
3881       range->min_addend = addend;
3882       range->max_addend = addend;
3883
3884       *range_ptr = range;
3885       entry->num_pages++;
3886       g->page_gotno++;
3887       return TRUE;
3888     }
3889
3890   /* Remember how many pages the old range contributed.  */
3891   old_pages = mips_elf_pages_for_range (range);
3892
3893   /* Update the ranges.  */
3894   if (addend < range->min_addend)
3895     range->min_addend = addend;
3896   else if (addend > range->max_addend)
3897     {
3898       if (range->next && addend >= range->next->min_addend - 0xffff)
3899         {
3900           old_pages += mips_elf_pages_for_range (range->next);
3901           range->max_addend = range->next->max_addend;
3902           range->next = range->next->next;
3903         }
3904       else
3905         range->max_addend = addend;
3906     }
3907
3908   /* Record any change in the total estimate.  */
3909   new_pages = mips_elf_pages_for_range (range);
3910   if (old_pages != new_pages)
3911     {
3912       entry->num_pages += new_pages - old_pages;
3913       g->page_gotno += new_pages - old_pages;
3914     }
3915
3916   return TRUE;
3917 }
3918
3919 /* Add room for N relocations to the .rel(a).dyn section in ABFD.  */
3920
3921 static void
3922 mips_elf_allocate_dynamic_relocations (bfd *abfd, struct bfd_link_info *info,
3923                                        unsigned int n)
3924 {
3925   asection *s;
3926   struct mips_elf_link_hash_table *htab;
3927
3928   htab = mips_elf_hash_table (info);
3929   BFD_ASSERT (htab != NULL);
3930
3931   s = mips_elf_rel_dyn_section (info, FALSE);
3932   BFD_ASSERT (s != NULL);
3933
3934   if (htab->is_vxworks)
3935     s->size += n * MIPS_ELF_RELA_SIZE (abfd);
3936   else
3937     {
3938       if (s->size == 0)
3939         {
3940           /* Make room for a null element.  */
3941           s->size += MIPS_ELF_REL_SIZE (abfd);
3942           ++s->reloc_count;
3943         }
3944       s->size += n * MIPS_ELF_REL_SIZE (abfd);
3945     }
3946 }
3947 \f
3948 /* A htab_traverse callback for GOT entries.  Set boolean *DATA to true
3949    if the GOT entry is for an indirect or warning symbol.  */
3950
3951 static int
3952 mips_elf_check_recreate_got (void **entryp, void *data)
3953 {
3954   struct mips_got_entry *entry;
3955   bfd_boolean *must_recreate;
3956
3957   entry = (struct mips_got_entry *) *entryp;
3958   must_recreate = (bfd_boolean *) data;
3959   if (entry->abfd != NULL && entry->symndx == -1)
3960     {
3961       struct mips_elf_link_hash_entry *h;
3962
3963       h = entry->d.h;
3964       if (h->root.root.type == bfd_link_hash_indirect
3965           || h->root.root.type == bfd_link_hash_warning)
3966         {
3967           *must_recreate = TRUE;
3968           return 0;
3969         }
3970     }
3971   return 1;
3972 }
3973
3974 /* A htab_traverse callback for GOT entries.  Add all entries to
3975    hash table *DATA, converting entries for indirect and warning
3976    symbols into entries for the target symbol.  Set *DATA to null
3977    on error.  */
3978
3979 static int
3980 mips_elf_recreate_got (void **entryp, void *data)
3981 {
3982   htab_t *new_got;
3983   struct mips_got_entry *entry;
3984   void **slot;
3985
3986   new_got = (htab_t *) data;
3987   entry = (struct mips_got_entry *) *entryp;
3988   if (entry->abfd != NULL && entry->symndx == -1)
3989     {
3990       struct mips_elf_link_hash_entry *h;
3991
3992       h = entry->d.h;
3993       while (h->root.root.type == bfd_link_hash_indirect
3994              || h->root.root.type == bfd_link_hash_warning)
3995         {
3996           BFD_ASSERT (h->global_got_area == GGA_NONE);
3997           h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
3998         }
3999       entry->d.h = h;
4000     }
4001   slot = htab_find_slot (*new_got, entry, INSERT);
4002   if (slot == NULL)
4003     {
4004       *new_got = NULL;
4005       return 0;
4006     }
4007   if (*slot == NULL)
4008     *slot = entry;
4009   return 1;
4010 }
4011
4012 /* If any entries in G->got_entries are for indirect or warning symbols,
4013    replace them with entries for the target symbol.  */
4014
4015 static bfd_boolean
4016 mips_elf_resolve_final_got_entries (struct mips_got_info *g)
4017 {
4018   bfd_boolean must_recreate;
4019   htab_t new_got;
4020
4021   must_recreate = FALSE;
4022   htab_traverse (g->got_entries, mips_elf_check_recreate_got, &must_recreate);
4023   if (must_recreate)
4024     {
4025       new_got = htab_create (htab_size (g->got_entries),
4026                              mips_elf_got_entry_hash,
4027                              mips_elf_got_entry_eq, NULL);
4028       htab_traverse (g->got_entries, mips_elf_recreate_got, &new_got);
4029       if (new_got == NULL)
4030         return FALSE;
4031
4032       htab_delete (g->got_entries);
4033       g->got_entries = new_got;
4034     }
4035   return TRUE;
4036 }
4037
4038 /* A mips_elf_link_hash_traverse callback for which DATA points
4039    to the link_info structure.  Count the number of type (3) entries
4040    in the master GOT.  */
4041
4042 static int
4043 mips_elf_count_got_symbols (struct mips_elf_link_hash_entry *h, void *data)
4044 {
4045   struct bfd_link_info *info;
4046   struct mips_elf_link_hash_table *htab;
4047   struct mips_got_info *g;
4048
4049   info = (struct bfd_link_info *) data;
4050   htab = mips_elf_hash_table (info);
4051   g = htab->got_info;
4052   if (h->global_got_area != GGA_NONE)
4053     {
4054       /* Make a final decision about whether the symbol belongs in the
4055          local or global GOT.  Symbols that bind locally can (and in the
4056          case of forced-local symbols, must) live in the local GOT.
4057          Those that are aren't in the dynamic symbol table must also
4058          live in the local GOT.
4059
4060          Note that the former condition does not always imply the
4061          latter: symbols do not bind locally if they are completely
4062          undefined.  We'll report undefined symbols later if appropriate.  */
4063       if (h->root.dynindx == -1
4064           || (h->got_only_for_calls
4065               ? SYMBOL_CALLS_LOCAL (info, &h->root)
4066               : SYMBOL_REFERENCES_LOCAL (info, &h->root)))
4067         {
4068           /* The symbol belongs in the local GOT.  We no longer need this
4069              entry if it was only used for relocations; those relocations
4070              will be against the null or section symbol instead of H.  */
4071           if (h->global_got_area != GGA_RELOC_ONLY)
4072             g->local_gotno++;
4073           h->global_got_area = GGA_NONE;
4074         }
4075       else if (htab->is_vxworks
4076                && h->got_only_for_calls
4077                && h->root.plt.offset != MINUS_ONE)
4078         /* On VxWorks, calls can refer directly to the .got.plt entry;
4079            they don't need entries in the regular GOT.  .got.plt entries
4080            will be allocated by _bfd_mips_elf_adjust_dynamic_symbol.  */
4081         h->global_got_area = GGA_NONE;
4082       else
4083         {
4084           g->global_gotno++;
4085           if (h->global_got_area == GGA_RELOC_ONLY)
4086             g->reloc_only_gotno++;
4087         }
4088     }
4089   return 1;
4090 }
4091 \f
4092 /* Compute the hash value of the bfd in a bfd2got hash entry.  */
4093
4094 static hashval_t
4095 mips_elf_bfd2got_entry_hash (const void *entry_)
4096 {
4097   const struct mips_elf_bfd2got_hash *entry
4098     = (struct mips_elf_bfd2got_hash *)entry_;
4099
4100   return entry->bfd->id;
4101 }
4102
4103 /* Check whether two hash entries have the same bfd.  */
4104
4105 static int
4106 mips_elf_bfd2got_entry_eq (const void *entry1, const void *entry2)
4107 {
4108   const struct mips_elf_bfd2got_hash *e1
4109     = (const struct mips_elf_bfd2got_hash *)entry1;
4110   const struct mips_elf_bfd2got_hash *e2
4111     = (const struct mips_elf_bfd2got_hash *)entry2;
4112
4113   return e1->bfd == e2->bfd;
4114 }
4115
4116 /* In a multi-got link, determine the GOT to be used for IBFD.  G must
4117    be the master GOT data.  */
4118
4119 static struct mips_got_info *
4120 mips_elf_got_for_ibfd (struct mips_got_info *g, bfd *ibfd)
4121 {
4122   struct mips_elf_bfd2got_hash e, *p;
4123
4124   if (! g->bfd2got)
4125     return g;
4126
4127   e.bfd = ibfd;
4128   p = htab_find (g->bfd2got, &e);
4129   return p ? p->g : NULL;
4130 }
4131
4132 /* Use BFD2GOT to find ABFD's got entry, creating one if none exists.
4133    Return NULL if an error occured.  */
4134
4135 static struct mips_got_info *
4136 mips_elf_get_got_for_bfd (struct htab *bfd2got, bfd *output_bfd,
4137                           bfd *input_bfd)
4138 {
4139   struct mips_elf_bfd2got_hash bfdgot_entry, *bfdgot;
4140   struct mips_got_info *g;
4141   void **bfdgotp;
4142
4143   bfdgot_entry.bfd = input_bfd;
4144   bfdgotp = htab_find_slot (bfd2got, &bfdgot_entry, INSERT);
4145   bfdgot = (struct mips_elf_bfd2got_hash *) *bfdgotp;
4146
4147   if (bfdgot == NULL)
4148     {
4149       bfdgot = ((struct mips_elf_bfd2got_hash *)
4150                 bfd_alloc (output_bfd, sizeof (struct mips_elf_bfd2got_hash)));
4151       if (bfdgot == NULL)
4152         return NULL;
4153
4154       *bfdgotp = bfdgot;
4155
4156       g = ((struct mips_got_info *)
4157            bfd_alloc (output_bfd, sizeof (struct mips_got_info)));
4158       if (g == NULL)
4159         return NULL;
4160
4161       bfdgot->bfd = input_bfd;
4162       bfdgot->g = g;
4163
4164       g->global_gotsym = NULL;
4165       g->global_gotno = 0;
4166       g->reloc_only_gotno = 0;
4167       g->local_gotno = 0;
4168       g->page_gotno = 0;
4169       g->assigned_gotno = -1;
4170       g->tls_gotno = 0;
4171       g->tls_assigned_gotno = 0;
4172       g->tls_ldm_offset = MINUS_ONE;
4173       g->got_entries = htab_try_create (1, mips_elf_multi_got_entry_hash,
4174                                         mips_elf_multi_got_entry_eq, NULL);
4175       if (g->got_entries == NULL)
4176         return NULL;
4177
4178       g->got_page_entries = htab_try_create (1, mips_got_page_entry_hash,
4179                                              mips_got_page_entry_eq, NULL);
4180       if (g->got_page_entries == NULL)
4181         return NULL;
4182
4183       g->bfd2got = NULL;
4184       g->next = NULL;
4185     }
4186
4187   return bfdgot->g;
4188 }
4189
4190 /* A htab_traverse callback for the entries in the master got.
4191    Create one separate got for each bfd that has entries in the global
4192    got, such that we can tell how many local and global entries each
4193    bfd requires.  */
4194
4195 static int
4196 mips_elf_make_got_per_bfd (void **entryp, void *p)
4197 {
4198   struct mips_got_entry *entry = (struct mips_got_entry *)*entryp;
4199   struct mips_elf_got_per_bfd_arg *arg = (struct mips_elf_got_per_bfd_arg *)p;
4200   struct mips_got_info *g;
4201
4202   g = mips_elf_get_got_for_bfd (arg->bfd2got, arg->obfd, entry->abfd);
4203   if (g == NULL)
4204     {
4205       arg->obfd = NULL;
4206       return 0;
4207     }
4208
4209   /* Insert the GOT entry in the bfd's got entry hash table.  */
4210   entryp = htab_find_slot (g->got_entries, entry, INSERT);
4211   if (*entryp != NULL)
4212     return 1;
4213
4214   *entryp = entry;
4215
4216   if (entry->tls_type)
4217     {
4218       if (entry->tls_type & (GOT_TLS_GD | GOT_TLS_LDM))
4219         g->tls_gotno += 2;
4220       if (entry->tls_type & GOT_TLS_IE)
4221         g->tls_gotno += 1;
4222     }
4223   else if (entry->symndx >= 0 || entry->d.h->global_got_area == GGA_NONE)
4224     ++g->local_gotno;
4225   else
4226     ++g->global_gotno;
4227
4228   return 1;
4229 }
4230
4231 /* A htab_traverse callback for the page entries in the master got.
4232    Associate each page entry with the bfd's got.  */
4233
4234 static int
4235 mips_elf_make_got_pages_per_bfd (void **entryp, void *p)
4236 {
4237   struct mips_got_page_entry *entry = (struct mips_got_page_entry *) *entryp;
4238   struct mips_elf_got_per_bfd_arg *arg = (struct mips_elf_got_per_bfd_arg *) p;
4239   struct mips_got_info *g;
4240
4241   g = mips_elf_get_got_for_bfd (arg->bfd2got, arg->obfd, entry->abfd);
4242   if (g == NULL)
4243     {
4244       arg->obfd = NULL;
4245       return 0;
4246     }
4247
4248   /* Insert the GOT entry in the bfd's got entry hash table.  */
4249   entryp = htab_find_slot (g->got_page_entries, entry, INSERT);
4250   if (*entryp != NULL)
4251     return 1;
4252
4253   *entryp = entry;
4254   g->page_gotno += entry->num_pages;
4255   return 1;
4256 }
4257
4258 /* Consider merging the got described by BFD2GOT with TO, using the
4259    information given by ARG.  Return -1 if this would lead to overflow,
4260    1 if they were merged successfully, and 0 if a merge failed due to
4261    lack of memory.  (These values are chosen so that nonnegative return
4262    values can be returned by a htab_traverse callback.)  */
4263
4264 static int
4265 mips_elf_merge_got_with (struct mips_elf_bfd2got_hash *bfd2got,
4266                          struct mips_got_info *to,
4267                          struct mips_elf_got_per_bfd_arg *arg)
4268 {
4269   struct mips_got_info *from = bfd2got->g;
4270   unsigned int estimate;
4271
4272   /* Work out how many page entries we would need for the combined GOT.  */
4273   estimate = arg->max_pages;
4274   if (estimate >= from->page_gotno + to->page_gotno)
4275     estimate = from->page_gotno + to->page_gotno;
4276
4277   /* And conservatively estimate how many local and TLS entries
4278      would be needed.  */
4279   estimate += from->local_gotno + to->local_gotno;
4280   estimate += from->tls_gotno + to->tls_gotno;
4281
4282   /* If we're merging with the primary got, any TLS relocations will
4283      come after the full set of global entries.  Otherwise estimate those
4284      conservatively as well.  */
4285   if (to == arg->primary && from->tls_gotno + to->tls_gotno)
4286     estimate += arg->global_count;
4287   else
4288     estimate += from->global_gotno + to->global_gotno;
4289
4290   /* Bail out if the combined GOT might be too big.  */
4291   if (estimate > arg->max_count)
4292     return -1;
4293
4294   /* Commit to the merge.  Record that TO is now the bfd for this got.  */
4295   bfd2got->g = to;
4296
4297   /* Transfer the bfd's got information from FROM to TO.  */
4298   htab_traverse (from->got_entries, mips_elf_make_got_per_bfd, arg);
4299   if (arg->obfd == NULL)
4300     return 0;
4301
4302   htab_traverse (from->got_page_entries, mips_elf_make_got_pages_per_bfd, arg);
4303   if (arg->obfd == NULL)
4304     return 0;
4305
4306   /* We don't have to worry about releasing memory of the actual
4307      got entries, since they're all in the master got_entries hash
4308      table anyway.  */
4309   htab_delete (from->got_entries);
4310   htab_delete (from->got_page_entries);
4311   return 1;
4312 }
4313
4314 /* Attempt to merge gots of different input bfds.  Try to use as much
4315    as possible of the primary got, since it doesn't require explicit
4316    dynamic relocations, but don't use bfds that would reference global
4317    symbols out of the addressable range.  Failing the primary got,
4318    attempt to merge with the current got, or finish the current got
4319    and then make make the new got current.  */
4320
4321 static int
4322 mips_elf_merge_gots (void **bfd2got_, void *p)
4323 {
4324   struct mips_elf_bfd2got_hash *bfd2got
4325     = (struct mips_elf_bfd2got_hash *)*bfd2got_;
4326   struct mips_elf_got_per_bfd_arg *arg = (struct mips_elf_got_per_bfd_arg *)p;
4327   struct mips_got_info *g;
4328   unsigned int estimate;
4329   int result;
4330
4331   g = bfd2got->g;
4332
4333   /* Work out the number of page, local and TLS entries.  */
4334   estimate = arg->max_pages;
4335   if (estimate > g->page_gotno)
4336     estimate = g->page_gotno;
4337   estimate += g->local_gotno + g->tls_gotno;
4338
4339   /* We place TLS GOT entries after both locals and globals.  The globals
4340      for the primary GOT may overflow the normal GOT size limit, so be
4341      sure not to merge a GOT which requires TLS with the primary GOT in that
4342      case.  This doesn't affect non-primary GOTs.  */
4343   estimate += (g->tls_gotno > 0 ? arg->global_count : g->global_gotno);
4344
4345   if (estimate <= arg->max_count)
4346     {
4347       /* If we don't have a primary GOT, use it as
4348          a starting point for the primary GOT.  */
4349       if (!arg->primary)
4350         {
4351           arg->primary = bfd2got->g;
4352           return 1;
4353         }
4354
4355       /* Try merging with the primary GOT.  */
4356       result = mips_elf_merge_got_with (bfd2got, arg->primary, arg);
4357       if (result >= 0)
4358         return result;
4359     }
4360
4361   /* If we can merge with the last-created got, do it.  */
4362   if (arg->current)
4363     {
4364       result = mips_elf_merge_got_with (bfd2got, arg->current, arg);
4365       if (result >= 0)
4366         return result;
4367     }
4368
4369   /* Well, we couldn't merge, so create a new GOT.  Don't check if it
4370      fits; if it turns out that it doesn't, we'll get relocation
4371      overflows anyway.  */
4372   g->next = arg->current;
4373   arg->current = g;
4374
4375   return 1;
4376 }
4377
4378 /* Set the TLS GOT index for the GOT entry in ENTRYP.  ENTRYP's NEXT field
4379    is null iff there is just a single GOT.  */
4380
4381 static int
4382 mips_elf_initialize_tls_index (void **entryp, void *p)
4383 {
4384   struct mips_got_entry *entry = (struct mips_got_entry *)*entryp;
4385   struct mips_got_info *g = p;
4386   bfd_vma next_index;
4387   unsigned char tls_type;
4388
4389   /* We're only interested in TLS symbols.  */
4390   if (entry->tls_type == 0)
4391     return 1;
4392
4393   next_index = MIPS_ELF_GOT_SIZE (entry->abfd) * (long) g->tls_assigned_gotno;
4394
4395   if (entry->symndx == -1 && g->next == NULL)
4396     {
4397       /* A type (3) got entry in the single-GOT case.  We use the symbol's
4398          hash table entry to track its index.  */
4399       if (entry->d.h->tls_type & GOT_TLS_OFFSET_DONE)
4400         return 1;
4401       entry->d.h->tls_type |= GOT_TLS_OFFSET_DONE;
4402       entry->d.h->tls_got_offset = next_index;
4403       tls_type = entry->d.h->tls_type;
4404     }
4405   else
4406     {
4407       if (entry->tls_type & GOT_TLS_LDM)
4408         {
4409           /* There are separate mips_got_entry objects for each input bfd
4410              that requires an LDM entry.  Make sure that all LDM entries in
4411              a GOT resolve to the same index.  */
4412           if (g->tls_ldm_offset != MINUS_TWO && g->tls_ldm_offset != MINUS_ONE)
4413             {
4414               entry->gotidx = g->tls_ldm_offset;
4415               return 1;
4416             }
4417           g->tls_ldm_offset = next_index;
4418         }
4419       entry->gotidx = next_index;
4420       tls_type = entry->tls_type;
4421     }
4422
4423   /* Account for the entries we've just allocated.  */
4424   if (tls_type & (GOT_TLS_GD | GOT_TLS_LDM))
4425     g->tls_assigned_gotno += 2;
4426   if (tls_type & GOT_TLS_IE)
4427     g->tls_assigned_gotno += 1;
4428
4429   return 1;
4430 }
4431
4432 /* If passed a NULL mips_got_info in the argument, set the marker used
4433    to tell whether a global symbol needs a got entry (in the primary
4434    got) to the given VALUE.
4435
4436    If passed a pointer G to a mips_got_info in the argument (it must
4437    not be the primary GOT), compute the offset from the beginning of
4438    the (primary) GOT section to the entry in G corresponding to the
4439    global symbol.  G's assigned_gotno must contain the index of the
4440    first available global GOT entry in G.  VALUE must contain the size
4441    of a GOT entry in bytes.  For each global GOT entry that requires a
4442    dynamic relocation, NEEDED_RELOCS is incremented, and the symbol is
4443    marked as not eligible for lazy resolution through a function
4444    stub.  */
4445 static int
4446 mips_elf_set_global_got_offset (void **entryp, void *p)
4447 {
4448   struct mips_got_entry *entry = (struct mips_got_entry *)*entryp;
4449   struct mips_elf_set_global_got_offset_arg *arg
4450     = (struct mips_elf_set_global_got_offset_arg *)p;
4451   struct mips_got_info *g = arg->g;
4452
4453   if (g && entry->tls_type != GOT_NORMAL)
4454     arg->needed_relocs +=
4455       mips_tls_got_relocs (arg->info, entry->tls_type,
4456                            entry->symndx == -1 ? &entry->d.h->root : NULL);
4457
4458   if (entry->abfd != NULL
4459       && entry->symndx == -1
4460       && entry->d.h->global_got_area != GGA_NONE)
4461     {
4462       if (g)
4463         {
4464           BFD_ASSERT (g->global_gotsym == NULL);
4465
4466           entry->gotidx = arg->value * (long) g->assigned_gotno++;
4467           if (arg->info->shared
4468               || (elf_hash_table (arg->info)->dynamic_sections_created
4469                   && entry->d.h->root.def_dynamic
4470                   && !entry->d.h->root.def_regular))
4471             ++arg->needed_relocs;
4472         }
4473       else
4474         entry->d.h->global_got_area = arg->value;
4475     }
4476
4477   return 1;
4478 }
4479
4480 /* A htab_traverse callback for GOT entries for which DATA is the
4481    bfd_link_info.  Forbid any global symbols from having traditional
4482    lazy-binding stubs.  */
4483
4484 static int
4485 mips_elf_forbid_lazy_stubs (void **entryp, void *data)
4486 {
4487   struct bfd_link_info *info;
4488   struct mips_elf_link_hash_table *htab;
4489   struct mips_got_entry *entry;
4490
4491   entry = (struct mips_got_entry *) *entryp;
4492   info = (struct bfd_link_info *) data;
4493   htab = mips_elf_hash_table (info);
4494   BFD_ASSERT (htab != NULL);
4495
4496   if (entry->abfd != NULL
4497       && entry->symndx == -1
4498       && entry->d.h->needs_lazy_stub)
4499     {
4500       entry->d.h->needs_lazy_stub = FALSE;
4501       htab->lazy_stub_count--;
4502     }
4503
4504   return 1;
4505 }
4506
4507 /* Return the offset of an input bfd IBFD's GOT from the beginning of
4508    the primary GOT.  */
4509 static bfd_vma
4510 mips_elf_adjust_gp (bfd *abfd, struct mips_got_info *g, bfd *ibfd)
4511 {
4512   if (g->bfd2got == NULL)
4513     return 0;
4514
4515   g = mips_elf_got_for_ibfd (g, ibfd);
4516   if (! g)
4517     return 0;
4518
4519   BFD_ASSERT (g->next);
4520
4521   g = g->next;
4522
4523   return (g->local_gotno + g->global_gotno + g->tls_gotno)
4524     * MIPS_ELF_GOT_SIZE (abfd);
4525 }
4526
4527 /* Turn a single GOT that is too big for 16-bit addressing into
4528    a sequence of GOTs, each one 16-bit addressable.  */
4529
4530 static bfd_boolean
4531 mips_elf_multi_got (bfd *abfd, struct bfd_link_info *info,
4532                     asection *got, bfd_size_type pages)
4533 {
4534   struct mips_elf_link_hash_table *htab;
4535   struct mips_elf_got_per_bfd_arg got_per_bfd_arg;
4536   struct mips_elf_set_global_got_offset_arg set_got_offset_arg;
4537   struct mips_got_info *g, *gg;
4538   unsigned int assign, needed_relocs;
4539   bfd *dynobj;
4540
4541   dynobj = elf_hash_table (info)->dynobj;
4542   htab = mips_elf_hash_table (info);
4543   BFD_ASSERT (htab != NULL);
4544
4545   g = htab->got_info;
4546   g->bfd2got = htab_try_create (1, mips_elf_bfd2got_entry_hash,
4547                                 mips_elf_bfd2got_entry_eq, NULL);
4548   if (g->bfd2got == NULL)
4549     return FALSE;
4550
4551   got_per_bfd_arg.bfd2got = g->bfd2got;
4552   got_per_bfd_arg.obfd = abfd;
4553   got_per_bfd_arg.info = info;
4554
4555   /* Count how many GOT entries each input bfd requires, creating a
4556      map from bfd to got info while at that.  */
4557   htab_traverse (g->got_entries, mips_elf_make_got_per_bfd, &got_per_bfd_arg);
4558   if (got_per_bfd_arg.obfd == NULL)
4559     return FALSE;
4560
4561   /* Also count how many page entries each input bfd requires.  */
4562   htab_traverse (g->got_page_entries, mips_elf_make_got_pages_per_bfd,
4563                  &got_per_bfd_arg);
4564   if (got_per_bfd_arg.obfd == NULL)
4565     return FALSE;
4566
4567   got_per_bfd_arg.current = NULL;
4568   got_per_bfd_arg.primary = NULL;
4569   got_per_bfd_arg.max_count = ((MIPS_ELF_GOT_MAX_SIZE (info)
4570                                 / MIPS_ELF_GOT_SIZE (abfd))
4571                                - htab->reserved_gotno);
4572   got_per_bfd_arg.max_pages = pages;
4573   /* The number of globals that will be included in the primary GOT.
4574      See the calls to mips_elf_set_global_got_offset below for more
4575      information.  */
4576   got_per_bfd_arg.global_count = g->global_gotno;
4577
4578   /* Try to merge the GOTs of input bfds together, as long as they
4579      don't seem to exceed the maximum GOT size, choosing one of them
4580      to be the primary GOT.  */
4581   htab_traverse (g->bfd2got, mips_elf_merge_gots, &got_per_bfd_arg);
4582   if (got_per_bfd_arg.obfd == NULL)
4583     return FALSE;
4584
4585   /* If we do not find any suitable primary GOT, create an empty one.  */
4586   if (got_per_bfd_arg.primary == NULL)
4587     {
4588       g->next = (struct mips_got_info *)
4589         bfd_alloc (abfd, sizeof (struct mips_got_info));
4590       if (g->next == NULL)
4591         return FALSE;
4592
4593       g->next->global_gotsym = NULL;
4594       g->next->global_gotno = 0;
4595       g->next->reloc_only_gotno = 0;
4596       g->next->local_gotno = 0;
4597       g->next->page_gotno = 0;
4598       g->next->tls_gotno = 0;
4599       g->next->assigned_gotno = 0;
4600       g->next->tls_assigned_gotno = 0;
4601       g->next->tls_ldm_offset = MINUS_ONE;
4602       g->next->got_entries = htab_try_create (1, mips_elf_multi_got_entry_hash,
4603                                               mips_elf_multi_got_entry_eq,
4604                                               NULL);
4605       if (g->next->got_entries == NULL)
4606         return FALSE;
4607       g->next->got_page_entries = htab_try_create (1, mips_got_page_entry_hash,
4608                                                    mips_got_page_entry_eq,
4609                                                    NULL);
4610       if (g->next->got_page_entries == NULL)
4611         return FALSE;
4612       g->next->bfd2got = NULL;
4613     }
4614   else
4615     g->next = got_per_bfd_arg.primary;
4616   g->next->next = got_per_bfd_arg.current;
4617
4618   /* GG is now the master GOT, and G is the primary GOT.  */
4619   gg = g;
4620   g = g->next;
4621
4622   /* Map the output bfd to the primary got.  That's what we're going
4623      to use for bfds that use GOT16 or GOT_PAGE relocations that we
4624      didn't mark in check_relocs, and we want a quick way to find it.
4625      We can't just use gg->next because we're going to reverse the
4626      list.  */
4627   {
4628     struct mips_elf_bfd2got_hash *bfdgot;
4629     void **bfdgotp;
4630
4631     bfdgot = (struct mips_elf_bfd2got_hash *)bfd_alloc
4632       (abfd, sizeof (struct mips_elf_bfd2got_hash));
4633
4634     if (bfdgot == NULL)
4635       return FALSE;
4636
4637     bfdgot->bfd = abfd;
4638     bfdgot->g = g;
4639     bfdgotp = htab_find_slot (gg->bfd2got, bfdgot, INSERT);
4640
4641     BFD_ASSERT (*bfdgotp == NULL);
4642     *bfdgotp = bfdgot;
4643   }
4644
4645   /* Every symbol that is referenced in a dynamic relocation must be
4646      present in the primary GOT, so arrange for them to appear after
4647      those that are actually referenced.  */
4648   gg->reloc_only_gotno = gg->global_gotno - g->global_gotno;
4649   g->global_gotno = gg->global_gotno;
4650
4651   set_got_offset_arg.g = NULL;
4652   set_got_offset_arg.value = GGA_RELOC_ONLY;
4653   htab_traverse (gg->got_entries, mips_elf_set_global_got_offset,
4654                  &set_got_offset_arg);
4655   set_got_offset_arg.value = GGA_NORMAL;
4656   htab_traverse (g->got_entries, mips_elf_set_global_got_offset,
4657                  &set_got_offset_arg);
4658
4659   /* Now go through the GOTs assigning them offset ranges.
4660      [assigned_gotno, local_gotno[ will be set to the range of local
4661      entries in each GOT.  We can then compute the end of a GOT by
4662      adding local_gotno to global_gotno.  We reverse the list and make
4663      it circular since then we'll be able to quickly compute the
4664      beginning of a GOT, by computing the end of its predecessor.  To
4665      avoid special cases for the primary GOT, while still preserving
4666      assertions that are valid for both single- and multi-got links,
4667      we arrange for the main got struct to have the right number of
4668      global entries, but set its local_gotno such that the initial
4669      offset of the primary GOT is zero.  Remember that the primary GOT
4670      will become the last item in the circular linked list, so it
4671      points back to the master GOT.  */
4672   gg->local_gotno = -g->global_gotno;
4673   gg->global_gotno = g->global_gotno;
4674   gg->tls_gotno = 0;
4675   assign = 0;
4676   gg->next = gg;
4677
4678   do
4679     {
4680       struct mips_got_info *gn;
4681
4682       assign += htab->reserved_gotno;
4683       g->assigned_gotno = assign;
4684       g->local_gotno += assign;
4685       g->local_gotno += (pages < g->page_gotno ? pages : g->page_gotno);
4686       assign = g->local_gotno + g->global_gotno + g->tls_gotno;
4687
4688       /* Take g out of the direct list, and push it onto the reversed
4689          list that gg points to.  g->next is guaranteed to be nonnull after
4690          this operation, as required by mips_elf_initialize_tls_index. */
4691       gn = g->next;
4692       g->next = gg->next;
4693       gg->next = g;
4694
4695       /* Set up any TLS entries.  We always place the TLS entries after
4696          all non-TLS entries.  */
4697       g->tls_assigned_gotno = g->local_gotno + g->global_gotno;
4698       htab_traverse (g->got_entries, mips_elf_initialize_tls_index, g);
4699       BFD_ASSERT (g->tls_assigned_gotno == assign);
4700
4701       /* Move onto the next GOT.  It will be a secondary GOT if nonull.  */
4702       g = gn;
4703
4704       /* Forbid global symbols in every non-primary GOT from having
4705          lazy-binding stubs.  */
4706       if (g)
4707         htab_traverse (g->got_entries, mips_elf_forbid_lazy_stubs, info);
4708     }
4709   while (g);
4710
4711   got->size = (gg->next->local_gotno
4712                + gg->next->global_gotno
4713                + gg->next->tls_gotno) * MIPS_ELF_GOT_SIZE (abfd);
4714
4715   needed_relocs = 0;
4716   set_got_offset_arg.value = MIPS_ELF_GOT_SIZE (abfd);
4717   set_got_offset_arg.info = info;
4718   for (g = gg->next; g && g->next != gg; g = g->next)
4719     {
4720       unsigned int save_assign;
4721
4722       /* Assign offsets to global GOT entries.  */
4723       save_assign = g->assigned_gotno;
4724       g->assigned_gotno = g->local_gotno;
4725       set_got_offset_arg.g = g;
4726       set_got_offset_arg.needed_relocs = 0;
4727       htab_traverse (g->got_entries,
4728                      mips_elf_set_global_got_offset,
4729                      &set_got_offset_arg);
4730       needed_relocs += set_got_offset_arg.needed_relocs;
4731       BFD_ASSERT (g->assigned_gotno - g->local_gotno <= g->global_gotno);
4732
4733       g->assigned_gotno = save_assign;
4734       if (info->shared)
4735         {
4736           needed_relocs += g->local_gotno - g->assigned_gotno;
4737           BFD_ASSERT (g->assigned_gotno == g->next->local_gotno
4738                       + g->next->global_gotno
4739                       + g->next->tls_gotno
4740                       + htab->reserved_gotno);
4741         }
4742     }
4743
4744   if (needed_relocs)
4745     mips_elf_allocate_dynamic_relocations (dynobj, info,
4746                                            needed_relocs);
4747
4748   return TRUE;
4749 }
4750
4751 \f
4752 /* Returns the first relocation of type r_type found, beginning with
4753    RELOCATION.  RELEND is one-past-the-end of the relocation table.  */
4754
4755 static const Elf_Internal_Rela *
4756 mips_elf_next_relocation (bfd *abfd ATTRIBUTE_UNUSED, unsigned int r_type,
4757                           const Elf_Internal_Rela *relocation,
4758                           const Elf_Internal_Rela *relend)
4759 {
4760   unsigned long r_symndx = ELF_R_SYM (abfd, relocation->r_info);
4761
4762   while (relocation < relend)
4763     {
4764       if (ELF_R_TYPE (abfd, relocation->r_info) == r_type
4765           && ELF_R_SYM (abfd, relocation->r_info) == r_symndx)
4766         return relocation;
4767
4768       ++relocation;
4769     }
4770
4771   /* We didn't find it.  */
4772   return NULL;
4773 }
4774
4775 /* Return whether an input relocation is against a local symbol.  */
4776
4777 static bfd_boolean
4778 mips_elf_local_relocation_p (bfd *input_bfd,
4779                              const Elf_Internal_Rela *relocation,
4780                              asection **local_sections)
4781 {
4782   unsigned long r_symndx;
4783   Elf_Internal_Shdr *symtab_hdr;
4784   size_t extsymoff;
4785
4786   r_symndx = ELF_R_SYM (input_bfd, relocation->r_info);
4787   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
4788   extsymoff = (elf_bad_symtab (input_bfd)) ? 0 : symtab_hdr->sh_info;
4789
4790   if (r_symndx < extsymoff)
4791     return TRUE;
4792   if (elf_bad_symtab (input_bfd) && local_sections[r_symndx] != NULL)
4793     return TRUE;
4794
4795   return FALSE;
4796 }
4797 \f
4798 /* Sign-extend VALUE, which has the indicated number of BITS.  */
4799
4800 bfd_vma
4801 _bfd_mips_elf_sign_extend (bfd_vma value, int bits)
4802 {
4803   if (value & ((bfd_vma) 1 << (bits - 1)))
4804     /* VALUE is negative.  */
4805     value |= ((bfd_vma) - 1) << bits;
4806
4807   return value;
4808 }
4809
4810 /* Return non-zero if the indicated VALUE has overflowed the maximum
4811    range expressible by a signed number with the indicated number of
4812    BITS.  */
4813
4814 static bfd_boolean
4815 mips_elf_overflow_p (bfd_vma value, int bits)
4816 {
4817   bfd_signed_vma svalue = (bfd_signed_vma) value;
4818
4819   if (svalue > (1 << (bits - 1)) - 1)
4820     /* The value is too big.  */
4821     return TRUE;
4822   else if (svalue < -(1 << (bits - 1)))
4823     /* The value is too small.  */
4824     return TRUE;
4825
4826   /* All is well.  */
4827   return FALSE;
4828 }
4829
4830 /* Calculate the %high function.  */
4831
4832 static bfd_vma
4833 mips_elf_high (bfd_vma value)
4834 {
4835   return ((value + (bfd_vma) 0x8000) >> 16) & 0xffff;
4836 }
4837
4838 /* Calculate the %higher function.  */
4839
4840 static bfd_vma
4841 mips_elf_higher (bfd_vma value ATTRIBUTE_UNUSED)
4842 {
4843 #ifdef BFD64
4844   return ((value + (bfd_vma) 0x80008000) >> 32) & 0xffff;
4845 #else
4846   abort ();
4847   return MINUS_ONE;
4848 #endif
4849 }
4850
4851 /* Calculate the %highest function.  */
4852
4853 static bfd_vma
4854 mips_elf_highest (bfd_vma value ATTRIBUTE_UNUSED)
4855 {
4856 #ifdef BFD64
4857   return ((value + (((bfd_vma) 0x8000 << 32) | 0x80008000)) >> 48) & 0xffff;
4858 #else
4859   abort ();
4860   return MINUS_ONE;
4861 #endif
4862 }
4863 \f
4864 /* Create the .compact_rel section.  */
4865
4866 static bfd_boolean
4867 mips_elf_create_compact_rel_section
4868   (bfd *abfd, struct bfd_link_info *info ATTRIBUTE_UNUSED)
4869 {
4870   flagword flags;
4871   register asection *s;
4872
4873   if (bfd_get_linker_section (abfd, ".compact_rel") == NULL)
4874     {
4875       flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED
4876                | SEC_READONLY);
4877
4878       s = bfd_make_section_anyway_with_flags (abfd, ".compact_rel", flags);
4879       if (s == NULL
4880           || ! bfd_set_section_alignment (abfd, s,
4881                                           MIPS_ELF_LOG_FILE_ALIGN (abfd)))
4882         return FALSE;
4883
4884       s->size = sizeof (Elf32_External_compact_rel);
4885     }
4886
4887   return TRUE;
4888 }
4889
4890 /* Create the .got section to hold the global offset table.  */
4891
4892 static bfd_boolean
4893 mips_elf_create_got_section (bfd *abfd, struct bfd_link_info *info)
4894 {
4895   flagword flags;
4896   register asection *s;
4897   struct elf_link_hash_entry *h;
4898   struct bfd_link_hash_entry *bh;
4899   struct mips_got_info *g;
4900   bfd_size_type amt;
4901   struct mips_elf_link_hash_table *htab;
4902
4903   htab = mips_elf_hash_table (info);
4904   BFD_ASSERT (htab != NULL);
4905
4906   /* This function may be called more than once.  */
4907   if (htab->sgot)
4908     return TRUE;
4909
4910   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
4911            | SEC_LINKER_CREATED);
4912
4913   /* We have to use an alignment of 2**4 here because this is hardcoded
4914      in the function stub generation and in the linker script.  */
4915   s = bfd_make_section_anyway_with_flags (abfd, ".got", flags);
4916   if (s == NULL
4917       || ! bfd_set_section_alignment (abfd, s, 4))
4918     return FALSE;
4919   htab->sgot = s;
4920
4921   /* Define the symbol _GLOBAL_OFFSET_TABLE_.  We don't do this in the
4922      linker script because we don't want to define the symbol if we
4923      are not creating a global offset table.  */
4924   bh = NULL;
4925   if (! (_bfd_generic_link_add_one_symbol
4926          (info, abfd, "_GLOBAL_OFFSET_TABLE_", BSF_GLOBAL, s,
4927           0, NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
4928     return FALSE;
4929
4930   h = (struct elf_link_hash_entry *) bh;
4931   h->non_elf = 0;
4932   h->def_regular = 1;
4933   h->type = STT_OBJECT;
4934   elf_hash_table (info)->hgot = h;
4935
4936   if (info->shared
4937       && ! bfd_elf_link_record_dynamic_symbol (info, h))
4938     return FALSE;
4939
4940   amt = sizeof (struct mips_got_info);
4941   g = bfd_alloc (abfd, amt);
4942   if (g == NULL)
4943     return FALSE;
4944   g->global_gotsym = NULL;
4945   g->global_gotno = 0;
4946   g->reloc_only_gotno = 0;
4947   g->tls_gotno = 0;
4948   g->local_gotno = 0;
4949   g->page_gotno = 0;
4950   g->assigned_gotno = 0;
4951   g->bfd2got = NULL;
4952   g->next = NULL;
4953   g->tls_ldm_offset = MINUS_ONE;
4954   g->got_entries = htab_try_create (1, mips_elf_got_entry_hash,
4955                                     mips_elf_got_entry_eq, NULL);
4956   if (g->got_entries == NULL)
4957     return FALSE;
4958   g->got_page_entries = htab_try_create (1, mips_got_page_entry_hash,
4959                                          mips_got_page_entry_eq, NULL);
4960   if (g->got_page_entries == NULL)
4961     return FALSE;
4962   htab->got_info = g;
4963   mips_elf_section_data (s)->elf.this_hdr.sh_flags
4964     |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL;
4965
4966   /* We also need a .got.plt section when generating PLTs.  */
4967   s = bfd_make_section_anyway_with_flags (abfd, ".got.plt",
4968                                           SEC_ALLOC | SEC_LOAD
4969                                           | SEC_HAS_CONTENTS
4970                                           | SEC_IN_MEMORY
4971                                           | SEC_LINKER_CREATED);
4972   if (s == NULL)
4973     return FALSE;
4974   htab->sgotplt = s;
4975
4976   return TRUE;
4977 }
4978 \f
4979 /* Return true if H refers to the special VxWorks __GOTT_BASE__ or
4980    __GOTT_INDEX__ symbols.  These symbols are only special for
4981    shared objects; they are not used in executables.  */
4982
4983 static bfd_boolean
4984 is_gott_symbol (struct bfd_link_info *info, struct elf_link_hash_entry *h)
4985 {
4986   return (mips_elf_hash_table (info)->is_vxworks
4987           && info->shared
4988           && (strcmp (h->root.root.string, "__GOTT_BASE__") == 0
4989               || strcmp (h->root.root.string, "__GOTT_INDEX__") == 0));
4990 }
4991
4992 /* Return TRUE if a relocation of type R_TYPE from INPUT_BFD might
4993    require an la25 stub.  See also mips_elf_local_pic_function_p,
4994    which determines whether the destination function ever requires a
4995    stub.  */
4996
4997 static bfd_boolean
4998 mips_elf_relocation_needs_la25_stub (bfd *input_bfd, int r_type,
4999                                      bfd_boolean target_is_16_bit_code_p)
5000 {
5001   /* We specifically ignore branches and jumps from EF_PIC objects,
5002      where the onus is on the compiler or programmer to perform any
5003      necessary initialization of $25.  Sometimes such initialization
5004      is unnecessary; for example, -mno-shared functions do not use
5005      the incoming value of $25, and may therefore be called directly.  */
5006   if (PIC_OBJECT_P (input_bfd))
5007     return FALSE;
5008
5009   switch (r_type)
5010     {
5011     case R_MIPS_26:
5012     case R_MIPS_PC16:
5013     case R_MICROMIPS_26_S1:
5014     case R_MICROMIPS_PC7_S1:
5015     case R_MICROMIPS_PC10_S1:
5016     case R_MICROMIPS_PC16_S1:
5017     case R_MICROMIPS_PC23_S2:
5018       return TRUE;
5019
5020     case R_MIPS16_26:
5021       return !target_is_16_bit_code_p;
5022
5023     default:
5024       return FALSE;
5025     }
5026 }
5027 \f
5028 /* Calculate the value produced by the RELOCATION (which comes from
5029    the INPUT_BFD).  The ADDEND is the addend to use for this
5030    RELOCATION; RELOCATION->R_ADDEND is ignored.
5031
5032    The result of the relocation calculation is stored in VALUEP.
5033    On exit, set *CROSS_MODE_JUMP_P to true if the relocation field
5034    is a MIPS16 or microMIPS jump to standard MIPS code, or vice versa.
5035
5036    This function returns bfd_reloc_continue if the caller need take no
5037    further action regarding this relocation, bfd_reloc_notsupported if
5038    something goes dramatically wrong, bfd_reloc_overflow if an
5039    overflow occurs, and bfd_reloc_ok to indicate success.  */
5040
5041 static bfd_reloc_status_type
5042 mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
5043                                asection *input_section,
5044                                struct bfd_link_info *info,
5045                                const Elf_Internal_Rela *relocation,
5046                                bfd_vma addend, reloc_howto_type *howto,
5047                                Elf_Internal_Sym *local_syms,
5048                                asection **local_sections, bfd_vma *valuep,
5049                                const char **namep,
5050                                bfd_boolean *cross_mode_jump_p,
5051                                bfd_boolean save_addend)
5052 {
5053   /* The eventual value we will return.  */
5054   bfd_vma value;
5055   /* The address of the symbol against which the relocation is
5056      occurring.  */
5057   bfd_vma symbol = 0;
5058   /* The final GP value to be used for the relocatable, executable, or
5059      shared object file being produced.  */
5060   bfd_vma gp;
5061   /* The place (section offset or address) of the storage unit being
5062      relocated.  */
5063   bfd_vma p;
5064   /* The value of GP used to create the relocatable object.  */
5065   bfd_vma gp0;
5066   /* The offset into the global offset table at which the address of
5067      the relocation entry symbol, adjusted by the addend, resides
5068      during execution.  */
5069   bfd_vma g = MINUS_ONE;
5070   /* The section in which the symbol referenced by the relocation is
5071      located.  */
5072   asection *sec = NULL;
5073   struct mips_elf_link_hash_entry *h = NULL;
5074   /* TRUE if the symbol referred to by this relocation is a local
5075      symbol.  */
5076   bfd_boolean local_p, was_local_p;
5077   /* TRUE if the symbol referred to by this relocation is "_gp_disp".  */
5078   bfd_boolean gp_disp_p = FALSE;
5079   /* TRUE if the symbol referred to by this relocation is
5080      "__gnu_local_gp".  */
5081   bfd_boolean gnu_local_gp_p = FALSE;
5082   Elf_Internal_Shdr *symtab_hdr;
5083   size_t extsymoff;
5084   unsigned long r_symndx;
5085   int r_type;
5086   /* TRUE if overflow occurred during the calculation of the
5087      relocation value.  */
5088   bfd_boolean overflowed_p;
5089   /* TRUE if this relocation refers to a MIPS16 function.  */
5090   bfd_boolean target_is_16_bit_code_p = FALSE;
5091   bfd_boolean target_is_micromips_code_p = FALSE;
5092   struct mips_elf_link_hash_table *htab;
5093   bfd *dynobj;
5094
5095   dynobj = elf_hash_table (info)->dynobj;
5096   htab = mips_elf_hash_table (info);
5097   BFD_ASSERT (htab != NULL);
5098
5099   /* Parse the relocation.  */
5100   r_symndx = ELF_R_SYM (input_bfd, relocation->r_info);
5101   r_type = ELF_R_TYPE (input_bfd, relocation->r_info);
5102   p = (input_section->output_section->vma
5103        + input_section->output_offset
5104        + relocation->r_offset);
5105
5106   /* Assume that there will be no overflow.  */
5107   overflowed_p = FALSE;
5108
5109   /* Figure out whether or not the symbol is local, and get the offset
5110      used in the array of hash table entries.  */
5111   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
5112   local_p = mips_elf_local_relocation_p (input_bfd, relocation,
5113                                          local_sections);
5114   was_local_p = local_p;
5115   if (! elf_bad_symtab (input_bfd))
5116     extsymoff = symtab_hdr->sh_info;
5117   else
5118     {
5119       /* The symbol table does not follow the rule that local symbols
5120          must come before globals.  */
5121       extsymoff = 0;
5122     }
5123
5124   /* Figure out the value of the symbol.  */
5125   if (local_p)
5126     {
5127       Elf_Internal_Sym *sym;
5128
5129       sym = local_syms + r_symndx;
5130       sec = local_sections[r_symndx];
5131
5132       symbol = sec->output_section->vma + sec->output_offset;
5133       if (ELF_ST_TYPE (sym->st_info) != STT_SECTION
5134           || (sec->flags & SEC_MERGE))
5135         symbol += sym->st_value;
5136       if ((sec->flags & SEC_MERGE)
5137           && ELF_ST_TYPE (sym->st_info) == STT_SECTION)
5138         {
5139           addend = _bfd_elf_rel_local_sym (abfd, sym, &sec, addend);
5140           addend -= symbol;
5141           addend += sec->output_section->vma + sec->output_offset;
5142         }
5143
5144       /* MIPS16/microMIPS text labels should be treated as odd.  */
5145       if (ELF_ST_IS_COMPRESSED (sym->st_other))
5146         ++symbol;
5147
5148       /* Record the name of this symbol, for our caller.  */
5149       *namep = bfd_elf_string_from_elf_section (input_bfd,
5150                                                 symtab_hdr->sh_link,
5151                                                 sym->st_name);
5152       if (*namep == '\0')
5153         *namep = bfd_section_name (input_bfd, sec);
5154
5155       target_is_16_bit_code_p = ELF_ST_IS_MIPS16 (sym->st_other);
5156       target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (sym->st_other);
5157     }
5158   else
5159     {
5160       /* ??? Could we use RELOC_FOR_GLOBAL_SYMBOL here ?  */
5161
5162       /* For global symbols we look up the symbol in the hash-table.  */
5163       h = ((struct mips_elf_link_hash_entry *)
5164            elf_sym_hashes (input_bfd) [r_symndx - extsymoff]);
5165       /* Find the real hash-table entry for this symbol.  */
5166       while (h->root.root.type == bfd_link_hash_indirect
5167              || h->root.root.type == bfd_link_hash_warning)
5168         h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
5169
5170       /* Record the name of this symbol, for our caller.  */
5171       *namep = h->root.root.root.string;
5172
5173       /* See if this is the special _gp_disp symbol.  Note that such a
5174          symbol must always be a global symbol.  */
5175       if (strcmp (*namep, "_gp_disp") == 0
5176           && ! NEWABI_P (input_bfd))
5177         {
5178           /* Relocations against _gp_disp are permitted only with
5179              R_MIPS_HI16 and R_MIPS_LO16 relocations.  */
5180           if (!hi16_reloc_p (r_type) && !lo16_reloc_p (r_type))
5181             return bfd_reloc_notsupported;
5182
5183           gp_disp_p = TRUE;
5184         }
5185       /* See if this is the special _gp symbol.  Note that such a
5186          symbol must always be a global symbol.  */
5187       else if (strcmp (*namep, "__gnu_local_gp") == 0)
5188         gnu_local_gp_p = TRUE;
5189
5190
5191       /* If this symbol is defined, calculate its address.  Note that
5192          _gp_disp is a magic symbol, always implicitly defined by the
5193          linker, so it's inappropriate to check to see whether or not
5194          its defined.  */
5195       else if ((h->root.root.type == bfd_link_hash_defined
5196                 || h->root.root.type == bfd_link_hash_defweak)
5197                && h->root.root.u.def.section)
5198         {
5199           sec = h->root.root.u.def.section;
5200           if (sec->output_section)
5201             symbol = (h->root.root.u.def.value
5202                       + sec->output_section->vma
5203                       + sec->output_offset);
5204           else
5205             symbol = h->root.root.u.def.value;
5206         }
5207       else if (h->root.root.type == bfd_link_hash_undefweak)
5208         /* We allow relocations against undefined weak symbols, giving
5209            it the value zero, so that you can undefined weak functions
5210            and check to see if they exist by looking at their
5211            addresses.  */
5212         symbol = 0;
5213       else if (info->unresolved_syms_in_objects == RM_IGNORE
5214                && ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT)
5215         symbol = 0;
5216       else if (strcmp (*namep, SGI_COMPAT (input_bfd)
5217                        ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING") == 0)
5218         {
5219           /* If this is a dynamic link, we should have created a
5220              _DYNAMIC_LINK symbol or _DYNAMIC_LINKING(for normal mips) symbol
5221              in in _bfd_mips_elf_create_dynamic_sections.
5222              Otherwise, we should define the symbol with a value of 0.
5223              FIXME: It should probably get into the symbol table
5224              somehow as well.  */
5225           BFD_ASSERT (! info->shared);
5226           BFD_ASSERT (bfd_get_section_by_name (abfd, ".dynamic") == NULL);
5227           symbol = 0;
5228         }
5229       else if (ELF_MIPS_IS_OPTIONAL (h->root.other))
5230         {
5231           /* This is an optional symbol - an Irix specific extension to the
5232              ELF spec.  Ignore it for now.
5233              XXX - FIXME - there is more to the spec for OPTIONAL symbols
5234              than simply ignoring them, but we do not handle this for now.
5235              For information see the "64-bit ELF Object File Specification"
5236              which is available from here:
5237              http://techpubs.sgi.com/library/manuals/4000/007-4658-001/pdf/007-4658-001.pdf  */
5238           symbol = 0;
5239         }
5240       else if ((*info->callbacks->undefined_symbol)
5241                (info, h->root.root.root.string, input_bfd,
5242                 input_section, relocation->r_offset,
5243                 (info->unresolved_syms_in_objects == RM_GENERATE_ERROR)
5244                  || ELF_ST_VISIBILITY (h->root.other)))
5245         {
5246           return bfd_reloc_undefined;
5247         }
5248       else
5249         {
5250           return bfd_reloc_notsupported;
5251         }
5252
5253       target_is_16_bit_code_p = ELF_ST_IS_MIPS16 (h->root.other);
5254       /* If the output section is the PLT section,
5255          then the target is not microMIPS.  */
5256       target_is_micromips_code_p = (htab->splt != sec
5257                                     && ELF_ST_IS_MICROMIPS (h->root.other));
5258     }
5259
5260   /* If this is a reference to a 16-bit function with a stub, we need
5261      to redirect the relocation to the stub unless:
5262
5263      (a) the relocation is for a MIPS16 JAL;
5264
5265      (b) the relocation is for a MIPS16 PIC call, and there are no
5266          non-MIPS16 uses of the GOT slot; or
5267
5268      (c) the section allows direct references to MIPS16 functions.  */
5269   if (r_type != R_MIPS16_26
5270       && !info->relocatable
5271       && ((h != NULL
5272            && h->fn_stub != NULL
5273            && (r_type != R_MIPS16_CALL16 || h->need_fn_stub))
5274           || (local_p
5275               && elf_tdata (input_bfd)->local_stubs != NULL
5276               && elf_tdata (input_bfd)->local_stubs[r_symndx] != NULL))
5277       && !section_allows_mips16_refs_p (input_section))
5278     {
5279       /* This is a 32- or 64-bit call to a 16-bit function.  We should
5280          have already noticed that we were going to need the
5281          stub.  */
5282       if (local_p)
5283         {
5284           sec = elf_tdata (input_bfd)->local_stubs[r_symndx];
5285           value = 0;
5286         }
5287       else
5288         {
5289           BFD_ASSERT (h->need_fn_stub);
5290           if (h->la25_stub)
5291             {
5292               /* If a LA25 header for the stub itself exists, point to the
5293                  prepended LUI/ADDIU sequence.  */
5294               sec = h->la25_stub->stub_section;
5295               value = h->la25_stub->offset;
5296             }
5297           else
5298             {
5299               sec = h->fn_stub;
5300               value = 0;
5301             }
5302         }
5303
5304       symbol = sec->output_section->vma + sec->output_offset + value;
5305       /* The target is 16-bit, but the stub isn't.  */
5306       target_is_16_bit_code_p = FALSE;
5307     }
5308   /* If this is a 16-bit call to a 32- or 64-bit function with a stub, we
5309      need to redirect the call to the stub.  Note that we specifically
5310      exclude R_MIPS16_CALL16 from this behavior; indirect calls should
5311      use an indirect stub instead.  */
5312   else if (r_type == R_MIPS16_26 && !info->relocatable
5313            && ((h != NULL && (h->call_stub != NULL || h->call_fp_stub != NULL))
5314                || (local_p
5315                    && elf_tdata (input_bfd)->local_call_stubs != NULL
5316                    && elf_tdata (input_bfd)->local_call_stubs[r_symndx] != NULL))
5317            && !target_is_16_bit_code_p)
5318     {
5319       if (local_p)
5320         sec = elf_tdata (input_bfd)->local_call_stubs[r_symndx];
5321       else
5322         {
5323           /* If both call_stub and call_fp_stub are defined, we can figure
5324              out which one to use by checking which one appears in the input
5325              file.  */
5326           if (h->call_stub != NULL && h->call_fp_stub != NULL)
5327             {
5328               asection *o;
5329
5330               sec = NULL;
5331               for (o = input_bfd->sections; o != NULL; o = o->next)
5332                 {
5333                   if (CALL_FP_STUB_P (bfd_get_section_name (input_bfd, o)))
5334                     {
5335                       sec = h->call_fp_stub;
5336                       break;
5337                     }
5338                 }
5339               if (sec == NULL)
5340                 sec = h->call_stub;
5341             }
5342           else if (h->call_stub != NULL)
5343             sec = h->call_stub;
5344           else
5345             sec = h->call_fp_stub;
5346         }
5347
5348       BFD_ASSERT (sec->size > 0);
5349       symbol = sec->output_section->vma + sec->output_offset;
5350     }
5351   /* If this is a direct call to a PIC function, redirect to the
5352      non-PIC stub.  */
5353   else if (h != NULL && h->la25_stub
5354            && mips_elf_relocation_needs_la25_stub (input_bfd, r_type,
5355                                                    target_is_16_bit_code_p))
5356     symbol = (h->la25_stub->stub_section->output_section->vma
5357               + h->la25_stub->stub_section->output_offset
5358               + h->la25_stub->offset);
5359
5360   /* Make sure MIPS16 and microMIPS are not used together.  */
5361   if ((r_type == R_MIPS16_26 && target_is_micromips_code_p)
5362       || (micromips_branch_reloc_p (r_type) && target_is_16_bit_code_p))
5363    {
5364       (*_bfd_error_handler)
5365         (_("MIPS16 and microMIPS functions cannot call each other"));
5366       return bfd_reloc_notsupported;
5367    }
5368
5369   /* Calls from 16-bit code to 32-bit code and vice versa require the
5370      mode change.  However, we can ignore calls to undefined weak symbols,
5371      which should never be executed at runtime.  This exception is important
5372      because the assembly writer may have "known" that any definition of the
5373      symbol would be 16-bit code, and that direct jumps were therefore
5374      acceptable.  */
5375   *cross_mode_jump_p = (!info->relocatable
5376                         && !(h && h->root.root.type == bfd_link_hash_undefweak)
5377                         && ((r_type == R_MIPS16_26 && !target_is_16_bit_code_p)
5378                             || (r_type == R_MICROMIPS_26_S1
5379                                 && !target_is_micromips_code_p)
5380                             || ((r_type == R_MIPS_26 || r_type == R_MIPS_JALR)
5381                                 && (target_is_16_bit_code_p
5382                                     || target_is_micromips_code_p))));
5383
5384   local_p = (h == NULL
5385              || (h->got_only_for_calls
5386                  ? SYMBOL_CALLS_LOCAL (info, &h->root)
5387                  : SYMBOL_REFERENCES_LOCAL (info, &h->root)));
5388
5389   gp0 = _bfd_get_gp_value (input_bfd);
5390   gp = _bfd_get_gp_value (abfd);
5391   if (htab->got_info)
5392     gp += mips_elf_adjust_gp (abfd, htab->got_info, input_bfd);
5393
5394   if (gnu_local_gp_p)
5395     symbol = gp;
5396
5397   /* Global R_MIPS_GOT_PAGE/R_MICROMIPS_GOT_PAGE relocations are equivalent
5398      to R_MIPS_GOT_DISP/R_MICROMIPS_GOT_DISP.  The addend is applied by the
5399      corresponding R_MIPS_GOT_OFST/R_MICROMIPS_GOT_OFST.  */
5400   if (got_page_reloc_p (r_type) && !local_p)
5401     {
5402       r_type = (micromips_reloc_p (r_type)
5403                 ? R_MICROMIPS_GOT_DISP : R_MIPS_GOT_DISP);
5404       addend = 0;
5405     }
5406
5407   /* If we haven't already determined the GOT offset, and we're going
5408      to need it, get it now.  */
5409   switch (r_type)
5410     {
5411     case R_MIPS16_CALL16:
5412     case R_MIPS16_GOT16:
5413     case R_MIPS_CALL16:
5414     case R_MIPS_GOT16:
5415     case R_MIPS_GOT_DISP:
5416     case R_MIPS_GOT_HI16:
5417     case R_MIPS_CALL_HI16:
5418     case R_MIPS_GOT_LO16:
5419     case R_MIPS_CALL_LO16:
5420     case R_MICROMIPS_CALL16:
5421     case R_MICROMIPS_GOT16:
5422     case R_MICROMIPS_GOT_DISP:
5423     case R_MICROMIPS_GOT_HI16:
5424     case R_MICROMIPS_CALL_HI16:
5425     case R_MICROMIPS_GOT_LO16:
5426     case R_MICROMIPS_CALL_LO16:
5427     case R_MIPS_TLS_GD:
5428     case R_MIPS_TLS_GOTTPREL:
5429     case R_MIPS_TLS_LDM:
5430     case R_MIPS16_TLS_GD:
5431     case R_MIPS16_TLS_GOTTPREL:
5432     case R_MIPS16_TLS_LDM:
5433     case R_MICROMIPS_TLS_GD:
5434     case R_MICROMIPS_TLS_GOTTPREL:
5435     case R_MICROMIPS_TLS_LDM:
5436       /* Find the index into the GOT where this value is located.  */
5437       if (tls_ldm_reloc_p (r_type))
5438         {
5439           g = mips_elf_local_got_index (abfd, input_bfd, info,
5440                                         0, 0, NULL, r_type);
5441           if (g == MINUS_ONE)
5442             return bfd_reloc_outofrange;
5443         }
5444       else if (!local_p)
5445         {
5446           /* On VxWorks, CALL relocations should refer to the .got.plt
5447              entry, which is initialized to point at the PLT stub.  */
5448           if (htab->is_vxworks
5449               && (call_hi16_reloc_p (r_type)
5450                   || call_lo16_reloc_p (r_type)
5451                   || call16_reloc_p (r_type)))
5452             {
5453               BFD_ASSERT (addend == 0);
5454               BFD_ASSERT (h->root.needs_plt);
5455               g = mips_elf_gotplt_index (info, &h->root);
5456             }
5457           else
5458             {
5459               BFD_ASSERT (addend == 0);
5460               g = mips_elf_global_got_index (dynobj, input_bfd,
5461                                              &h->root, r_type, info);
5462               if (h->tls_type == GOT_NORMAL
5463                   && !elf_hash_table (info)->dynamic_sections_created)
5464                 /* This is a static link.  We must initialize the GOT entry.  */
5465                 MIPS_ELF_PUT_WORD (dynobj, symbol, htab->sgot->contents + g);
5466             }
5467         }
5468       else if (!htab->is_vxworks
5469                && (call16_reloc_p (r_type) || got16_reloc_p (r_type)))
5470         /* The calculation below does not involve "g".  */
5471         break;
5472       else
5473         {
5474           g = mips_elf_local_got_index (abfd, input_bfd, info,
5475                                         symbol + addend, r_symndx, h, r_type);
5476           if (g == MINUS_ONE)
5477             return bfd_reloc_outofrange;
5478         }
5479
5480       /* Convert GOT indices to actual offsets.  */
5481       g = mips_elf_got_offset_from_index (info, abfd, input_bfd, g);
5482       break;
5483     }
5484
5485   /* Relocations against the VxWorks __GOTT_BASE__ and __GOTT_INDEX__
5486      symbols are resolved by the loader.  Add them to .rela.dyn.  */
5487   if (h != NULL && is_gott_symbol (info, &h->root))
5488     {
5489       Elf_Internal_Rela outrel;
5490       bfd_byte *loc;
5491       asection *s;
5492
5493       s = mips_elf_rel_dyn_section (info, FALSE);
5494       loc = s->contents + s->reloc_count++ * sizeof (Elf32_External_Rela);
5495
5496       outrel.r_offset = (input_section->output_section->vma
5497                          + input_section->output_offset
5498                          + relocation->r_offset);
5499       outrel.r_info = ELF32_R_INFO (h->root.dynindx, r_type);
5500       outrel.r_addend = addend;
5501       bfd_elf32_swap_reloca_out (abfd, &outrel, loc);
5502
5503       /* If we've written this relocation for a readonly section,
5504          we need to set DF_TEXTREL again, so that we do not delete the
5505          DT_TEXTREL tag.  */
5506       if (MIPS_ELF_READONLY_SECTION (input_section))
5507         info->flags |= DF_TEXTREL;
5508
5509       *valuep = 0;
5510       return bfd_reloc_ok;
5511     }
5512
5513   /* Figure out what kind of relocation is being performed.  */
5514   switch (r_type)
5515     {
5516     case R_MIPS_NONE:
5517       return bfd_reloc_continue;
5518
5519     case R_MIPS_16:
5520       value = symbol + _bfd_mips_elf_sign_extend (addend, 16);
5521       overflowed_p = mips_elf_overflow_p (value, 16);
5522       break;
5523
5524     case R_MIPS_32:
5525     case R_MIPS_REL32:
5526     case R_MIPS_64:
5527       if ((info->shared
5528            || (htab->root.dynamic_sections_created
5529                && h != NULL
5530                && h->root.def_dynamic
5531                && !h->root.def_regular
5532                && !h->has_static_relocs))
5533           && r_symndx != STN_UNDEF
5534           && (h == NULL
5535               || h->root.root.type != bfd_link_hash_undefweak
5536               || ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT)
5537           && (input_section->flags & SEC_ALLOC) != 0)
5538         {
5539           /* If we're creating a shared library, then we can't know
5540              where the symbol will end up.  So, we create a relocation
5541              record in the output, and leave the job up to the dynamic
5542              linker.  We must do the same for executable references to
5543              shared library symbols, unless we've decided to use copy
5544              relocs or PLTs instead.  */
5545           value = addend;
5546           if (!mips_elf_create_dynamic_relocation (abfd,
5547                                                    info,
5548                                                    relocation,
5549                                                    h,
5550                                                    sec,
5551                                                    symbol,
5552                                                    &value,
5553                                                    input_section))
5554             return bfd_reloc_undefined;
5555         }
5556       else
5557         {
5558           if (r_type != R_MIPS_REL32)
5559             value = symbol + addend;
5560           else
5561             value = addend;
5562         }
5563       value &= howto->dst_mask;
5564       break;
5565
5566     case R_MIPS_PC32:
5567       value = symbol + addend - p;
5568       value &= howto->dst_mask;
5569       break;
5570
5571     case R_MIPS16_26:
5572       /* The calculation for R_MIPS16_26 is just the same as for an
5573          R_MIPS_26.  It's only the storage of the relocated field into
5574          the output file that's different.  That's handled in
5575          mips_elf_perform_relocation.  So, we just fall through to the
5576          R_MIPS_26 case here.  */
5577     case R_MIPS_26:
5578     case R_MICROMIPS_26_S1:
5579       {
5580         unsigned int shift;
5581
5582         /* Make sure the target of JALX is word-aligned.  Bit 0 must be
5583            the correct ISA mode selector and bit 1 must be 0.  */
5584         if (*cross_mode_jump_p && (symbol & 3) != (r_type == R_MIPS_26))
5585           return bfd_reloc_outofrange;
5586
5587         /* Shift is 2, unusually, for microMIPS JALX.  */
5588         shift = (!*cross_mode_jump_p && r_type == R_MICROMIPS_26_S1) ? 1 : 2;
5589
5590         if (was_local_p)
5591           value = addend | ((p + 4) & (0xfc000000 << shift));
5592         else
5593           value = _bfd_mips_elf_sign_extend (addend, 26 + shift);
5594         value = (value + symbol) >> shift;
5595         if (!was_local_p && h->root.root.type != bfd_link_hash_undefweak)
5596           overflowed_p = (value >> 26) != ((p + 4) >> (26 + shift));
5597         value &= howto->dst_mask;
5598       }
5599       break;
5600
5601     case R_MIPS_TLS_DTPREL_HI16:
5602     case R_MIPS16_TLS_DTPREL_HI16:
5603     case R_MICROMIPS_TLS_DTPREL_HI16:
5604       value = (mips_elf_high (addend + symbol - dtprel_base (info))
5605                & howto->dst_mask);
5606       break;
5607
5608     case R_MIPS_TLS_DTPREL_LO16:
5609     case R_MIPS_TLS_DTPREL32:
5610     case R_MIPS_TLS_DTPREL64:
5611     case R_MIPS16_TLS_DTPREL_LO16:
5612     case R_MICROMIPS_TLS_DTPREL_LO16:
5613       value = (symbol + addend - dtprel_base (info)) & howto->dst_mask;
5614       break;
5615
5616     case R_MIPS_TLS_TPREL_HI16:
5617     case R_MIPS16_TLS_TPREL_HI16:
5618     case R_MICROMIPS_TLS_TPREL_HI16:
5619       value = (mips_elf_high (addend + symbol - tprel_base (info))
5620                & howto->dst_mask);
5621       break;
5622
5623     case R_MIPS_TLS_TPREL_LO16:
5624     case R_MIPS_TLS_TPREL32:
5625     case R_MIPS_TLS_TPREL64:
5626     case R_MIPS16_TLS_TPREL_LO16:
5627     case R_MICROMIPS_TLS_TPREL_LO16:
5628       value = (symbol + addend - tprel_base (info)) & howto->dst_mask;
5629       break;
5630
5631     case R_MIPS_HI16:
5632     case R_MIPS16_HI16:
5633     case R_MICROMIPS_HI16:
5634       if (!gp_disp_p)
5635         {
5636           value = mips_elf_high (addend + symbol);
5637           value &= howto->dst_mask;
5638         }
5639       else
5640         {
5641           /* For MIPS16 ABI code we generate this sequence
5642                 0: li      $v0,%hi(_gp_disp)
5643                 4: addiupc $v1,%lo(_gp_disp)
5644                 8: sll     $v0,16
5645                12: addu    $v0,$v1
5646                14: move    $gp,$v0
5647              So the offsets of hi and lo relocs are the same, but the
5648              base $pc is that used by the ADDIUPC instruction at $t9 + 4.
5649              ADDIUPC clears the low two bits of the instruction address,
5650              so the base is ($t9 + 4) & ~3.  */
5651           if (r_type == R_MIPS16_HI16)
5652             value = mips_elf_high (addend + gp - ((p + 4) & ~(bfd_vma) 0x3));
5653           /* The microMIPS .cpload sequence uses the same assembly
5654              instructions as the traditional psABI version, but the
5655              incoming $t9 has the low bit set.  */
5656           else if (r_type == R_MICROMIPS_HI16)
5657             value = mips_elf_high (addend + gp - p - 1);
5658           else
5659             value = mips_elf_high (addend + gp - p);
5660           overflowed_p = mips_elf_overflow_p (value, 16);
5661         }
5662       break;
5663
5664     case R_MIPS_LO16:
5665     case R_MIPS16_LO16:
5666     case R_MICROMIPS_LO16:
5667     case R_MICROMIPS_HI0_LO16:
5668       if (!gp_disp_p)
5669         value = (symbol + addend) & howto->dst_mask;
5670       else
5671         {
5672           /* See the comment for R_MIPS16_HI16 above for the reason
5673              for this conditional.  */
5674           if (r_type == R_MIPS16_LO16)
5675             value = addend + gp - (p & ~(bfd_vma) 0x3);
5676           else if (r_type == R_MICROMIPS_LO16
5677                    || r_type == R_MICROMIPS_HI0_LO16)
5678             value = addend + gp - p + 3;
5679           else
5680             value = addend + gp - p + 4;
5681           /* The MIPS ABI requires checking the R_MIPS_LO16 relocation
5682              for overflow.  But, on, say, IRIX5, relocations against
5683              _gp_disp are normally generated from the .cpload
5684              pseudo-op.  It generates code that normally looks like
5685              this:
5686
5687                lui    $gp,%hi(_gp_disp)
5688                addiu  $gp,$gp,%lo(_gp_disp)
5689                addu   $gp,$gp,$t9
5690
5691              Here $t9 holds the address of the function being called,
5692              as required by the MIPS ELF ABI.  The R_MIPS_LO16
5693              relocation can easily overflow in this situation, but the
5694              R_MIPS_HI16 relocation will handle the overflow.
5695              Therefore, we consider this a bug in the MIPS ABI, and do
5696              not check for overflow here.  */
5697         }
5698       break;
5699
5700     case R_MIPS_LITERAL:
5701     case R_MICROMIPS_LITERAL:
5702       /* Because we don't merge literal sections, we can handle this
5703          just like R_MIPS_GPREL16.  In the long run, we should merge
5704          shared literals, and then we will need to additional work
5705          here.  */
5706
5707       /* Fall through.  */
5708
5709     case R_MIPS16_GPREL:
5710       /* The R_MIPS16_GPREL performs the same calculation as
5711          R_MIPS_GPREL16, but stores the relocated bits in a different
5712          order.  We don't need to do anything special here; the
5713          differences are handled in mips_elf_perform_relocation.  */
5714     case R_MIPS_GPREL16:
5715     case R_MICROMIPS_GPREL7_S2:
5716     case R_MICROMIPS_GPREL16:
5717       /* Only sign-extend the addend if it was extracted from the
5718          instruction.  If the addend was separate, leave it alone,
5719          otherwise we may lose significant bits.  */
5720       if (howto->partial_inplace)
5721         addend = _bfd_mips_elf_sign_extend (addend, 16);
5722       value = symbol + addend - gp;
5723       /* If the symbol was local, any earlier relocatable links will
5724          have adjusted its addend with the gp offset, so compensate
5725          for that now.  Don't do it for symbols forced local in this
5726          link, though, since they won't have had the gp offset applied
5727          to them before.  */
5728       if (was_local_p)
5729         value += gp0;
5730       overflowed_p = mips_elf_overflow_p (value, 16);
5731       break;
5732
5733     case R_MIPS16_GOT16:
5734     case R_MIPS16_CALL16:
5735     case R_MIPS_GOT16:
5736     case R_MIPS_CALL16:
5737     case R_MICROMIPS_GOT16:
5738     case R_MICROMIPS_CALL16:
5739       /* VxWorks does not have separate local and global semantics for
5740          R_MIPS*_GOT16; every relocation evaluates to "G".  */
5741       if (!htab->is_vxworks && local_p)
5742         {
5743           value = mips_elf_got16_entry (abfd, input_bfd, info,
5744                                         symbol + addend, !was_local_p);
5745           if (value == MINUS_ONE)
5746             return bfd_reloc_outofrange;
5747           value
5748             = mips_elf_got_offset_from_index (info, abfd, input_bfd, value);
5749           overflowed_p = mips_elf_overflow_p (value, 16);
5750           break;
5751         }
5752
5753       /* Fall through.  */
5754
5755     case R_MIPS_TLS_GD:
5756     case R_MIPS_TLS_GOTTPREL:
5757     case R_MIPS_TLS_LDM:
5758     case R_MIPS_GOT_DISP:
5759     case R_MIPS16_TLS_GD:
5760     case R_MIPS16_TLS_GOTTPREL:
5761     case R_MIPS16_TLS_LDM:
5762     case R_MICROMIPS_TLS_GD:
5763     case R_MICROMIPS_TLS_GOTTPREL:
5764     case R_MICROMIPS_TLS_LDM:
5765     case R_MICROMIPS_GOT_DISP:
5766       value = g;
5767       overflowed_p = mips_elf_overflow_p (value, 16);
5768       break;
5769
5770     case R_MIPS_GPREL32:
5771       value = (addend + symbol + gp0 - gp);
5772       if (!save_addend)
5773         value &= howto->dst_mask;
5774       break;
5775
5776     case R_MIPS_PC16:
5777     case R_MIPS_GNU_REL16_S2:
5778       value = symbol + _bfd_mips_elf_sign_extend (addend, 18) - p;
5779       overflowed_p = mips_elf_overflow_p (value, 18);
5780       value >>= howto->rightshift;
5781       value &= howto->dst_mask;
5782       break;
5783
5784     case R_MICROMIPS_PC7_S1:
5785       value = symbol + _bfd_mips_elf_sign_extend (addend, 8) - p;
5786       overflowed_p = mips_elf_overflow_p (value, 8);
5787       value >>= howto->rightshift;
5788       value &= howto->dst_mask;
5789       break;
5790
5791     case R_MICROMIPS_PC10_S1:
5792       value = symbol + _bfd_mips_elf_sign_extend (addend, 11) - p;
5793       overflowed_p = mips_elf_overflow_p (value, 11);
5794       value >>= howto->rightshift;
5795       value &= howto->dst_mask;
5796       break;
5797
5798     case R_MICROMIPS_PC16_S1:
5799       value = symbol + _bfd_mips_elf_sign_extend (addend, 17) - p;
5800       overflowed_p = mips_elf_overflow_p (value, 17);
5801       value >>= howto->rightshift;
5802       value &= howto->dst_mask;
5803       break;
5804
5805     case R_MICROMIPS_PC23_S2:
5806       value = symbol + _bfd_mips_elf_sign_extend (addend, 25) - ((p | 3) ^ 3);
5807       overflowed_p = mips_elf_overflow_p (value, 25);
5808       value >>= howto->rightshift;
5809       value &= howto->dst_mask;
5810       break;
5811
5812     case R_MIPS_GOT_HI16:
5813     case R_MIPS_CALL_HI16:
5814     case R_MICROMIPS_GOT_HI16:
5815     case R_MICROMIPS_CALL_HI16:
5816       /* We're allowed to handle these two relocations identically.
5817          The dynamic linker is allowed to handle the CALL relocations
5818          differently by creating a lazy evaluation stub.  */
5819       value = g;
5820       value = mips_elf_high (value);
5821       value &= howto->dst_mask;
5822       break;
5823
5824     case R_MIPS_GOT_LO16:
5825     case R_MIPS_CALL_LO16:
5826     case R_MICROMIPS_GOT_LO16:
5827     case R_MICROMIPS_CALL_LO16:
5828       value = g & howto->dst_mask;
5829       break;
5830
5831     case R_MIPS_GOT_PAGE:
5832     case R_MICROMIPS_GOT_PAGE:
5833       value = mips_elf_got_page (abfd, input_bfd, info, symbol + addend, NULL);
5834       if (value == MINUS_ONE)
5835         return bfd_reloc_outofrange;
5836       value = mips_elf_got_offset_from_index (info, abfd, input_bfd, value);
5837       overflowed_p = mips_elf_overflow_p (value, 16);
5838       break;
5839
5840     case R_MIPS_GOT_OFST:
5841     case R_MICROMIPS_GOT_OFST:
5842       if (local_p)
5843         mips_elf_got_page (abfd, input_bfd, info, symbol + addend, &value);
5844       else
5845         value = addend;
5846       overflowed_p = mips_elf_overflow_p (value, 16);
5847       break;
5848
5849     case R_MIPS_SUB:
5850     case R_MICROMIPS_SUB:
5851       value = symbol - addend;
5852       value &= howto->dst_mask;
5853       break;
5854
5855     case R_MIPS_HIGHER:
5856     case R_MICROMIPS_HIGHER:
5857       value = mips_elf_higher (addend + symbol);
5858       value &= howto->dst_mask;
5859       break;
5860
5861     case R_MIPS_HIGHEST:
5862     case R_MICROMIPS_HIGHEST:
5863       value = mips_elf_highest (addend + symbol);
5864       value &= howto->dst_mask;
5865       break;
5866
5867     case R_MIPS_SCN_DISP:
5868     case R_MICROMIPS_SCN_DISP:
5869       value = symbol + addend - sec->output_offset;
5870       value &= howto->dst_mask;
5871       break;
5872
5873     case R_MIPS_JALR:
5874     case R_MICROMIPS_JALR:
5875       /* This relocation is only a hint.  In some cases, we optimize
5876          it into a bal instruction.  But we don't try to optimize
5877          when the symbol does not resolve locally.  */
5878       if (h != NULL && !SYMBOL_CALLS_LOCAL (info, &h->root))
5879         return bfd_reloc_continue;
5880       value = symbol + addend;
5881       break;
5882
5883     case R_MIPS_PJUMP:
5884     case R_MIPS_GNU_VTINHERIT:
5885     case R_MIPS_GNU_VTENTRY:
5886       /* We don't do anything with these at present.  */
5887       return bfd_reloc_continue;
5888
5889     default:
5890       /* An unrecognized relocation type.  */
5891       return bfd_reloc_notsupported;
5892     }
5893
5894   /* Store the VALUE for our caller.  */
5895   *valuep = value;
5896   return overflowed_p ? bfd_reloc_overflow : bfd_reloc_ok;
5897 }
5898
5899 /* Obtain the field relocated by RELOCATION.  */
5900
5901 static bfd_vma
5902 mips_elf_obtain_contents (reloc_howto_type *howto,
5903                           const Elf_Internal_Rela *relocation,
5904                           bfd *input_bfd, bfd_byte *contents)
5905 {
5906   bfd_vma x;
5907   bfd_byte *location = contents + relocation->r_offset;
5908
5909   /* Obtain the bytes.  */
5910   x = bfd_get ((8 * bfd_get_reloc_size (howto)), input_bfd, location);
5911
5912   return x;
5913 }
5914
5915 /* It has been determined that the result of the RELOCATION is the
5916    VALUE.  Use HOWTO to place VALUE into the output file at the
5917    appropriate position.  The SECTION is the section to which the
5918    relocation applies.
5919    CROSS_MODE_JUMP_P is true if the relocation field
5920    is a MIPS16 or microMIPS jump to standard MIPS code, or vice versa.
5921
5922    Returns FALSE if anything goes wrong.  */
5923
5924 static bfd_boolean
5925 mips_elf_perform_relocation (struct bfd_link_info *info,
5926                              reloc_howto_type *howto,
5927                              const Elf_Internal_Rela *relocation,
5928                              bfd_vma value, bfd *input_bfd,
5929                              asection *input_section, bfd_byte *contents,
5930                              bfd_boolean cross_mode_jump_p)
5931 {
5932   bfd_vma x;
5933   bfd_byte *location;
5934   int r_type = ELF_R_TYPE (input_bfd, relocation->r_info);
5935
5936   /* Figure out where the relocation is occurring.  */
5937   location = contents + relocation->r_offset;
5938
5939   _bfd_mips_elf_reloc_unshuffle (input_bfd, r_type, FALSE, location);
5940
5941   /* Obtain the current value.  */
5942   x = mips_elf_obtain_contents (howto, relocation, input_bfd, contents);
5943
5944   /* Clear the field we are setting.  */
5945   x &= ~howto->dst_mask;
5946
5947   /* Set the field.  */
5948   x |= (value & howto->dst_mask);
5949
5950   /* If required, turn JAL into JALX.  */
5951   if (cross_mode_jump_p && jal_reloc_p (r_type))
5952     {
5953       bfd_boolean ok;
5954       bfd_vma opcode = x >> 26;
5955       bfd_vma jalx_opcode;
5956
5957       /* Check to see if the opcode is already JAL or JALX.  */
5958       if (r_type == R_MIPS16_26)
5959         {
5960           ok = ((opcode == 0x6) || (opcode == 0x7));
5961           jalx_opcode = 0x7;
5962         }
5963       else if (r_type == R_MICROMIPS_26_S1)
5964         {
5965           ok = ((opcode == 0x3d) || (opcode == 0x3c));
5966           jalx_opcode = 0x3c;
5967         }
5968       else
5969         {
5970           ok = ((opcode == 0x3) || (opcode == 0x1d));
5971           jalx_opcode = 0x1d;
5972         }
5973
5974       /* If the opcode is not JAL or JALX, there's a problem.  We cannot
5975          convert J or JALS to JALX.  */
5976       if (!ok)
5977         {
5978           (*_bfd_error_handler)
5979             (_("%B: %A+0x%lx: Unsupported jump between ISA modes; consider recompiling with interlinking enabled."),
5980              input_bfd,
5981              input_section,
5982              (unsigned long) relocation->r_offset);
5983           bfd_set_error (bfd_error_bad_value);
5984           return FALSE;
5985         }
5986
5987       /* Make this the JALX opcode.  */
5988       x = (x & ~(0x3f << 26)) | (jalx_opcode << 26);
5989     }
5990
5991   /* Try converting JAL to BAL and J(AL)R to B(AL), if the target is in
5992      range.  */
5993   if (!info->relocatable
5994       && !cross_mode_jump_p
5995       && ((JAL_TO_BAL_P (input_bfd)
5996            && r_type == R_MIPS_26
5997            && (x >> 26) == 0x3)         /* jal addr */
5998           || (JALR_TO_BAL_P (input_bfd)
5999               && r_type == R_MIPS_JALR
6000               && x == 0x0320f809)       /* jalr t9 */
6001           || (JR_TO_B_P (input_bfd)
6002               && r_type == R_MIPS_JALR
6003               && x == 0x03200008)))     /* jr t9 */
6004     {
6005       bfd_vma addr;
6006       bfd_vma dest;
6007       bfd_signed_vma off;
6008
6009       addr = (input_section->output_section->vma
6010               + input_section->output_offset
6011               + relocation->r_offset
6012               + 4);
6013       if (r_type == R_MIPS_26)
6014         dest = (value << 2) | ((addr >> 28) << 28);
6015       else
6016         dest = value;
6017       off = dest - addr;
6018       if (off <= 0x1ffff && off >= -0x20000)
6019         {
6020           if (x == 0x03200008)  /* jr t9 */
6021             x = 0x10000000 | (((bfd_vma) off >> 2) & 0xffff);   /* b addr */
6022           else
6023             x = 0x04110000 | (((bfd_vma) off >> 2) & 0xffff);   /* bal addr */
6024         }
6025     }
6026
6027   /* Put the value into the output.  */
6028   bfd_put (8 * bfd_get_reloc_size (howto), input_bfd, x, location);
6029
6030   _bfd_mips_elf_reloc_shuffle (input_bfd, r_type, !info->relocatable,
6031                                location);
6032
6033   return TRUE;
6034 }
6035 \f
6036 /* Create a rel.dyn relocation for the dynamic linker to resolve.  REL
6037    is the original relocation, which is now being transformed into a
6038    dynamic relocation.  The ADDENDP is adjusted if necessary; the
6039    caller should store the result in place of the original addend.  */
6040
6041 static bfd_boolean
6042 mips_elf_create_dynamic_relocation (bfd *output_bfd,
6043                                     struct bfd_link_info *info,
6044                                     const Elf_Internal_Rela *rel,
6045                                     struct mips_elf_link_hash_entry *h,
6046                                     asection *sec, bfd_vma symbol,
6047                                     bfd_vma *addendp, asection *input_section)
6048 {
6049   Elf_Internal_Rela outrel[3];
6050   asection *sreloc;
6051   bfd *dynobj;
6052   int r_type;
6053   long indx;
6054   bfd_boolean defined_p;
6055   struct mips_elf_link_hash_table *htab;
6056
6057   htab = mips_elf_hash_table (info);
6058   BFD_ASSERT (htab != NULL);
6059
6060   r_type = ELF_R_TYPE (output_bfd, rel->r_info);
6061   dynobj = elf_hash_table (info)->dynobj;
6062   sreloc = mips_elf_rel_dyn_section (info, FALSE);
6063   BFD_ASSERT (sreloc != NULL);
6064   BFD_ASSERT (sreloc->contents != NULL);
6065   BFD_ASSERT (sreloc->reloc_count * MIPS_ELF_REL_SIZE (output_bfd)
6066               < sreloc->size);
6067
6068   outrel[0].r_offset =
6069     _bfd_elf_section_offset (output_bfd, info, input_section, rel[0].r_offset);
6070   if (ABI_64_P (output_bfd))
6071     {
6072       outrel[1].r_offset =
6073         _bfd_elf_section_offset (output_bfd, info, input_section, rel[1].r_offset);
6074       outrel[2].r_offset =
6075         _bfd_elf_section_offset (output_bfd, info, input_section, rel[2].r_offset);
6076     }
6077
6078   if (outrel[0].r_offset == MINUS_ONE)
6079     /* The relocation field has been deleted.  */
6080     return TRUE;
6081
6082   if (outrel[0].r_offset == MINUS_TWO)
6083     {
6084       /* The relocation field has been converted into a relative value of
6085          some sort.  Functions like _bfd_elf_write_section_eh_frame expect
6086          the field to be fully relocated, so add in the symbol's value.  */
6087       *addendp += symbol;
6088       return TRUE;
6089     }
6090
6091   /* We must now calculate the dynamic symbol table index to use
6092      in the relocation.  */
6093   if (h != NULL && ! SYMBOL_REFERENCES_LOCAL (info, &h->root))
6094     {
6095       BFD_ASSERT (htab->is_vxworks || h->global_got_area != GGA_NONE);
6096       indx = h->root.dynindx;
6097       if (SGI_COMPAT (output_bfd))
6098         defined_p = h->root.def_regular;
6099       else
6100         /* ??? glibc's ld.so just adds the final GOT entry to the
6101            relocation field.  It therefore treats relocs against
6102            defined symbols in the same way as relocs against
6103            undefined symbols.  */
6104         defined_p = FALSE;
6105     }
6106   else
6107     {
6108       if (sec != NULL && bfd_is_abs_section (sec))
6109         indx = 0;
6110       else if (sec == NULL || sec->owner == NULL)
6111         {
6112           bfd_set_error (bfd_error_bad_value);
6113           return FALSE;
6114         }
6115       else
6116         {
6117           indx = elf_section_data (sec->output_section)->dynindx;
6118           if (indx == 0)
6119             {
6120               asection *osec = htab->root.text_index_section;
6121               indx = elf_section_data (osec)->dynindx;
6122             }
6123           if (indx == 0)
6124             abort ();
6125         }
6126
6127       /* Instead of generating a relocation using the section
6128          symbol, we may as well make it a fully relative
6129          relocation.  We want to avoid generating relocations to
6130          local symbols because we used to generate them
6131          incorrectly, without adding the original symbol value,
6132          which is mandated by the ABI for section symbols.  In
6133          order to give dynamic loaders and applications time to
6134          phase out the incorrect use, we refrain from emitting
6135          section-relative relocations.  It's not like they're
6136          useful, after all.  This should be a bit more efficient
6137          as well.  */
6138       /* ??? Although this behavior is compatible with glibc's ld.so,
6139          the ABI says that relocations against STN_UNDEF should have
6140          a symbol value of 0.  Irix rld honors this, so relocations
6141          against STN_UNDEF have no effect.  */
6142       if (!SGI_COMPAT (output_bfd))
6143         indx = 0;
6144       defined_p = TRUE;
6145     }
6146
6147   /* If the relocation was previously an absolute relocation and
6148      this symbol will not be referred to by the relocation, we must
6149      adjust it by the value we give it in the dynamic symbol table.
6150      Otherwise leave the job up to the dynamic linker.  */
6151   if (defined_p && r_type != R_MIPS_REL32)
6152     *addendp += symbol;
6153
6154   if (htab->is_vxworks)
6155     /* VxWorks uses non-relative relocations for this.  */
6156     outrel[0].r_info = ELF32_R_INFO (indx, R_MIPS_32);
6157   else
6158     /* The relocation is always an REL32 relocation because we don't
6159        know where the shared library will wind up at load-time.  */
6160     outrel[0].r_info = ELF_R_INFO (output_bfd, (unsigned long) indx,
6161                                    R_MIPS_REL32);
6162
6163   /* For strict adherence to the ABI specification, we should
6164      generate a R_MIPS_64 relocation record by itself before the
6165      _REL32/_64 record as well, such that the addend is read in as
6166      a 64-bit value (REL32 is a 32-bit relocation, after all).
6167      However, since none of the existing ELF64 MIPS dynamic
6168      loaders seems to care, we don't waste space with these
6169      artificial relocations.  If this turns out to not be true,
6170      mips_elf_allocate_dynamic_relocation() should be tweaked so
6171      as to make room for a pair of dynamic relocations per
6172      invocation if ABI_64_P, and here we should generate an
6173      additional relocation record with R_MIPS_64 by itself for a
6174      NULL symbol before this relocation record.  */
6175   outrel[1].r_info = ELF_R_INFO (output_bfd, 0,
6176                                  ABI_64_P (output_bfd)
6177                                  ? R_MIPS_64
6178                                  : R_MIPS_NONE);
6179   outrel[2].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_NONE);
6180
6181   /* Adjust the output offset of the relocation to reference the
6182      correct location in the output file.  */
6183   outrel[0].r_offset += (input_section->output_section->vma
6184                          + input_section->output_offset);
6185   outrel[1].r_offset += (input_section->output_section->vma
6186                          + input_section->output_offset);
6187   outrel[2].r_offset += (input_section->output_section->vma
6188                          + input_section->output_offset);
6189
6190   /* Put the relocation back out.  We have to use the special
6191      relocation outputter in the 64-bit case since the 64-bit
6192      relocation format is non-standard.  */
6193   if (ABI_64_P (output_bfd))
6194     {
6195       (*get_elf_backend_data (output_bfd)->s->swap_reloc_out)
6196         (output_bfd, &outrel[0],
6197          (sreloc->contents
6198           + sreloc->reloc_count * sizeof (Elf64_Mips_External_Rel)));
6199     }
6200   else if (htab->is_vxworks)
6201     {
6202       /* VxWorks uses RELA rather than REL dynamic relocations.  */
6203       outrel[0].r_addend = *addendp;
6204       bfd_elf32_swap_reloca_out
6205         (output_bfd, &outrel[0],
6206          (sreloc->contents
6207           + sreloc->reloc_count * sizeof (Elf32_External_Rela)));
6208     }
6209   else
6210     bfd_elf32_swap_reloc_out
6211       (output_bfd, &outrel[0],
6212        (sreloc->contents + sreloc->reloc_count * sizeof (Elf32_External_Rel)));
6213
6214   /* We've now added another relocation.  */
6215   ++sreloc->reloc_count;
6216
6217   /* Make sure the output section is writable.  The dynamic linker
6218      will be writing to it.  */
6219   elf_section_data (input_section->output_section)->this_hdr.sh_flags
6220     |= SHF_WRITE;
6221
6222   /* On IRIX5, make an entry of compact relocation info.  */
6223   if (IRIX_COMPAT (output_bfd) == ict_irix5)
6224     {
6225       asection *scpt = bfd_get_linker_section (dynobj, ".compact_rel");
6226       bfd_byte *cr;
6227
6228       if (scpt)
6229         {
6230           Elf32_crinfo cptrel;
6231
6232           mips_elf_set_cr_format (cptrel, CRF_MIPS_LONG);
6233           cptrel.vaddr = (rel->r_offset
6234                           + input_section->output_section->vma
6235                           + input_section->output_offset);
6236           if (r_type == R_MIPS_REL32)
6237             mips_elf_set_cr_type (cptrel, CRT_MIPS_REL32);
6238           else
6239             mips_elf_set_cr_type (cptrel, CRT_MIPS_WORD);
6240           mips_elf_set_cr_dist2to (cptrel, 0);
6241           cptrel.konst = *addendp;
6242
6243           cr = (scpt->contents
6244                 + sizeof (Elf32_External_compact_rel));
6245           mips_elf_set_cr_relvaddr (cptrel, 0);
6246           bfd_elf32_swap_crinfo_out (output_bfd, &cptrel,
6247                                      ((Elf32_External_crinfo *) cr
6248                                       + scpt->reloc_count));
6249           ++scpt->reloc_count;
6250         }
6251     }
6252
6253   /* If we've written this relocation for a readonly section,
6254      we need to set DF_TEXTREL again, so that we do not delete the
6255      DT_TEXTREL tag.  */
6256   if (MIPS_ELF_READONLY_SECTION (input_section))
6257     info->flags |= DF_TEXTREL;
6258
6259   return TRUE;
6260 }
6261 \f
6262 /* Return the MACH for a MIPS e_flags value.  */
6263
6264 unsigned long
6265 _bfd_elf_mips_mach (flagword flags)
6266 {
6267   switch (flags & EF_MIPS_MACH)
6268     {
6269     case E_MIPS_MACH_3900:
6270       return bfd_mach_mips3900;
6271
6272     case E_MIPS_MACH_4010:
6273       return bfd_mach_mips4010;
6274
6275     case E_MIPS_MACH_4100:
6276       return bfd_mach_mips4100;
6277
6278     case E_MIPS_MACH_4111:
6279       return bfd_mach_mips4111;
6280
6281     case E_MIPS_MACH_4120:
6282       return bfd_mach_mips4120;
6283
6284     case E_MIPS_MACH_4650:
6285       return bfd_mach_mips4650;
6286
6287     case E_MIPS_MACH_5400:
6288       return bfd_mach_mips5400;
6289
6290     case E_MIPS_MACH_5500:
6291       return bfd_mach_mips5500;
6292
6293     case E_MIPS_MACH_5900:
6294       return bfd_mach_mips5900;
6295
6296     case E_MIPS_MACH_9000:
6297       return bfd_mach_mips9000;
6298
6299     case E_MIPS_MACH_SB1:
6300       return bfd_mach_mips_sb1;
6301
6302     case E_MIPS_MACH_LS2E:
6303       return bfd_mach_mips_loongson_2e;
6304
6305     case E_MIPS_MACH_LS2F:
6306       return bfd_mach_mips_loongson_2f;
6307
6308     case E_MIPS_MACH_LS3A:
6309       return bfd_mach_mips_loongson_3a;
6310
6311     case E_MIPS_MACH_OCTEON2:
6312       return bfd_mach_mips_octeon2;
6313
6314     case E_MIPS_MACH_OCTEON:
6315       return bfd_mach_mips_octeon;
6316
6317     case E_MIPS_MACH_XLR:
6318       return bfd_mach_mips_xlr;
6319
6320     default:
6321       switch (flags & EF_MIPS_ARCH)
6322         {
6323         default:
6324         case E_MIPS_ARCH_1:
6325           return bfd_mach_mips3000;
6326
6327         case E_MIPS_ARCH_2:
6328           return bfd_mach_mips6000;
6329
6330         case E_MIPS_ARCH_3:
6331           return bfd_mach_mips4000;
6332
6333         case E_MIPS_ARCH_4:
6334           return bfd_mach_mips8000;
6335
6336         case E_MIPS_ARCH_5:
6337           return bfd_mach_mips5;
6338
6339         case E_MIPS_ARCH_32:
6340           return bfd_mach_mipsisa32;
6341
6342         case E_MIPS_ARCH_64:
6343           return bfd_mach_mipsisa64;
6344
6345         case E_MIPS_ARCH_32R2:
6346           return bfd_mach_mipsisa32r2;
6347
6348         case E_MIPS_ARCH_64R2:
6349           return bfd_mach_mipsisa64r2;
6350         }
6351     }
6352
6353   return 0;
6354 }
6355
6356 /* Return printable name for ABI.  */
6357
6358 static INLINE char *
6359 elf_mips_abi_name (bfd *abfd)
6360 {
6361   flagword flags;
6362
6363   flags = elf_elfheader (abfd)->e_flags;
6364   switch (flags & EF_MIPS_ABI)
6365     {
6366     case 0:
6367       if (ABI_N32_P (abfd))
6368         return "N32";
6369       else if (ABI_64_P (abfd))
6370         return "64";
6371       else
6372         return "none";
6373     case E_MIPS_ABI_O32:
6374       return "O32";
6375     case E_MIPS_ABI_O64:
6376       return "O64";
6377     case E_MIPS_ABI_EABI32:
6378       return "EABI32";
6379     case E_MIPS_ABI_EABI64:
6380       return "EABI64";
6381     default:
6382       return "unknown abi";
6383     }
6384 }
6385 \f
6386 /* MIPS ELF uses two common sections.  One is the usual one, and the
6387    other is for small objects.  All the small objects are kept
6388    together, and then referenced via the gp pointer, which yields
6389    faster assembler code.  This is what we use for the small common
6390    section.  This approach is copied from ecoff.c.  */
6391 static asection mips_elf_scom_section;
6392 static asymbol mips_elf_scom_symbol;
6393 static asymbol *mips_elf_scom_symbol_ptr;
6394
6395 /* MIPS ELF also uses an acommon section, which represents an
6396    allocated common symbol which may be overridden by a
6397    definition in a shared library.  */
6398 static asection mips_elf_acom_section;
6399 static asymbol mips_elf_acom_symbol;
6400 static asymbol *mips_elf_acom_symbol_ptr;
6401
6402 /* This is used for both the 32-bit and the 64-bit ABI.  */
6403
6404 void
6405 _bfd_mips_elf_symbol_processing (bfd *abfd, asymbol *asym)
6406 {
6407   elf_symbol_type *elfsym;
6408
6409   /* Handle the special MIPS section numbers that a symbol may use.  */
6410   elfsym = (elf_symbol_type *) asym;
6411   switch (elfsym->internal_elf_sym.st_shndx)
6412     {
6413     case SHN_MIPS_ACOMMON:
6414       /* This section is used in a dynamically linked executable file.
6415          It is an allocated common section.  The dynamic linker can
6416          either resolve these symbols to something in a shared
6417          library, or it can just leave them here.  For our purposes,
6418          we can consider these symbols to be in a new section.  */
6419       if (mips_elf_acom_section.name == NULL)
6420         {
6421           /* Initialize the acommon section.  */
6422           mips_elf_acom_section.name = ".acommon";
6423           mips_elf_acom_section.flags = SEC_ALLOC;
6424           mips_elf_acom_section.output_section = &mips_elf_acom_section;
6425           mips_elf_acom_section.symbol = &mips_elf_acom_symbol;
6426           mips_elf_acom_section.symbol_ptr_ptr = &mips_elf_acom_symbol_ptr;
6427           mips_elf_acom_symbol.name = ".acommon";
6428           mips_elf_acom_symbol.flags = BSF_SECTION_SYM;
6429           mips_elf_acom_symbol.section = &mips_elf_acom_section;
6430           mips_elf_acom_symbol_ptr = &mips_elf_acom_symbol;
6431         }
6432       asym->section = &mips_elf_acom_section;
6433       break;
6434
6435     case SHN_COMMON:
6436       /* Common symbols less than the GP size are automatically
6437          treated as SHN_MIPS_SCOMMON symbols on IRIX5.  */
6438       if (asym->value > elf_gp_size (abfd)
6439           || ELF_ST_TYPE (elfsym->internal_elf_sym.st_info) == STT_TLS
6440           || IRIX_COMPAT (abfd) == ict_irix6)
6441         break;
6442       /* Fall through.  */
6443     case SHN_MIPS_SCOMMON:
6444       if (mips_elf_scom_section.name == NULL)
6445         {
6446           /* Initialize the small common section.  */
6447           mips_elf_scom_section.name = ".scommon";
6448           mips_elf_scom_section.flags = SEC_IS_COMMON;
6449           mips_elf_scom_section.output_section = &mips_elf_scom_section;
6450           mips_elf_scom_section.symbol = &mips_elf_scom_symbol;
6451           mips_elf_scom_section.symbol_ptr_ptr = &mips_elf_scom_symbol_ptr;
6452           mips_elf_scom_symbol.name = ".scommon";
6453           mips_elf_scom_symbol.flags = BSF_SECTION_SYM;
6454           mips_elf_scom_symbol.section = &mips_elf_scom_section;
6455           mips_elf_scom_symbol_ptr = &mips_elf_scom_symbol;
6456         }
6457       asym->section = &mips_elf_scom_section;
6458       asym->value = elfsym->internal_elf_sym.st_size;
6459       break;
6460
6461     case SHN_MIPS_SUNDEFINED:
6462       asym->section = bfd_und_section_ptr;
6463       break;
6464
6465     case SHN_MIPS_TEXT:
6466       {
6467         asection *section = bfd_get_section_by_name (abfd, ".text");
6468
6469         if (section != NULL)
6470           {
6471             asym->section = section;
6472             /* MIPS_TEXT is a bit special, the address is not an offset
6473                to the base of the .text section.  So substract the section
6474                base address to make it an offset.  */
6475             asym->value -= section->vma;
6476           }
6477       }
6478       break;
6479
6480     case SHN_MIPS_DATA:
6481       {
6482         asection *section = bfd_get_section_by_name (abfd, ".data");
6483
6484         if (section != NULL)
6485           {
6486             asym->section = section;
6487             /* MIPS_DATA is a bit special, the address is not an offset
6488                to the base of the .data section.  So substract the section
6489                base address to make it an offset.  */
6490             asym->value -= section->vma;
6491           }
6492       }
6493       break;
6494     }
6495
6496   /* If this is an odd-valued function symbol, assume it's a MIPS16
6497      or microMIPS one.  */
6498   if (ELF_ST_TYPE (elfsym->internal_elf_sym.st_info) == STT_FUNC
6499       && (asym->value & 1) != 0)
6500     {
6501       asym->value--;
6502       if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MICROMIPS)
6503         elfsym->internal_elf_sym.st_other
6504           = ELF_ST_SET_MICROMIPS (elfsym->internal_elf_sym.st_other);
6505       else
6506         elfsym->internal_elf_sym.st_other
6507           = ELF_ST_SET_MIPS16 (elfsym->internal_elf_sym.st_other);
6508     }
6509 }
6510 \f
6511 /* Implement elf_backend_eh_frame_address_size.  This differs from
6512    the default in the way it handles EABI64.
6513
6514    EABI64 was originally specified as an LP64 ABI, and that is what
6515    -mabi=eabi normally gives on a 64-bit target.  However, gcc has
6516    historically accepted the combination of -mabi=eabi and -mlong32,
6517    and this ILP32 variation has become semi-official over time.
6518    Both forms use elf32 and have pointer-sized FDE addresses.
6519
6520    If an EABI object was generated by GCC 4.0 or above, it will have
6521    an empty .gcc_compiled_longXX section, where XX is the size of longs
6522    in bits.  Unfortunately, ILP32 objects generated by earlier compilers
6523    have no special marking to distinguish them from LP64 objects.
6524
6525    We don't want users of the official LP64 ABI to be punished for the
6526    existence of the ILP32 variant, but at the same time, we don't want
6527    to mistakenly interpret pre-4.0 ILP32 objects as being LP64 objects.
6528    We therefore take the following approach:
6529
6530       - If ABFD contains a .gcc_compiled_longXX section, use it to
6531         determine the pointer size.
6532
6533       - Otherwise check the type of the first relocation.  Assume that
6534         the LP64 ABI is being used if the relocation is of type R_MIPS_64.
6535
6536       - Otherwise punt.
6537
6538    The second check is enough to detect LP64 objects generated by pre-4.0
6539    compilers because, in the kind of output generated by those compilers,
6540    the first relocation will be associated with either a CIE personality
6541    routine or an FDE start address.  Furthermore, the compilers never
6542    used a special (non-pointer) encoding for this ABI.
6543
6544    Checking the relocation type should also be safe because there is no
6545    reason to use R_MIPS_64 in an ILP32 object.  Pre-4.0 compilers never
6546    did so.  */
6547
6548 unsigned int
6549 _bfd_mips_elf_eh_frame_address_size (bfd *abfd, asection *sec)
6550 {
6551   if (elf_elfheader (abfd)->e_ident[EI_CLASS] == ELFCLASS64)
6552     return 8;
6553   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI64)
6554     {
6555       bfd_boolean long32_p, long64_p;
6556
6557       long32_p = bfd_get_section_by_name (abfd, ".gcc_compiled_long32") != 0;
6558       long64_p = bfd_get_section_by_name (abfd, ".gcc_compiled_long64") != 0;
6559       if (long32_p && long64_p)
6560         return 0;
6561       if (long32_p)
6562         return 4;
6563       if (long64_p)
6564         return 8;
6565
6566       if (sec->reloc_count > 0
6567           && elf_section_data (sec)->relocs != NULL
6568           && (ELF32_R_TYPE (elf_section_data (sec)->relocs[0].r_info)
6569               == R_MIPS_64))
6570         return 8;
6571
6572       return 0;
6573     }
6574   return 4;
6575 }
6576 \f
6577 /* There appears to be a bug in the MIPSpro linker that causes GOT_DISP
6578    relocations against two unnamed section symbols to resolve to the
6579    same address.  For example, if we have code like:
6580
6581         lw      $4,%got_disp(.data)($gp)
6582         lw      $25,%got_disp(.text)($gp)
6583         jalr    $25
6584
6585    then the linker will resolve both relocations to .data and the program
6586    will jump there rather than to .text.
6587
6588    We can work around this problem by giving names to local section symbols.
6589    This is also what the MIPSpro tools do.  */
6590
6591 bfd_boolean
6592 _bfd_mips_elf_name_local_section_symbols (bfd *abfd)
6593 {
6594   return SGI_COMPAT (abfd);
6595 }
6596 \f
6597 /* Work over a section just before writing it out.  This routine is
6598    used by both the 32-bit and the 64-bit ABI.  FIXME: We recognize
6599    sections that need the SHF_MIPS_GPREL flag by name; there has to be
6600    a better way.  */
6601
6602 bfd_boolean
6603 _bfd_mips_elf_section_processing (bfd *abfd, Elf_Internal_Shdr *hdr)
6604 {
6605   if (hdr->sh_type == SHT_MIPS_REGINFO
6606       && hdr->sh_size > 0)
6607     {
6608       bfd_byte buf[4];
6609
6610       BFD_ASSERT (hdr->sh_size == sizeof (Elf32_External_RegInfo));
6611       BFD_ASSERT (hdr->contents == NULL);
6612
6613       if (bfd_seek (abfd,
6614                     hdr->sh_offset + sizeof (Elf32_External_RegInfo) - 4,
6615                     SEEK_SET) != 0)
6616         return FALSE;
6617       H_PUT_32 (abfd, elf_gp (abfd), buf);
6618       if (bfd_bwrite (buf, 4, abfd) != 4)
6619         return FALSE;
6620     }
6621
6622   if (hdr->sh_type == SHT_MIPS_OPTIONS
6623       && hdr->bfd_section != NULL
6624       && mips_elf_section_data (hdr->bfd_section) != NULL
6625       && mips_elf_section_data (hdr->bfd_section)->u.tdata != NULL)
6626     {
6627       bfd_byte *contents, *l, *lend;
6628
6629       /* We stored the section contents in the tdata field in the
6630          set_section_contents routine.  We save the section contents
6631          so that we don't have to read them again.
6632          At this point we know that elf_gp is set, so we can look
6633          through the section contents to see if there is an
6634          ODK_REGINFO structure.  */
6635
6636       contents = mips_elf_section_data (hdr->bfd_section)->u.tdata;
6637       l = contents;
6638       lend = contents + hdr->sh_size;
6639       while (l + sizeof (Elf_External_Options) <= lend)
6640         {
6641           Elf_Internal_Options intopt;
6642
6643           bfd_mips_elf_swap_options_in (abfd, (Elf_External_Options *) l,
6644                                         &intopt);
6645           if (intopt.size < sizeof (Elf_External_Options))
6646             {
6647               (*_bfd_error_handler)
6648                 (_("%B: Warning: bad `%s' option size %u smaller than its header"),
6649                 abfd, MIPS_ELF_OPTIONS_SECTION_NAME (abfd), intopt.size);
6650               break;
6651             }
6652           if (ABI_64_P (abfd) && intopt.kind == ODK_REGINFO)
6653             {
6654               bfd_byte buf[8];
6655
6656               if (bfd_seek (abfd,
6657                             (hdr->sh_offset
6658                              + (l - contents)
6659                              + sizeof (Elf_External_Options)
6660                              + (sizeof (Elf64_External_RegInfo) - 8)),
6661                              SEEK_SET) != 0)
6662                 return FALSE;
6663               H_PUT_64 (abfd, elf_gp (abfd), buf);
6664               if (bfd_bwrite (buf, 8, abfd) != 8)
6665                 return FALSE;
6666             }
6667           else if (intopt.kind == ODK_REGINFO)
6668             {
6669               bfd_byte buf[4];
6670
6671               if (bfd_seek (abfd,
6672                             (hdr->sh_offset
6673                              + (l - contents)
6674                              + sizeof (Elf_External_Options)
6675                              + (sizeof (Elf32_External_RegInfo) - 4)),
6676                             SEEK_SET) != 0)
6677                 return FALSE;
6678               H_PUT_32 (abfd, elf_gp (abfd), buf);
6679               if (bfd_bwrite (buf, 4, abfd) != 4)
6680                 return FALSE;
6681             }
6682           l += intopt.size;
6683         }
6684     }
6685
6686   if (hdr->bfd_section != NULL)
6687     {
6688       const char *name = bfd_get_section_name (abfd, hdr->bfd_section);
6689
6690       /* .sbss is not handled specially here because the GNU/Linux
6691          prelinker can convert .sbss from NOBITS to PROGBITS and
6692          changing it back to NOBITS breaks the binary.  The entry in
6693          _bfd_mips_elf_special_sections will ensure the correct flags
6694          are set on .sbss if BFD creates it without reading it from an
6695          input file, and without special handling here the flags set
6696          on it in an input file will be followed.  */
6697       if (strcmp (name, ".sdata") == 0
6698           || strcmp (name, ".lit8") == 0
6699           || strcmp (name, ".lit4") == 0)
6700         {
6701           hdr->sh_flags |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL;
6702           hdr->sh_type = SHT_PROGBITS;
6703         }
6704       else if (strcmp (name, ".srdata") == 0)
6705         {
6706           hdr->sh_flags |= SHF_ALLOC | SHF_MIPS_GPREL;
6707           hdr->sh_type = SHT_PROGBITS;
6708         }
6709       else if (strcmp (name, ".compact_rel") == 0)
6710         {
6711           hdr->sh_flags = 0;
6712           hdr->sh_type = SHT_PROGBITS;
6713         }
6714       else if (strcmp (name, ".rtproc") == 0)
6715         {
6716           if (hdr->sh_addralign != 0 && hdr->sh_entsize == 0)
6717             {
6718               unsigned int adjust;
6719
6720               adjust = hdr->sh_size % hdr->sh_addralign;
6721               if (adjust != 0)
6722                 hdr->sh_size += hdr->sh_addralign - adjust;
6723             }
6724         }
6725     }
6726
6727   return TRUE;
6728 }
6729
6730 /* Handle a MIPS specific section when reading an object file.  This
6731    is called when elfcode.h finds a section with an unknown type.
6732    This routine supports both the 32-bit and 64-bit ELF ABI.
6733
6734    FIXME: We need to handle the SHF_MIPS_GPREL flag, but I'm not sure
6735    how to.  */
6736
6737 bfd_boolean
6738 _bfd_mips_elf_section_from_shdr (bfd *abfd,
6739                                  Elf_Internal_Shdr *hdr,
6740                                  const char *name,
6741                                  int shindex)
6742 {
6743   flagword flags = 0;
6744
6745   /* There ought to be a place to keep ELF backend specific flags, but
6746      at the moment there isn't one.  We just keep track of the
6747      sections by their name, instead.  Fortunately, the ABI gives
6748      suggested names for all the MIPS specific sections, so we will
6749      probably get away with this.  */
6750   switch (hdr->sh_type)
6751     {
6752     case SHT_MIPS_LIBLIST:
6753       if (strcmp (name, ".liblist") != 0)
6754         return FALSE;
6755       break;
6756     case SHT_MIPS_MSYM:
6757       if (strcmp (name, ".msym") != 0)
6758         return FALSE;
6759       break;
6760     case SHT_MIPS_CONFLICT:
6761       if (strcmp (name, ".conflict") != 0)
6762         return FALSE;
6763       break;
6764     case SHT_MIPS_GPTAB:
6765       if (! CONST_STRNEQ (name, ".gptab."))
6766         return FALSE;
6767       break;
6768     case SHT_MIPS_UCODE:
6769       if (strcmp (name, ".ucode") != 0)
6770         return FALSE;
6771       break;
6772     case SHT_MIPS_DEBUG:
6773       if (strcmp (name, ".mdebug") != 0)
6774         return FALSE;
6775       flags = SEC_DEBUGGING;
6776       break;
6777     case SHT_MIPS_REGINFO:
6778       if (strcmp (name, ".reginfo") != 0
6779           || hdr->sh_size != sizeof (Elf32_External_RegInfo))
6780         return FALSE;
6781       flags = (SEC_LINK_ONCE | SEC_LINK_DUPLICATES_SAME_SIZE);
6782       break;
6783     case SHT_MIPS_IFACE:
6784       if (strcmp (name, ".MIPS.interfaces") != 0)
6785         return FALSE;
6786       break;
6787     case SHT_MIPS_CONTENT:
6788       if (! CONST_STRNEQ (name, ".MIPS.content"))
6789         return FALSE;
6790       break;
6791     case SHT_MIPS_OPTIONS:
6792       if (!MIPS_ELF_OPTIONS_SECTION_NAME_P (name))
6793         return FALSE;
6794       break;
6795     case SHT_MIPS_DWARF:
6796       if (! CONST_STRNEQ (name, ".debug_")
6797           && ! CONST_STRNEQ (name, ".zdebug_"))
6798         return FALSE;
6799       break;
6800     case SHT_MIPS_SYMBOL_LIB:
6801       if (strcmp (name, ".MIPS.symlib") != 0)
6802         return FALSE;
6803       break;
6804     case SHT_MIPS_EVENTS:
6805       if (! CONST_STRNEQ (name, ".MIPS.events")
6806           && ! CONST_STRNEQ (name, ".MIPS.post_rel"))
6807         return FALSE;
6808       break;
6809     default:
6810       break;
6811     }
6812
6813   if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
6814     return FALSE;
6815
6816   if (flags)
6817     {
6818       if (! bfd_set_section_flags (abfd, hdr->bfd_section,
6819                                    (bfd_get_section_flags (abfd,
6820                                                            hdr->bfd_section)
6821                                     | flags)))
6822         return FALSE;
6823     }
6824
6825   /* FIXME: We should record sh_info for a .gptab section.  */
6826
6827   /* For a .reginfo section, set the gp value in the tdata information
6828      from the contents of this section.  We need the gp value while
6829      processing relocs, so we just get it now.  The .reginfo section
6830      is not used in the 64-bit MIPS ELF ABI.  */
6831   if (hdr->sh_type == SHT_MIPS_REGINFO)
6832     {
6833       Elf32_External_RegInfo ext;
6834       Elf32_RegInfo s;
6835
6836       if (! bfd_get_section_contents (abfd, hdr->bfd_section,
6837                                       &ext, 0, sizeof ext))
6838         return FALSE;
6839       bfd_mips_elf32_swap_reginfo_in (abfd, &ext, &s);
6840       elf_gp (abfd) = s.ri_gp_value;
6841     }
6842
6843   /* For a SHT_MIPS_OPTIONS section, look for a ODK_REGINFO entry, and
6844      set the gp value based on what we find.  We may see both
6845      SHT_MIPS_REGINFO and SHT_MIPS_OPTIONS/ODK_REGINFO; in that case,
6846      they should agree.  */
6847   if (hdr->sh_type == SHT_MIPS_OPTIONS)
6848     {
6849       bfd_byte *contents, *l, *lend;
6850
6851       contents = bfd_malloc (hdr->sh_size);
6852       if (contents == NULL)
6853         return FALSE;
6854       if (! bfd_get_section_contents (abfd, hdr->bfd_section, contents,
6855                                       0, hdr->sh_size))
6856         {
6857           free (contents);
6858           return FALSE;
6859         }
6860       l = contents;
6861       lend = contents + hdr->sh_size;
6862       while (l + sizeof (Elf_External_Options) <= lend)
6863         {
6864           Elf_Internal_Options intopt;
6865
6866           bfd_mips_elf_swap_options_in (abfd, (Elf_External_Options *) l,
6867                                         &intopt);
6868           if (intopt.size < sizeof (Elf_External_Options))
6869             {
6870               (*_bfd_error_handler)
6871                 (_("%B: Warning: bad `%s' option size %u smaller than its header"),
6872                 abfd, MIPS_ELF_OPTIONS_SECTION_NAME (abfd), intopt.size);
6873               break;
6874             }
6875           if (ABI_64_P (abfd) && intopt.kind == ODK_REGINFO)
6876             {
6877               Elf64_Internal_RegInfo intreg;
6878
6879               bfd_mips_elf64_swap_reginfo_in
6880                 (abfd,
6881                  ((Elf64_External_RegInfo *)
6882                   (l + sizeof (Elf_External_Options))),
6883                  &intreg);
6884               elf_gp (abfd) = intreg.ri_gp_value;
6885             }
6886           else if (intopt.kind == ODK_REGINFO)
6887             {
6888               Elf32_RegInfo intreg;
6889
6890               bfd_mips_elf32_swap_reginfo_in
6891                 (abfd,
6892                  ((Elf32_External_RegInfo *)
6893                   (l + sizeof (Elf_External_Options))),
6894                  &intreg);
6895               elf_gp (abfd) = intreg.ri_gp_value;
6896             }
6897           l += intopt.size;
6898         }
6899       free (contents);
6900     }
6901
6902   return TRUE;
6903 }
6904
6905 /* Set the correct type for a MIPS ELF section.  We do this by the
6906    section name, which is a hack, but ought to work.  This routine is
6907    used by both the 32-bit and the 64-bit ABI.  */
6908
6909 bfd_boolean
6910 _bfd_mips_elf_fake_sections (bfd *abfd, Elf_Internal_Shdr *hdr, asection *sec)
6911 {
6912   const char *name = bfd_get_section_name (abfd, sec);
6913
6914   if (strcmp (name, ".liblist") == 0)
6915     {
6916       hdr->sh_type = SHT_MIPS_LIBLIST;
6917       hdr->sh_info = sec->size / sizeof (Elf32_Lib);
6918       /* The sh_link field is set in final_write_processing.  */
6919     }
6920   else if (strcmp (name, ".conflict") == 0)
6921     hdr->sh_type = SHT_MIPS_CONFLICT;
6922   else if (CONST_STRNEQ (name, ".gptab."))
6923     {
6924       hdr->sh_type = SHT_MIPS_GPTAB;
6925       hdr->sh_entsize = sizeof (Elf32_External_gptab);
6926       /* The sh_info field is set in final_write_processing.  */
6927     }
6928   else if (strcmp (name, ".ucode") == 0)
6929     hdr->sh_type = SHT_MIPS_UCODE;
6930   else if (strcmp (name, ".mdebug") == 0)
6931     {
6932       hdr->sh_type = SHT_MIPS_DEBUG;
6933       /* In a shared object on IRIX 5.3, the .mdebug section has an
6934          entsize of 0.  FIXME: Does this matter?  */
6935       if (SGI_COMPAT (abfd) && (abfd->flags & DYNAMIC) != 0)
6936         hdr->sh_entsize = 0;
6937       else
6938         hdr->sh_entsize = 1;
6939     }
6940   else if (strcmp (name, ".reginfo") == 0)
6941     {
6942       hdr->sh_type = SHT_MIPS_REGINFO;
6943       /* In a shared object on IRIX 5.3, the .reginfo section has an
6944          entsize of 0x18.  FIXME: Does this matter?  */
6945       if (SGI_COMPAT (abfd))
6946         {
6947           if ((abfd->flags & DYNAMIC) != 0)
6948             hdr->sh_entsize = sizeof (Elf32_External_RegInfo);
6949           else
6950             hdr->sh_entsize = 1;
6951         }
6952       else
6953         hdr->sh_entsize = sizeof (Elf32_External_RegInfo);
6954     }
6955   else if (SGI_COMPAT (abfd)
6956            && (strcmp (name, ".hash") == 0
6957                || strcmp (name, ".dynamic") == 0
6958                || strcmp (name, ".dynstr") == 0))
6959     {
6960       if (SGI_COMPAT (abfd))
6961         hdr->sh_entsize = 0;
6962 #if 0
6963       /* This isn't how the IRIX6 linker behaves.  */
6964       hdr->sh_info = SIZEOF_MIPS_DYNSYM_SECNAMES;
6965 #endif
6966     }
6967   else if (strcmp (name, ".got") == 0
6968            || strcmp (name, ".srdata") == 0
6969            || strcmp (name, ".sdata") == 0
6970            || strcmp (name, ".sbss") == 0
6971            || strcmp (name, ".lit4") == 0
6972            || strcmp (name, ".lit8") == 0)
6973     hdr->sh_flags |= SHF_MIPS_GPREL;
6974   else if (strcmp (name, ".MIPS.interfaces") == 0)
6975     {
6976       hdr->sh_type = SHT_MIPS_IFACE;
6977       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
6978     }
6979   else if (CONST_STRNEQ (name, ".MIPS.content"))
6980     {
6981       hdr->sh_type = SHT_MIPS_CONTENT;
6982       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
6983       /* The sh_info field is set in final_write_processing.  */
6984     }
6985   else if (MIPS_ELF_OPTIONS_SECTION_NAME_P (name))
6986     {
6987       hdr->sh_type = SHT_MIPS_OPTIONS;
6988       hdr->sh_entsize = 1;
6989       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
6990     }
6991   else if (CONST_STRNEQ (name, ".debug_")
6992            || CONST_STRNEQ (name, ".zdebug_"))
6993     {
6994       hdr->sh_type = SHT_MIPS_DWARF;
6995
6996       /* Irix facilities such as libexc expect a single .debug_frame
6997          per executable, the system ones have NOSTRIP set and the linker
6998          doesn't merge sections with different flags so ...  */
6999       if (SGI_COMPAT (abfd) && CONST_STRNEQ (name, ".debug_frame"))
7000         hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7001     }
7002   else if (strcmp (name, ".MIPS.symlib") == 0)
7003     {
7004       hdr->sh_type = SHT_MIPS_SYMBOL_LIB;
7005       /* The sh_link and sh_info fields are set in
7006          final_write_processing.  */
7007     }
7008   else if (CONST_STRNEQ (name, ".MIPS.events")
7009            || CONST_STRNEQ (name, ".MIPS.post_rel"))
7010     {
7011       hdr->sh_type = SHT_MIPS_EVENTS;
7012       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7013       /* The sh_link field is set in final_write_processing.  */
7014     }
7015   else if (strcmp (name, ".msym") == 0)
7016     {
7017       hdr->sh_type = SHT_MIPS_MSYM;
7018       hdr->sh_flags |= SHF_ALLOC;
7019       hdr->sh_entsize = 8;
7020     }
7021
7022   /* The generic elf_fake_sections will set up REL_HDR using the default
7023    kind of relocations.  We used to set up a second header for the
7024    non-default kind of relocations here, but only NewABI would use
7025    these, and the IRIX ld doesn't like resulting empty RELA sections.
7026    Thus we create those header only on demand now.  */
7027
7028   return TRUE;
7029 }
7030
7031 /* Given a BFD section, try to locate the corresponding ELF section
7032    index.  This is used by both the 32-bit and the 64-bit ABI.
7033    Actually, it's not clear to me that the 64-bit ABI supports these,
7034    but for non-PIC objects we will certainly want support for at least
7035    the .scommon section.  */
7036
7037 bfd_boolean
7038 _bfd_mips_elf_section_from_bfd_section (bfd *abfd ATTRIBUTE_UNUSED,
7039                                         asection *sec, int *retval)
7040 {
7041   if (strcmp (bfd_get_section_name (abfd, sec), ".scommon") == 0)
7042     {
7043       *retval = SHN_MIPS_SCOMMON;
7044       return TRUE;
7045     }
7046   if (strcmp (bfd_get_section_name (abfd, sec), ".acommon") == 0)
7047     {
7048       *retval = SHN_MIPS_ACOMMON;
7049       return TRUE;
7050     }
7051   return FALSE;
7052 }
7053 \f
7054 /* Hook called by the linker routine which adds symbols from an object
7055    file.  We must handle the special MIPS section numbers here.  */
7056
7057 bfd_boolean
7058 _bfd_mips_elf_add_symbol_hook (bfd *abfd, struct bfd_link_info *info,
7059                                Elf_Internal_Sym *sym, const char **namep,
7060                                flagword *flagsp ATTRIBUTE_UNUSED,
7061                                asection **secp, bfd_vma *valp)
7062 {
7063   if (SGI_COMPAT (abfd)
7064       && (abfd->flags & DYNAMIC) != 0
7065       && strcmp (*namep, "_rld_new_interface") == 0)
7066     {
7067       /* Skip IRIX5 rld entry name.  */
7068       *namep = NULL;
7069       return TRUE;
7070     }
7071
7072   /* Shared objects may have a dynamic symbol '_gp_disp' defined as
7073      a SECTION *ABS*.  This causes ld to think it can resolve _gp_disp
7074      by setting a DT_NEEDED for the shared object.  Since _gp_disp is
7075      a magic symbol resolved by the linker, we ignore this bogus definition
7076      of _gp_disp.  New ABI objects do not suffer from this problem so this
7077      is not done for them. */
7078   if (!NEWABI_P(abfd)
7079       && (sym->st_shndx == SHN_ABS)
7080       && (strcmp (*namep, "_gp_disp") == 0))
7081     {
7082       *namep = NULL;
7083       return TRUE;
7084     }
7085
7086   switch (sym->st_shndx)
7087     {
7088     case SHN_COMMON:
7089       /* Common symbols less than the GP size are automatically
7090          treated as SHN_MIPS_SCOMMON symbols.  */
7091       if (sym->st_size > elf_gp_size (abfd)
7092           || ELF_ST_TYPE (sym->st_info) == STT_TLS
7093           || IRIX_COMPAT (abfd) == ict_irix6)
7094         break;
7095       /* Fall through.  */
7096     case SHN_MIPS_SCOMMON:
7097       *secp = bfd_make_section_old_way (abfd, ".scommon");
7098       (*secp)->flags |= SEC_IS_COMMON;
7099       *valp = sym->st_size;
7100       break;
7101
7102     case SHN_MIPS_TEXT:
7103       /* This section is used in a shared object.  */
7104       if (elf_tdata (abfd)->elf_text_section == NULL)
7105         {
7106           asymbol *elf_text_symbol;
7107           asection *elf_text_section;
7108           bfd_size_type amt = sizeof (asection);
7109
7110           elf_text_section = bfd_zalloc (abfd, amt);
7111           if (elf_text_section == NULL)
7112             return FALSE;
7113
7114           amt = sizeof (asymbol);
7115           elf_text_symbol = bfd_zalloc (abfd, amt);
7116           if (elf_text_symbol == NULL)
7117             return FALSE;
7118
7119           /* Initialize the section.  */
7120
7121           elf_tdata (abfd)->elf_text_section = elf_text_section;
7122           elf_tdata (abfd)->elf_text_symbol = elf_text_symbol;
7123
7124           elf_text_section->symbol = elf_text_symbol;
7125           elf_text_section->symbol_ptr_ptr = &elf_tdata (abfd)->elf_text_symbol;
7126
7127           elf_text_section->name = ".text";
7128           elf_text_section->flags = SEC_NO_FLAGS;
7129           elf_text_section->output_section = NULL;
7130           elf_text_section->owner = abfd;
7131           elf_text_symbol->name = ".text";
7132           elf_text_symbol->flags = BSF_SECTION_SYM | BSF_DYNAMIC;
7133           elf_text_symbol->section = elf_text_section;
7134         }
7135       /* This code used to do *secp = bfd_und_section_ptr if
7136          info->shared.  I don't know why, and that doesn't make sense,
7137          so I took it out.  */
7138       *secp = elf_tdata (abfd)->elf_text_section;
7139       break;
7140
7141     case SHN_MIPS_ACOMMON:
7142       /* Fall through. XXX Can we treat this as allocated data?  */
7143     case SHN_MIPS_DATA:
7144       /* This section is used in a shared object.  */
7145       if (elf_tdata (abfd)->elf_data_section == NULL)
7146         {
7147           asymbol *elf_data_symbol;
7148           asection *elf_data_section;
7149           bfd_size_type amt = sizeof (asection);
7150
7151           elf_data_section = bfd_zalloc (abfd, amt);
7152           if (elf_data_section == NULL)
7153             return FALSE;
7154
7155           amt = sizeof (asymbol);
7156           elf_data_symbol = bfd_zalloc (abfd, amt);
7157           if (elf_data_symbol == NULL)
7158             return FALSE;
7159
7160           /* Initialize the section.  */
7161
7162           elf_tdata (abfd)->elf_data_section = elf_data_section;
7163           elf_tdata (abfd)->elf_data_symbol = elf_data_symbol;
7164
7165           elf_data_section->symbol = elf_data_symbol;
7166           elf_data_section->symbol_ptr_ptr = &elf_tdata (abfd)->elf_data_symbol;
7167
7168           elf_data_section->name = ".data";
7169           elf_data_section->flags = SEC_NO_FLAGS;
7170           elf_data_section->output_section = NULL;
7171           elf_data_section->owner = abfd;
7172           elf_data_symbol->name = ".data";
7173           elf_data_symbol->flags = BSF_SECTION_SYM | BSF_DYNAMIC;
7174           elf_data_symbol->section = elf_data_section;
7175         }
7176       /* This code used to do *secp = bfd_und_section_ptr if
7177          info->shared.  I don't know why, and that doesn't make sense,
7178          so I took it out.  */
7179       *secp = elf_tdata (abfd)->elf_data_section;
7180       break;
7181
7182     case SHN_MIPS_SUNDEFINED:
7183       *secp = bfd_und_section_ptr;
7184       break;
7185     }
7186
7187   if (SGI_COMPAT (abfd)
7188       && ! info->shared
7189       && info->output_bfd->xvec == abfd->xvec
7190       && strcmp (*namep, "__rld_obj_head") == 0)
7191     {
7192       struct elf_link_hash_entry *h;
7193       struct bfd_link_hash_entry *bh;
7194
7195       /* Mark __rld_obj_head as dynamic.  */
7196       bh = NULL;
7197       if (! (_bfd_generic_link_add_one_symbol
7198              (info, abfd, *namep, BSF_GLOBAL, *secp, *valp, NULL, FALSE,
7199               get_elf_backend_data (abfd)->collect, &bh)))
7200         return FALSE;
7201
7202       h = (struct elf_link_hash_entry *) bh;
7203       h->non_elf = 0;
7204       h->def_regular = 1;
7205       h->type = STT_OBJECT;
7206
7207       if (! bfd_elf_link_record_dynamic_symbol (info, h))
7208         return FALSE;
7209
7210       mips_elf_hash_table (info)->use_rld_obj_head = TRUE;
7211       mips_elf_hash_table (info)->rld_symbol = h;
7212     }
7213
7214   /* If this is a mips16 text symbol, add 1 to the value to make it
7215      odd.  This will cause something like .word SYM to come up with
7216      the right value when it is loaded into the PC.  */
7217   if (ELF_ST_IS_COMPRESSED (sym->st_other))
7218     ++*valp;
7219
7220   return TRUE;
7221 }
7222
7223 /* This hook function is called before the linker writes out a global
7224    symbol.  We mark symbols as small common if appropriate.  This is
7225    also where we undo the increment of the value for a mips16 symbol.  */
7226
7227 int
7228 _bfd_mips_elf_link_output_symbol_hook
7229   (struct bfd_link_info *info ATTRIBUTE_UNUSED,
7230    const char *name ATTRIBUTE_UNUSED, Elf_Internal_Sym *sym,
7231    asection *input_sec, struct elf_link_hash_entry *h ATTRIBUTE_UNUSED)
7232 {
7233   /* If we see a common symbol, which implies a relocatable link, then
7234      if a symbol was small common in an input file, mark it as small
7235      common in the output file.  */
7236   if (sym->st_shndx == SHN_COMMON
7237       && strcmp (input_sec->name, ".scommon") == 0)
7238     sym->st_shndx = SHN_MIPS_SCOMMON;
7239
7240   if (ELF_ST_IS_COMPRESSED (sym->st_other))
7241     sym->st_value &= ~1;
7242
7243   return 1;
7244 }
7245 \f
7246 /* Functions for the dynamic linker.  */
7247
7248 /* Create dynamic sections when linking against a dynamic object.  */
7249
7250 bfd_boolean
7251 _bfd_mips_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
7252 {
7253   struct elf_link_hash_entry *h;
7254   struct bfd_link_hash_entry *bh;
7255   flagword flags;
7256   register asection *s;
7257   const char * const *namep;
7258   struct mips_elf_link_hash_table *htab;
7259
7260   htab = mips_elf_hash_table (info);
7261   BFD_ASSERT (htab != NULL);
7262
7263   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
7264            | SEC_LINKER_CREATED | SEC_READONLY);
7265
7266   /* The psABI requires a read-only .dynamic section, but the VxWorks
7267      EABI doesn't.  */
7268   if (!htab->is_vxworks)
7269     {
7270       s = bfd_get_linker_section (abfd, ".dynamic");
7271       if (s != NULL)
7272         {
7273           if (! bfd_set_section_flags (abfd, s, flags))
7274             return FALSE;
7275         }
7276     }
7277
7278   /* We need to create .got section.  */
7279   if (!mips_elf_create_got_section (abfd, info))
7280     return FALSE;
7281
7282   if (! mips_elf_rel_dyn_section (info, TRUE))
7283     return FALSE;
7284
7285   /* Create .stub section.  */
7286   s = bfd_make_section_anyway_with_flags (abfd,
7287                                           MIPS_ELF_STUB_SECTION_NAME (abfd),
7288                                           flags | SEC_CODE);
7289   if (s == NULL
7290       || ! bfd_set_section_alignment (abfd, s,
7291                                       MIPS_ELF_LOG_FILE_ALIGN (abfd)))
7292     return FALSE;
7293   htab->sstubs = s;
7294
7295   if (!mips_elf_hash_table (info)->use_rld_obj_head
7296       && !info->shared
7297       && bfd_get_linker_section (abfd, ".rld_map") == NULL)
7298     {
7299       s = bfd_make_section_anyway_with_flags (abfd, ".rld_map",
7300                                               flags &~ (flagword) SEC_READONLY);
7301       if (s == NULL
7302           || ! bfd_set_section_alignment (abfd, s,
7303                                           MIPS_ELF_LOG_FILE_ALIGN (abfd)))
7304         return FALSE;
7305     }
7306
7307   /* On IRIX5, we adjust add some additional symbols and change the
7308      alignments of several sections.  There is no ABI documentation
7309      indicating that this is necessary on IRIX6, nor any evidence that
7310      the linker takes such action.  */
7311   if (IRIX_COMPAT (abfd) == ict_irix5)
7312     {
7313       for (namep = mips_elf_dynsym_rtproc_names; *namep != NULL; namep++)
7314         {
7315           bh = NULL;
7316           if (! (_bfd_generic_link_add_one_symbol
7317                  (info, abfd, *namep, BSF_GLOBAL, bfd_und_section_ptr, 0,
7318                   NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
7319             return FALSE;
7320
7321           h = (struct elf_link_hash_entry *) bh;
7322           h->non_elf = 0;
7323           h->def_regular = 1;
7324           h->type = STT_SECTION;
7325
7326           if (! bfd_elf_link_record_dynamic_symbol (info, h))
7327             return FALSE;
7328         }
7329
7330       /* We need to create a .compact_rel section.  */
7331       if (SGI_COMPAT (abfd))
7332         {
7333           if (!mips_elf_create_compact_rel_section (abfd, info))
7334             return FALSE;
7335         }
7336
7337       /* Change alignments of some sections.  */
7338       s = bfd_get_linker_section (abfd, ".hash");
7339       if (s != NULL)
7340         bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7341       s = bfd_get_linker_section (abfd, ".dynsym");
7342       if (s != NULL)
7343         bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7344       s = bfd_get_linker_section (abfd, ".dynstr");
7345       if (s != NULL)
7346         bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7347       /* ??? */
7348       s = bfd_get_section_by_name (abfd, ".reginfo");
7349       if (s != NULL)
7350         bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7351       s = bfd_get_linker_section (abfd, ".dynamic");
7352       if (s != NULL)
7353         bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7354     }
7355
7356   if (!info->shared)
7357     {
7358       const char *name;
7359
7360       name = SGI_COMPAT (abfd) ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING";
7361       bh = NULL;
7362       if (!(_bfd_generic_link_add_one_symbol
7363             (info, abfd, name, BSF_GLOBAL, bfd_abs_section_ptr, 0,
7364              NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
7365         return FALSE;
7366
7367       h = (struct elf_link_hash_entry *) bh;
7368       h->non_elf = 0;
7369       h->def_regular = 1;
7370       h->type = STT_SECTION;
7371
7372       if (! bfd_elf_link_record_dynamic_symbol (info, h))
7373         return FALSE;
7374
7375       if (! mips_elf_hash_table (info)->use_rld_obj_head)
7376         {
7377           /* __rld_map is a four byte word located in the .data section
7378              and is filled in by the rtld to contain a pointer to
7379              the _r_debug structure. Its symbol value will be set in
7380              _bfd_mips_elf_finish_dynamic_symbol.  */
7381           s = bfd_get_linker_section (abfd, ".rld_map");
7382           BFD_ASSERT (s != NULL);
7383
7384           name = SGI_COMPAT (abfd) ? "__rld_map" : "__RLD_MAP";
7385           bh = NULL;
7386           if (!(_bfd_generic_link_add_one_symbol
7387                 (info, abfd, name, BSF_GLOBAL, s, 0, NULL, FALSE,
7388                  get_elf_backend_data (abfd)->collect, &bh)))
7389             return FALSE;
7390
7391           h = (struct elf_link_hash_entry *) bh;
7392           h->non_elf = 0;
7393           h->def_regular = 1;
7394           h->type = STT_OBJECT;
7395
7396           if (! bfd_elf_link_record_dynamic_symbol (info, h))
7397             return FALSE;
7398           mips_elf_hash_table (info)->rld_symbol = h;
7399         }
7400     }
7401
7402   /* Create the .plt, .rel(a).plt, .dynbss and .rel(a).bss sections.
7403      Also create the _PROCEDURE_LINKAGE_TABLE symbol.  */
7404   if (!_bfd_elf_create_dynamic_sections (abfd, info))
7405     return FALSE;
7406
7407   /* Cache the sections created above.  */
7408   htab->splt = bfd_get_linker_section (abfd, ".plt");
7409   htab->sdynbss = bfd_get_linker_section (abfd, ".dynbss");
7410   if (htab->is_vxworks)
7411     {
7412       htab->srelbss = bfd_get_linker_section (abfd, ".rela.bss");
7413       htab->srelplt = bfd_get_linker_section (abfd, ".rela.plt");
7414     }
7415   else
7416     htab->srelplt = bfd_get_linker_section (abfd, ".rel.plt");
7417   if (!htab->sdynbss
7418       || (htab->is_vxworks && !htab->srelbss && !info->shared)
7419       || !htab->srelplt
7420       || !htab->splt)
7421     abort ();
7422
7423   if (htab->is_vxworks)
7424     {
7425       /* Do the usual VxWorks handling.  */
7426       if (!elf_vxworks_create_dynamic_sections (abfd, info, &htab->srelplt2))
7427         return FALSE;
7428
7429       /* Work out the PLT sizes.  */
7430       if (info->shared)
7431         {
7432           htab->plt_header_size
7433             = 4 * ARRAY_SIZE (mips_vxworks_shared_plt0_entry);
7434           htab->plt_entry_size
7435             = 4 * ARRAY_SIZE (mips_vxworks_shared_plt_entry);
7436         }
7437       else
7438         {
7439           htab->plt_header_size
7440             = 4 * ARRAY_SIZE (mips_vxworks_exec_plt0_entry);
7441           htab->plt_entry_size
7442             = 4 * ARRAY_SIZE (mips_vxworks_exec_plt_entry);
7443         }
7444     }
7445   else if (!info->shared)
7446     {
7447       /* All variants of the plt0 entry are the same size.  */
7448       htab->plt_header_size = 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry);
7449       htab->plt_entry_size = 4 * ARRAY_SIZE (mips_exec_plt_entry);
7450     }
7451
7452   return TRUE;
7453 }
7454 \f
7455 /* Return true if relocation REL against section SEC is a REL rather than
7456    RELA relocation.  RELOCS is the first relocation in the section and
7457    ABFD is the bfd that contains SEC.  */
7458
7459 static bfd_boolean
7460 mips_elf_rel_relocation_p (bfd *abfd, asection *sec,
7461                            const Elf_Internal_Rela *relocs,
7462                            const Elf_Internal_Rela *rel)
7463 {
7464   Elf_Internal_Shdr *rel_hdr;
7465   const struct elf_backend_data *bed;
7466
7467   /* To determine which flavor of relocation this is, we depend on the
7468      fact that the INPUT_SECTION's REL_HDR is read before RELA_HDR.  */
7469   rel_hdr = elf_section_data (sec)->rel.hdr;
7470   if (rel_hdr == NULL)
7471     return FALSE;
7472   bed = get_elf_backend_data (abfd);
7473   return ((size_t) (rel - relocs)
7474           < NUM_SHDR_ENTRIES (rel_hdr) * bed->s->int_rels_per_ext_rel);
7475 }
7476
7477 /* Read the addend for REL relocation REL, which belongs to bfd ABFD.
7478    HOWTO is the relocation's howto and CONTENTS points to the contents
7479    of the section that REL is against.  */
7480
7481 static bfd_vma
7482 mips_elf_read_rel_addend (bfd *abfd, const Elf_Internal_Rela *rel,
7483                           reloc_howto_type *howto, bfd_byte *contents)
7484 {
7485   bfd_byte *location;
7486   unsigned int r_type;
7487   bfd_vma addend;
7488
7489   r_type = ELF_R_TYPE (abfd, rel->r_info);
7490   location = contents + rel->r_offset;
7491
7492   /* Get the addend, which is stored in the input file.  */
7493   _bfd_mips_elf_reloc_unshuffle (abfd, r_type, FALSE, location);
7494   addend = mips_elf_obtain_contents (howto, rel, abfd, contents);
7495   _bfd_mips_elf_reloc_shuffle (abfd, r_type, FALSE, location);
7496
7497   return addend & howto->src_mask;
7498 }
7499
7500 /* REL is a relocation in ABFD that needs a partnering LO16 relocation
7501    and *ADDEND is the addend for REL itself.  Look for the LO16 relocation
7502    and update *ADDEND with the final addend.  Return true on success
7503    or false if the LO16 could not be found.  RELEND is the exclusive
7504    upper bound on the relocations for REL's section.  */
7505
7506 static bfd_boolean
7507 mips_elf_add_lo16_rel_addend (bfd *abfd,
7508                               const Elf_Internal_Rela *rel,
7509                               const Elf_Internal_Rela *relend,
7510                               bfd_byte *contents, bfd_vma *addend)
7511 {
7512   unsigned int r_type, lo16_type;
7513   const Elf_Internal_Rela *lo16_relocation;
7514   reloc_howto_type *lo16_howto;
7515   bfd_vma l;
7516
7517   r_type = ELF_R_TYPE (abfd, rel->r_info);
7518   if (mips16_reloc_p (r_type))
7519     lo16_type = R_MIPS16_LO16;
7520   else if (micromips_reloc_p (r_type))
7521     lo16_type = R_MICROMIPS_LO16;
7522   else
7523     lo16_type = R_MIPS_LO16;
7524
7525   /* The combined value is the sum of the HI16 addend, left-shifted by
7526      sixteen bits, and the LO16 addend, sign extended.  (Usually, the
7527      code does a `lui' of the HI16 value, and then an `addiu' of the
7528      LO16 value.)
7529
7530      Scan ahead to find a matching LO16 relocation.
7531
7532      According to the MIPS ELF ABI, the R_MIPS_LO16 relocation must
7533      be immediately following.  However, for the IRIX6 ABI, the next
7534      relocation may be a composed relocation consisting of several
7535      relocations for the same address.  In that case, the R_MIPS_LO16
7536      relocation may occur as one of these.  We permit a similar
7537      extension in general, as that is useful for GCC.
7538
7539      In some cases GCC dead code elimination removes the LO16 but keeps
7540      the corresponding HI16.  This is strictly speaking a violation of
7541      the ABI but not immediately harmful.  */
7542   lo16_relocation = mips_elf_next_relocation (abfd, lo16_type, rel, relend);
7543   if (lo16_relocation == NULL)
7544     return FALSE;
7545
7546   /* Obtain the addend kept there.  */
7547   lo16_howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, lo16_type, FALSE);
7548   l = mips_elf_read_rel_addend (abfd, lo16_relocation, lo16_howto, contents);
7549
7550   l <<= lo16_howto->rightshift;
7551   l = _bfd_mips_elf_sign_extend (l, 16);
7552
7553   *addend <<= 16;
7554   *addend += l;
7555   return TRUE;
7556 }
7557
7558 /* Try to read the contents of section SEC in bfd ABFD.  Return true and
7559    store the contents in *CONTENTS on success.  Assume that *CONTENTS
7560    already holds the contents if it is nonull on entry.  */
7561
7562 static bfd_boolean
7563 mips_elf_get_section_contents (bfd *abfd, asection *sec, bfd_byte **contents)
7564 {
7565   if (*contents)
7566     return TRUE;
7567
7568   /* Get cached copy if it exists.  */
7569   if (elf_section_data (sec)->this_hdr.contents != NULL)
7570     {
7571       *contents = elf_section_data (sec)->this_hdr.contents;
7572       return TRUE;
7573     }
7574
7575   return bfd_malloc_and_get_section (abfd, sec, contents);
7576 }
7577
7578 /* Look through the relocs for a section during the first phase, and
7579    allocate space in the global offset table.  */
7580
7581 bfd_boolean
7582 _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
7583                             asection *sec, const Elf_Internal_Rela *relocs)
7584 {
7585   const char *name;
7586   bfd *dynobj;
7587   Elf_Internal_Shdr *symtab_hdr;
7588   struct elf_link_hash_entry **sym_hashes;
7589   size_t extsymoff;
7590   const Elf_Internal_Rela *rel;
7591   const Elf_Internal_Rela *rel_end;
7592   asection *sreloc;
7593   const struct elf_backend_data *bed;
7594   struct mips_elf_link_hash_table *htab;
7595   bfd_byte *contents;
7596   bfd_vma addend;
7597   reloc_howto_type *howto;
7598
7599   if (info->relocatable)
7600     return TRUE;
7601
7602   htab = mips_elf_hash_table (info);
7603   BFD_ASSERT (htab != NULL);
7604
7605   dynobj = elf_hash_table (info)->dynobj;
7606   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
7607   sym_hashes = elf_sym_hashes (abfd);
7608   extsymoff = (elf_bad_symtab (abfd)) ? 0 : symtab_hdr->sh_info;
7609
7610   bed = get_elf_backend_data (abfd);
7611   rel_end = relocs + sec->reloc_count * bed->s->int_rels_per_ext_rel;
7612
7613   /* Check for the mips16 stub sections.  */
7614
7615   name = bfd_get_section_name (abfd, sec);
7616   if (FN_STUB_P (name))
7617     {
7618       unsigned long r_symndx;
7619
7620       /* Look at the relocation information to figure out which symbol
7621          this is for.  */
7622
7623       r_symndx = mips16_stub_symndx (bed, sec, relocs, rel_end);
7624       if (r_symndx == 0)
7625         {
7626           (*_bfd_error_handler)
7627             (_("%B: Warning: cannot determine the target function for"
7628                " stub section `%s'"),
7629              abfd, name);
7630           bfd_set_error (bfd_error_bad_value);
7631           return FALSE;
7632         }
7633
7634       if (r_symndx < extsymoff
7635           || sym_hashes[r_symndx - extsymoff] == NULL)
7636         {
7637           asection *o;
7638
7639           /* This stub is for a local symbol.  This stub will only be
7640              needed if there is some relocation in this BFD, other
7641              than a 16 bit function call, which refers to this symbol.  */
7642           for (o = abfd->sections; o != NULL; o = o->next)
7643             {
7644               Elf_Internal_Rela *sec_relocs;
7645               const Elf_Internal_Rela *r, *rend;
7646
7647               /* We can ignore stub sections when looking for relocs.  */
7648               if ((o->flags & SEC_RELOC) == 0
7649                   || o->reloc_count == 0
7650                   || section_allows_mips16_refs_p (o))
7651                 continue;
7652
7653               sec_relocs
7654                 = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
7655                                              info->keep_memory);
7656               if (sec_relocs == NULL)
7657                 return FALSE;
7658
7659               rend = sec_relocs + o->reloc_count;
7660               for (r = sec_relocs; r < rend; r++)
7661                 if (ELF_R_SYM (abfd, r->r_info) == r_symndx
7662                     && !mips16_call_reloc_p (ELF_R_TYPE (abfd, r->r_info)))
7663                   break;
7664
7665               if (elf_section_data (o)->relocs != sec_relocs)
7666                 free (sec_relocs);
7667
7668               if (r < rend)
7669                 break;
7670             }
7671
7672           if (o == NULL)
7673             {
7674               /* There is no non-call reloc for this stub, so we do
7675                  not need it.  Since this function is called before
7676                  the linker maps input sections to output sections, we
7677                  can easily discard it by setting the SEC_EXCLUDE
7678                  flag.  */
7679               sec->flags |= SEC_EXCLUDE;
7680               return TRUE;
7681             }
7682
7683           /* Record this stub in an array of local symbol stubs for
7684              this BFD.  */
7685           if (elf_tdata (abfd)->local_stubs == NULL)
7686             {
7687               unsigned long symcount;
7688               asection **n;
7689               bfd_size_type amt;
7690
7691               if (elf_bad_symtab (abfd))
7692                 symcount = NUM_SHDR_ENTRIES (symtab_hdr);
7693               else
7694                 symcount = symtab_hdr->sh_info;
7695               amt = symcount * sizeof (asection *);
7696               n = bfd_zalloc (abfd, amt);
7697               if (n == NULL)
7698                 return FALSE;
7699               elf_tdata (abfd)->local_stubs = n;
7700             }
7701
7702           sec->flags |= SEC_KEEP;
7703           elf_tdata (abfd)->local_stubs[r_symndx] = sec;
7704
7705           /* We don't need to set mips16_stubs_seen in this case.
7706              That flag is used to see whether we need to look through
7707              the global symbol table for stubs.  We don't need to set
7708              it here, because we just have a local stub.  */
7709         }
7710       else
7711         {
7712           struct mips_elf_link_hash_entry *h;
7713
7714           h = ((struct mips_elf_link_hash_entry *)
7715                sym_hashes[r_symndx - extsymoff]);
7716
7717           while (h->root.root.type == bfd_link_hash_indirect
7718                  || h->root.root.type == bfd_link_hash_warning)
7719             h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
7720
7721           /* H is the symbol this stub is for.  */
7722
7723           /* If we already have an appropriate stub for this function, we
7724              don't need another one, so we can discard this one.  Since
7725              this function is called before the linker maps input sections
7726              to output sections, we can easily discard it by setting the
7727              SEC_EXCLUDE flag.  */
7728           if (h->fn_stub != NULL)
7729             {
7730               sec->flags |= SEC_EXCLUDE;
7731               return TRUE;
7732             }
7733
7734           sec->flags |= SEC_KEEP;
7735           h->fn_stub = sec;
7736           mips_elf_hash_table (info)->mips16_stubs_seen = TRUE;
7737         }
7738     }
7739   else if (CALL_STUB_P (name) || CALL_FP_STUB_P (name))
7740     {
7741       unsigned long r_symndx;
7742       struct mips_elf_link_hash_entry *h;
7743       asection **loc;
7744
7745       /* Look at the relocation information to figure out which symbol
7746          this is for.  */
7747
7748       r_symndx = mips16_stub_symndx (bed, sec, relocs, rel_end);
7749       if (r_symndx == 0)
7750         {
7751           (*_bfd_error_handler)
7752             (_("%B: Warning: cannot determine the target function for"
7753                " stub section `%s'"),
7754              abfd, name);
7755           bfd_set_error (bfd_error_bad_value);
7756           return FALSE;
7757         }
7758
7759       if (r_symndx < extsymoff
7760           || sym_hashes[r_symndx - extsymoff] == NULL)
7761         {
7762           asection *o;
7763
7764           /* This stub is for a local symbol.  This stub will only be
7765              needed if there is some relocation (R_MIPS16_26) in this BFD
7766              that refers to this symbol.  */
7767           for (o = abfd->sections; o != NULL; o = o->next)
7768             {
7769               Elf_Internal_Rela *sec_relocs;
7770               const Elf_Internal_Rela *r, *rend;
7771
7772               /* We can ignore stub sections when looking for relocs.  */
7773               if ((o->flags & SEC_RELOC) == 0
7774                   || o->reloc_count == 0
7775                   || section_allows_mips16_refs_p (o))
7776                 continue;
7777
7778               sec_relocs
7779                 = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
7780                                              info->keep_memory);
7781               if (sec_relocs == NULL)
7782                 return FALSE;
7783
7784               rend = sec_relocs + o->reloc_count;
7785               for (r = sec_relocs; r < rend; r++)
7786                 if (ELF_R_SYM (abfd, r->r_info) == r_symndx
7787                     && ELF_R_TYPE (abfd, r->r_info) == R_MIPS16_26)
7788                     break;
7789
7790               if (elf_section_data (o)->relocs != sec_relocs)
7791                 free (sec_relocs);
7792
7793               if (r < rend)
7794                 break;
7795             }
7796
7797           if (o == NULL)
7798             {
7799               /* There is no non-call reloc for this stub, so we do
7800                  not need it.  Since this function is called before
7801                  the linker maps input sections to output sections, we
7802                  can easily discard it by setting the SEC_EXCLUDE
7803                  flag.  */
7804               sec->flags |= SEC_EXCLUDE;
7805               return TRUE;
7806             }
7807
7808           /* Record this stub in an array of local symbol call_stubs for
7809              this BFD.  */
7810           if (elf_tdata (abfd)->local_call_stubs == NULL)
7811             {
7812               unsigned long symcount;
7813               asection **n;
7814               bfd_size_type amt;
7815
7816               if (elf_bad_symtab (abfd))
7817                 symcount = NUM_SHDR_ENTRIES (symtab_hdr);
7818               else
7819                 symcount = symtab_hdr->sh_info;
7820               amt = symcount * sizeof (asection *);
7821               n = bfd_zalloc (abfd, amt);
7822               if (n == NULL)
7823                 return FALSE;
7824               elf_tdata (abfd)->local_call_stubs = n;
7825             }
7826
7827           sec->flags |= SEC_KEEP;
7828           elf_tdata (abfd)->local_call_stubs[r_symndx] = sec;
7829
7830           /* We don't need to set mips16_stubs_seen in this case.
7831              That flag is used to see whether we need to look through
7832              the global symbol table for stubs.  We don't need to set
7833              it here, because we just have a local stub.  */
7834         }
7835       else
7836         {
7837           h = ((struct mips_elf_link_hash_entry *)
7838                sym_hashes[r_symndx - extsymoff]);
7839
7840           /* H is the symbol this stub is for.  */
7841
7842           if (CALL_FP_STUB_P (name))
7843             loc = &h->call_fp_stub;
7844           else
7845             loc = &h->call_stub;
7846
7847           /* If we already have an appropriate stub for this function, we
7848              don't need another one, so we can discard this one.  Since
7849              this function is called before the linker maps input sections
7850              to output sections, we can easily discard it by setting the
7851              SEC_EXCLUDE flag.  */
7852           if (*loc != NULL)
7853             {
7854               sec->flags |= SEC_EXCLUDE;
7855               return TRUE;
7856             }
7857
7858           sec->flags |= SEC_KEEP;
7859           *loc = sec;
7860           mips_elf_hash_table (info)->mips16_stubs_seen = TRUE;
7861         }
7862     }
7863
7864   sreloc = NULL;
7865   contents = NULL;
7866   for (rel = relocs; rel < rel_end; ++rel)
7867     {
7868       unsigned long r_symndx;
7869       unsigned int r_type;
7870       struct elf_link_hash_entry *h;
7871       bfd_boolean can_make_dynamic_p;
7872
7873       r_symndx = ELF_R_SYM (abfd, rel->r_info);
7874       r_type = ELF_R_TYPE (abfd, rel->r_info);
7875
7876       if (r_symndx < extsymoff)
7877         h = NULL;
7878       else if (r_symndx >= extsymoff + NUM_SHDR_ENTRIES (symtab_hdr))
7879         {
7880           (*_bfd_error_handler)
7881             (_("%B: Malformed reloc detected for section %s"),
7882              abfd, name);
7883           bfd_set_error (bfd_error_bad_value);
7884           return FALSE;
7885         }
7886       else
7887         {
7888           h = sym_hashes[r_symndx - extsymoff];
7889           while (h != NULL
7890                  && (h->root.type == bfd_link_hash_indirect
7891                      || h->root.type == bfd_link_hash_warning))
7892             h = (struct elf_link_hash_entry *) h->root.u.i.link;
7893         }
7894
7895       /* Set CAN_MAKE_DYNAMIC_P to true if we can convert this
7896          relocation into a dynamic one.  */
7897       can_make_dynamic_p = FALSE;
7898       switch (r_type)
7899         {
7900         case R_MIPS_GOT16:
7901         case R_MIPS_CALL16:
7902         case R_MIPS_CALL_HI16:
7903         case R_MIPS_CALL_LO16:
7904         case R_MIPS_GOT_HI16:
7905         case R_MIPS_GOT_LO16:
7906         case R_MIPS_GOT_PAGE:
7907         case R_MIPS_GOT_OFST:
7908         case R_MIPS_GOT_DISP:
7909         case R_MIPS_TLS_GOTTPREL:
7910         case R_MIPS_TLS_GD:
7911         case R_MIPS_TLS_LDM:
7912         case R_MIPS16_GOT16:
7913         case R_MIPS16_CALL16:
7914         case R_MIPS16_TLS_GOTTPREL:
7915         case R_MIPS16_TLS_GD:
7916         case R_MIPS16_TLS_LDM:
7917         case R_MICROMIPS_GOT16:
7918         case R_MICROMIPS_CALL16:
7919         case R_MICROMIPS_CALL_HI16:
7920         case R_MICROMIPS_CALL_LO16:
7921         case R_MICROMIPS_GOT_HI16:
7922         case R_MICROMIPS_GOT_LO16:
7923         case R_MICROMIPS_GOT_PAGE:
7924         case R_MICROMIPS_GOT_OFST:
7925         case R_MICROMIPS_GOT_DISP:
7926         case R_MICROMIPS_TLS_GOTTPREL:
7927         case R_MICROMIPS_TLS_GD:
7928         case R_MICROMIPS_TLS_LDM:
7929           if (dynobj == NULL)
7930             elf_hash_table (info)->dynobj = dynobj = abfd;
7931           if (!mips_elf_create_got_section (dynobj, info))
7932             return FALSE;
7933           if (htab->is_vxworks && !info->shared)
7934             {
7935               (*_bfd_error_handler)
7936                 (_("%B: GOT reloc at 0x%lx not expected in executables"),
7937                  abfd, (unsigned long) rel->r_offset);
7938               bfd_set_error (bfd_error_bad_value);
7939               return FALSE;
7940             }
7941           break;
7942
7943           /* This is just a hint; it can safely be ignored.  Don't set
7944              has_static_relocs for the corresponding symbol.  */
7945         case R_MIPS_JALR:
7946         case R_MICROMIPS_JALR:
7947           break;
7948
7949         case R_MIPS_32:
7950         case R_MIPS_REL32:
7951         case R_MIPS_64:
7952           /* In VxWorks executables, references to external symbols
7953              must be handled using copy relocs or PLT entries; it is not
7954              possible to convert this relocation into a dynamic one.
7955
7956              For executables that use PLTs and copy-relocs, we have a
7957              choice between converting the relocation into a dynamic
7958              one or using copy relocations or PLT entries.  It is
7959              usually better to do the former, unless the relocation is
7960              against a read-only section.  */
7961           if ((info->shared
7962                || (h != NULL
7963                    && !htab->is_vxworks
7964                    && strcmp (h->root.root.string, "__gnu_local_gp") != 0
7965                    && !(!info->nocopyreloc
7966                         && !PIC_OBJECT_P (abfd)
7967                         && MIPS_ELF_READONLY_SECTION (sec))))
7968               && (sec->flags & SEC_ALLOC) != 0)
7969             {
7970               can_make_dynamic_p = TRUE;
7971               if (dynobj == NULL)
7972                 elf_hash_table (info)->dynobj = dynobj = abfd;
7973               break;
7974             }
7975           /* For sections that are not SEC_ALLOC a copy reloc would be
7976              output if possible (implying questionable semantics for
7977              read-only data objects) or otherwise the final link would
7978              fail as ld.so will not process them and could not therefore
7979              handle any outstanding dynamic relocations.
7980
7981              For such sections that are also SEC_DEBUGGING, we can avoid
7982              these problems by simply ignoring any relocs as these
7983              sections have a predefined use and we know it is safe to do
7984              so.
7985
7986              This is needed in cases such as a global symbol definition
7987              in a shared library causing a common symbol from an object
7988              file to be converted to an undefined reference.  If that
7989              happens, then all the relocations against this symbol from
7990              SEC_DEBUGGING sections in the object file will resolve to
7991              nil.  */
7992           if ((sec->flags & SEC_DEBUGGING) != 0)
7993             break;
7994           /* Fall through.  */
7995
7996         default:
7997           /* Most static relocations require pointer equality, except
7998              for branches.  */
7999           if (h)
8000             h->pointer_equality_needed = TRUE;
8001           /* Fall through.  */
8002
8003         case R_MIPS_26:
8004         case R_MIPS_PC16:
8005         case R_MIPS16_26:
8006         case R_MICROMIPS_26_S1:
8007         case R_MICROMIPS_PC7_S1:
8008         case R_MICROMIPS_PC10_S1:
8009         case R_MICROMIPS_PC16_S1:
8010         case R_MICROMIPS_PC23_S2:
8011           if (h)
8012             ((struct mips_elf_link_hash_entry *) h)->has_static_relocs = TRUE;
8013           break;
8014         }
8015
8016       if (h)
8017         {
8018           /* Relocations against the special VxWorks __GOTT_BASE__ and
8019              __GOTT_INDEX__ symbols must be left to the loader.  Allocate
8020              room for them in .rela.dyn.  */
8021           if (is_gott_symbol (info, h))
8022             {
8023               if (sreloc == NULL)
8024                 {
8025                   sreloc = mips_elf_rel_dyn_section (info, TRUE);
8026                   if (sreloc == NULL)
8027                     return FALSE;
8028                 }
8029               mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
8030               if (MIPS_ELF_READONLY_SECTION (sec))
8031                 /* We tell the dynamic linker that there are
8032                    relocations against the text segment.  */
8033                 info->flags |= DF_TEXTREL;
8034             }
8035         }
8036       else if (call_lo16_reloc_p (r_type)
8037                || got_lo16_reloc_p (r_type)
8038                || got_disp_reloc_p (r_type)
8039                || (got16_reloc_p (r_type) && htab->is_vxworks))
8040         {
8041           /* We may need a local GOT entry for this relocation.  We
8042              don't count R_MIPS_GOT_PAGE because we can estimate the
8043              maximum number of pages needed by looking at the size of
8044              the segment.  Similar comments apply to R_MIPS*_GOT16 and
8045              R_MIPS*_CALL16, except on VxWorks, where GOT relocations
8046              always evaluate to "G".  We don't count R_MIPS_GOT_HI16, or
8047              R_MIPS_CALL_HI16 because these are always followed by an
8048              R_MIPS_GOT_LO16 or R_MIPS_CALL_LO16.  */
8049           if (!mips_elf_record_local_got_symbol (abfd, r_symndx,
8050                                                  rel->r_addend, info, 0))
8051             return FALSE;
8052         }
8053
8054       if (h != NULL
8055           && mips_elf_relocation_needs_la25_stub (abfd, r_type,
8056                                                   ELF_ST_IS_MIPS16 (h->other)))
8057         ((struct mips_elf_link_hash_entry *) h)->has_nonpic_branches = TRUE;
8058
8059       switch (r_type)
8060         {
8061         case R_MIPS_CALL16:
8062         case R_MIPS16_CALL16:
8063         case R_MICROMIPS_CALL16:
8064           if (h == NULL)
8065             {
8066               (*_bfd_error_handler)
8067                 (_("%B: CALL16 reloc at 0x%lx not against global symbol"),
8068                  abfd, (unsigned long) rel->r_offset);
8069               bfd_set_error (bfd_error_bad_value);
8070               return FALSE;
8071             }
8072           /* Fall through.  */
8073
8074         case R_MIPS_CALL_HI16:
8075         case R_MIPS_CALL_LO16:
8076         case R_MICROMIPS_CALL_HI16:
8077         case R_MICROMIPS_CALL_LO16:
8078           if (h != NULL)
8079             {
8080               /* Make sure there is room in the regular GOT to hold the
8081                  function's address.  We may eliminate it in favour of
8082                  a .got.plt entry later; see mips_elf_count_got_symbols.  */
8083               if (!mips_elf_record_global_got_symbol (h, abfd, info, TRUE, 0))
8084                 return FALSE;
8085
8086               /* We need a stub, not a plt entry for the undefined
8087                  function.  But we record it as if it needs plt.  See
8088                  _bfd_elf_adjust_dynamic_symbol.  */
8089               h->needs_plt = 1;
8090               h->type = STT_FUNC;
8091             }
8092           break;
8093
8094         case R_MIPS_GOT_PAGE:
8095         case R_MICROMIPS_GOT_PAGE:
8096           /* If this is a global, overridable symbol, GOT_PAGE will
8097              decay to GOT_DISP, so we'll need a GOT entry for it.  */
8098           if (h)
8099             {
8100               struct mips_elf_link_hash_entry *hmips =
8101                 (struct mips_elf_link_hash_entry *) h;
8102
8103               /* This symbol is definitely not overridable.  */
8104               if (hmips->root.def_regular
8105                   && ! (info->shared && ! info->symbolic
8106                         && ! hmips->root.forced_local))
8107                 h = NULL;
8108             }
8109           /* Fall through.  */
8110
8111         case R_MIPS16_GOT16:
8112         case R_MIPS_GOT16:
8113         case R_MIPS_GOT_HI16:
8114         case R_MIPS_GOT_LO16:
8115         case R_MICROMIPS_GOT16:
8116         case R_MICROMIPS_GOT_HI16:
8117         case R_MICROMIPS_GOT_LO16:
8118           if (!h || got_page_reloc_p (r_type))
8119             {
8120               /* This relocation needs (or may need, if h != NULL) a
8121                  page entry in the GOT.  For R_MIPS_GOT_PAGE we do not
8122                  know for sure until we know whether the symbol is
8123                  preemptible.  */
8124               if (mips_elf_rel_relocation_p (abfd, sec, relocs, rel))
8125                 {
8126                   if (!mips_elf_get_section_contents (abfd, sec, &contents))
8127                     return FALSE;
8128                   howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, FALSE);
8129                   addend = mips_elf_read_rel_addend (abfd, rel,
8130                                                      howto, contents);
8131                   if (got16_reloc_p (r_type))
8132                     mips_elf_add_lo16_rel_addend (abfd, rel, rel_end,
8133                                                   contents, &addend);
8134                   else
8135                     addend <<= howto->rightshift;
8136                 }
8137               else
8138                 addend = rel->r_addend;
8139               if (!mips_elf_record_got_page_entry (info, abfd, r_symndx,
8140                                                    addend))
8141                 return FALSE;
8142             }
8143           /* Fall through.  */
8144
8145         case R_MIPS_GOT_DISP:
8146         case R_MICROMIPS_GOT_DISP:
8147           if (h && !mips_elf_record_global_got_symbol (h, abfd, info,
8148                                                        FALSE, 0))
8149             return FALSE;
8150           break;
8151
8152         case R_MIPS_TLS_GOTTPREL:
8153         case R_MIPS16_TLS_GOTTPREL:
8154         case R_MICROMIPS_TLS_GOTTPREL:
8155           if (info->shared)
8156             info->flags |= DF_STATIC_TLS;
8157           /* Fall through */
8158
8159         case R_MIPS_TLS_LDM:
8160         case R_MIPS16_TLS_LDM:
8161         case R_MICROMIPS_TLS_LDM:
8162           if (tls_ldm_reloc_p (r_type))
8163             {
8164               r_symndx = STN_UNDEF;
8165               h = NULL;
8166             }
8167           /* Fall through */
8168
8169         case R_MIPS_TLS_GD:
8170         case R_MIPS16_TLS_GD:
8171         case R_MICROMIPS_TLS_GD:
8172           /* This symbol requires a global offset table entry, or two
8173              for TLS GD relocations.  */
8174           {
8175             unsigned char flag;
8176
8177             flag = (tls_gd_reloc_p (r_type)
8178                     ? GOT_TLS_GD
8179                     : tls_ldm_reloc_p (r_type) ? GOT_TLS_LDM : GOT_TLS_IE);
8180             if (h != NULL)
8181               {
8182                 struct mips_elf_link_hash_entry *hmips =
8183                   (struct mips_elf_link_hash_entry *) h;
8184                 hmips->tls_type |= flag;
8185
8186                 if (h && !mips_elf_record_global_got_symbol (h, abfd, info,
8187                                                              FALSE, flag))
8188                   return FALSE;
8189               }
8190             else
8191               {
8192                 BFD_ASSERT (flag == GOT_TLS_LDM || r_symndx != STN_UNDEF);
8193
8194                 if (!mips_elf_record_local_got_symbol (abfd, r_symndx,
8195                                                        rel->r_addend,
8196                                                        info, flag))
8197                   return FALSE;
8198               }
8199           }
8200           break;
8201
8202         case R_MIPS_32:
8203         case R_MIPS_REL32:
8204         case R_MIPS_64:
8205           /* In VxWorks executables, references to external symbols
8206              are handled using copy relocs or PLT stubs, so there's
8207              no need to add a .rela.dyn entry for this relocation.  */
8208           if (can_make_dynamic_p)
8209             {
8210               if (sreloc == NULL)
8211                 {
8212                   sreloc = mips_elf_rel_dyn_section (info, TRUE);
8213                   if (sreloc == NULL)
8214                     return FALSE;
8215                 }
8216               if (info->shared && h == NULL)
8217                 {
8218                   /* When creating a shared object, we must copy these
8219                      reloc types into the output file as R_MIPS_REL32
8220                      relocs.  Make room for this reloc in .rel(a).dyn.  */
8221                   mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
8222                   if (MIPS_ELF_READONLY_SECTION (sec))
8223                     /* We tell the dynamic linker that there are
8224                        relocations against the text segment.  */
8225                     info->flags |= DF_TEXTREL;
8226                 }
8227               else
8228                 {
8229                   struct mips_elf_link_hash_entry *hmips;
8230
8231                   /* For a shared object, we must copy this relocation
8232                      unless the symbol turns out to be undefined and
8233                      weak with non-default visibility, in which case
8234                      it will be left as zero.
8235
8236                      We could elide R_MIPS_REL32 for locally binding symbols
8237                      in shared libraries, but do not yet do so.
8238
8239                      For an executable, we only need to copy this
8240                      reloc if the symbol is defined in a dynamic
8241                      object.  */
8242                   hmips = (struct mips_elf_link_hash_entry *) h;
8243                   ++hmips->possibly_dynamic_relocs;
8244                   if (MIPS_ELF_READONLY_SECTION (sec))
8245                     /* We need it to tell the dynamic linker if there
8246                        are relocations against the text segment.  */
8247                     hmips->readonly_reloc = TRUE;
8248                 }
8249             }
8250
8251           if (SGI_COMPAT (abfd))
8252             mips_elf_hash_table (info)->compact_rel_size +=
8253               sizeof (Elf32_External_crinfo);
8254           break;
8255
8256         case R_MIPS_26:
8257         case R_MIPS_GPREL16:
8258         case R_MIPS_LITERAL:
8259         case R_MIPS_GPREL32:
8260         case R_MICROMIPS_26_S1:
8261         case R_MICROMIPS_GPREL16:
8262         case R_MICROMIPS_LITERAL:
8263         case R_MICROMIPS_GPREL7_S2:
8264           if (SGI_COMPAT (abfd))
8265             mips_elf_hash_table (info)->compact_rel_size +=
8266               sizeof (Elf32_External_crinfo);
8267           break;
8268
8269           /* This relocation describes the C++ object vtable hierarchy.
8270              Reconstruct it for later use during GC.  */
8271         case R_MIPS_GNU_VTINHERIT:
8272           if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
8273             return FALSE;
8274           break;
8275
8276           /* This relocation describes which C++ vtable entries are actually
8277              used.  Record for later use during GC.  */
8278         case R_MIPS_GNU_VTENTRY:
8279           BFD_ASSERT (h != NULL);
8280           if (h != NULL
8281               && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset))
8282             return FALSE;
8283           break;
8284
8285         default:
8286           break;
8287         }
8288
8289       /* We must not create a stub for a symbol that has relocations
8290          related to taking the function's address.  This doesn't apply to
8291          VxWorks, where CALL relocs refer to a .got.plt entry instead of
8292          a normal .got entry.  */
8293       if (!htab->is_vxworks && h != NULL)
8294         switch (r_type)
8295           {
8296           default:
8297             ((struct mips_elf_link_hash_entry *) h)->no_fn_stub = TRUE;
8298             break;
8299           case R_MIPS16_CALL16:
8300           case R_MIPS_CALL16:
8301           case R_MIPS_CALL_HI16:
8302           case R_MIPS_CALL_LO16:
8303           case R_MIPS_JALR:
8304           case R_MICROMIPS_CALL16:
8305           case R_MICROMIPS_CALL_HI16:
8306           case R_MICROMIPS_CALL_LO16:
8307           case R_MICROMIPS_JALR:
8308             break;
8309           }
8310
8311       /* See if this reloc would need to refer to a MIPS16 hard-float stub,
8312          if there is one.  We only need to handle global symbols here;
8313          we decide whether to keep or delete stubs for local symbols
8314          when processing the stub's relocations.  */
8315       if (h != NULL
8316           && !mips16_call_reloc_p (r_type)
8317           && !section_allows_mips16_refs_p (sec))
8318         {
8319           struct mips_elf_link_hash_entry *mh;
8320
8321           mh = (struct mips_elf_link_hash_entry *) h;
8322           mh->need_fn_stub = TRUE;
8323         }
8324
8325       /* Refuse some position-dependent relocations when creating a
8326          shared library.  Do not refuse R_MIPS_32 / R_MIPS_64; they're
8327          not PIC, but we can create dynamic relocations and the result
8328          will be fine.  Also do not refuse R_MIPS_LO16, which can be
8329          combined with R_MIPS_GOT16.  */
8330       if (info->shared)
8331         {
8332           switch (r_type)
8333             {
8334             case R_MIPS16_HI16:
8335             case R_MIPS_HI16:
8336             case R_MIPS_HIGHER:
8337             case R_MIPS_HIGHEST:
8338             case R_MICROMIPS_HI16:
8339             case R_MICROMIPS_HIGHER:
8340             case R_MICROMIPS_HIGHEST:
8341               /* Don't refuse a high part relocation if it's against
8342                  no symbol (e.g. part of a compound relocation).  */
8343               if (r_symndx == STN_UNDEF)
8344                 break;
8345
8346               /* R_MIPS_HI16 against _gp_disp is used for $gp setup,
8347                  and has a special meaning.  */
8348               if (!NEWABI_P (abfd) && h != NULL
8349                   && strcmp (h->root.root.string, "_gp_disp") == 0)
8350                 break;
8351
8352               /* Likewise __GOTT_BASE__ and __GOTT_INDEX__ on VxWorks.  */
8353               if (is_gott_symbol (info, h))
8354                 break;
8355
8356               /* FALLTHROUGH */
8357
8358             case R_MIPS16_26:
8359             case R_MIPS_26:
8360             case R_MICROMIPS_26_S1:
8361               howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, FALSE);
8362               (*_bfd_error_handler)
8363                 (_("%B: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC"),
8364                  abfd, howto->name,
8365                  (h) ? h->root.root.string : "a local symbol");
8366               bfd_set_error (bfd_error_bad_value);
8367               return FALSE;
8368             default:
8369               break;
8370             }
8371         }
8372     }
8373
8374   return TRUE;
8375 }
8376 \f
8377 bfd_boolean
8378 _bfd_mips_relax_section (bfd *abfd, asection *sec,
8379                          struct bfd_link_info *link_info,
8380                          bfd_boolean *again)
8381 {
8382   Elf_Internal_Rela *internal_relocs;
8383   Elf_Internal_Rela *irel, *irelend;
8384   Elf_Internal_Shdr *symtab_hdr;
8385   bfd_byte *contents = NULL;
8386   size_t extsymoff;
8387   bfd_boolean changed_contents = FALSE;
8388   bfd_vma sec_start = sec->output_section->vma + sec->output_offset;
8389   Elf_Internal_Sym *isymbuf = NULL;
8390
8391   /* We are not currently changing any sizes, so only one pass.  */
8392   *again = FALSE;
8393
8394   if (link_info->relocatable)
8395     return TRUE;
8396
8397   internal_relocs = _bfd_elf_link_read_relocs (abfd, sec, NULL, NULL,
8398                                                link_info->keep_memory);
8399   if (internal_relocs == NULL)
8400     return TRUE;
8401
8402   irelend = internal_relocs + sec->reloc_count
8403     * get_elf_backend_data (abfd)->s->int_rels_per_ext_rel;
8404   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
8405   extsymoff = (elf_bad_symtab (abfd)) ? 0 : symtab_hdr->sh_info;
8406
8407   for (irel = internal_relocs; irel < irelend; irel++)
8408     {
8409       bfd_vma symval;
8410       bfd_signed_vma sym_offset;
8411       unsigned int r_type;
8412       unsigned long r_symndx;
8413       asection *sym_sec;
8414       unsigned long instruction;
8415
8416       /* Turn jalr into bgezal, and jr into beq, if they're marked
8417          with a JALR relocation, that indicate where they jump to.
8418          This saves some pipeline bubbles.  */
8419       r_type = ELF_R_TYPE (abfd, irel->r_info);
8420       if (r_type != R_MIPS_JALR)
8421         continue;
8422
8423       r_symndx = ELF_R_SYM (abfd, irel->r_info);
8424       /* Compute the address of the jump target.  */
8425       if (r_symndx >= extsymoff)
8426         {
8427           struct mips_elf_link_hash_entry *h
8428             = ((struct mips_elf_link_hash_entry *)
8429                elf_sym_hashes (abfd) [r_symndx - extsymoff]);
8430
8431           while (h->root.root.type == bfd_link_hash_indirect
8432                  || h->root.root.type == bfd_link_hash_warning)
8433             h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
8434
8435           /* If a symbol is undefined, or if it may be overridden,
8436              skip it.  */
8437           if (! ((h->root.root.type == bfd_link_hash_defined
8438                   || h->root.root.type == bfd_link_hash_defweak)
8439                  && h->root.root.u.def.section)
8440               || (link_info->shared && ! link_info->symbolic
8441                   && !h->root.forced_local))
8442             continue;
8443
8444           sym_sec = h->root.root.u.def.section;
8445           if (sym_sec->output_section)
8446             symval = (h->root.root.u.def.value
8447                       + sym_sec->output_section->vma
8448                       + sym_sec->output_offset);
8449           else
8450             symval = h->root.root.u.def.value;
8451         }
8452       else
8453         {
8454           Elf_Internal_Sym *isym;
8455
8456           /* Read this BFD's symbols if we haven't done so already.  */
8457           if (isymbuf == NULL && symtab_hdr->sh_info != 0)
8458             {
8459               isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
8460               if (isymbuf == NULL)
8461                 isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
8462                                                 symtab_hdr->sh_info, 0,
8463                                                 NULL, NULL, NULL);
8464               if (isymbuf == NULL)
8465                 goto relax_return;
8466             }
8467
8468           isym = isymbuf + r_symndx;
8469           if (isym->st_shndx == SHN_UNDEF)
8470             continue;
8471           else if (isym->st_shndx == SHN_ABS)
8472             sym_sec = bfd_abs_section_ptr;
8473           else if (isym->st_shndx == SHN_COMMON)
8474             sym_sec = bfd_com_section_ptr;
8475           else
8476             sym_sec
8477               = bfd_section_from_elf_index (abfd, isym->st_shndx);
8478           symval = isym->st_value
8479             + sym_sec->output_section->vma
8480             + sym_sec->output_offset;
8481         }
8482
8483       /* Compute branch offset, from delay slot of the jump to the
8484          branch target.  */
8485       sym_offset = (symval + irel->r_addend)
8486         - (sec_start + irel->r_offset + 4);
8487
8488       /* Branch offset must be properly aligned.  */
8489       if ((sym_offset & 3) != 0)
8490         continue;
8491
8492       sym_offset >>= 2;
8493
8494       /* Check that it's in range.  */
8495       if (sym_offset < -0x8000 || sym_offset >= 0x8000)
8496         continue;
8497
8498       /* Get the section contents if we haven't done so already.  */
8499       if (!mips_elf_get_section_contents (abfd, sec, &contents))
8500         goto relax_return;
8501
8502       instruction = bfd_get_32 (abfd, contents + irel->r_offset);
8503
8504       /* If it was jalr <reg>, turn it into bgezal $zero, <target>.  */
8505       if ((instruction & 0xfc1fffff) == 0x0000f809)
8506         instruction = 0x04110000;
8507       /* If it was jr <reg>, turn it into b <target>.  */
8508       else if ((instruction & 0xfc1fffff) == 0x00000008)
8509         instruction = 0x10000000;
8510       else
8511         continue;
8512
8513       instruction |= (sym_offset & 0xffff);
8514       bfd_put_32 (abfd, instruction, contents + irel->r_offset);
8515       changed_contents = TRUE;
8516     }
8517
8518   if (contents != NULL
8519       && elf_section_data (sec)->this_hdr.contents != contents)
8520     {
8521       if (!changed_contents && !link_info->keep_memory)
8522         free (contents);
8523       else
8524         {
8525           /* Cache the section contents for elf_link_input_bfd.  */
8526           elf_section_data (sec)->this_hdr.contents = contents;
8527         }
8528     }
8529   return TRUE;
8530
8531  relax_return:
8532   if (contents != NULL
8533       && elf_section_data (sec)->this_hdr.contents != contents)
8534     free (contents);
8535   return FALSE;
8536 }
8537 \f
8538 /* Allocate space for global sym dynamic relocs.  */
8539
8540 static bfd_boolean
8541 allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
8542 {
8543   struct bfd_link_info *info = inf;
8544   bfd *dynobj;
8545   struct mips_elf_link_hash_entry *hmips;
8546   struct mips_elf_link_hash_table *htab;
8547
8548   htab = mips_elf_hash_table (info);
8549   BFD_ASSERT (htab != NULL);
8550
8551   dynobj = elf_hash_table (info)->dynobj;
8552   hmips = (struct mips_elf_link_hash_entry *) h;
8553
8554   /* VxWorks executables are handled elsewhere; we only need to
8555      allocate relocations in shared objects.  */
8556   if (htab->is_vxworks && !info->shared)
8557     return TRUE;
8558
8559   /* Ignore indirect symbols.  All relocations against such symbols
8560      will be redirected to the target symbol.  */
8561   if (h->root.type == bfd_link_hash_indirect)
8562     return TRUE;
8563
8564   /* If this symbol is defined in a dynamic object, or we are creating
8565      a shared library, we will need to copy any R_MIPS_32 or
8566      R_MIPS_REL32 relocs against it into the output file.  */
8567   if (! info->relocatable
8568       && hmips->possibly_dynamic_relocs != 0
8569       && (h->root.type == bfd_link_hash_defweak
8570           || (!h->def_regular && !ELF_COMMON_DEF_P (h))
8571           || info->shared))
8572     {
8573       bfd_boolean do_copy = TRUE;
8574
8575       if (h->root.type == bfd_link_hash_undefweak)
8576         {
8577           /* Do not copy relocations for undefined weak symbols with
8578              non-default visibility.  */
8579           if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
8580             do_copy = FALSE;
8581
8582           /* Make sure undefined weak symbols are output as a dynamic
8583              symbol in PIEs.  */
8584           else if (h->dynindx == -1 && !h->forced_local)
8585             {
8586               if (! bfd_elf_link_record_dynamic_symbol (info, h))
8587                 return FALSE;
8588             }
8589         }
8590
8591       if (do_copy)
8592         {
8593           /* Even though we don't directly need a GOT entry for this symbol,
8594              the SVR4 psABI requires it to have a dynamic symbol table
8595              index greater that DT_MIPS_GOTSYM if there are dynamic
8596              relocations against it.
8597
8598              VxWorks does not enforce the same mapping between the GOT
8599              and the symbol table, so the same requirement does not
8600              apply there.  */
8601           if (!htab->is_vxworks)
8602             {
8603               if (hmips->global_got_area > GGA_RELOC_ONLY)
8604                 hmips->global_got_area = GGA_RELOC_ONLY;
8605               hmips->got_only_for_calls = FALSE;
8606             }
8607
8608           mips_elf_allocate_dynamic_relocations
8609             (dynobj, info, hmips->possibly_dynamic_relocs);
8610           if (hmips->readonly_reloc)
8611             /* We tell the dynamic linker that there are relocations
8612                against the text segment.  */
8613             info->flags |= DF_TEXTREL;
8614         }
8615     }
8616
8617   return TRUE;
8618 }
8619
8620 /* Adjust a symbol defined by a dynamic object and referenced by a
8621    regular object.  The current definition is in some section of the
8622    dynamic object, but we're not including those sections.  We have to
8623    change the definition to something the rest of the link can
8624    understand.  */
8625
8626 bfd_boolean
8627 _bfd_mips_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
8628                                      struct elf_link_hash_entry *h)
8629 {
8630   bfd *dynobj;
8631   struct mips_elf_link_hash_entry *hmips;
8632   struct mips_elf_link_hash_table *htab;
8633
8634   htab = mips_elf_hash_table (info);
8635   BFD_ASSERT (htab != NULL);
8636
8637   dynobj = elf_hash_table (info)->dynobj;
8638   hmips = (struct mips_elf_link_hash_entry *) h;
8639
8640   /* Make sure we know what is going on here.  */
8641   BFD_ASSERT (dynobj != NULL
8642               && (h->needs_plt
8643                   || h->u.weakdef != NULL
8644                   || (h->def_dynamic
8645                       && h->ref_regular
8646                       && !h->def_regular)));
8647
8648   hmips = (struct mips_elf_link_hash_entry *) h;
8649
8650   /* If there are call relocations against an externally-defined symbol,
8651      see whether we can create a MIPS lazy-binding stub for it.  We can
8652      only do this if all references to the function are through call
8653      relocations, and in that case, the traditional lazy-binding stubs
8654      are much more efficient than PLT entries.
8655
8656      Traditional stubs are only available on SVR4 psABI-based systems;
8657      VxWorks always uses PLTs instead.  */
8658   if (!htab->is_vxworks && h->needs_plt && !hmips->no_fn_stub)
8659     {
8660       if (! elf_hash_table (info)->dynamic_sections_created)
8661         return TRUE;
8662
8663       /* If this symbol is not defined in a regular file, then set
8664          the symbol to the stub location.  This is required to make
8665          function pointers compare as equal between the normal
8666          executable and the shared library.  */
8667       if (!h->def_regular)
8668         {
8669           hmips->needs_lazy_stub = TRUE;
8670           htab->lazy_stub_count++;
8671           return TRUE;
8672         }
8673     }
8674   /* As above, VxWorks requires PLT entries for externally-defined
8675      functions that are only accessed through call relocations.
8676
8677      Both VxWorks and non-VxWorks targets also need PLT entries if there
8678      are static-only relocations against an externally-defined function.
8679      This can technically occur for shared libraries if there are
8680      branches to the symbol, although it is unlikely that this will be
8681      used in practice due to the short ranges involved.  It can occur
8682      for any relative or absolute relocation in executables; in that
8683      case, the PLT entry becomes the function's canonical address.  */
8684   else if (((h->needs_plt && !hmips->no_fn_stub)
8685             || (h->type == STT_FUNC && hmips->has_static_relocs))
8686            && htab->use_plts_and_copy_relocs
8687            && !SYMBOL_CALLS_LOCAL (info, h)
8688            && !(ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
8689                 && h->root.type == bfd_link_hash_undefweak))
8690     {
8691       /* If this is the first symbol to need a PLT entry, allocate room
8692          for the header.  */
8693       if (htab->splt->size == 0)
8694         {
8695           BFD_ASSERT (htab->sgotplt->size == 0);
8696
8697           /* If we're using the PLT additions to the psABI, each PLT
8698              entry is 16 bytes and the PLT0 entry is 32 bytes.
8699              Encourage better cache usage by aligning.  We do this
8700              lazily to avoid pessimizing traditional objects.  */
8701           if (!htab->is_vxworks
8702               && !bfd_set_section_alignment (dynobj, htab->splt, 5))
8703             return FALSE;
8704
8705           /* Make sure that .got.plt is word-aligned.  We do this lazily
8706              for the same reason as above.  */
8707           if (!bfd_set_section_alignment (dynobj, htab->sgotplt,
8708                                           MIPS_ELF_LOG_FILE_ALIGN (dynobj)))
8709             return FALSE;
8710
8711           htab->splt->size += htab->plt_header_size;
8712
8713           /* On non-VxWorks targets, the first two entries in .got.plt
8714              are reserved.  */
8715           if (!htab->is_vxworks)
8716             htab->sgotplt->size
8717               += get_elf_backend_data (dynobj)->got_header_size;
8718
8719           /* On VxWorks, also allocate room for the header's
8720              .rela.plt.unloaded entries.  */
8721           if (htab->is_vxworks && !info->shared)
8722             htab->srelplt2->size += 2 * sizeof (Elf32_External_Rela);
8723         }
8724
8725       /* Assign the next .plt entry to this symbol.  */
8726       h->plt.offset = htab->splt->size;
8727       htab->splt->size += htab->plt_entry_size;
8728
8729       /* If the output file has no definition of the symbol, set the
8730          symbol's value to the address of the stub.  */
8731       if (!info->shared && !h->def_regular)
8732         {
8733           h->root.u.def.section = htab->splt;
8734           h->root.u.def.value = h->plt.offset;
8735           /* For VxWorks, point at the PLT load stub rather than the
8736              lazy resolution stub; this stub will become the canonical
8737              function address.  */
8738           if (htab->is_vxworks)
8739             h->root.u.def.value += 8;
8740         }
8741
8742       /* Make room for the .got.plt entry and the R_MIPS_JUMP_SLOT
8743          relocation.  */
8744       htab->sgotplt->size += MIPS_ELF_GOT_SIZE (dynobj);
8745       htab->srelplt->size += (htab->is_vxworks
8746                               ? MIPS_ELF_RELA_SIZE (dynobj)
8747                               : MIPS_ELF_REL_SIZE (dynobj));
8748
8749       /* Make room for the .rela.plt.unloaded relocations.  */
8750       if (htab->is_vxworks && !info->shared)
8751         htab->srelplt2->size += 3 * sizeof (Elf32_External_Rela);
8752
8753       /* All relocations against this symbol that could have been made
8754          dynamic will now refer to the PLT entry instead.  */
8755       hmips->possibly_dynamic_relocs = 0;
8756
8757       return TRUE;
8758     }
8759
8760   /* If this is a weak symbol, and there is a real definition, the
8761      processor independent code will have arranged for us to see the
8762      real definition first, and we can just use the same value.  */
8763   if (h->u.weakdef != NULL)
8764     {
8765       BFD_ASSERT (h->u.weakdef->root.type == bfd_link_hash_defined
8766                   || h->u.weakdef->root.type == bfd_link_hash_defweak);
8767       h->root.u.def.section = h->u.weakdef->root.u.def.section;
8768       h->root.u.def.value = h->u.weakdef->root.u.def.value;
8769       return TRUE;
8770     }
8771
8772   /* Otherwise, there is nothing further to do for symbols defined
8773      in regular objects.  */
8774   if (h->def_regular)
8775     return TRUE;
8776
8777   /* There's also nothing more to do if we'll convert all relocations
8778      against this symbol into dynamic relocations.  */
8779   if (!hmips->has_static_relocs)
8780     return TRUE;
8781
8782   /* We're now relying on copy relocations.  Complain if we have
8783      some that we can't convert.  */
8784   if (!htab->use_plts_and_copy_relocs || info->shared)
8785     {
8786       (*_bfd_error_handler) (_("non-dynamic relocations refer to "
8787                                "dynamic symbol %s"),
8788                              h->root.root.string);
8789       bfd_set_error (bfd_error_bad_value);
8790       return FALSE;
8791     }
8792
8793   /* We must allocate the symbol in our .dynbss section, which will
8794      become part of the .bss section of the executable.  There will be
8795      an entry for this symbol in the .dynsym section.  The dynamic
8796      object will contain position independent code, so all references
8797      from the dynamic object to this symbol will go through the global
8798      offset table.  The dynamic linker will use the .dynsym entry to
8799      determine the address it must put in the global offset table, so
8800      both the dynamic object and the regular object will refer to the
8801      same memory location for the variable.  */
8802
8803   if ((h->root.u.def.section->flags & SEC_ALLOC) != 0)
8804     {
8805       if (htab->is_vxworks)
8806         htab->srelbss->size += sizeof (Elf32_External_Rela);
8807       else
8808         mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
8809       h->needs_copy = 1;
8810     }
8811
8812   /* All relocations against this symbol that could have been made
8813      dynamic will now refer to the local copy instead.  */
8814   hmips->possibly_dynamic_relocs = 0;
8815
8816   return _bfd_elf_adjust_dynamic_copy (h, htab->sdynbss);
8817 }
8818 \f
8819 /* This function is called after all the input files have been read,
8820    and the input sections have been assigned to output sections.  We
8821    check for any mips16 stub sections that we can discard.  */
8822
8823 bfd_boolean
8824 _bfd_mips_elf_always_size_sections (bfd *output_bfd,
8825                                     struct bfd_link_info *info)
8826 {
8827   asection *ri;
8828   struct mips_elf_link_hash_table *htab;
8829   struct mips_htab_traverse_info hti;
8830
8831   htab = mips_elf_hash_table (info);
8832   BFD_ASSERT (htab != NULL);
8833
8834   /* The .reginfo section has a fixed size.  */
8835   ri = bfd_get_section_by_name (output_bfd, ".reginfo");
8836   if (ri != NULL)
8837     bfd_set_section_size (output_bfd, ri, sizeof (Elf32_External_RegInfo));
8838
8839   hti.info = info;
8840   hti.output_bfd = output_bfd;
8841   hti.error = FALSE;
8842   mips_elf_link_hash_traverse (mips_elf_hash_table (info),
8843                                mips_elf_check_symbols, &hti);
8844   if (hti.error)
8845     return FALSE;
8846
8847   return TRUE;
8848 }
8849
8850 /* If the link uses a GOT, lay it out and work out its size.  */
8851
8852 static bfd_boolean
8853 mips_elf_lay_out_got (bfd *output_bfd, struct bfd_link_info *info)
8854 {
8855   bfd *dynobj;
8856   asection *s;
8857   struct mips_got_info *g;
8858   bfd_size_type loadable_size = 0;
8859   bfd_size_type page_gotno;
8860   bfd *sub;
8861   struct mips_elf_count_tls_arg count_tls_arg;
8862   struct mips_elf_link_hash_table *htab;
8863
8864   htab = mips_elf_hash_table (info);
8865   BFD_ASSERT (htab != NULL);
8866
8867   s = htab->sgot;
8868   if (s == NULL)
8869     return TRUE;
8870
8871   dynobj = elf_hash_table (info)->dynobj;
8872   g = htab->got_info;
8873
8874   /* Allocate room for the reserved entries.  VxWorks always reserves
8875      3 entries; other objects only reserve 2 entries.  */
8876   BFD_ASSERT (g->assigned_gotno == 0);
8877   if (htab->is_vxworks)
8878     htab->reserved_gotno = 3;
8879   else
8880     htab->reserved_gotno = 2;
8881   g->local_gotno += htab->reserved_gotno;
8882   g->assigned_gotno = htab->reserved_gotno;
8883
8884   /* Replace entries for indirect and warning symbols with entries for
8885      the target symbol.  */
8886   if (!mips_elf_resolve_final_got_entries (g))
8887     return FALSE;
8888
8889   /* Count the number of GOT symbols.  */
8890   mips_elf_link_hash_traverse (htab, mips_elf_count_got_symbols, info);
8891
8892   /* Calculate the total loadable size of the output.  That
8893      will give us the maximum number of GOT_PAGE entries
8894      required.  */
8895   for (sub = info->input_bfds; sub; sub = sub->link_next)
8896     {
8897       asection *subsection;
8898
8899       for (subsection = sub->sections;
8900            subsection;
8901            subsection = subsection->next)
8902         {
8903           if ((subsection->flags & SEC_ALLOC) == 0)
8904             continue;
8905           loadable_size += ((subsection->size + 0xf)
8906                             &~ (bfd_size_type) 0xf);
8907         }
8908     }
8909
8910   if (htab->is_vxworks)
8911     /* There's no need to allocate page entries for VxWorks; R_MIPS*_GOT16
8912        relocations against local symbols evaluate to "G", and the EABI does
8913        not include R_MIPS_GOT_PAGE.  */
8914     page_gotno = 0;
8915   else
8916     /* Assume there are two loadable segments consisting of contiguous
8917        sections.  Is 5 enough?  */
8918     page_gotno = (loadable_size >> 16) + 5;
8919
8920   /* Choose the smaller of the two estimates; both are intended to be
8921      conservative.  */
8922   if (page_gotno > g->page_gotno)
8923     page_gotno = g->page_gotno;
8924
8925   g->local_gotno += page_gotno;
8926   s->size += g->local_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
8927   s->size += g->global_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
8928
8929   /* We need to calculate tls_gotno for global symbols at this point
8930      instead of building it up earlier, to avoid doublecounting
8931      entries for one global symbol from multiple input files.  */
8932   count_tls_arg.info = info;
8933   count_tls_arg.needed = 0;
8934   elf_link_hash_traverse (elf_hash_table (info),
8935                           mips_elf_count_global_tls_entries,
8936                           &count_tls_arg);
8937   g->tls_gotno += count_tls_arg.needed;
8938   s->size += g->tls_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
8939
8940   /* VxWorks does not support multiple GOTs.  It initializes $gp to
8941      __GOTT_BASE__[__GOTT_INDEX__], the value of which is set by the
8942      dynamic loader.  */
8943   if (htab->is_vxworks)
8944     {
8945       /* VxWorks executables do not need a GOT.  */
8946       if (info->shared)
8947         {
8948           /* Each VxWorks GOT entry needs an explicit relocation.  */
8949           unsigned int count;
8950
8951           count = g->global_gotno + g->local_gotno - htab->reserved_gotno;
8952           if (count)
8953             mips_elf_allocate_dynamic_relocations (dynobj, info, count);
8954         }
8955     }
8956   else if (s->size > MIPS_ELF_GOT_MAX_SIZE (info))
8957     {
8958       if (!mips_elf_multi_got (output_bfd, info, s, page_gotno))
8959         return FALSE;
8960     }
8961   else
8962     {
8963       struct mips_elf_count_tls_arg arg;
8964
8965       /* Set up TLS entries.  */
8966       g->tls_assigned_gotno = g->global_gotno + g->local_gotno;
8967       htab_traverse (g->got_entries, mips_elf_initialize_tls_index, g);
8968       BFD_ASSERT (g->tls_assigned_gotno
8969                   == g->global_gotno + g->local_gotno + g->tls_gotno);
8970
8971       /* Allocate room for the TLS relocations.  */
8972       arg.info = info;
8973       arg.needed = 0;
8974       htab_traverse (g->got_entries, mips_elf_count_local_tls_relocs, &arg);
8975       elf_link_hash_traverse (elf_hash_table (info),
8976                               mips_elf_count_global_tls_relocs,
8977                               &arg);
8978       if (arg.needed)
8979         mips_elf_allocate_dynamic_relocations (dynobj, info, arg.needed);
8980     }
8981
8982   return TRUE;
8983 }
8984
8985 /* Estimate the size of the .MIPS.stubs section.  */
8986
8987 static void
8988 mips_elf_estimate_stub_size (bfd *output_bfd, struct bfd_link_info *info)
8989 {
8990   struct mips_elf_link_hash_table *htab;
8991   bfd_size_type dynsymcount;
8992
8993   htab = mips_elf_hash_table (info);
8994   BFD_ASSERT (htab != NULL);
8995
8996   if (htab->lazy_stub_count == 0)
8997     return;
8998
8999   /* IRIX rld assumes that a function stub isn't at the end of the .text
9000      section, so add a dummy entry to the end.  */
9001   htab->lazy_stub_count++;
9002
9003   /* Get a worst-case estimate of the number of dynamic symbols needed.
9004      At this point, dynsymcount does not account for section symbols
9005      and count_section_dynsyms may overestimate the number that will
9006      be needed.  */
9007   dynsymcount = (elf_hash_table (info)->dynsymcount
9008                  + count_section_dynsyms (output_bfd, info));
9009
9010   /* Determine the size of one stub entry.  */
9011   htab->function_stub_size = (dynsymcount > 0x10000
9012                               ? MIPS_FUNCTION_STUB_BIG_SIZE
9013                               : MIPS_FUNCTION_STUB_NORMAL_SIZE);
9014
9015   htab->sstubs->size = htab->lazy_stub_count * htab->function_stub_size;
9016 }
9017
9018 /* A mips_elf_link_hash_traverse callback for which DATA points to the
9019    MIPS hash table.  If H needs a traditional MIPS lazy-binding stub,
9020    allocate an entry in the stubs section.  */
9021
9022 static bfd_boolean
9023 mips_elf_allocate_lazy_stub (struct mips_elf_link_hash_entry *h, void **data)
9024 {
9025   struct mips_elf_link_hash_table *htab;
9026
9027   htab = (struct mips_elf_link_hash_table *) data;
9028   if (h->needs_lazy_stub)
9029     {
9030       h->root.root.u.def.section = htab->sstubs;
9031       h->root.root.u.def.value = htab->sstubs->size;
9032       h->root.plt.offset = htab->sstubs->size;
9033       htab->sstubs->size += htab->function_stub_size;
9034     }
9035   return TRUE;
9036 }
9037
9038 /* Allocate offsets in the stubs section to each symbol that needs one.
9039    Set the final size of the .MIPS.stub section.  */
9040
9041 static void
9042 mips_elf_lay_out_lazy_stubs (struct bfd_link_info *info)
9043 {
9044   struct mips_elf_link_hash_table *htab;
9045
9046   htab = mips_elf_hash_table (info);
9047   BFD_ASSERT (htab != NULL);
9048
9049   if (htab->lazy_stub_count == 0)
9050     return;
9051
9052   htab->sstubs->size = 0;
9053   mips_elf_link_hash_traverse (htab, mips_elf_allocate_lazy_stub, htab);
9054   htab->sstubs->size += htab->function_stub_size;
9055   BFD_ASSERT (htab->sstubs->size
9056               == htab->lazy_stub_count * htab->function_stub_size);
9057 }
9058
9059 /* Set the sizes of the dynamic sections.  */
9060
9061 bfd_boolean
9062 _bfd_mips_elf_size_dynamic_sections (bfd *output_bfd,
9063                                      struct bfd_link_info *info)
9064 {
9065   bfd *dynobj;
9066   asection *s, *sreldyn;
9067   bfd_boolean reltext;
9068   struct mips_elf_link_hash_table *htab;
9069
9070   htab = mips_elf_hash_table (info);
9071   BFD_ASSERT (htab != NULL);
9072   dynobj = elf_hash_table (info)->dynobj;
9073   BFD_ASSERT (dynobj != NULL);
9074
9075   if (elf_hash_table (info)->dynamic_sections_created)
9076     {
9077       /* Set the contents of the .interp section to the interpreter.  */
9078       if (info->executable)
9079         {
9080           s = bfd_get_linker_section (dynobj, ".interp");
9081           BFD_ASSERT (s != NULL);
9082           s->size
9083             = strlen (ELF_DYNAMIC_INTERPRETER (output_bfd)) + 1;
9084           s->contents
9085             = (bfd_byte *) ELF_DYNAMIC_INTERPRETER (output_bfd);
9086         }
9087
9088       /* Create a symbol for the PLT, if we know that we are using it.  */
9089       if (htab->splt && htab->splt->size > 0 && htab->root.hplt == NULL)
9090         {
9091           struct elf_link_hash_entry *h;
9092
9093           BFD_ASSERT (htab->use_plts_and_copy_relocs);
9094
9095           h = _bfd_elf_define_linkage_sym (dynobj, info, htab->splt,
9096                                            "_PROCEDURE_LINKAGE_TABLE_");
9097           htab->root.hplt = h;
9098           if (h == NULL)
9099             return FALSE;
9100           h->type = STT_FUNC;
9101         }
9102     }
9103
9104   /* Allocate space for global sym dynamic relocs.  */
9105   elf_link_hash_traverse (&htab->root, allocate_dynrelocs, info);
9106
9107   mips_elf_estimate_stub_size (output_bfd, info);
9108
9109   if (!mips_elf_lay_out_got (output_bfd, info))
9110     return FALSE;
9111
9112   mips_elf_lay_out_lazy_stubs (info);
9113
9114   /* The check_relocs and adjust_dynamic_symbol entry points have
9115      determined the sizes of the various dynamic sections.  Allocate
9116      memory for them.  */
9117   reltext = FALSE;
9118   for (s = dynobj->sections; s != NULL; s = s->next)
9119     {
9120       const char *name;
9121
9122       /* It's OK to base decisions on the section name, because none
9123          of the dynobj section names depend upon the input files.  */
9124       name = bfd_get_section_name (dynobj, s);
9125
9126       if ((s->flags & SEC_LINKER_CREATED) == 0)
9127         continue;
9128
9129       if (CONST_STRNEQ (name, ".rel"))
9130         {
9131           if (s->size != 0)
9132             {
9133               const char *outname;
9134               asection *target;
9135
9136               /* If this relocation section applies to a read only
9137                  section, then we probably need a DT_TEXTREL entry.
9138                  If the relocation section is .rel(a).dyn, we always
9139                  assert a DT_TEXTREL entry rather than testing whether
9140                  there exists a relocation to a read only section or
9141                  not.  */
9142               outname = bfd_get_section_name (output_bfd,
9143                                               s->output_section);
9144               target = bfd_get_section_by_name (output_bfd, outname + 4);
9145               if ((target != NULL
9146                    && (target->flags & SEC_READONLY) != 0
9147                    && (target->flags & SEC_ALLOC) != 0)
9148                   || strcmp (outname, MIPS_ELF_REL_DYN_NAME (info)) == 0)
9149                 reltext = TRUE;
9150
9151               /* We use the reloc_count field as a counter if we need
9152                  to copy relocs into the output file.  */
9153               if (strcmp (name, MIPS_ELF_REL_DYN_NAME (info)) != 0)
9154                 s->reloc_count = 0;
9155
9156               /* If combreloc is enabled, elf_link_sort_relocs() will
9157                  sort relocations, but in a different way than we do,
9158                  and before we're done creating relocations.  Also, it
9159                  will move them around between input sections'
9160                  relocation's contents, so our sorting would be
9161                  broken, so don't let it run.  */
9162               info->combreloc = 0;
9163             }
9164         }
9165       else if (! info->shared
9166                && ! mips_elf_hash_table (info)->use_rld_obj_head
9167                && CONST_STRNEQ (name, ".rld_map"))
9168         {
9169           /* We add a room for __rld_map.  It will be filled in by the
9170              rtld to contain a pointer to the _r_debug structure.  */
9171           s->size += MIPS_ELF_RLD_MAP_SIZE (output_bfd);
9172         }
9173       else if (SGI_COMPAT (output_bfd)
9174                && CONST_STRNEQ (name, ".compact_rel"))
9175         s->size += mips_elf_hash_table (info)->compact_rel_size;
9176       else if (s == htab->splt)
9177         {
9178           /* If the last PLT entry has a branch delay slot, allocate
9179              room for an extra nop to fill the delay slot.  This is
9180              for CPUs without load interlocking.  */
9181           if (! LOAD_INTERLOCKS_P (output_bfd)
9182               && ! htab->is_vxworks && s->size > 0)
9183             s->size += 4;
9184         }
9185       else if (! CONST_STRNEQ (name, ".init")
9186                && s != htab->sgot
9187                && s != htab->sgotplt
9188                && s != htab->sstubs
9189                && s != htab->sdynbss)
9190         {
9191           /* It's not one of our sections, so don't allocate space.  */
9192           continue;
9193         }
9194
9195       if (s->size == 0)
9196         {
9197           s->flags |= SEC_EXCLUDE;
9198           continue;
9199         }
9200
9201       if ((s->flags & SEC_HAS_CONTENTS) == 0)
9202         continue;
9203
9204       /* Allocate memory for the section contents.  */
9205       s->contents = bfd_zalloc (dynobj, s->size);
9206       if (s->contents == NULL)
9207         {
9208           bfd_set_error (bfd_error_no_memory);
9209           return FALSE;
9210         }
9211     }
9212
9213   if (elf_hash_table (info)->dynamic_sections_created)
9214     {
9215       /* Add some entries to the .dynamic section.  We fill in the
9216          values later, in _bfd_mips_elf_finish_dynamic_sections, but we
9217          must add the entries now so that we get the correct size for
9218          the .dynamic section.  */
9219
9220       /* SGI object has the equivalence of DT_DEBUG in the
9221          DT_MIPS_RLD_MAP entry.  This must come first because glibc
9222          only fills in DT_MIPS_RLD_MAP (not DT_DEBUG) and some tools
9223          may only look at the first one they see.  */
9224       if (!info->shared
9225           && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_MAP, 0))
9226         return FALSE;
9227
9228       /* The DT_DEBUG entry may be filled in by the dynamic linker and
9229          used by the debugger.  */
9230       if (info->executable
9231           && !SGI_COMPAT (output_bfd)
9232           && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_DEBUG, 0))
9233         return FALSE;
9234
9235       if (reltext && (SGI_COMPAT (output_bfd) || htab->is_vxworks))
9236         info->flags |= DF_TEXTREL;
9237
9238       if ((info->flags & DF_TEXTREL) != 0)
9239         {
9240           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_TEXTREL, 0))
9241             return FALSE;
9242
9243           /* Clear the DF_TEXTREL flag.  It will be set again if we
9244              write out an actual text relocation; we may not, because
9245              at this point we do not know whether e.g. any .eh_frame
9246              absolute relocations have been converted to PC-relative.  */
9247           info->flags &= ~DF_TEXTREL;
9248         }
9249
9250       if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTGOT, 0))
9251         return FALSE;
9252
9253       sreldyn = mips_elf_rel_dyn_section (info, FALSE);
9254       if (htab->is_vxworks)
9255         {
9256           /* VxWorks uses .rela.dyn instead of .rel.dyn.  It does not
9257              use any of the DT_MIPS_* tags.  */
9258           if (sreldyn && sreldyn->size > 0)
9259             {
9260               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELA, 0))
9261                 return FALSE;
9262
9263               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELASZ, 0))
9264                 return FALSE;
9265
9266               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELAENT, 0))
9267                 return FALSE;
9268             }
9269         }
9270       else
9271         {
9272           if (sreldyn && sreldyn->size > 0)
9273             {
9274               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_REL, 0))
9275                 return FALSE;
9276
9277               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELSZ, 0))
9278                 return FALSE;
9279
9280               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELENT, 0))
9281                 return FALSE;
9282             }
9283
9284           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_VERSION, 0))
9285             return FALSE;
9286
9287           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_FLAGS, 0))
9288             return FALSE;
9289
9290           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_BASE_ADDRESS, 0))
9291             return FALSE;
9292
9293           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_LOCAL_GOTNO, 0))
9294             return FALSE;
9295
9296           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_SYMTABNO, 0))
9297             return FALSE;
9298
9299           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_UNREFEXTNO, 0))
9300             return FALSE;
9301
9302           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_GOTSYM, 0))
9303             return FALSE;
9304
9305           if (IRIX_COMPAT (dynobj) == ict_irix5
9306               && ! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_HIPAGENO, 0))
9307             return FALSE;
9308
9309           if (IRIX_COMPAT (dynobj) == ict_irix6
9310               && (bfd_get_section_by_name
9311                   (output_bfd, MIPS_ELF_OPTIONS_SECTION_NAME (dynobj)))
9312               && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_OPTIONS, 0))
9313             return FALSE;
9314         }
9315       if (htab->splt->size > 0)
9316         {
9317           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTREL, 0))
9318             return FALSE;
9319
9320           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_JMPREL, 0))
9321             return FALSE;
9322
9323           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTRELSZ, 0))
9324             return FALSE;
9325
9326           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_PLTGOT, 0))
9327             return FALSE;
9328         }
9329       if (htab->is_vxworks
9330           && !elf_vxworks_add_dynamic_entries (output_bfd, info))
9331         return FALSE;
9332     }
9333
9334   return TRUE;
9335 }
9336 \f
9337 /* REL is a relocation in INPUT_BFD that is being copied to OUTPUT_BFD.
9338    Adjust its R_ADDEND field so that it is correct for the output file.
9339    LOCAL_SYMS and LOCAL_SECTIONS are arrays of INPUT_BFD's local symbols
9340    and sections respectively; both use symbol indexes.  */
9341
9342 static void
9343 mips_elf_adjust_addend (bfd *output_bfd, struct bfd_link_info *info,
9344                         bfd *input_bfd, Elf_Internal_Sym *local_syms,
9345                         asection **local_sections, Elf_Internal_Rela *rel)
9346 {
9347   unsigned int r_type, r_symndx;
9348   Elf_Internal_Sym *sym;
9349   asection *sec;
9350
9351   if (mips_elf_local_relocation_p (input_bfd, rel, local_sections))
9352     {
9353       r_type = ELF_R_TYPE (output_bfd, rel->r_info);
9354       if (gprel16_reloc_p (r_type)
9355           || r_type == R_MIPS_GPREL32
9356           || literal_reloc_p (r_type))
9357         {
9358           rel->r_addend += _bfd_get_gp_value (input_bfd);
9359           rel->r_addend -= _bfd_get_gp_value (output_bfd);
9360         }
9361
9362       r_symndx = ELF_R_SYM (output_bfd, rel->r_info);
9363       sym = local_syms + r_symndx;
9364
9365       /* Adjust REL's addend to account for section merging.  */
9366       if (!info->relocatable)
9367         {
9368           sec = local_sections[r_symndx];
9369           _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
9370         }
9371
9372       /* This would normally be done by the rela_normal code in elflink.c.  */
9373       if (ELF_ST_TYPE (sym->st_info) == STT_SECTION)
9374         rel->r_addend += local_sections[r_symndx]->output_offset;
9375     }
9376 }
9377
9378 /* Handle relocations against symbols from removed linkonce sections,
9379    or sections discarded by a linker script.  We use this wrapper around
9380    RELOC_AGAINST_DISCARDED_SECTION to handle triplets of compound relocs
9381    on 64-bit ELF targets.  In this case for any relocation handled, which
9382    always be the first in a triplet, the remaining two have to be processed
9383    together with the first, even if they are R_MIPS_NONE.  It is the symbol
9384    index referred by the first reloc that applies to all the three and the
9385    remaining two never refer to an object symbol.  And it is the final
9386    relocation (the last non-null one) that determines the output field of
9387    the whole relocation so retrieve the corresponding howto structure for
9388    the relocatable field to be cleared by RELOC_AGAINST_DISCARDED_SECTION.
9389
9390    Note that RELOC_AGAINST_DISCARDED_SECTION is a macro that uses "continue"
9391    and therefore requires to be pasted in a loop.  It also defines a block
9392    and does not protect any of its arguments, hence the extra brackets.  */
9393
9394 static void
9395 mips_reloc_against_discarded_section (bfd *output_bfd,
9396                                       struct bfd_link_info *info,
9397                                       bfd *input_bfd, asection *input_section,
9398                                       Elf_Internal_Rela **rel,
9399                                       const Elf_Internal_Rela **relend,
9400                                       bfd_boolean rel_reloc,
9401                                       reloc_howto_type *howto,
9402                                       bfd_byte *contents)
9403 {
9404   const struct elf_backend_data *bed = get_elf_backend_data (output_bfd);
9405   int count = bed->s->int_rels_per_ext_rel;
9406   unsigned int r_type;
9407   int i;
9408
9409   for (i = count - 1; i > 0; i--)
9410     {
9411       r_type = ELF_R_TYPE (output_bfd, (*rel)[i].r_info);
9412       if (r_type != R_MIPS_NONE)
9413         {
9414           howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, r_type, !rel_reloc);
9415           break;
9416         }
9417     }
9418   do
9419     {
9420        RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
9421                                         (*rel), count, (*relend),
9422                                         howto, i, contents);
9423     }
9424   while (0);
9425 }
9426
9427 /* Relocate a MIPS ELF section.  */
9428
9429 bfd_boolean
9430 _bfd_mips_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
9431                                 bfd *input_bfd, asection *input_section,
9432                                 bfd_byte *contents, Elf_Internal_Rela *relocs,
9433                                 Elf_Internal_Sym *local_syms,
9434                                 asection **local_sections)
9435 {
9436   Elf_Internal_Rela *rel;
9437   const Elf_Internal_Rela *relend;
9438   bfd_vma addend = 0;
9439   bfd_boolean use_saved_addend_p = FALSE;
9440   const struct elf_backend_data *bed;
9441
9442   bed = get_elf_backend_data (output_bfd);
9443   relend = relocs + input_section->reloc_count * bed->s->int_rels_per_ext_rel;
9444   for (rel = relocs; rel < relend; ++rel)
9445     {
9446       const char *name;
9447       bfd_vma value = 0;
9448       reloc_howto_type *howto;
9449       bfd_boolean cross_mode_jump_p;
9450       /* TRUE if the relocation is a RELA relocation, rather than a
9451          REL relocation.  */
9452       bfd_boolean rela_relocation_p = TRUE;
9453       unsigned int r_type = ELF_R_TYPE (output_bfd, rel->r_info);
9454       const char *msg;
9455       unsigned long r_symndx;
9456       asection *sec;
9457       Elf_Internal_Shdr *symtab_hdr;
9458       struct elf_link_hash_entry *h;
9459       bfd_boolean rel_reloc;
9460
9461       rel_reloc = (NEWABI_P (input_bfd)
9462                    && mips_elf_rel_relocation_p (input_bfd, input_section,
9463                                                  relocs, rel));
9464       /* Find the relocation howto for this relocation.  */
9465       howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, r_type, !rel_reloc);
9466
9467       r_symndx = ELF_R_SYM (input_bfd, rel->r_info);
9468       symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
9469       if (mips_elf_local_relocation_p (input_bfd, rel, local_sections))
9470         {
9471           sec = local_sections[r_symndx];
9472           h = NULL;
9473         }
9474       else
9475         {
9476           unsigned long extsymoff;
9477
9478           extsymoff = 0;
9479           if (!elf_bad_symtab (input_bfd))
9480             extsymoff = symtab_hdr->sh_info;
9481           h = elf_sym_hashes (input_bfd) [r_symndx - extsymoff];
9482           while (h->root.type == bfd_link_hash_indirect
9483                  || h->root.type == bfd_link_hash_warning)
9484             h = (struct elf_link_hash_entry *) h->root.u.i.link;
9485
9486           sec = NULL;
9487           if (h->root.type == bfd_link_hash_defined
9488               || h->root.type == bfd_link_hash_defweak)
9489             sec = h->root.u.def.section;
9490         }
9491
9492       if (sec != NULL && discarded_section (sec))
9493         {
9494           mips_reloc_against_discarded_section (output_bfd, info, input_bfd,
9495                                                 input_section, &rel, &relend,
9496                                                 rel_reloc, howto, contents);
9497           continue;
9498         }
9499
9500       if (r_type == R_MIPS_64 && ! NEWABI_P (input_bfd))
9501         {
9502           /* Some 32-bit code uses R_MIPS_64.  In particular, people use
9503              64-bit code, but make sure all their addresses are in the
9504              lowermost or uppermost 32-bit section of the 64-bit address
9505              space.  Thus, when they use an R_MIPS_64 they mean what is
9506              usually meant by R_MIPS_32, with the exception that the
9507              stored value is sign-extended to 64 bits.  */
9508           howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, R_MIPS_32, FALSE);
9509
9510           /* On big-endian systems, we need to lie about the position
9511              of the reloc.  */
9512           if (bfd_big_endian (input_bfd))
9513             rel->r_offset += 4;
9514         }
9515
9516       if (!use_saved_addend_p)
9517         {
9518           /* If these relocations were originally of the REL variety,
9519              we must pull the addend out of the field that will be
9520              relocated.  Otherwise, we simply use the contents of the
9521              RELA relocation.  */
9522           if (mips_elf_rel_relocation_p (input_bfd, input_section,
9523                                          relocs, rel))
9524             {
9525               rela_relocation_p = FALSE;
9526               addend = mips_elf_read_rel_addend (input_bfd, rel,
9527                                                  howto, contents);
9528               if (hi16_reloc_p (r_type)
9529                   || (got16_reloc_p (r_type)
9530                       && mips_elf_local_relocation_p (input_bfd, rel,
9531                                                       local_sections)))
9532                 {
9533                   if (!mips_elf_add_lo16_rel_addend (input_bfd, rel, relend,
9534                                                      contents, &addend))
9535                     {
9536                       if (h)
9537                         name = h->root.root.string;
9538                       else
9539                         name = bfd_elf_sym_name (input_bfd, symtab_hdr,
9540                                                  local_syms + r_symndx,
9541                                                  sec);
9542                       (*_bfd_error_handler)
9543                         (_("%B: Can't find matching LO16 reloc against `%s' for %s at 0x%lx in section `%A'"),
9544                          input_bfd, input_section, name, howto->name,
9545                          rel->r_offset);
9546                     }
9547                 }
9548               else
9549                 addend <<= howto->rightshift;
9550             }
9551           else
9552             addend = rel->r_addend;
9553           mips_elf_adjust_addend (output_bfd, info, input_bfd,
9554                                   local_syms, local_sections, rel);
9555         }
9556
9557       if (info->relocatable)
9558         {
9559           if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd)
9560               && bfd_big_endian (input_bfd))
9561             rel->r_offset -= 4;
9562
9563           if (!rela_relocation_p && rel->r_addend)
9564             {
9565               addend += rel->r_addend;
9566               if (hi16_reloc_p (r_type) || got16_reloc_p (r_type))
9567                 addend = mips_elf_high (addend);
9568               else if (r_type == R_MIPS_HIGHER)
9569                 addend = mips_elf_higher (addend);
9570               else if (r_type == R_MIPS_HIGHEST)
9571                 addend = mips_elf_highest (addend);
9572               else
9573                 addend >>= howto->rightshift;
9574
9575               /* We use the source mask, rather than the destination
9576                  mask because the place to which we are writing will be
9577                  source of the addend in the final link.  */
9578               addend &= howto->src_mask;
9579
9580               if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd))
9581                 /* See the comment above about using R_MIPS_64 in the 32-bit
9582                    ABI.  Here, we need to update the addend.  It would be
9583                    possible to get away with just using the R_MIPS_32 reloc
9584                    but for endianness.  */
9585                 {
9586                   bfd_vma sign_bits;
9587                   bfd_vma low_bits;
9588                   bfd_vma high_bits;
9589
9590                   if (addend & ((bfd_vma) 1 << 31))
9591 #ifdef BFD64
9592                     sign_bits = ((bfd_vma) 1 << 32) - 1;
9593 #else
9594                     sign_bits = -1;
9595 #endif
9596                   else
9597                     sign_bits = 0;
9598
9599                   /* If we don't know that we have a 64-bit type,
9600                      do two separate stores.  */
9601                   if (bfd_big_endian (input_bfd))
9602                     {
9603                       /* Store the sign-bits (which are most significant)
9604                          first.  */
9605                       low_bits = sign_bits;
9606                       high_bits = addend;
9607                     }
9608                   else
9609                     {
9610                       low_bits = addend;
9611                       high_bits = sign_bits;
9612                     }
9613                   bfd_put_32 (input_bfd, low_bits,
9614                               contents + rel->r_offset);
9615                   bfd_put_32 (input_bfd, high_bits,
9616                               contents + rel->r_offset + 4);
9617                   continue;
9618                 }
9619
9620               if (! mips_elf_perform_relocation (info, howto, rel, addend,
9621                                                  input_bfd, input_section,
9622                                                  contents, FALSE))
9623                 return FALSE;
9624             }
9625
9626           /* Go on to the next relocation.  */
9627           continue;
9628         }
9629
9630       /* In the N32 and 64-bit ABIs there may be multiple consecutive
9631          relocations for the same offset.  In that case we are
9632          supposed to treat the output of each relocation as the addend
9633          for the next.  */
9634       if (rel + 1 < relend
9635           && rel->r_offset == rel[1].r_offset
9636           && ELF_R_TYPE (input_bfd, rel[1].r_info) != R_MIPS_NONE)
9637         use_saved_addend_p = TRUE;
9638       else
9639         use_saved_addend_p = FALSE;
9640
9641       /* Figure out what value we are supposed to relocate.  */
9642       switch (mips_elf_calculate_relocation (output_bfd, input_bfd,
9643                                              input_section, info, rel,
9644                                              addend, howto, local_syms,
9645                                              local_sections, &value,
9646                                              &name, &cross_mode_jump_p,
9647                                              use_saved_addend_p))
9648         {
9649         case bfd_reloc_continue:
9650           /* There's nothing to do.  */
9651           continue;
9652
9653         case bfd_reloc_undefined:
9654           /* mips_elf_calculate_relocation already called the
9655              undefined_symbol callback.  There's no real point in
9656              trying to perform the relocation at this point, so we
9657              just skip ahead to the next relocation.  */
9658           continue;
9659
9660         case bfd_reloc_notsupported:
9661           msg = _("internal error: unsupported relocation error");
9662           info->callbacks->warning
9663             (info, msg, name, input_bfd, input_section, rel->r_offset);
9664           return FALSE;
9665
9666         case bfd_reloc_overflow:
9667           if (use_saved_addend_p)
9668             /* Ignore overflow until we reach the last relocation for
9669                a given location.  */
9670             ;
9671           else
9672             {
9673               struct mips_elf_link_hash_table *htab;
9674
9675               htab = mips_elf_hash_table (info);
9676               BFD_ASSERT (htab != NULL);
9677               BFD_ASSERT (name != NULL);
9678               if (!htab->small_data_overflow_reported
9679                   && (gprel16_reloc_p (howto->type)
9680                       || literal_reloc_p (howto->type)))
9681                 {
9682                   msg = _("small-data section exceeds 64KB;"
9683                           " lower small-data size limit (see option -G)");
9684
9685                   htab->small_data_overflow_reported = TRUE;
9686                   (*info->callbacks->einfo) ("%P: %s\n", msg);
9687                 }
9688               if (! ((*info->callbacks->reloc_overflow)
9689                      (info, NULL, name, howto->name, (bfd_vma) 0,
9690                       input_bfd, input_section, rel->r_offset)))
9691                 return FALSE;
9692             }
9693           break;
9694
9695         case bfd_reloc_ok:
9696           break;
9697
9698         case bfd_reloc_outofrange:
9699           if (jal_reloc_p (howto->type))
9700             {
9701               msg = _("JALX to a non-word-aligned address");
9702               info->callbacks->warning
9703                 (info, msg, name, input_bfd, input_section, rel->r_offset);
9704               return FALSE;
9705             }
9706           /* Fall through.  */
9707
9708         default:
9709           abort ();
9710           break;
9711         }
9712
9713       /* If we've got another relocation for the address, keep going
9714          until we reach the last one.  */
9715       if (use_saved_addend_p)
9716         {
9717           addend = value;
9718           continue;
9719         }
9720
9721       if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd))
9722         /* See the comment above about using R_MIPS_64 in the 32-bit
9723            ABI.  Until now, we've been using the HOWTO for R_MIPS_32;
9724            that calculated the right value.  Now, however, we
9725            sign-extend the 32-bit result to 64-bits, and store it as a
9726            64-bit value.  We are especially generous here in that we
9727            go to extreme lengths to support this usage on systems with
9728            only a 32-bit VMA.  */
9729         {
9730           bfd_vma sign_bits;
9731           bfd_vma low_bits;
9732           bfd_vma high_bits;
9733
9734           if (value & ((bfd_vma) 1 << 31))
9735 #ifdef BFD64
9736             sign_bits = ((bfd_vma) 1 << 32) - 1;
9737 #else
9738             sign_bits = -1;
9739 #endif
9740           else
9741             sign_bits = 0;
9742
9743           /* If we don't know that we have a 64-bit type,
9744              do two separate stores.  */
9745           if (bfd_big_endian (input_bfd))
9746             {
9747               /* Undo what we did above.  */
9748               rel->r_offset -= 4;
9749               /* Store the sign-bits (which are most significant)
9750                  first.  */
9751               low_bits = sign_bits;
9752               high_bits = value;
9753             }
9754           else
9755             {
9756               low_bits = value;
9757               high_bits = sign_bits;
9758             }
9759           bfd_put_32 (input_bfd, low_bits,
9760                       contents + rel->r_offset);
9761           bfd_put_32 (input_bfd, high_bits,
9762                       contents + rel->r_offset + 4);
9763           continue;
9764         }
9765
9766       /* Actually perform the relocation.  */
9767       if (! mips_elf_perform_relocation (info, howto, rel, value,
9768                                          input_bfd, input_section,
9769                                          contents, cross_mode_jump_p))
9770         return FALSE;
9771     }
9772
9773   return TRUE;
9774 }
9775 \f
9776 /* A function that iterates over each entry in la25_stubs and fills
9777    in the code for each one.  DATA points to a mips_htab_traverse_info.  */
9778
9779 static int
9780 mips_elf_create_la25_stub (void **slot, void *data)
9781 {
9782   struct mips_htab_traverse_info *hti;
9783   struct mips_elf_link_hash_table *htab;
9784   struct mips_elf_la25_stub *stub;
9785   asection *s;
9786   bfd_byte *loc;
9787   bfd_vma offset, target, target_high, target_low;
9788
9789   stub = (struct mips_elf_la25_stub *) *slot;
9790   hti = (struct mips_htab_traverse_info *) data;
9791   htab = mips_elf_hash_table (hti->info);
9792   BFD_ASSERT (htab != NULL);
9793
9794   /* Create the section contents, if we haven't already.  */
9795   s = stub->stub_section;
9796   loc = s->contents;
9797   if (loc == NULL)
9798     {
9799       loc = bfd_malloc (s->size);
9800       if (loc == NULL)
9801         {
9802           hti->error = TRUE;
9803           return FALSE;
9804         }
9805       s->contents = loc;
9806     }
9807
9808   /* Work out where in the section this stub should go.  */
9809   offset = stub->offset;
9810
9811   /* Work out the target address.  */
9812   target = mips_elf_get_la25_target (stub, &s);
9813   target += s->output_section->vma + s->output_offset;
9814
9815   target_high = ((target + 0x8000) >> 16) & 0xffff;
9816   target_low = (target & 0xffff);
9817
9818   if (stub->stub_section != htab->strampoline)
9819     {
9820       /* This is a simple LUI/ADDIU stub.  Zero out the beginning
9821          of the section and write the two instructions at the end.  */
9822       memset (loc, 0, offset);
9823       loc += offset;
9824       if (ELF_ST_IS_MICROMIPS (stub->h->root.other))
9825         {
9826           bfd_put_micromips_32 (hti->output_bfd,
9827                                 LA25_LUI_MICROMIPS (target_high),
9828                                 loc);
9829           bfd_put_micromips_32 (hti->output_bfd,
9830                                 LA25_ADDIU_MICROMIPS (target_low),
9831                                 loc + 4);
9832         }
9833       else
9834         {
9835           bfd_put_32 (hti->output_bfd, LA25_LUI (target_high), loc);
9836           bfd_put_32 (hti->output_bfd, LA25_ADDIU (target_low), loc + 4);
9837         }
9838     }
9839   else
9840     {
9841       /* This is trampoline.  */
9842       loc += offset;
9843       if (ELF_ST_IS_MICROMIPS (stub->h->root.other))
9844         {
9845           bfd_put_micromips_32 (hti->output_bfd,
9846                                 LA25_LUI_MICROMIPS (target_high), loc);
9847           bfd_put_micromips_32 (hti->output_bfd,
9848                                 LA25_J_MICROMIPS (target), loc + 4);
9849           bfd_put_micromips_32 (hti->output_bfd,
9850                                 LA25_ADDIU_MICROMIPS (target_low), loc + 8);
9851           bfd_put_32 (hti->output_bfd, 0, loc + 12);
9852         }
9853       else
9854         {
9855           bfd_put_32 (hti->output_bfd, LA25_LUI (target_high), loc);
9856           bfd_put_32 (hti->output_bfd, LA25_J (target), loc + 4);
9857           bfd_put_32 (hti->output_bfd, LA25_ADDIU (target_low), loc + 8);
9858           bfd_put_32 (hti->output_bfd, 0, loc + 12);
9859         }
9860     }
9861   return TRUE;
9862 }
9863
9864 /* If NAME is one of the special IRIX6 symbols defined by the linker,
9865    adjust it appropriately now.  */
9866
9867 static void
9868 mips_elf_irix6_finish_dynamic_symbol (bfd *abfd ATTRIBUTE_UNUSED,
9869                                       const char *name, Elf_Internal_Sym *sym)
9870 {
9871   /* The linker script takes care of providing names and values for
9872      these, but we must place them into the right sections.  */
9873   static const char* const text_section_symbols[] = {
9874     "_ftext",
9875     "_etext",
9876     "__dso_displacement",
9877     "__elf_header",
9878     "__program_header_table",
9879     NULL
9880   };
9881
9882   static const char* const data_section_symbols[] = {
9883     "_fdata",
9884     "_edata",
9885     "_end",
9886     "_fbss",
9887     NULL
9888   };
9889
9890   const char* const *p;
9891   int i;
9892
9893   for (i = 0; i < 2; ++i)
9894     for (p = (i == 0) ? text_section_symbols : data_section_symbols;
9895          *p;
9896          ++p)
9897       if (strcmp (*p, name) == 0)
9898         {
9899           /* All of these symbols are given type STT_SECTION by the
9900              IRIX6 linker.  */
9901           sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
9902           sym->st_other = STO_PROTECTED;
9903
9904           /* The IRIX linker puts these symbols in special sections.  */
9905           if (i == 0)
9906             sym->st_shndx = SHN_MIPS_TEXT;
9907           else
9908             sym->st_shndx = SHN_MIPS_DATA;
9909
9910           break;
9911         }
9912 }
9913
9914 /* Finish up dynamic symbol handling.  We set the contents of various
9915    dynamic sections here.  */
9916
9917 bfd_boolean
9918 _bfd_mips_elf_finish_dynamic_symbol (bfd *output_bfd,
9919                                      struct bfd_link_info *info,
9920                                      struct elf_link_hash_entry *h,
9921                                      Elf_Internal_Sym *sym)
9922 {
9923   bfd *dynobj;
9924   asection *sgot;
9925   struct mips_got_info *g, *gg;
9926   const char *name;
9927   int idx;
9928   struct mips_elf_link_hash_table *htab;
9929   struct mips_elf_link_hash_entry *hmips;
9930
9931   htab = mips_elf_hash_table (info);
9932   BFD_ASSERT (htab != NULL);
9933   dynobj = elf_hash_table (info)->dynobj;
9934   hmips = (struct mips_elf_link_hash_entry *) h;
9935
9936   BFD_ASSERT (!htab->is_vxworks);
9937
9938   if (h->plt.offset != MINUS_ONE && hmips->no_fn_stub)
9939     {
9940       /* We've decided to create a PLT entry for this symbol.  */
9941       bfd_byte *loc;
9942       bfd_vma header_address, plt_index, got_address;
9943       bfd_vma got_address_high, got_address_low, load;
9944       const bfd_vma *plt_entry;
9945
9946       BFD_ASSERT (htab->use_plts_and_copy_relocs);
9947       BFD_ASSERT (h->dynindx != -1);
9948       BFD_ASSERT (htab->splt != NULL);
9949       BFD_ASSERT (h->plt.offset <= htab->splt->size);
9950       BFD_ASSERT (!h->def_regular);
9951
9952       /* Calculate the address of the PLT header.  */
9953       header_address = (htab->splt->output_section->vma
9954                         + htab->splt->output_offset);
9955
9956       /* Calculate the index of the entry.  */
9957       plt_index = ((h->plt.offset - htab->plt_header_size)
9958                    / htab->plt_entry_size);
9959
9960       /* Calculate the address of the .got.plt entry.  */
9961       got_address = (htab->sgotplt->output_section->vma
9962                      + htab->sgotplt->output_offset
9963                      + (2 + plt_index) * MIPS_ELF_GOT_SIZE (dynobj));
9964       got_address_high = ((got_address + 0x8000) >> 16) & 0xffff;
9965       got_address_low = got_address & 0xffff;
9966
9967       /* Initially point the .got.plt entry at the PLT header.  */
9968       loc = (htab->sgotplt->contents
9969              + (2 + plt_index) * MIPS_ELF_GOT_SIZE (dynobj));
9970       if (ABI_64_P (output_bfd))
9971         bfd_put_64 (output_bfd, header_address, loc);
9972       else
9973         bfd_put_32 (output_bfd, header_address, loc);
9974
9975       /* Find out where the .plt entry should go.  */
9976       loc = htab->splt->contents + h->plt.offset;
9977
9978       /* Pick the load opcode.  */
9979       load = MIPS_ELF_LOAD_WORD (output_bfd);
9980
9981       /* Fill in the PLT entry itself.  */
9982       plt_entry = mips_exec_plt_entry;
9983       bfd_put_32 (output_bfd, plt_entry[0] | got_address_high, loc);
9984       bfd_put_32 (output_bfd, plt_entry[1] | got_address_low | load, loc + 4);
9985
9986       if (! LOAD_INTERLOCKS_P (output_bfd))
9987         {
9988           bfd_put_32 (output_bfd, plt_entry[2] | got_address_low, loc + 8);
9989           bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
9990         }
9991       else
9992         {
9993           bfd_put_32 (output_bfd, plt_entry[3], loc + 8);
9994           bfd_put_32 (output_bfd, plt_entry[2] | got_address_low, loc + 12);
9995         }
9996
9997       /* Emit an R_MIPS_JUMP_SLOT relocation against the .got.plt entry.  */
9998       mips_elf_output_dynamic_relocation (output_bfd, htab->srelplt,
9999                                           plt_index, h->dynindx,
10000                                           R_MIPS_JUMP_SLOT, got_address);
10001
10002       /* We distinguish between PLT entries and lazy-binding stubs by
10003          giving the former an st_other value of STO_MIPS_PLT.  Set the
10004          flag and leave the value if there are any relocations in the
10005          binary where pointer equality matters.  */
10006       sym->st_shndx = SHN_UNDEF;
10007       if (h->pointer_equality_needed)
10008         sym->st_other = STO_MIPS_PLT;
10009       else
10010         sym->st_value = 0;
10011     }
10012   else if (h->plt.offset != MINUS_ONE)
10013     {
10014       /* We've decided to create a lazy-binding stub.  */
10015       bfd_byte stub[MIPS_FUNCTION_STUB_BIG_SIZE];
10016
10017       /* This symbol has a stub.  Set it up.  */
10018
10019       BFD_ASSERT (h->dynindx != -1);
10020
10021       BFD_ASSERT ((htab->function_stub_size == MIPS_FUNCTION_STUB_BIG_SIZE)
10022                   || (h->dynindx <= 0xffff));
10023
10024       /* Values up to 2^31 - 1 are allowed.  Larger values would cause
10025          sign extension at runtime in the stub, resulting in a negative
10026          index value.  */
10027       if (h->dynindx & ~0x7fffffff)
10028         return FALSE;
10029
10030       /* Fill the stub.  */
10031       idx = 0;
10032       bfd_put_32 (output_bfd, STUB_LW (output_bfd), stub + idx);
10033       idx += 4;
10034       bfd_put_32 (output_bfd, STUB_MOVE (output_bfd), stub + idx);
10035       idx += 4;
10036       if (htab->function_stub_size == MIPS_FUNCTION_STUB_BIG_SIZE)
10037         {
10038           bfd_put_32 (output_bfd, STUB_LUI ((h->dynindx >> 16) & 0x7fff),
10039                       stub + idx);
10040           idx += 4;
10041         }
10042       bfd_put_32 (output_bfd, STUB_JALR, stub + idx);
10043       idx += 4;
10044
10045       /* If a large stub is not required and sign extension is not a
10046          problem, then use legacy code in the stub.  */
10047       if (htab->function_stub_size == MIPS_FUNCTION_STUB_BIG_SIZE)
10048         bfd_put_32 (output_bfd, STUB_ORI (h->dynindx & 0xffff), stub + idx);
10049       else if (h->dynindx & ~0x7fff)
10050         bfd_put_32 (output_bfd, STUB_LI16U (h->dynindx & 0xffff), stub + idx);
10051       else
10052         bfd_put_32 (output_bfd, STUB_LI16S (output_bfd, h->dynindx),
10053                     stub + idx);
10054
10055       BFD_ASSERT (h->plt.offset <= htab->sstubs->size);
10056       memcpy (htab->sstubs->contents + h->plt.offset,
10057               stub, htab->function_stub_size);
10058
10059       /* Mark the symbol as undefined.  plt.offset != -1 occurs
10060          only for the referenced symbol.  */
10061       sym->st_shndx = SHN_UNDEF;
10062
10063       /* The run-time linker uses the st_value field of the symbol
10064          to reset the global offset table entry for this external
10065          to its stub address when unlinking a shared object.  */
10066       sym->st_value = (htab->sstubs->output_section->vma
10067                        + htab->sstubs->output_offset
10068                        + h->plt.offset);
10069     }
10070
10071   /* If we have a MIPS16 function with a stub, the dynamic symbol must
10072      refer to the stub, since only the stub uses the standard calling
10073      conventions.  */
10074   if (h->dynindx != -1 && hmips->fn_stub != NULL)
10075     {
10076       BFD_ASSERT (hmips->need_fn_stub);
10077       sym->st_value = (hmips->fn_stub->output_section->vma
10078                        + hmips->fn_stub->output_offset);
10079       sym->st_size = hmips->fn_stub->size;
10080       sym->st_other = ELF_ST_VISIBILITY (sym->st_other);
10081     }
10082
10083   BFD_ASSERT (h->dynindx != -1
10084               || h->forced_local);
10085
10086   sgot = htab->sgot;
10087   g = htab->got_info;
10088   BFD_ASSERT (g != NULL);
10089
10090   /* Run through the global symbol table, creating GOT entries for all
10091      the symbols that need them.  */
10092   if (hmips->global_got_area != GGA_NONE)
10093     {
10094       bfd_vma offset;
10095       bfd_vma value;
10096
10097       value = sym->st_value;
10098       offset = mips_elf_global_got_index (dynobj, output_bfd, h,
10099                                           R_MIPS_GOT16, info);
10100       MIPS_ELF_PUT_WORD (output_bfd, value, sgot->contents + offset);
10101     }
10102
10103   if (hmips->global_got_area != GGA_NONE && g->next && h->type != STT_TLS)
10104     {
10105       struct mips_got_entry e, *p;
10106       bfd_vma entry;
10107       bfd_vma offset;
10108
10109       gg = g;
10110
10111       e.abfd = output_bfd;
10112       e.symndx = -1;
10113       e.d.h = hmips;
10114       e.tls_type = 0;
10115
10116       for (g = g->next; g->next != gg; g = g->next)
10117         {
10118           if (g->got_entries
10119               && (p = (struct mips_got_entry *) htab_find (g->got_entries,
10120                                                            &e)))
10121             {
10122               offset = p->gotidx;
10123               if (info->shared
10124                   || (elf_hash_table (info)->dynamic_sections_created
10125                       && p->d.h != NULL
10126                       && p->d.h->root.def_dynamic
10127                       && !p->d.h->root.def_regular))
10128                 {
10129                   /* Create an R_MIPS_REL32 relocation for this entry.  Due to
10130                      the various compatibility problems, it's easier to mock
10131                      up an R_MIPS_32 or R_MIPS_64 relocation and leave
10132                      mips_elf_create_dynamic_relocation to calculate the
10133                      appropriate addend.  */
10134                   Elf_Internal_Rela rel[3];
10135
10136                   memset (rel, 0, sizeof (rel));
10137                   if (ABI_64_P (output_bfd))
10138                     rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_64);
10139                   else
10140                     rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_32);
10141                   rel[0].r_offset = rel[1].r_offset = rel[2].r_offset = offset;
10142
10143                   entry = 0;
10144                   if (! (mips_elf_create_dynamic_relocation
10145                          (output_bfd, info, rel,
10146                           e.d.h, NULL, sym->st_value, &entry, sgot)))
10147                     return FALSE;
10148                 }
10149               else
10150                 entry = sym->st_value;
10151               MIPS_ELF_PUT_WORD (output_bfd, entry, sgot->contents + offset);
10152             }
10153         }
10154     }
10155
10156   /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute.  */
10157   name = h->root.root.string;
10158   if (h == elf_hash_table (info)->hdynamic
10159       || h == elf_hash_table (info)->hgot)
10160     sym->st_shndx = SHN_ABS;
10161   else if (strcmp (name, "_DYNAMIC_LINK") == 0
10162            || strcmp (name, "_DYNAMIC_LINKING") == 0)
10163     {
10164       sym->st_shndx = SHN_ABS;
10165       sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10166       sym->st_value = 1;
10167     }
10168   else if (strcmp (name, "_gp_disp") == 0 && ! NEWABI_P (output_bfd))
10169     {
10170       sym->st_shndx = SHN_ABS;
10171       sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10172       sym->st_value = elf_gp (output_bfd);
10173     }
10174   else if (SGI_COMPAT (output_bfd))
10175     {
10176       if (strcmp (name, mips_elf_dynsym_rtproc_names[0]) == 0
10177           || strcmp (name, mips_elf_dynsym_rtproc_names[1]) == 0)
10178         {
10179           sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10180           sym->st_other = STO_PROTECTED;
10181           sym->st_value = 0;
10182           sym->st_shndx = SHN_MIPS_DATA;
10183         }
10184       else if (strcmp (name, mips_elf_dynsym_rtproc_names[2]) == 0)
10185         {
10186           sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10187           sym->st_other = STO_PROTECTED;
10188           sym->st_value = mips_elf_hash_table (info)->procedure_count;
10189           sym->st_shndx = SHN_ABS;
10190         }
10191       else if (sym->st_shndx != SHN_UNDEF && sym->st_shndx != SHN_ABS)
10192         {
10193           if (h->type == STT_FUNC)
10194             sym->st_shndx = SHN_MIPS_TEXT;
10195           else if (h->type == STT_OBJECT)
10196             sym->st_shndx = SHN_MIPS_DATA;
10197         }
10198     }
10199
10200   /* Emit a copy reloc, if needed.  */
10201   if (h->needs_copy)
10202     {
10203       asection *s;
10204       bfd_vma symval;
10205
10206       BFD_ASSERT (h->dynindx != -1);
10207       BFD_ASSERT (htab->use_plts_and_copy_relocs);
10208
10209       s = mips_elf_rel_dyn_section (info, FALSE);
10210       symval = (h->root.u.def.section->output_section->vma
10211                 + h->root.u.def.section->output_offset
10212                 + h->root.u.def.value);
10213       mips_elf_output_dynamic_relocation (output_bfd, s, s->reloc_count++,
10214                                           h->dynindx, R_MIPS_COPY, symval);
10215     }
10216
10217   /* Handle the IRIX6-specific symbols.  */
10218   if (IRIX_COMPAT (output_bfd) == ict_irix6)
10219     mips_elf_irix6_finish_dynamic_symbol (output_bfd, name, sym);
10220
10221   /* Keep dynamic MIPS16 symbols odd.  This allows the dynamic linker to
10222      treat MIPS16 symbols like any other.  */
10223   if (ELF_ST_IS_MIPS16 (sym->st_other))
10224     {
10225       BFD_ASSERT (sym->st_value & 1);
10226       sym->st_other -= STO_MIPS16;
10227     }
10228
10229   return TRUE;
10230 }
10231
10232 /* Likewise, for VxWorks.  */
10233
10234 bfd_boolean
10235 _bfd_mips_vxworks_finish_dynamic_symbol (bfd *output_bfd,
10236                                          struct bfd_link_info *info,
10237                                          struct elf_link_hash_entry *h,
10238                                          Elf_Internal_Sym *sym)
10239 {
10240   bfd *dynobj;
10241   asection *sgot;
10242   struct mips_got_info *g;
10243   struct mips_elf_link_hash_table *htab;
10244   struct mips_elf_link_hash_entry *hmips;
10245
10246   htab = mips_elf_hash_table (info);
10247   BFD_ASSERT (htab != NULL);
10248   dynobj = elf_hash_table (info)->dynobj;
10249   hmips = (struct mips_elf_link_hash_entry *) h;
10250
10251   if (h->plt.offset != (bfd_vma) -1)
10252     {
10253       bfd_byte *loc;
10254       bfd_vma plt_address, plt_index, got_address, got_offset, branch_offset;
10255       Elf_Internal_Rela rel;
10256       static const bfd_vma *plt_entry;
10257
10258       BFD_ASSERT (h->dynindx != -1);
10259       BFD_ASSERT (htab->splt != NULL);
10260       BFD_ASSERT (h->plt.offset <= htab->splt->size);
10261
10262       /* Calculate the address of the .plt entry.  */
10263       plt_address = (htab->splt->output_section->vma
10264                      + htab->splt->output_offset
10265                      + h->plt.offset);
10266
10267       /* Calculate the index of the entry.  */
10268       plt_index = ((h->plt.offset - htab->plt_header_size)
10269                    / htab->plt_entry_size);
10270
10271       /* Calculate the address of the .got.plt entry.  */
10272       got_address = (htab->sgotplt->output_section->vma
10273                      + htab->sgotplt->output_offset
10274                      + plt_index * 4);
10275
10276       /* Calculate the offset of the .got.plt entry from
10277          _GLOBAL_OFFSET_TABLE_.  */
10278       got_offset = mips_elf_gotplt_index (info, h);
10279
10280       /* Calculate the offset for the branch at the start of the PLT
10281          entry.  The branch jumps to the beginning of .plt.  */
10282       branch_offset = -(h->plt.offset / 4 + 1) & 0xffff;
10283
10284       /* Fill in the initial value of the .got.plt entry.  */
10285       bfd_put_32 (output_bfd, plt_address,
10286                   htab->sgotplt->contents + plt_index * 4);
10287
10288       /* Find out where the .plt entry should go.  */
10289       loc = htab->splt->contents + h->plt.offset;
10290
10291       if (info->shared)
10292         {
10293           plt_entry = mips_vxworks_shared_plt_entry;
10294           bfd_put_32 (output_bfd, plt_entry[0] | branch_offset, loc);
10295           bfd_put_32 (output_bfd, plt_entry[1] | plt_index, loc + 4);
10296         }
10297       else
10298         {
10299           bfd_vma got_address_high, got_address_low;
10300
10301           plt_entry = mips_vxworks_exec_plt_entry;
10302           got_address_high = ((got_address + 0x8000) >> 16) & 0xffff;
10303           got_address_low = got_address & 0xffff;
10304
10305           bfd_put_32 (output_bfd, plt_entry[0] | branch_offset, loc);
10306           bfd_put_32 (output_bfd, plt_entry[1] | plt_index, loc + 4);
10307           bfd_put_32 (output_bfd, plt_entry[2] | got_address_high, loc + 8);
10308           bfd_put_32 (output_bfd, plt_entry[3] | got_address_low, loc + 12);
10309           bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
10310           bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
10311           bfd_put_32 (output_bfd, plt_entry[6], loc + 24);
10312           bfd_put_32 (output_bfd, plt_entry[7], loc + 28);
10313
10314           loc = (htab->srelplt2->contents
10315                  + (plt_index * 3 + 2) * sizeof (Elf32_External_Rela));
10316
10317           /* Emit a relocation for the .got.plt entry.  */
10318           rel.r_offset = got_address;
10319           rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_MIPS_32);
10320           rel.r_addend = h->plt.offset;
10321           bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10322
10323           /* Emit a relocation for the lui of %hi(<.got.plt slot>).  */
10324           loc += sizeof (Elf32_External_Rela);
10325           rel.r_offset = plt_address + 8;
10326           rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
10327           rel.r_addend = got_offset;
10328           bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10329
10330           /* Emit a relocation for the addiu of %lo(<.got.plt slot>).  */
10331           loc += sizeof (Elf32_External_Rela);
10332           rel.r_offset += 4;
10333           rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
10334           bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10335         }
10336
10337       /* Emit an R_MIPS_JUMP_SLOT relocation against the .got.plt entry.  */
10338       loc = htab->srelplt->contents + plt_index * sizeof (Elf32_External_Rela);
10339       rel.r_offset = got_address;
10340       rel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_JUMP_SLOT);
10341       rel.r_addend = 0;
10342       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10343
10344       if (!h->def_regular)
10345         sym->st_shndx = SHN_UNDEF;
10346     }
10347
10348   BFD_ASSERT (h->dynindx != -1 || h->forced_local);
10349
10350   sgot = htab->sgot;
10351   g = htab->got_info;
10352   BFD_ASSERT (g != NULL);
10353
10354   /* See if this symbol has an entry in the GOT.  */
10355   if (hmips->global_got_area != GGA_NONE)
10356     {
10357       bfd_vma offset;
10358       Elf_Internal_Rela outrel;
10359       bfd_byte *loc;
10360       asection *s;
10361
10362       /* Install the symbol value in the GOT.   */
10363       offset = mips_elf_global_got_index (dynobj, output_bfd, h,
10364                                           R_MIPS_GOT16, info);
10365       MIPS_ELF_PUT_WORD (output_bfd, sym->st_value, sgot->contents + offset);
10366
10367       /* Add a dynamic relocation for it.  */
10368       s = mips_elf_rel_dyn_section (info, FALSE);
10369       loc = s->contents + (s->reloc_count++ * sizeof (Elf32_External_Rela));
10370       outrel.r_offset = (sgot->output_section->vma
10371                          + sgot->output_offset
10372                          + offset);
10373       outrel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_32);
10374       outrel.r_addend = 0;
10375       bfd_elf32_swap_reloca_out (dynobj, &outrel, loc);
10376     }
10377
10378   /* Emit a copy reloc, if needed.  */
10379   if (h->needs_copy)
10380     {
10381       Elf_Internal_Rela rel;
10382
10383       BFD_ASSERT (h->dynindx != -1);
10384
10385       rel.r_offset = (h->root.u.def.section->output_section->vma
10386                       + h->root.u.def.section->output_offset
10387                       + h->root.u.def.value);
10388       rel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_COPY);
10389       rel.r_addend = 0;
10390       bfd_elf32_swap_reloca_out (output_bfd, &rel,
10391                                  htab->srelbss->contents
10392                                  + (htab->srelbss->reloc_count
10393                                     * sizeof (Elf32_External_Rela)));
10394       ++htab->srelbss->reloc_count;
10395     }
10396
10397   /* If this is a mips16/microMIPS symbol, force the value to be even.  */
10398   if (ELF_ST_IS_COMPRESSED (sym->st_other))
10399     sym->st_value &= ~1;
10400
10401   return TRUE;
10402 }
10403
10404 /* Write out a plt0 entry to the beginning of .plt.  */
10405
10406 static void
10407 mips_finish_exec_plt (bfd *output_bfd, struct bfd_link_info *info)
10408 {
10409   bfd_byte *loc;
10410   bfd_vma gotplt_value, gotplt_value_high, gotplt_value_low;
10411   static const bfd_vma *plt_entry;
10412   struct mips_elf_link_hash_table *htab;
10413
10414   htab = mips_elf_hash_table (info);
10415   BFD_ASSERT (htab != NULL);
10416
10417   if (ABI_64_P (output_bfd))
10418     plt_entry = mips_n64_exec_plt0_entry;
10419   else if (ABI_N32_P (output_bfd))
10420     plt_entry = mips_n32_exec_plt0_entry;
10421   else
10422     plt_entry = mips_o32_exec_plt0_entry;
10423
10424   /* Calculate the value of .got.plt.  */
10425   gotplt_value = (htab->sgotplt->output_section->vma
10426                   + htab->sgotplt->output_offset);
10427   gotplt_value_high = ((gotplt_value + 0x8000) >> 16) & 0xffff;
10428   gotplt_value_low = gotplt_value & 0xffff;
10429
10430   /* The PLT sequence is not safe for N64 if .got.plt's address can
10431      not be loaded in two instructions.  */
10432   BFD_ASSERT ((gotplt_value & ~(bfd_vma) 0x7fffffff) == 0
10433               || ~(gotplt_value | 0x7fffffff) == 0);
10434
10435   /* Install the PLT header.  */
10436   loc = htab->splt->contents;
10437   bfd_put_32 (output_bfd, plt_entry[0] | gotplt_value_high, loc);
10438   bfd_put_32 (output_bfd, plt_entry[1] | gotplt_value_low, loc + 4);
10439   bfd_put_32 (output_bfd, plt_entry[2] | gotplt_value_low, loc + 8);
10440   bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
10441   bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
10442   bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
10443   bfd_put_32 (output_bfd, plt_entry[6], loc + 24);
10444   bfd_put_32 (output_bfd, plt_entry[7], loc + 28);
10445 }
10446
10447 /* Install the PLT header for a VxWorks executable and finalize the
10448    contents of .rela.plt.unloaded.  */
10449
10450 static void
10451 mips_vxworks_finish_exec_plt (bfd *output_bfd, struct bfd_link_info *info)
10452 {
10453   Elf_Internal_Rela rela;
10454   bfd_byte *loc;
10455   bfd_vma got_value, got_value_high, got_value_low, plt_address;
10456   static const bfd_vma *plt_entry;
10457   struct mips_elf_link_hash_table *htab;
10458
10459   htab = mips_elf_hash_table (info);
10460   BFD_ASSERT (htab != NULL);
10461
10462   plt_entry = mips_vxworks_exec_plt0_entry;
10463
10464   /* Calculate the value of _GLOBAL_OFFSET_TABLE_.  */
10465   got_value = (htab->root.hgot->root.u.def.section->output_section->vma
10466                + htab->root.hgot->root.u.def.section->output_offset
10467                + htab->root.hgot->root.u.def.value);
10468
10469   got_value_high = ((got_value + 0x8000) >> 16) & 0xffff;
10470   got_value_low = got_value & 0xffff;
10471
10472   /* Calculate the address of the PLT header.  */
10473   plt_address = htab->splt->output_section->vma + htab->splt->output_offset;
10474
10475   /* Install the PLT header.  */
10476   loc = htab->splt->contents;
10477   bfd_put_32 (output_bfd, plt_entry[0] | got_value_high, loc);
10478   bfd_put_32 (output_bfd, plt_entry[1] | got_value_low, loc + 4);
10479   bfd_put_32 (output_bfd, plt_entry[2], loc + 8);
10480   bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
10481   bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
10482   bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
10483
10484   /* Output the relocation for the lui of %hi(_GLOBAL_OFFSET_TABLE_).  */
10485   loc = htab->srelplt2->contents;
10486   rela.r_offset = plt_address;
10487   rela.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
10488   rela.r_addend = 0;
10489   bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
10490   loc += sizeof (Elf32_External_Rela);
10491
10492   /* Output the relocation for the following addiu of
10493      %lo(_GLOBAL_OFFSET_TABLE_).  */
10494   rela.r_offset += 4;
10495   rela.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
10496   bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
10497   loc += sizeof (Elf32_External_Rela);
10498
10499   /* Fix up the remaining relocations.  They may have the wrong
10500      symbol index for _G_O_T_ or _P_L_T_ depending on the order
10501      in which symbols were output.  */
10502   while (loc < htab->srelplt2->contents + htab->srelplt2->size)
10503     {
10504       Elf_Internal_Rela rel;
10505
10506       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
10507       rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_MIPS_32);
10508       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10509       loc += sizeof (Elf32_External_Rela);
10510
10511       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
10512       rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
10513       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10514       loc += sizeof (Elf32_External_Rela);
10515
10516       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
10517       rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
10518       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10519       loc += sizeof (Elf32_External_Rela);
10520     }
10521 }
10522
10523 /* Install the PLT header for a VxWorks shared library.  */
10524
10525 static void
10526 mips_vxworks_finish_shared_plt (bfd *output_bfd, struct bfd_link_info *info)
10527 {
10528   unsigned int i;
10529   struct mips_elf_link_hash_table *htab;
10530
10531   htab = mips_elf_hash_table (info);
10532   BFD_ASSERT (htab != NULL);
10533
10534   /* We just need to copy the entry byte-by-byte.  */
10535   for (i = 0; i < ARRAY_SIZE (mips_vxworks_shared_plt0_entry); i++)
10536     bfd_put_32 (output_bfd, mips_vxworks_shared_plt0_entry[i],
10537                 htab->splt->contents + i * 4);
10538 }
10539
10540 /* Finish up the dynamic sections.  */
10541
10542 bfd_boolean
10543 _bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd,
10544                                        struct bfd_link_info *info)
10545 {
10546   bfd *dynobj;
10547   asection *sdyn;
10548   asection *sgot;
10549   struct mips_got_info *gg, *g;
10550   struct mips_elf_link_hash_table *htab;
10551
10552   htab = mips_elf_hash_table (info);
10553   BFD_ASSERT (htab != NULL);
10554
10555   dynobj = elf_hash_table (info)->dynobj;
10556
10557   sdyn = bfd_get_linker_section (dynobj, ".dynamic");
10558
10559   sgot = htab->sgot;
10560   gg = htab->got_info;
10561
10562   if (elf_hash_table (info)->dynamic_sections_created)
10563     {
10564       bfd_byte *b;
10565       int dyn_to_skip = 0, dyn_skipped = 0;
10566
10567       BFD_ASSERT (sdyn != NULL);
10568       BFD_ASSERT (gg != NULL);
10569
10570       g = mips_elf_got_for_ibfd (gg, output_bfd);
10571       BFD_ASSERT (g != NULL);
10572
10573       for (b = sdyn->contents;
10574            b < sdyn->contents + sdyn->size;
10575            b += MIPS_ELF_DYN_SIZE (dynobj))
10576         {
10577           Elf_Internal_Dyn dyn;
10578           const char *name;
10579           size_t elemsize;
10580           asection *s;
10581           bfd_boolean swap_out_p;
10582
10583           /* Read in the current dynamic entry.  */
10584           (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
10585
10586           /* Assume that we're going to modify it and write it out.  */
10587           swap_out_p = TRUE;
10588
10589           switch (dyn.d_tag)
10590             {
10591             case DT_RELENT:
10592               dyn.d_un.d_val = MIPS_ELF_REL_SIZE (dynobj);
10593               break;
10594
10595             case DT_RELAENT:
10596               BFD_ASSERT (htab->is_vxworks);
10597               dyn.d_un.d_val = MIPS_ELF_RELA_SIZE (dynobj);
10598               break;
10599
10600             case DT_STRSZ:
10601               /* Rewrite DT_STRSZ.  */
10602               dyn.d_un.d_val =
10603                 _bfd_elf_strtab_size (elf_hash_table (info)->dynstr);
10604               break;
10605
10606             case DT_PLTGOT:
10607               s = htab->sgot;
10608               dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
10609               break;
10610
10611             case DT_MIPS_PLTGOT:
10612               s = htab->sgotplt;
10613               dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
10614               break;
10615
10616             case DT_MIPS_RLD_VERSION:
10617               dyn.d_un.d_val = 1; /* XXX */
10618               break;
10619
10620             case DT_MIPS_FLAGS:
10621               dyn.d_un.d_val = RHF_NOTPOT; /* XXX */
10622               break;
10623
10624             case DT_MIPS_TIME_STAMP:
10625               {
10626                 time_t t;
10627                 time (&t);
10628                 dyn.d_un.d_val = t;
10629               }
10630               break;
10631
10632             case DT_MIPS_ICHECKSUM:
10633               /* XXX FIXME: */
10634               swap_out_p = FALSE;
10635               break;
10636
10637             case DT_MIPS_IVERSION:
10638               /* XXX FIXME: */
10639               swap_out_p = FALSE;
10640               break;
10641
10642             case DT_MIPS_BASE_ADDRESS:
10643               s = output_bfd->sections;
10644               BFD_ASSERT (s != NULL);
10645               dyn.d_un.d_ptr = s->vma & ~(bfd_vma) 0xffff;
10646               break;
10647
10648             case DT_MIPS_LOCAL_GOTNO:
10649               dyn.d_un.d_val = g->local_gotno;
10650               break;
10651
10652             case DT_MIPS_UNREFEXTNO:
10653               /* The index into the dynamic symbol table which is the
10654                  entry of the first external symbol that is not
10655                  referenced within the same object.  */
10656               dyn.d_un.d_val = bfd_count_sections (output_bfd) + 1;
10657               break;
10658
10659             case DT_MIPS_GOTSYM:
10660               if (gg->global_gotsym)
10661                 {
10662                   dyn.d_un.d_val = gg->global_gotsym->dynindx;
10663                   break;
10664                 }
10665               /* In case if we don't have global got symbols we default
10666                  to setting DT_MIPS_GOTSYM to the same value as
10667                  DT_MIPS_SYMTABNO, so we just fall through.  */
10668
10669             case DT_MIPS_SYMTABNO:
10670               name = ".dynsym";
10671               elemsize = MIPS_ELF_SYM_SIZE (output_bfd);
10672               s = bfd_get_section_by_name (output_bfd, name);
10673               BFD_ASSERT (s != NULL);
10674
10675               dyn.d_un.d_val = s->size / elemsize;
10676               break;
10677
10678             case DT_MIPS_HIPAGENO:
10679               dyn.d_un.d_val = g->local_gotno - htab->reserved_gotno;
10680               break;
10681
10682             case DT_MIPS_RLD_MAP:
10683               {
10684                 struct elf_link_hash_entry *h;
10685                 h = mips_elf_hash_table (info)->rld_symbol;
10686                 if (!h)
10687                   {
10688                     dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
10689                     swap_out_p = FALSE;
10690                     break;
10691                   }
10692                 s = h->root.u.def.section;
10693                 dyn.d_un.d_ptr = (s->output_section->vma + s->output_offset
10694                                   + h->root.u.def.value);
10695               }
10696               break;
10697
10698             case DT_MIPS_OPTIONS:
10699               s = (bfd_get_section_by_name
10700                    (output_bfd, MIPS_ELF_OPTIONS_SECTION_NAME (output_bfd)));
10701               dyn.d_un.d_ptr = s->vma;
10702               break;
10703
10704             case DT_RELASZ:
10705               BFD_ASSERT (htab->is_vxworks);
10706               /* The count does not include the JUMP_SLOT relocations.  */
10707               if (htab->srelplt)
10708                 dyn.d_un.d_val -= htab->srelplt->size;
10709               break;
10710
10711             case DT_PLTREL:
10712               BFD_ASSERT (htab->use_plts_and_copy_relocs);
10713               if (htab->is_vxworks)
10714                 dyn.d_un.d_val = DT_RELA;
10715               else
10716                 dyn.d_un.d_val = DT_REL;
10717               break;
10718
10719             case DT_PLTRELSZ:
10720               BFD_ASSERT (htab->use_plts_and_copy_relocs);
10721               dyn.d_un.d_val = htab->srelplt->size;
10722               break;
10723
10724             case DT_JMPREL:
10725               BFD_ASSERT (htab->use_plts_and_copy_relocs);
10726               dyn.d_un.d_ptr = (htab->srelplt->output_section->vma
10727                                 + htab->srelplt->output_offset);
10728               break;
10729
10730             case DT_TEXTREL:
10731               /* If we didn't need any text relocations after all, delete
10732                  the dynamic tag.  */
10733               if (!(info->flags & DF_TEXTREL))
10734                 {
10735                   dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
10736                   swap_out_p = FALSE;
10737                 }
10738               break;
10739
10740             case DT_FLAGS:
10741               /* If we didn't need any text relocations after all, clear
10742                  DF_TEXTREL from DT_FLAGS.  */
10743               if (!(info->flags & DF_TEXTREL))
10744                 dyn.d_un.d_val &= ~DF_TEXTREL;
10745               else
10746                 swap_out_p = FALSE;
10747               break;
10748
10749             default:
10750               swap_out_p = FALSE;
10751               if (htab->is_vxworks
10752                   && elf_vxworks_finish_dynamic_entry (output_bfd, &dyn))
10753                 swap_out_p = TRUE;
10754               break;
10755             }
10756
10757           if (swap_out_p || dyn_skipped)
10758             (*get_elf_backend_data (dynobj)->s->swap_dyn_out)
10759               (dynobj, &dyn, b - dyn_skipped);
10760
10761           if (dyn_to_skip)
10762             {
10763               dyn_skipped += dyn_to_skip;
10764               dyn_to_skip = 0;
10765             }
10766         }
10767
10768       /* Wipe out any trailing entries if we shifted down a dynamic tag.  */
10769       if (dyn_skipped > 0)
10770         memset (b - dyn_skipped, 0, dyn_skipped);
10771     }
10772
10773   if (sgot != NULL && sgot->size > 0
10774       && !bfd_is_abs_section (sgot->output_section))
10775     {
10776       if (htab->is_vxworks)
10777         {
10778           /* The first entry of the global offset table points to the
10779              ".dynamic" section.  The second is initialized by the
10780              loader and contains the shared library identifier.
10781              The third is also initialized by the loader and points
10782              to the lazy resolution stub.  */
10783           MIPS_ELF_PUT_WORD (output_bfd,
10784                              sdyn->output_offset + sdyn->output_section->vma,
10785                              sgot->contents);
10786           MIPS_ELF_PUT_WORD (output_bfd, 0,
10787                              sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd));
10788           MIPS_ELF_PUT_WORD (output_bfd, 0,
10789                              sgot->contents
10790                              + 2 * MIPS_ELF_GOT_SIZE (output_bfd));
10791         }
10792       else
10793         {
10794           /* The first entry of the global offset table will be filled at
10795              runtime. The second entry will be used by some runtime loaders.
10796              This isn't the case of IRIX rld.  */
10797           MIPS_ELF_PUT_WORD (output_bfd, (bfd_vma) 0, sgot->contents);
10798           MIPS_ELF_PUT_WORD (output_bfd, MIPS_ELF_GNU_GOT1_MASK (output_bfd),
10799                              sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd));
10800         }
10801
10802       elf_section_data (sgot->output_section)->this_hdr.sh_entsize
10803          = MIPS_ELF_GOT_SIZE (output_bfd);
10804     }
10805
10806   /* Generate dynamic relocations for the non-primary gots.  */
10807   if (gg != NULL && gg->next)
10808     {
10809       Elf_Internal_Rela rel[3];
10810       bfd_vma addend = 0;
10811
10812       memset (rel, 0, sizeof (rel));
10813       rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_REL32);
10814
10815       for (g = gg->next; g->next != gg; g = g->next)
10816         {
10817           bfd_vma got_index = g->next->local_gotno + g->next->global_gotno
10818             + g->next->tls_gotno;
10819
10820           MIPS_ELF_PUT_WORD (output_bfd, 0, sgot->contents
10821                              + got_index++ * MIPS_ELF_GOT_SIZE (output_bfd));
10822           MIPS_ELF_PUT_WORD (output_bfd, MIPS_ELF_GNU_GOT1_MASK (output_bfd),
10823                              sgot->contents
10824                              + got_index++ * MIPS_ELF_GOT_SIZE (output_bfd));
10825
10826           if (! info->shared)
10827             continue;
10828
10829           while (got_index < g->assigned_gotno)
10830             {
10831               rel[0].r_offset = rel[1].r_offset = rel[2].r_offset
10832                 = got_index++ * MIPS_ELF_GOT_SIZE (output_bfd);
10833               if (!(mips_elf_create_dynamic_relocation
10834                     (output_bfd, info, rel, NULL,
10835                      bfd_abs_section_ptr,
10836                      0, &addend, sgot)))
10837                 return FALSE;
10838               BFD_ASSERT (addend == 0);
10839             }
10840         }
10841     }
10842
10843   /* The generation of dynamic relocations for the non-primary gots
10844      adds more dynamic relocations.  We cannot count them until
10845      here.  */
10846
10847   if (elf_hash_table (info)->dynamic_sections_created)
10848     {
10849       bfd_byte *b;
10850       bfd_boolean swap_out_p;
10851
10852       BFD_ASSERT (sdyn != NULL);
10853
10854       for (b = sdyn->contents;
10855            b < sdyn->contents + sdyn->size;
10856            b += MIPS_ELF_DYN_SIZE (dynobj))
10857         {
10858           Elf_Internal_Dyn dyn;
10859           asection *s;
10860
10861           /* Read in the current dynamic entry.  */
10862           (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
10863
10864           /* Assume that we're going to modify it and write it out.  */
10865           swap_out_p = TRUE;
10866
10867           switch (dyn.d_tag)
10868             {
10869             case DT_RELSZ:
10870               /* Reduce DT_RELSZ to account for any relocations we
10871                  decided not to make.  This is for the n64 irix rld,
10872                  which doesn't seem to apply any relocations if there
10873                  are trailing null entries.  */
10874               s = mips_elf_rel_dyn_section (info, FALSE);
10875               dyn.d_un.d_val = (s->reloc_count
10876                                 * (ABI_64_P (output_bfd)
10877                                    ? sizeof (Elf64_Mips_External_Rel)
10878                                    : sizeof (Elf32_External_Rel)));
10879               /* Adjust the section size too.  Tools like the prelinker
10880                  can reasonably expect the values to the same.  */
10881               elf_section_data (s->output_section)->this_hdr.sh_size
10882                 = dyn.d_un.d_val;
10883               break;
10884
10885             default:
10886               swap_out_p = FALSE;
10887               break;
10888             }
10889
10890           if (swap_out_p)
10891             (*get_elf_backend_data (dynobj)->s->swap_dyn_out)
10892               (dynobj, &dyn, b);
10893         }
10894     }
10895
10896   {
10897     asection *s;
10898     Elf32_compact_rel cpt;
10899
10900     if (SGI_COMPAT (output_bfd))
10901       {
10902         /* Write .compact_rel section out.  */
10903         s = bfd_get_linker_section (dynobj, ".compact_rel");
10904         if (s != NULL)
10905           {
10906             cpt.id1 = 1;
10907             cpt.num = s->reloc_count;
10908             cpt.id2 = 2;
10909             cpt.offset = (s->output_section->filepos
10910                           + sizeof (Elf32_External_compact_rel));
10911             cpt.reserved0 = 0;
10912             cpt.reserved1 = 0;
10913             bfd_elf32_swap_compact_rel_out (output_bfd, &cpt,
10914                                             ((Elf32_External_compact_rel *)
10915                                              s->contents));
10916
10917             /* Clean up a dummy stub function entry in .text.  */
10918             if (htab->sstubs != NULL)
10919               {
10920                 file_ptr dummy_offset;
10921
10922                 BFD_ASSERT (htab->sstubs->size >= htab->function_stub_size);
10923                 dummy_offset = htab->sstubs->size - htab->function_stub_size;
10924                 memset (htab->sstubs->contents + dummy_offset, 0,
10925                         htab->function_stub_size);
10926               }
10927           }
10928       }
10929
10930     /* The psABI says that the dynamic relocations must be sorted in
10931        increasing order of r_symndx.  The VxWorks EABI doesn't require
10932        this, and because the code below handles REL rather than RELA
10933        relocations, using it for VxWorks would be outright harmful.  */
10934     if (!htab->is_vxworks)
10935       {
10936         s = mips_elf_rel_dyn_section (info, FALSE);
10937         if (s != NULL
10938             && s->size > (bfd_vma)2 * MIPS_ELF_REL_SIZE (output_bfd))
10939           {
10940             reldyn_sorting_bfd = output_bfd;
10941
10942             if (ABI_64_P (output_bfd))
10943               qsort ((Elf64_External_Rel *) s->contents + 1,
10944                      s->reloc_count - 1, sizeof (Elf64_Mips_External_Rel),
10945                      sort_dynamic_relocs_64);
10946             else
10947               qsort ((Elf32_External_Rel *) s->contents + 1,
10948                      s->reloc_count - 1, sizeof (Elf32_External_Rel),
10949                      sort_dynamic_relocs);
10950           }
10951       }
10952   }
10953
10954   if (htab->splt && htab->splt->size > 0)
10955     {
10956       if (htab->is_vxworks)
10957         {
10958           if (info->shared)
10959             mips_vxworks_finish_shared_plt (output_bfd, info);
10960           else
10961             mips_vxworks_finish_exec_plt (output_bfd, info);
10962         }
10963       else
10964         {
10965           BFD_ASSERT (!info->shared);
10966           mips_finish_exec_plt (output_bfd, info);
10967         }
10968     }
10969   return TRUE;
10970 }
10971
10972
10973 /* Set ABFD's EF_MIPS_ARCH and EF_MIPS_MACH flags.  */
10974
10975 static void
10976 mips_set_isa_flags (bfd *abfd)
10977 {
10978   flagword val;
10979
10980   switch (bfd_get_mach (abfd))
10981     {
10982     default:
10983     case bfd_mach_mips3000:
10984       val = E_MIPS_ARCH_1;
10985       break;
10986
10987     case bfd_mach_mips3900:
10988       val = E_MIPS_ARCH_1 | E_MIPS_MACH_3900;
10989       break;
10990
10991     case bfd_mach_mips6000:
10992       val = E_MIPS_ARCH_2;
10993       break;
10994
10995     case bfd_mach_mips4000:
10996     case bfd_mach_mips4300:
10997     case bfd_mach_mips4400:
10998     case bfd_mach_mips4600:
10999       val = E_MIPS_ARCH_3;
11000       break;
11001
11002     case bfd_mach_mips4010:
11003       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4010;
11004       break;
11005
11006     case bfd_mach_mips4100:
11007       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4100;
11008       break;
11009
11010     case bfd_mach_mips4111:
11011       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4111;
11012       break;
11013
11014     case bfd_mach_mips4120:
11015       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4120;
11016       break;
11017
11018     case bfd_mach_mips4650:
11019       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4650;
11020       break;
11021
11022     case bfd_mach_mips5400:
11023       val = E_MIPS_ARCH_4 | E_MIPS_MACH_5400;
11024       break;
11025
11026     case bfd_mach_mips5500:
11027       val = E_MIPS_ARCH_4 | E_MIPS_MACH_5500;
11028       break;
11029
11030     case bfd_mach_mips5900:
11031       val = E_MIPS_ARCH_3 | E_MIPS_MACH_5900;
11032       break;
11033
11034     case bfd_mach_mips9000:
11035       val = E_MIPS_ARCH_4 | E_MIPS_MACH_9000;
11036       break;
11037
11038     case bfd_mach_mips5000:
11039     case bfd_mach_mips7000:
11040     case bfd_mach_mips8000:
11041     case bfd_mach_mips10000:
11042     case bfd_mach_mips12000:
11043     case bfd_mach_mips14000:
11044     case bfd_mach_mips16000:
11045       val = E_MIPS_ARCH_4;
11046       break;
11047
11048     case bfd_mach_mips5:
11049       val = E_MIPS_ARCH_5;
11050       break;
11051
11052     case bfd_mach_mips_loongson_2e:
11053       val = E_MIPS_ARCH_3 | E_MIPS_MACH_LS2E;
11054       break;
11055
11056     case bfd_mach_mips_loongson_2f:
11057       val = E_MIPS_ARCH_3 | E_MIPS_MACH_LS2F;
11058       break;
11059
11060     case bfd_mach_mips_sb1:
11061       val = E_MIPS_ARCH_64 | E_MIPS_MACH_SB1;
11062       break;
11063
11064     case bfd_mach_mips_loongson_3a:
11065       val = E_MIPS_ARCH_64 | E_MIPS_MACH_LS3A;
11066       break;
11067
11068     case bfd_mach_mips_octeon:
11069     case bfd_mach_mips_octeonp:
11070       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON;
11071       break;
11072
11073     case bfd_mach_mips_xlr:
11074       val = E_MIPS_ARCH_64 | E_MIPS_MACH_XLR;
11075       break;
11076
11077     case bfd_mach_mips_octeon2:
11078       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON2;
11079       break;
11080
11081     case bfd_mach_mipsisa32:
11082       val = E_MIPS_ARCH_32;
11083       break;
11084
11085     case bfd_mach_mipsisa64:
11086       val = E_MIPS_ARCH_64;
11087       break;
11088
11089     case bfd_mach_mipsisa32r2:
11090       val = E_MIPS_ARCH_32R2;
11091       break;
11092
11093     case bfd_mach_mipsisa64r2:
11094       val = E_MIPS_ARCH_64R2;
11095       break;
11096     }
11097   elf_elfheader (abfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH);
11098   elf_elfheader (abfd)->e_flags |= val;
11099
11100 }
11101
11102
11103 /* The final processing done just before writing out a MIPS ELF object
11104    file.  This gets the MIPS architecture right based on the machine
11105    number.  This is used by both the 32-bit and the 64-bit ABI.  */
11106
11107 void
11108 _bfd_mips_elf_final_write_processing (bfd *abfd,
11109                                       bfd_boolean linker ATTRIBUTE_UNUSED)
11110 {
11111   unsigned int i;
11112   Elf_Internal_Shdr **hdrpp;
11113   const char *name;
11114   asection *sec;
11115
11116   /* Keep the existing EF_MIPS_MACH and EF_MIPS_ARCH flags if the former
11117      is nonzero.  This is for compatibility with old objects, which used
11118      a combination of a 32-bit EF_MIPS_ARCH and a 64-bit EF_MIPS_MACH.  */
11119   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == 0)
11120     mips_set_isa_flags (abfd);
11121
11122   /* Set the sh_info field for .gptab sections and other appropriate
11123      info for each special section.  */
11124   for (i = 1, hdrpp = elf_elfsections (abfd) + 1;
11125        i < elf_numsections (abfd);
11126        i++, hdrpp++)
11127     {
11128       switch ((*hdrpp)->sh_type)
11129         {
11130         case SHT_MIPS_MSYM:
11131         case SHT_MIPS_LIBLIST:
11132           sec = bfd_get_section_by_name (abfd, ".dynstr");
11133           if (sec != NULL)
11134             (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
11135           break;
11136
11137         case SHT_MIPS_GPTAB:
11138           BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
11139           name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
11140           BFD_ASSERT (name != NULL
11141                       && CONST_STRNEQ (name, ".gptab."));
11142           sec = bfd_get_section_by_name (abfd, name + sizeof ".gptab" - 1);
11143           BFD_ASSERT (sec != NULL);
11144           (*hdrpp)->sh_info = elf_section_data (sec)->this_idx;
11145           break;
11146
11147         case SHT_MIPS_CONTENT:
11148           BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
11149           name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
11150           BFD_ASSERT (name != NULL
11151                       && CONST_STRNEQ (name, ".MIPS.content"));
11152           sec = bfd_get_section_by_name (abfd,
11153                                          name + sizeof ".MIPS.content" - 1);
11154           BFD_ASSERT (sec != NULL);
11155           (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
11156           break;
11157
11158         case SHT_MIPS_SYMBOL_LIB:
11159           sec = bfd_get_section_by_name (abfd, ".dynsym");
11160           if (sec != NULL)
11161             (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
11162           sec = bfd_get_section_by_name (abfd, ".liblist");
11163           if (sec != NULL)
11164             (*hdrpp)->sh_info = elf_section_data (sec)->this_idx;
11165           break;
11166
11167         case SHT_MIPS_EVENTS:
11168           BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
11169           name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
11170           BFD_ASSERT (name != NULL);
11171           if (CONST_STRNEQ (name, ".MIPS.events"))
11172             sec = bfd_get_section_by_name (abfd,
11173                                            name + sizeof ".MIPS.events" - 1);
11174           else
11175             {
11176               BFD_ASSERT (CONST_STRNEQ (name, ".MIPS.post_rel"));
11177               sec = bfd_get_section_by_name (abfd,
11178                                              (name
11179                                               + sizeof ".MIPS.post_rel" - 1));
11180             }
11181           BFD_ASSERT (sec != NULL);
11182           (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
11183           break;
11184
11185         }
11186     }
11187 }
11188 \f
11189 /* When creating an IRIX5 executable, we need REGINFO and RTPROC
11190    segments.  */
11191
11192 int
11193 _bfd_mips_elf_additional_program_headers (bfd *abfd,
11194                                           struct bfd_link_info *info ATTRIBUTE_UNUSED)
11195 {
11196   asection *s;
11197   int ret = 0;
11198
11199   /* See if we need a PT_MIPS_REGINFO segment.  */
11200   s = bfd_get_section_by_name (abfd, ".reginfo");
11201   if (s && (s->flags & SEC_LOAD))
11202     ++ret;
11203
11204   /* See if we need a PT_MIPS_OPTIONS segment.  */
11205   if (IRIX_COMPAT (abfd) == ict_irix6
11206       && bfd_get_section_by_name (abfd,
11207                                   MIPS_ELF_OPTIONS_SECTION_NAME (abfd)))
11208     ++ret;
11209
11210   /* See if we need a PT_MIPS_RTPROC segment.  */
11211   if (IRIX_COMPAT (abfd) == ict_irix5
11212       && bfd_get_section_by_name (abfd, ".dynamic")
11213       && bfd_get_section_by_name (abfd, ".mdebug"))
11214     ++ret;
11215
11216   /* Allocate a PT_NULL header in dynamic objects.  See
11217      _bfd_mips_elf_modify_segment_map for details.  */
11218   if (!SGI_COMPAT (abfd)
11219       && bfd_get_section_by_name (abfd, ".dynamic"))
11220     ++ret;
11221
11222   return ret;
11223 }
11224
11225 /* Modify the segment map for an IRIX5 executable.  */
11226
11227 bfd_boolean
11228 _bfd_mips_elf_modify_segment_map (bfd *abfd,
11229                                   struct bfd_link_info *info)
11230 {
11231   asection *s;
11232   struct elf_segment_map *m, **pm;
11233   bfd_size_type amt;
11234
11235   /* If there is a .reginfo section, we need a PT_MIPS_REGINFO
11236      segment.  */
11237   s = bfd_get_section_by_name (abfd, ".reginfo");
11238   if (s != NULL && (s->flags & SEC_LOAD) != 0)
11239     {
11240       for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
11241         if (m->p_type == PT_MIPS_REGINFO)
11242           break;
11243       if (m == NULL)
11244         {
11245           amt = sizeof *m;
11246           m = bfd_zalloc (abfd, amt);
11247           if (m == NULL)
11248             return FALSE;
11249
11250           m->p_type = PT_MIPS_REGINFO;
11251           m->count = 1;
11252           m->sections[0] = s;
11253
11254           /* We want to put it after the PHDR and INTERP segments.  */
11255           pm = &elf_tdata (abfd)->segment_map;
11256           while (*pm != NULL
11257                  && ((*pm)->p_type == PT_PHDR
11258                      || (*pm)->p_type == PT_INTERP))
11259             pm = &(*pm)->next;
11260
11261           m->next = *pm;
11262           *pm = m;
11263         }
11264     }
11265
11266   /* For IRIX 6, we don't have .mdebug sections, nor does anything but
11267      .dynamic end up in PT_DYNAMIC.  However, we do have to insert a
11268      PT_MIPS_OPTIONS segment immediately following the program header
11269      table.  */
11270   if (NEWABI_P (abfd)
11271       /* On non-IRIX6 new abi, we'll have already created a segment
11272          for this section, so don't create another.  I'm not sure this
11273          is not also the case for IRIX 6, but I can't test it right
11274          now.  */
11275       && IRIX_COMPAT (abfd) == ict_irix6)
11276     {
11277       for (s = abfd->sections; s; s = s->next)
11278         if (elf_section_data (s)->this_hdr.sh_type == SHT_MIPS_OPTIONS)
11279           break;
11280
11281       if (s)
11282         {
11283           struct elf_segment_map *options_segment;
11284
11285           pm = &elf_tdata (abfd)->segment_map;
11286           while (*pm != NULL
11287                  && ((*pm)->p_type == PT_PHDR
11288                      || (*pm)->p_type == PT_INTERP))
11289             pm = &(*pm)->next;
11290
11291           if (*pm == NULL || (*pm)->p_type != PT_MIPS_OPTIONS)
11292             {
11293               amt = sizeof (struct elf_segment_map);
11294               options_segment = bfd_zalloc (abfd, amt);
11295               options_segment->next = *pm;
11296               options_segment->p_type = PT_MIPS_OPTIONS;
11297               options_segment->p_flags = PF_R;
11298               options_segment->p_flags_valid = TRUE;
11299               options_segment->count = 1;
11300               options_segment->sections[0] = s;
11301               *pm = options_segment;
11302             }
11303         }
11304     }
11305   else
11306     {
11307       if (IRIX_COMPAT (abfd) == ict_irix5)
11308         {
11309           /* If there are .dynamic and .mdebug sections, we make a room
11310              for the RTPROC header.  FIXME: Rewrite without section names.  */
11311           if (bfd_get_section_by_name (abfd, ".interp") == NULL
11312               && bfd_get_section_by_name (abfd, ".dynamic") != NULL
11313               && bfd_get_section_by_name (abfd, ".mdebug") != NULL)
11314             {
11315               for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
11316                 if (m->p_type == PT_MIPS_RTPROC)
11317                   break;
11318               if (m == NULL)
11319                 {
11320                   amt = sizeof *m;
11321                   m = bfd_zalloc (abfd, amt);
11322                   if (m == NULL)
11323                     return FALSE;
11324
11325                   m->p_type = PT_MIPS_RTPROC;
11326
11327                   s = bfd_get_section_by_name (abfd, ".rtproc");
11328                   if (s == NULL)
11329                     {
11330                       m->count = 0;
11331                       m->p_flags = 0;
11332                       m->p_flags_valid = 1;
11333                     }
11334                   else
11335                     {
11336                       m->count = 1;
11337                       m->sections[0] = s;
11338                     }
11339
11340                   /* We want to put it after the DYNAMIC segment.  */
11341                   pm = &elf_tdata (abfd)->segment_map;
11342                   while (*pm != NULL && (*pm)->p_type != PT_DYNAMIC)
11343                     pm = &(*pm)->next;
11344                   if (*pm != NULL)
11345                     pm = &(*pm)->next;
11346
11347                   m->next = *pm;
11348                   *pm = m;
11349                 }
11350             }
11351         }
11352       /* On IRIX5, the PT_DYNAMIC segment includes the .dynamic,
11353          .dynstr, .dynsym, and .hash sections, and everything in
11354          between.  */
11355       for (pm = &elf_tdata (abfd)->segment_map; *pm != NULL;
11356            pm = &(*pm)->next)
11357         if ((*pm)->p_type == PT_DYNAMIC)
11358           break;
11359       m = *pm;
11360       if (m != NULL && IRIX_COMPAT (abfd) == ict_none)
11361         {
11362           /* For a normal mips executable the permissions for the PT_DYNAMIC
11363              segment are read, write and execute. We do that here since
11364              the code in elf.c sets only the read permission. This matters
11365              sometimes for the dynamic linker.  */
11366           if (bfd_get_section_by_name (abfd, ".dynamic") != NULL)
11367             {
11368               m->p_flags = PF_R | PF_W | PF_X;
11369               m->p_flags_valid = 1;
11370             }
11371         }
11372       /* GNU/Linux binaries do not need the extended PT_DYNAMIC section.
11373          glibc's dynamic linker has traditionally derived the number of
11374          tags from the p_filesz field, and sometimes allocates stack
11375          arrays of that size.  An overly-big PT_DYNAMIC segment can
11376          be actively harmful in such cases.  Making PT_DYNAMIC contain
11377          other sections can also make life hard for the prelinker,
11378          which might move one of the other sections to a different
11379          PT_LOAD segment.  */
11380       if (SGI_COMPAT (abfd)
11381           && m != NULL
11382           && m->count == 1
11383           && strcmp (m->sections[0]->name, ".dynamic") == 0)
11384         {
11385           static const char *sec_names[] =
11386           {
11387             ".dynamic", ".dynstr", ".dynsym", ".hash"
11388           };
11389           bfd_vma low, high;
11390           unsigned int i, c;
11391           struct elf_segment_map *n;
11392
11393           low = ~(bfd_vma) 0;
11394           high = 0;
11395           for (i = 0; i < sizeof sec_names / sizeof sec_names[0]; i++)
11396             {
11397               s = bfd_get_section_by_name (abfd, sec_names[i]);
11398               if (s != NULL && (s->flags & SEC_LOAD) != 0)
11399                 {
11400                   bfd_size_type sz;
11401
11402                   if (low > s->vma)
11403                     low = s->vma;
11404                   sz = s->size;
11405                   if (high < s->vma + sz)
11406                     high = s->vma + sz;
11407                 }
11408             }
11409
11410           c = 0;
11411           for (s = abfd->sections; s != NULL; s = s->next)
11412             if ((s->flags & SEC_LOAD) != 0
11413                 && s->vma >= low
11414                 && s->vma + s->size <= high)
11415               ++c;
11416
11417           amt = sizeof *n + (bfd_size_type) (c - 1) * sizeof (asection *);
11418           n = bfd_zalloc (abfd, amt);
11419           if (n == NULL)
11420             return FALSE;
11421           *n = *m;
11422           n->count = c;
11423
11424           i = 0;
11425           for (s = abfd->sections; s != NULL; s = s->next)
11426             {
11427               if ((s->flags & SEC_LOAD) != 0
11428                   && s->vma >= low
11429                   && s->vma + s->size <= high)
11430                 {
11431                   n->sections[i] = s;
11432                   ++i;
11433                 }
11434             }
11435
11436           *pm = n;
11437         }
11438     }
11439
11440   /* Allocate a spare program header in dynamic objects so that tools
11441      like the prelinker can add an extra PT_LOAD entry.
11442
11443      If the prelinker needs to make room for a new PT_LOAD entry, its
11444      standard procedure is to move the first (read-only) sections into
11445      the new (writable) segment.  However, the MIPS ABI requires
11446      .dynamic to be in a read-only segment, and the section will often
11447      start within sizeof (ElfNN_Phdr) bytes of the last program header.
11448
11449      Although the prelinker could in principle move .dynamic to a
11450      writable segment, it seems better to allocate a spare program
11451      header instead, and avoid the need to move any sections.
11452      There is a long tradition of allocating spare dynamic tags,
11453      so allocating a spare program header seems like a natural
11454      extension.
11455
11456      If INFO is NULL, we may be copying an already prelinked binary
11457      with objcopy or strip, so do not add this header.  */
11458   if (info != NULL
11459       && !SGI_COMPAT (abfd)
11460       && bfd_get_section_by_name (abfd, ".dynamic"))
11461     {
11462       for (pm = &elf_tdata (abfd)->segment_map; *pm != NULL; pm = &(*pm)->next)
11463         if ((*pm)->p_type == PT_NULL)
11464           break;
11465       if (*pm == NULL)
11466         {
11467           m = bfd_zalloc (abfd, sizeof (*m));
11468           if (m == NULL)
11469             return FALSE;
11470
11471           m->p_type = PT_NULL;
11472           *pm = m;
11473         }
11474     }
11475
11476   return TRUE;
11477 }
11478 \f
11479 /* Return the section that should be marked against GC for a given
11480    relocation.  */
11481
11482 asection *
11483 _bfd_mips_elf_gc_mark_hook (asection *sec,
11484                             struct bfd_link_info *info,
11485                             Elf_Internal_Rela *rel,
11486                             struct elf_link_hash_entry *h,
11487                             Elf_Internal_Sym *sym)
11488 {
11489   /* ??? Do mips16 stub sections need to be handled special?  */
11490
11491   if (h != NULL)
11492     switch (ELF_R_TYPE (sec->owner, rel->r_info))
11493       {
11494       case R_MIPS_GNU_VTINHERIT:
11495       case R_MIPS_GNU_VTENTRY:
11496         return NULL;
11497       }
11498
11499   return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
11500 }
11501
11502 /* Update the got entry reference counts for the section being removed.  */
11503
11504 bfd_boolean
11505 _bfd_mips_elf_gc_sweep_hook (bfd *abfd ATTRIBUTE_UNUSED,
11506                              struct bfd_link_info *info ATTRIBUTE_UNUSED,
11507                              asection *sec ATTRIBUTE_UNUSED,
11508                              const Elf_Internal_Rela *relocs ATTRIBUTE_UNUSED)
11509 {
11510 #if 0
11511   Elf_Internal_Shdr *symtab_hdr;
11512   struct elf_link_hash_entry **sym_hashes;
11513   bfd_signed_vma *local_got_refcounts;
11514   const Elf_Internal_Rela *rel, *relend;
11515   unsigned long r_symndx;
11516   struct elf_link_hash_entry *h;
11517
11518   if (info->relocatable)
11519     return TRUE;
11520
11521   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
11522   sym_hashes = elf_sym_hashes (abfd);
11523   local_got_refcounts = elf_local_got_refcounts (abfd);
11524
11525   relend = relocs + sec->reloc_count;
11526   for (rel = relocs; rel < relend; rel++)
11527     switch (ELF_R_TYPE (abfd, rel->r_info))
11528       {
11529       case R_MIPS16_GOT16:
11530       case R_MIPS16_CALL16:
11531       case R_MIPS_GOT16:
11532       case R_MIPS_CALL16:
11533       case R_MIPS_CALL_HI16:
11534       case R_MIPS_CALL_LO16:
11535       case R_MIPS_GOT_HI16:
11536       case R_MIPS_GOT_LO16:
11537       case R_MIPS_GOT_DISP:
11538       case R_MIPS_GOT_PAGE:
11539       case R_MIPS_GOT_OFST:
11540       case R_MICROMIPS_GOT16:
11541       case R_MICROMIPS_CALL16:
11542       case R_MICROMIPS_CALL_HI16:
11543       case R_MICROMIPS_CALL_LO16:
11544       case R_MICROMIPS_GOT_HI16:
11545       case R_MICROMIPS_GOT_LO16:
11546       case R_MICROMIPS_GOT_DISP:
11547       case R_MICROMIPS_GOT_PAGE:
11548       case R_MICROMIPS_GOT_OFST:
11549         /* ??? It would seem that the existing MIPS code does no sort
11550            of reference counting or whatnot on its GOT and PLT entries,
11551            so it is not possible to garbage collect them at this time.  */
11552         break;
11553
11554       default:
11555         break;
11556       }
11557 #endif
11558
11559   return TRUE;
11560 }
11561 \f
11562 /* Copy data from a MIPS ELF indirect symbol to its direct symbol,
11563    hiding the old indirect symbol.  Process additional relocation
11564    information.  Also called for weakdefs, in which case we just let
11565    _bfd_elf_link_hash_copy_indirect copy the flags for us.  */
11566
11567 void
11568 _bfd_mips_elf_copy_indirect_symbol (struct bfd_link_info *info,
11569                                     struct elf_link_hash_entry *dir,
11570                                     struct elf_link_hash_entry *ind)
11571 {
11572   struct mips_elf_link_hash_entry *dirmips, *indmips;
11573
11574   _bfd_elf_link_hash_copy_indirect (info, dir, ind);
11575
11576   dirmips = (struct mips_elf_link_hash_entry *) dir;
11577   indmips = (struct mips_elf_link_hash_entry *) ind;
11578   /* Any absolute non-dynamic relocations against an indirect or weak
11579      definition will be against the target symbol.  */
11580   if (indmips->has_static_relocs)
11581     dirmips->has_static_relocs = TRUE;
11582
11583   if (ind->root.type != bfd_link_hash_indirect)
11584     return;
11585
11586   dirmips->possibly_dynamic_relocs += indmips->possibly_dynamic_relocs;
11587   if (indmips->readonly_reloc)
11588     dirmips->readonly_reloc = TRUE;
11589   if (indmips->no_fn_stub)
11590     dirmips->no_fn_stub = TRUE;
11591   if (indmips->fn_stub)
11592     {
11593       dirmips->fn_stub = indmips->fn_stub;
11594       indmips->fn_stub = NULL;
11595     }
11596   if (indmips->need_fn_stub)
11597     {
11598       dirmips->need_fn_stub = TRUE;
11599       indmips->need_fn_stub = FALSE;
11600     }
11601   if (indmips->call_stub)
11602     {
11603       dirmips->call_stub = indmips->call_stub;
11604       indmips->call_stub = NULL;
11605     }
11606   if (indmips->call_fp_stub)
11607     {
11608       dirmips->call_fp_stub = indmips->call_fp_stub;
11609       indmips->call_fp_stub = NULL;
11610     }
11611   if (indmips->global_got_area < dirmips->global_got_area)
11612     dirmips->global_got_area = indmips->global_got_area;
11613   if (indmips->global_got_area < GGA_NONE)
11614     indmips->global_got_area = GGA_NONE;
11615   if (indmips->has_nonpic_branches)
11616     dirmips->has_nonpic_branches = TRUE;
11617
11618   if (dirmips->tls_type == 0)
11619     dirmips->tls_type = indmips->tls_type;
11620 }
11621 \f
11622 #define PDR_SIZE 32
11623
11624 bfd_boolean
11625 _bfd_mips_elf_discard_info (bfd *abfd, struct elf_reloc_cookie *cookie,
11626                             struct bfd_link_info *info)
11627 {
11628   asection *o;
11629   bfd_boolean ret = FALSE;
11630   unsigned char *tdata;
11631   size_t i, skip;
11632
11633   o = bfd_get_section_by_name (abfd, ".pdr");
11634   if (! o)
11635     return FALSE;
11636   if (o->size == 0)
11637     return FALSE;
11638   if (o->size % PDR_SIZE != 0)
11639     return FALSE;
11640   if (o->output_section != NULL
11641       && bfd_is_abs_section (o->output_section))
11642     return FALSE;
11643
11644   tdata = bfd_zmalloc (o->size / PDR_SIZE);
11645   if (! tdata)
11646     return FALSE;
11647
11648   cookie->rels = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
11649                                             info->keep_memory);
11650   if (!cookie->rels)
11651     {
11652       free (tdata);
11653       return FALSE;
11654     }
11655
11656   cookie->rel = cookie->rels;
11657   cookie->relend = cookie->rels + o->reloc_count;
11658
11659   for (i = 0, skip = 0; i < o->size / PDR_SIZE; i ++)
11660     {
11661       if (bfd_elf_reloc_symbol_deleted_p (i * PDR_SIZE, cookie))
11662         {
11663           tdata[i] = 1;
11664           skip ++;
11665         }
11666     }
11667
11668   if (skip != 0)
11669     {
11670       mips_elf_section_data (o)->u.tdata = tdata;
11671       o->size -= skip * PDR_SIZE;
11672       ret = TRUE;
11673     }
11674   else
11675     free (tdata);
11676
11677   if (! info->keep_memory)
11678     free (cookie->rels);
11679
11680   return ret;
11681 }
11682
11683 bfd_boolean
11684 _bfd_mips_elf_ignore_discarded_relocs (asection *sec)
11685 {
11686   if (strcmp (sec->name, ".pdr") == 0)
11687     return TRUE;
11688   return FALSE;
11689 }
11690
11691 bfd_boolean
11692 _bfd_mips_elf_write_section (bfd *output_bfd,
11693                              struct bfd_link_info *link_info ATTRIBUTE_UNUSED,
11694                              asection *sec, bfd_byte *contents)
11695 {
11696   bfd_byte *to, *from, *end;
11697   int i;
11698
11699   if (strcmp (sec->name, ".pdr") != 0)
11700     return FALSE;
11701
11702   if (mips_elf_section_data (sec)->u.tdata == NULL)
11703     return FALSE;
11704
11705   to = contents;
11706   end = contents + sec->size;
11707   for (from = contents, i = 0;
11708        from < end;
11709        from += PDR_SIZE, i++)
11710     {
11711       if ((mips_elf_section_data (sec)->u.tdata)[i] == 1)
11712         continue;
11713       if (to != from)
11714         memcpy (to, from, PDR_SIZE);
11715       to += PDR_SIZE;
11716     }
11717   bfd_set_section_contents (output_bfd, sec->output_section, contents,
11718                             sec->output_offset, sec->size);
11719   return TRUE;
11720 }
11721 \f
11722 /* microMIPS code retains local labels for linker relaxation.  Omit them
11723    from output by default for clarity.  */
11724
11725 bfd_boolean
11726 _bfd_mips_elf_is_target_special_symbol (bfd *abfd, asymbol *sym)
11727 {
11728   return _bfd_elf_is_local_label_name (abfd, sym->name);
11729 }
11730
11731 /* MIPS ELF uses a special find_nearest_line routine in order the
11732    handle the ECOFF debugging information.  */
11733
11734 struct mips_elf_find_line
11735 {
11736   struct ecoff_debug_info d;
11737   struct ecoff_find_line i;
11738 };
11739
11740 bfd_boolean
11741 _bfd_mips_elf_find_nearest_line (bfd *abfd, asection *section,
11742                                  asymbol **symbols, bfd_vma offset,
11743                                  const char **filename_ptr,
11744                                  const char **functionname_ptr,
11745                                  unsigned int *line_ptr)
11746 {
11747   asection *msec;
11748
11749   if (_bfd_dwarf1_find_nearest_line (abfd, section, symbols, offset,
11750                                      filename_ptr, functionname_ptr,
11751                                      line_ptr))
11752     return TRUE;
11753
11754   if (_bfd_dwarf2_find_nearest_line (abfd, dwarf_debug_sections,
11755                                      section, symbols, offset,
11756                                      filename_ptr, functionname_ptr,
11757                                      line_ptr, NULL, ABI_64_P (abfd) ? 8 : 0,
11758                                      &elf_tdata (abfd)->dwarf2_find_line_info))
11759     return TRUE;
11760
11761   msec = bfd_get_section_by_name (abfd, ".mdebug");
11762   if (msec != NULL)
11763     {
11764       flagword origflags;
11765       struct mips_elf_find_line *fi;
11766       const struct ecoff_debug_swap * const swap =
11767         get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
11768
11769       /* If we are called during a link, mips_elf_final_link may have
11770          cleared the SEC_HAS_CONTENTS field.  We force it back on here
11771          if appropriate (which it normally will be).  */
11772       origflags = msec->flags;
11773       if (elf_section_data (msec)->this_hdr.sh_type != SHT_NOBITS)
11774         msec->flags |= SEC_HAS_CONTENTS;
11775
11776       fi = elf_tdata (abfd)->find_line_info;
11777       if (fi == NULL)
11778         {
11779           bfd_size_type external_fdr_size;
11780           char *fraw_src;
11781           char *fraw_end;
11782           struct fdr *fdr_ptr;
11783           bfd_size_type amt = sizeof (struct mips_elf_find_line);
11784
11785           fi = bfd_zalloc (abfd, amt);
11786           if (fi == NULL)
11787             {
11788               msec->flags = origflags;
11789               return FALSE;
11790             }
11791
11792           if (! _bfd_mips_elf_read_ecoff_info (abfd, msec, &fi->d))
11793             {
11794               msec->flags = origflags;
11795               return FALSE;
11796             }
11797
11798           /* Swap in the FDR information.  */
11799           amt = fi->d.symbolic_header.ifdMax * sizeof (struct fdr);
11800           fi->d.fdr = bfd_alloc (abfd, amt);
11801           if (fi->d.fdr == NULL)
11802             {
11803               msec->flags = origflags;
11804               return FALSE;
11805             }
11806           external_fdr_size = swap->external_fdr_size;
11807           fdr_ptr = fi->d.fdr;
11808           fraw_src = (char *) fi->d.external_fdr;
11809           fraw_end = (fraw_src
11810                       + fi->d.symbolic_header.ifdMax * external_fdr_size);
11811           for (; fraw_src < fraw_end; fraw_src += external_fdr_size, fdr_ptr++)
11812             (*swap->swap_fdr_in) (abfd, fraw_src, fdr_ptr);
11813
11814           elf_tdata (abfd)->find_line_info = fi;
11815
11816           /* Note that we don't bother to ever free this information.
11817              find_nearest_line is either called all the time, as in
11818              objdump -l, so the information should be saved, or it is
11819              rarely called, as in ld error messages, so the memory
11820              wasted is unimportant.  Still, it would probably be a
11821              good idea for free_cached_info to throw it away.  */
11822         }
11823
11824       if (_bfd_ecoff_locate_line (abfd, section, offset, &fi->d, swap,
11825                                   &fi->i, filename_ptr, functionname_ptr,
11826                                   line_ptr))
11827         {
11828           msec->flags = origflags;
11829           return TRUE;
11830         }
11831
11832       msec->flags = origflags;
11833     }
11834
11835   /* Fall back on the generic ELF find_nearest_line routine.  */
11836
11837   return _bfd_elf_find_nearest_line (abfd, section, symbols, offset,
11838                                      filename_ptr, functionname_ptr,
11839                                      line_ptr);
11840 }
11841
11842 bfd_boolean
11843 _bfd_mips_elf_find_inliner_info (bfd *abfd,
11844                                  const char **filename_ptr,
11845                                  const char **functionname_ptr,
11846                                  unsigned int *line_ptr)
11847 {
11848   bfd_boolean found;
11849   found = _bfd_dwarf2_find_inliner_info (abfd, filename_ptr,
11850                                          functionname_ptr, line_ptr,
11851                                          & elf_tdata (abfd)->dwarf2_find_line_info);
11852   return found;
11853 }
11854
11855 \f
11856 /* When are writing out the .options or .MIPS.options section,
11857    remember the bytes we are writing out, so that we can install the
11858    GP value in the section_processing routine.  */
11859
11860 bfd_boolean
11861 _bfd_mips_elf_set_section_contents (bfd *abfd, sec_ptr section,
11862                                     const void *location,
11863                                     file_ptr offset, bfd_size_type count)
11864 {
11865   if (MIPS_ELF_OPTIONS_SECTION_NAME_P (section->name))
11866     {
11867       bfd_byte *c;
11868
11869       if (elf_section_data (section) == NULL)
11870         {
11871           bfd_size_type amt = sizeof (struct bfd_elf_section_data);
11872           section->used_by_bfd = bfd_zalloc (abfd, amt);
11873           if (elf_section_data (section) == NULL)
11874             return FALSE;
11875         }
11876       c = mips_elf_section_data (section)->u.tdata;
11877       if (c == NULL)
11878         {
11879           c = bfd_zalloc (abfd, section->size);
11880           if (c == NULL)
11881             return FALSE;
11882           mips_elf_section_data (section)->u.tdata = c;
11883         }
11884
11885       memcpy (c + offset, location, count);
11886     }
11887
11888   return _bfd_elf_set_section_contents (abfd, section, location, offset,
11889                                         count);
11890 }
11891
11892 /* This is almost identical to bfd_generic_get_... except that some
11893    MIPS relocations need to be handled specially.  Sigh.  */
11894
11895 bfd_byte *
11896 _bfd_elf_mips_get_relocated_section_contents
11897   (bfd *abfd,
11898    struct bfd_link_info *link_info,
11899    struct bfd_link_order *link_order,
11900    bfd_byte *data,
11901    bfd_boolean relocatable,
11902    asymbol **symbols)
11903 {
11904   /* Get enough memory to hold the stuff */
11905   bfd *input_bfd = link_order->u.indirect.section->owner;
11906   asection *input_section = link_order->u.indirect.section;
11907   bfd_size_type sz;
11908
11909   long reloc_size = bfd_get_reloc_upper_bound (input_bfd, input_section);
11910   arelent **reloc_vector = NULL;
11911   long reloc_count;
11912
11913   if (reloc_size < 0)
11914     goto error_return;
11915
11916   reloc_vector = bfd_malloc (reloc_size);
11917   if (reloc_vector == NULL && reloc_size != 0)
11918     goto error_return;
11919
11920   /* read in the section */
11921   sz = input_section->rawsize ? input_section->rawsize : input_section->size;
11922   if (!bfd_get_section_contents (input_bfd, input_section, data, 0, sz))
11923     goto error_return;
11924
11925   reloc_count = bfd_canonicalize_reloc (input_bfd,
11926                                         input_section,
11927                                         reloc_vector,
11928                                         symbols);
11929   if (reloc_count < 0)
11930     goto error_return;
11931
11932   if (reloc_count > 0)
11933     {
11934       arelent **parent;
11935       /* for mips */
11936       int gp_found;
11937       bfd_vma gp = 0x12345678;  /* initialize just to shut gcc up */
11938
11939       {
11940         struct bfd_hash_entry *h;
11941         struct bfd_link_hash_entry *lh;
11942         /* Skip all this stuff if we aren't mixing formats.  */
11943         if (abfd && input_bfd
11944             && abfd->xvec == input_bfd->xvec)
11945           lh = 0;
11946         else
11947           {
11948             h = bfd_hash_lookup (&link_info->hash->table, "_gp", FALSE, FALSE);
11949             lh = (struct bfd_link_hash_entry *) h;
11950           }
11951       lookup:
11952         if (lh)
11953           {
11954             switch (lh->type)
11955               {
11956               case bfd_link_hash_undefined:
11957               case bfd_link_hash_undefweak:
11958               case bfd_link_hash_common:
11959                 gp_found = 0;
11960                 break;
11961               case bfd_link_hash_defined:
11962               case bfd_link_hash_defweak:
11963                 gp_found = 1;
11964                 gp = lh->u.def.value;
11965                 break;
11966               case bfd_link_hash_indirect:
11967               case bfd_link_hash_warning:
11968                 lh = lh->u.i.link;
11969                 /* @@FIXME  ignoring warning for now */
11970                 goto lookup;
11971               case bfd_link_hash_new:
11972               default:
11973                 abort ();
11974               }
11975           }
11976         else
11977           gp_found = 0;
11978       }
11979       /* end mips */
11980       for (parent = reloc_vector; *parent != NULL; parent++)
11981         {
11982           char *error_message = NULL;
11983           bfd_reloc_status_type r;
11984
11985           /* Specific to MIPS: Deal with relocation types that require
11986              knowing the gp of the output bfd.  */
11987           asymbol *sym = *(*parent)->sym_ptr_ptr;
11988
11989           /* If we've managed to find the gp and have a special
11990              function for the relocation then go ahead, else default
11991              to the generic handling.  */
11992           if (gp_found
11993               && (*parent)->howto->special_function
11994               == _bfd_mips_elf32_gprel16_reloc)
11995             r = _bfd_mips_elf_gprel16_with_gp (input_bfd, sym, *parent,
11996                                                input_section, relocatable,
11997                                                data, gp);
11998           else
11999             r = bfd_perform_relocation (input_bfd, *parent, data,
12000                                         input_section,
12001                                         relocatable ? abfd : NULL,
12002                                         &error_message);
12003
12004           if (relocatable)
12005             {
12006               asection *os = input_section->output_section;
12007
12008               /* A partial link, so keep the relocs */
12009               os->orelocation[os->reloc_count] = *parent;
12010               os->reloc_count++;
12011             }
12012
12013           if (r != bfd_reloc_ok)
12014             {
12015               switch (r)
12016                 {
12017                 case bfd_reloc_undefined:
12018                   if (!((*link_info->callbacks->undefined_symbol)
12019                         (link_info, bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
12020                          input_bfd, input_section, (*parent)->address, TRUE)))
12021                     goto error_return;
12022                   break;
12023                 case bfd_reloc_dangerous:
12024                   BFD_ASSERT (error_message != NULL);
12025                   if (!((*link_info->callbacks->reloc_dangerous)
12026                         (link_info, error_message, input_bfd, input_section,
12027                          (*parent)->address)))
12028                     goto error_return;
12029                   break;
12030                 case bfd_reloc_overflow:
12031                   if (!((*link_info->callbacks->reloc_overflow)
12032                         (link_info, NULL,
12033                          bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
12034                          (*parent)->howto->name, (*parent)->addend,
12035                          input_bfd, input_section, (*parent)->address)))
12036                     goto error_return;
12037                   break;
12038                 case bfd_reloc_outofrange:
12039                 default:
12040                   abort ();
12041                   break;
12042                 }
12043
12044             }
12045         }
12046     }
12047   if (reloc_vector != NULL)
12048     free (reloc_vector);
12049   return data;
12050
12051 error_return:
12052   if (reloc_vector != NULL)
12053     free (reloc_vector);
12054   return NULL;
12055 }
12056 \f
12057 static bfd_boolean
12058 mips_elf_relax_delete_bytes (bfd *abfd,
12059                              asection *sec, bfd_vma addr, int count)
12060 {
12061   Elf_Internal_Shdr *symtab_hdr;
12062   unsigned int sec_shndx;
12063   bfd_byte *contents;
12064   Elf_Internal_Rela *irel, *irelend;
12065   Elf_Internal_Sym *isym;
12066   Elf_Internal_Sym *isymend;
12067   struct elf_link_hash_entry **sym_hashes;
12068   struct elf_link_hash_entry **end_hashes;
12069   struct elf_link_hash_entry **start_hashes;
12070   unsigned int symcount;
12071
12072   sec_shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
12073   contents = elf_section_data (sec)->this_hdr.contents;
12074
12075   irel = elf_section_data (sec)->relocs;
12076   irelend = irel + sec->reloc_count;
12077
12078   /* Actually delete the bytes.  */
12079   memmove (contents + addr, contents + addr + count,
12080            (size_t) (sec->size - addr - count));
12081   sec->size -= count;
12082
12083   /* Adjust all the relocs.  */
12084   for (irel = elf_section_data (sec)->relocs; irel < irelend; irel++)
12085     {
12086       /* Get the new reloc address.  */
12087       if (irel->r_offset > addr)
12088         irel->r_offset -= count;
12089     }
12090
12091   BFD_ASSERT (addr % 2 == 0);
12092   BFD_ASSERT (count % 2 == 0);
12093
12094   /* Adjust the local symbols defined in this section.  */
12095   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
12096   isym = (Elf_Internal_Sym *) symtab_hdr->contents;
12097   for (isymend = isym + symtab_hdr->sh_info; isym < isymend; isym++)
12098     if (isym->st_shndx == sec_shndx && isym->st_value > addr)
12099       isym->st_value -= count;
12100
12101   /* Now adjust the global symbols defined in this section.  */
12102   symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym)
12103               - symtab_hdr->sh_info);
12104   sym_hashes = start_hashes = elf_sym_hashes (abfd);
12105   end_hashes = sym_hashes + symcount;
12106
12107   for (; sym_hashes < end_hashes; sym_hashes++)
12108     {
12109       struct elf_link_hash_entry *sym_hash = *sym_hashes;
12110
12111       if ((sym_hash->root.type == bfd_link_hash_defined
12112            || sym_hash->root.type == bfd_link_hash_defweak)
12113           && sym_hash->root.u.def.section == sec)
12114         {
12115           bfd_vma value = sym_hash->root.u.def.value;
12116
12117           if (ELF_ST_IS_MICROMIPS (sym_hash->other))
12118             value &= MINUS_TWO;
12119           if (value > addr)
12120             sym_hash->root.u.def.value -= count;
12121         }
12122     }
12123
12124   return TRUE;
12125 }
12126
12127
12128 /* Opcodes needed for microMIPS relaxation as found in
12129    opcodes/micromips-opc.c.  */
12130
12131 struct opcode_descriptor {
12132   unsigned long match;
12133   unsigned long mask;
12134 };
12135
12136 /* The $ra register aka $31.  */
12137
12138 #define RA 31
12139
12140 /* 32-bit instruction format register fields.  */
12141
12142 #define OP32_SREG(opcode) (((opcode) >> 16) & 0x1f)
12143 #define OP32_TREG(opcode) (((opcode) >> 21) & 0x1f)
12144
12145 /* Check if a 5-bit register index can be abbreviated to 3 bits.  */
12146
12147 #define OP16_VALID_REG(r) \
12148   ((2 <= (r) && (r) <= 7) || (16 <= (r) && (r) <= 17))
12149
12150
12151 /* 32-bit and 16-bit branches.  */
12152
12153 static const struct opcode_descriptor b_insns_32[] = {
12154   { /* "b",     "p",            */ 0x40400000, 0xffff0000 }, /* bgez 0 */
12155   { /* "b",     "p",            */ 0x94000000, 0xffff0000 }, /* beq 0, 0 */
12156   { 0, 0 }  /* End marker for find_match().  */
12157 };
12158
12159 static const struct opcode_descriptor bc_insn_32 =
12160   { /* "bc(1|2)(ft)", "N,p",    */ 0x42800000, 0xfec30000 };
12161
12162 static const struct opcode_descriptor bz_insn_32 =
12163   { /* "b(g|l)(e|t)z", "s,p",   */ 0x40000000, 0xff200000 };
12164
12165 static const struct opcode_descriptor bzal_insn_32 =
12166   { /* "b(ge|lt)zal", "s,p",    */ 0x40200000, 0xffa00000 };
12167
12168 static const struct opcode_descriptor beq_insn_32 =
12169   { /* "b(eq|ne)", "s,t,p",     */ 0x94000000, 0xdc000000 };
12170
12171 static const struct opcode_descriptor b_insn_16 =
12172   { /* "b",     "mD",           */ 0xcc00,     0xfc00 };
12173
12174 static const struct opcode_descriptor bz_insn_16 =
12175   { /* "b(eq|ne)z", "md,mE",    */ 0x8c00,     0xdc00 };
12176
12177
12178 /* 32-bit and 16-bit branch EQ and NE zero.  */
12179
12180 /* NOTE: All opcode tables have BEQ/BNE in the same order: first the
12181    eq and second the ne.  This convention is used when replacing a
12182    32-bit BEQ/BNE with the 16-bit version.  */
12183
12184 #define BZC32_REG_FIELD(r) (((r) & 0x1f) << 16)
12185
12186 static const struct opcode_descriptor bz_rs_insns_32[] = {
12187   { /* "beqz",  "s,p",          */ 0x94000000, 0xffe00000 },
12188   { /* "bnez",  "s,p",          */ 0xb4000000, 0xffe00000 },
12189   { 0, 0 }  /* End marker for find_match().  */
12190 };
12191
12192 static const struct opcode_descriptor bz_rt_insns_32[] = {
12193   { /* "beqz",  "t,p",          */ 0x94000000, 0xfc01f000 },
12194   { /* "bnez",  "t,p",          */ 0xb4000000, 0xfc01f000 },
12195   { 0, 0 }  /* End marker for find_match().  */
12196 };
12197
12198 static const struct opcode_descriptor bzc_insns_32[] = {
12199   { /* "beqzc", "s,p",          */ 0x40e00000, 0xffe00000 },
12200   { /* "bnezc", "s,p",          */ 0x40a00000, 0xffe00000 },
12201   { 0, 0 }  /* End marker for find_match().  */
12202 };
12203
12204 static const struct opcode_descriptor bz_insns_16[] = {
12205   { /* "beqz",  "md,mE",        */ 0x8c00,     0xfc00 },
12206   { /* "bnez",  "md,mE",        */ 0xac00,     0xfc00 },
12207   { 0, 0 }  /* End marker for find_match().  */
12208 };
12209
12210 /* Switch between a 5-bit register index and its 3-bit shorthand.  */
12211
12212 #define BZ16_REG(opcode) ((((((opcode) >> 7) & 7) + 0x1e) & 0x17) + 2)
12213 #define BZ16_REG_FIELD(r) \
12214   (((2 <= (r) && (r) <= 7) ? (r) : ((r) - 16)) << 7)
12215
12216
12217 /* 32-bit instructions with a delay slot.  */
12218
12219 static const struct opcode_descriptor jal_insn_32_bd16 =
12220   { /* "jals",  "a",            */ 0x74000000, 0xfc000000 };
12221
12222 static const struct opcode_descriptor jal_insn_32_bd32 =
12223   { /* "jal",   "a",            */ 0xf4000000, 0xfc000000 };
12224
12225 static const struct opcode_descriptor jal_x_insn_32_bd32 =
12226   { /* "jal[x]", "a",           */ 0xf0000000, 0xf8000000 };
12227
12228 static const struct opcode_descriptor j_insn_32 =
12229   { /* "j",     "a",            */ 0xd4000000, 0xfc000000 };
12230
12231 static const struct opcode_descriptor jalr_insn_32 =
12232   { /* "jalr[.hb]", "t,s",      */ 0x00000f3c, 0xfc00efff };
12233
12234 /* This table can be compacted, because no opcode replacement is made.  */
12235
12236 static const struct opcode_descriptor ds_insns_32_bd16[] = {
12237   { /* "jals",  "a",            */ 0x74000000, 0xfc000000 },
12238
12239   { /* "jalrs[.hb]", "t,s",     */ 0x00004f3c, 0xfc00efff },
12240   { /* "b(ge|lt)zals", "s,p",   */ 0x42200000, 0xffa00000 },
12241
12242   { /* "b(g|l)(e|t)z", "s,p",   */ 0x40000000, 0xff200000 },
12243   { /* "b(eq|ne)", "s,t,p",     */ 0x94000000, 0xdc000000 },
12244   { /* "j",     "a",            */ 0xd4000000, 0xfc000000 },
12245   { 0, 0 }  /* End marker for find_match().  */
12246 };
12247
12248 /* This table can be compacted, because no opcode replacement is made.  */
12249
12250 static const struct opcode_descriptor ds_insns_32_bd32[] = {
12251   { /* "jal[x]", "a",           */ 0xf0000000, 0xf8000000 },
12252
12253   { /* "jalr[.hb]", "t,s",      */ 0x00000f3c, 0xfc00efff },
12254   { /* "b(ge|lt)zal", "s,p",    */ 0x40200000, 0xffa00000 },
12255   { 0, 0 }  /* End marker for find_match().  */
12256 };
12257
12258
12259 /* 16-bit instructions with a delay slot.  */
12260
12261 static const struct opcode_descriptor jalr_insn_16_bd16 =
12262   { /* "jalrs", "my,mj",        */ 0x45e0,     0xffe0 };
12263
12264 static const struct opcode_descriptor jalr_insn_16_bd32 =
12265   { /* "jalr",  "my,mj",        */ 0x45c0,     0xffe0 };
12266
12267 static const struct opcode_descriptor jr_insn_16 =
12268   { /* "jr",    "mj",           */ 0x4580,     0xffe0 };
12269
12270 #define JR16_REG(opcode) ((opcode) & 0x1f)
12271
12272 /* This table can be compacted, because no opcode replacement is made.  */
12273
12274 static const struct opcode_descriptor ds_insns_16_bd16[] = {
12275   { /* "jalrs", "my,mj",        */ 0x45e0,     0xffe0 },
12276
12277   { /* "b",     "mD",           */ 0xcc00,     0xfc00 },
12278   { /* "b(eq|ne)z", "md,mE",    */ 0x8c00,     0xdc00 },
12279   { /* "jr",    "mj",           */ 0x4580,     0xffe0 },
12280   { 0, 0 }  /* End marker for find_match().  */
12281 };
12282
12283
12284 /* LUI instruction.  */
12285
12286 static const struct opcode_descriptor lui_insn =
12287  { /* "lui",    "s,u",          */ 0x41a00000, 0xffe00000 };
12288
12289
12290 /* ADDIU instruction.  */
12291
12292 static const struct opcode_descriptor addiu_insn =
12293   { /* "addiu", "t,r,j",        */ 0x30000000, 0xfc000000 };
12294
12295 static const struct opcode_descriptor addiupc_insn =
12296   { /* "addiu", "mb,$pc,mQ",    */ 0x78000000, 0xfc000000 };
12297
12298 #define ADDIUPC_REG_FIELD(r) \
12299   (((2 <= (r) && (r) <= 7) ? (r) : ((r) - 16)) << 23)
12300
12301
12302 /* Relaxable instructions in a JAL delay slot: MOVE.  */
12303
12304 /* The 16-bit move has rd in 9:5 and rs in 4:0.  The 32-bit moves
12305    (ADDU, OR) have rd in 15:11 and rs in 10:16.  */
12306 #define MOVE32_RD(opcode) (((opcode) >> 11) & 0x1f)
12307 #define MOVE32_RS(opcode) (((opcode) >> 16) & 0x1f)
12308
12309 #define MOVE16_RD_FIELD(r) (((r) & 0x1f) << 5)
12310 #define MOVE16_RS_FIELD(r) (((r) & 0x1f)     )
12311
12312 static const struct opcode_descriptor move_insns_32[] = {
12313   { /* "move",  "d,s",          */ 0x00000150, 0xffe007ff }, /* addu d,s,$0 */
12314   { /* "move",  "d,s",          */ 0x00000290, 0xffe007ff }, /* or   d,s,$0 */
12315   { 0, 0 }  /* End marker for find_match().  */
12316 };
12317
12318 static const struct opcode_descriptor move_insn_16 =
12319   { /* "move",  "mp,mj",        */ 0x0c00,     0xfc00 };
12320
12321
12322 /* NOP instructions.  */
12323
12324 static const struct opcode_descriptor nop_insn_32 =
12325   { /* "nop",   "",             */ 0x00000000, 0xffffffff };
12326
12327 static const struct opcode_descriptor nop_insn_16 =
12328   { /* "nop",   "",             */ 0x0c00,     0xffff };
12329
12330
12331 /* Instruction match support.  */
12332
12333 #define MATCH(opcode, insn) ((opcode & insn.mask) == insn.match)
12334
12335 static int
12336 find_match (unsigned long opcode, const struct opcode_descriptor insn[])
12337 {
12338   unsigned long indx;
12339
12340   for (indx = 0; insn[indx].mask != 0; indx++)
12341     if (MATCH (opcode, insn[indx]))
12342       return indx;
12343
12344   return -1;
12345 }
12346
12347
12348 /* Branch and delay slot decoding support.  */
12349
12350 /* If PTR points to what *might* be a 16-bit branch or jump, then
12351    return the minimum length of its delay slot, otherwise return 0.
12352    Non-zero results are not definitive as we might be checking against
12353    the second half of another instruction.  */
12354
12355 static int
12356 check_br16_dslot (bfd *abfd, bfd_byte *ptr)
12357 {
12358   unsigned long opcode;
12359   int bdsize;
12360
12361   opcode = bfd_get_16 (abfd, ptr);
12362   if (MATCH (opcode, jalr_insn_16_bd32) != 0)
12363     /* 16-bit branch/jump with a 32-bit delay slot.  */
12364     bdsize = 4;
12365   else if (MATCH (opcode, jalr_insn_16_bd16) != 0
12366            || find_match (opcode, ds_insns_16_bd16) >= 0)
12367     /* 16-bit branch/jump with a 16-bit delay slot.  */
12368     bdsize = 2;
12369   else
12370     /* No delay slot.  */
12371     bdsize = 0;
12372
12373   return bdsize;
12374 }
12375
12376 /* If PTR points to what *might* be a 32-bit branch or jump, then
12377    return the minimum length of its delay slot, otherwise return 0.
12378    Non-zero results are not definitive as we might be checking against
12379    the second half of another instruction.  */
12380
12381 static int
12382 check_br32_dslot (bfd *abfd, bfd_byte *ptr)
12383 {
12384   unsigned long opcode;
12385   int bdsize;
12386
12387   opcode = bfd_get_micromips_32 (abfd, ptr);
12388   if (find_match (opcode, ds_insns_32_bd32) >= 0)
12389     /* 32-bit branch/jump with a 32-bit delay slot.  */
12390     bdsize = 4;
12391   else if (find_match (opcode, ds_insns_32_bd16) >= 0)
12392     /* 32-bit branch/jump with a 16-bit delay slot.  */
12393     bdsize = 2;
12394   else
12395     /* No delay slot.  */
12396     bdsize = 0;
12397
12398   return bdsize;
12399 }
12400
12401 /* If PTR points to a 16-bit branch or jump with a 32-bit delay slot
12402    that doesn't fiddle with REG, then return TRUE, otherwise FALSE.  */
12403
12404 static bfd_boolean
12405 check_br16 (bfd *abfd, bfd_byte *ptr, unsigned long reg)
12406 {
12407   unsigned long opcode;
12408
12409   opcode = bfd_get_16 (abfd, ptr);
12410   if (MATCH (opcode, b_insn_16)
12411                                                 /* B16  */
12412       || (MATCH (opcode, jr_insn_16) && reg != JR16_REG (opcode))
12413                                                 /* JR16  */
12414       || (MATCH (opcode, bz_insn_16) && reg != BZ16_REG (opcode))
12415                                                 /* BEQZ16, BNEZ16  */
12416       || (MATCH (opcode, jalr_insn_16_bd32)
12417                                                 /* JALR16  */
12418           && reg != JR16_REG (opcode) && reg != RA))
12419     return TRUE;
12420
12421   return FALSE;
12422 }
12423
12424 /* If PTR points to a 32-bit branch or jump that doesn't fiddle with REG,
12425    then return TRUE, otherwise FALSE.  */
12426
12427 static bfd_boolean
12428 check_br32 (bfd *abfd, bfd_byte *ptr, unsigned long reg)
12429 {
12430   unsigned long opcode;
12431
12432   opcode = bfd_get_micromips_32 (abfd, ptr);
12433   if (MATCH (opcode, j_insn_32)
12434                                                 /* J  */
12435       || MATCH (opcode, bc_insn_32)
12436                                                 /* BC1F, BC1T, BC2F, BC2T  */
12437       || (MATCH (opcode, jal_x_insn_32_bd32) && reg != RA)
12438                                                 /* JAL, JALX  */
12439       || (MATCH (opcode, bz_insn_32) && reg != OP32_SREG (opcode))
12440                                                 /* BGEZ, BGTZ, BLEZ, BLTZ  */
12441       || (MATCH (opcode, bzal_insn_32)
12442                                                 /* BGEZAL, BLTZAL  */
12443           && reg != OP32_SREG (opcode) && reg != RA)
12444       || ((MATCH (opcode, jalr_insn_32) || MATCH (opcode, beq_insn_32))
12445                                                 /* JALR, JALR.HB, BEQ, BNE  */
12446           && reg != OP32_SREG (opcode) && reg != OP32_TREG (opcode)))
12447     return TRUE;
12448
12449   return FALSE;
12450 }
12451
12452 /* If the instruction encoding at PTR and relocations [INTERNAL_RELOCS,
12453    IRELEND) at OFFSET indicate that there must be a compact branch there,
12454    then return TRUE, otherwise FALSE.  */
12455
12456 static bfd_boolean
12457 check_relocated_bzc (bfd *abfd, const bfd_byte *ptr, bfd_vma offset,
12458                      const Elf_Internal_Rela *internal_relocs,
12459                      const Elf_Internal_Rela *irelend)
12460 {
12461   const Elf_Internal_Rela *irel;
12462   unsigned long opcode;
12463
12464   opcode = bfd_get_micromips_32 (abfd, ptr);
12465   if (find_match (opcode, bzc_insns_32) < 0)
12466     return FALSE;
12467
12468   for (irel = internal_relocs; irel < irelend; irel++)
12469     if (irel->r_offset == offset
12470         && ELF32_R_TYPE (irel->r_info) == R_MICROMIPS_PC16_S1)
12471       return TRUE;
12472
12473   return FALSE;
12474 }
12475
12476 /* Bitsize checking.  */
12477 #define IS_BITSIZE(val, N)                                              \
12478   (((((val) & ((1ULL << (N)) - 1)) ^ (1ULL << ((N) - 1)))               \
12479     - (1ULL << ((N) - 1))) == (val))
12480
12481 \f
12482 bfd_boolean
12483 _bfd_mips_elf_relax_section (bfd *abfd, asection *sec,
12484                              struct bfd_link_info *link_info,
12485                              bfd_boolean *again)
12486 {
12487   Elf_Internal_Shdr *symtab_hdr;
12488   Elf_Internal_Rela *internal_relocs;
12489   Elf_Internal_Rela *irel, *irelend;
12490   bfd_byte *contents = NULL;
12491   Elf_Internal_Sym *isymbuf = NULL;
12492
12493   /* Assume nothing changes.  */
12494   *again = FALSE;
12495
12496   /* We don't have to do anything for a relocatable link, if
12497      this section does not have relocs, or if this is not a
12498      code section.  */
12499
12500   if (link_info->relocatable
12501       || (sec->flags & SEC_RELOC) == 0
12502       || sec->reloc_count == 0
12503       || (sec->flags & SEC_CODE) == 0)
12504     return TRUE;
12505
12506   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
12507
12508   /* Get a copy of the native relocations.  */
12509   internal_relocs = (_bfd_elf_link_read_relocs
12510                      (abfd, sec, NULL, (Elf_Internal_Rela *) NULL,
12511                       link_info->keep_memory));
12512   if (internal_relocs == NULL)
12513     goto error_return;
12514
12515   /* Walk through them looking for relaxing opportunities.  */
12516   irelend = internal_relocs + sec->reloc_count;
12517   for (irel = internal_relocs; irel < irelend; irel++)
12518     {
12519       unsigned long r_symndx = ELF32_R_SYM (irel->r_info);
12520       unsigned int r_type = ELF32_R_TYPE (irel->r_info);
12521       bfd_boolean target_is_micromips_code_p;
12522       unsigned long opcode;
12523       bfd_vma symval;
12524       bfd_vma pcrval;
12525       bfd_byte *ptr;
12526       int fndopc;
12527
12528       /* The number of bytes to delete for relaxation and from where
12529          to delete these bytes starting at irel->r_offset.  */
12530       int delcnt = 0;
12531       int deloff = 0;
12532
12533       /* If this isn't something that can be relaxed, then ignore
12534          this reloc.  */
12535       if (r_type != R_MICROMIPS_HI16
12536           && r_type != R_MICROMIPS_PC16_S1
12537           && r_type != R_MICROMIPS_26_S1)
12538         continue;
12539
12540       /* Get the section contents if we haven't done so already.  */
12541       if (contents == NULL)
12542         {
12543           /* Get cached copy if it exists.  */
12544           if (elf_section_data (sec)->this_hdr.contents != NULL)
12545             contents = elf_section_data (sec)->this_hdr.contents;
12546           /* Go get them off disk.  */
12547           else if (!bfd_malloc_and_get_section (abfd, sec, &contents))
12548             goto error_return;
12549         }
12550       ptr = contents + irel->r_offset;
12551
12552       /* Read this BFD's local symbols if we haven't done so already.  */
12553       if (isymbuf == NULL && symtab_hdr->sh_info != 0)
12554         {
12555           isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
12556           if (isymbuf == NULL)
12557             isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
12558                                             symtab_hdr->sh_info, 0,
12559                                             NULL, NULL, NULL);
12560           if (isymbuf == NULL)
12561             goto error_return;
12562         }
12563
12564       /* Get the value of the symbol referred to by the reloc.  */
12565       if (r_symndx < symtab_hdr->sh_info)
12566         {
12567           /* A local symbol.  */
12568           Elf_Internal_Sym *isym;
12569           asection *sym_sec;
12570
12571           isym = isymbuf + r_symndx;
12572           if (isym->st_shndx == SHN_UNDEF)
12573             sym_sec = bfd_und_section_ptr;
12574           else if (isym->st_shndx == SHN_ABS)
12575             sym_sec = bfd_abs_section_ptr;
12576           else if (isym->st_shndx == SHN_COMMON)
12577             sym_sec = bfd_com_section_ptr;
12578           else
12579             sym_sec = bfd_section_from_elf_index (abfd, isym->st_shndx);
12580           symval = (isym->st_value
12581                     + sym_sec->output_section->vma
12582                     + sym_sec->output_offset);
12583           target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (isym->st_other);
12584         }
12585       else
12586         {
12587           unsigned long indx;
12588           struct elf_link_hash_entry *h;
12589
12590           /* An external symbol.  */
12591           indx = r_symndx - symtab_hdr->sh_info;
12592           h = elf_sym_hashes (abfd)[indx];
12593           BFD_ASSERT (h != NULL);
12594
12595           if (h->root.type != bfd_link_hash_defined
12596               && h->root.type != bfd_link_hash_defweak)
12597             /* This appears to be a reference to an undefined
12598                symbol.  Just ignore it -- it will be caught by the
12599                regular reloc processing.  */
12600             continue;
12601
12602           symval = (h->root.u.def.value
12603                     + h->root.u.def.section->output_section->vma
12604                     + h->root.u.def.section->output_offset);
12605           target_is_micromips_code_p = (!h->needs_plt
12606                                         && ELF_ST_IS_MICROMIPS (h->other));
12607         }
12608
12609
12610       /* For simplicity of coding, we are going to modify the
12611          section contents, the section relocs, and the BFD symbol
12612          table.  We must tell the rest of the code not to free up this
12613          information.  It would be possible to instead create a table
12614          of changes which have to be made, as is done in coff-mips.c;
12615          that would be more work, but would require less memory when
12616          the linker is run.  */
12617
12618       /* Only 32-bit instructions relaxed.  */
12619       if (irel->r_offset + 4 > sec->size)
12620         continue;
12621
12622       opcode = bfd_get_micromips_32 (abfd, ptr);
12623
12624       /* This is the pc-relative distance from the instruction the
12625          relocation is applied to, to the symbol referred.  */
12626       pcrval = (symval
12627                 - (sec->output_section->vma + sec->output_offset)
12628                 - irel->r_offset);
12629
12630       /* R_MICROMIPS_HI16 / LUI relaxation to nil, performing relaxation
12631          of corresponding R_MICROMIPS_LO16 to R_MICROMIPS_HI0_LO16 or
12632          R_MICROMIPS_PC23_S2.  The R_MICROMIPS_PC23_S2 condition is
12633
12634            (symval % 4 == 0 && IS_BITSIZE (pcrval, 25))
12635
12636          where pcrval has first to be adjusted to apply against the LO16
12637          location (we make the adjustment later on, when we have figured
12638          out the offset).  */
12639       if (r_type == R_MICROMIPS_HI16 && MATCH (opcode, lui_insn))
12640         {
12641           bfd_boolean bzc = FALSE;
12642           unsigned long nextopc;
12643           unsigned long reg;
12644           bfd_vma offset;
12645
12646           /* Give up if the previous reloc was a HI16 against this symbol
12647              too.  */
12648           if (irel > internal_relocs
12649               && ELF32_R_TYPE (irel[-1].r_info) == R_MICROMIPS_HI16
12650               && ELF32_R_SYM (irel[-1].r_info) == r_symndx)
12651             continue;
12652
12653           /* Or if the next reloc is not a LO16 against this symbol.  */
12654           if (irel + 1 >= irelend
12655               || ELF32_R_TYPE (irel[1].r_info) != R_MICROMIPS_LO16
12656               || ELF32_R_SYM (irel[1].r_info) != r_symndx)
12657             continue;
12658
12659           /* Or if the second next reloc is a LO16 against this symbol too.  */
12660           if (irel + 2 >= irelend
12661               && ELF32_R_TYPE (irel[2].r_info) == R_MICROMIPS_LO16
12662               && ELF32_R_SYM (irel[2].r_info) == r_symndx)
12663             continue;
12664
12665           /* See if the LUI instruction *might* be in a branch delay slot.
12666              We check whether what looks like a 16-bit branch or jump is
12667              actually an immediate argument to a compact branch, and let
12668              it through if so.  */
12669           if (irel->r_offset >= 2
12670               && check_br16_dslot (abfd, ptr - 2)
12671               && !(irel->r_offset >= 4
12672                    && (bzc = check_relocated_bzc (abfd,
12673                                                   ptr - 4, irel->r_offset - 4,
12674                                                   internal_relocs, irelend))))
12675             continue;
12676           if (irel->r_offset >= 4
12677               && !bzc
12678               && check_br32_dslot (abfd, ptr - 4))
12679             continue;
12680
12681           reg = OP32_SREG (opcode);
12682
12683           /* We only relax adjacent instructions or ones separated with
12684              a branch or jump that has a delay slot.  The branch or jump
12685              must not fiddle with the register used to hold the address.
12686              Subtract 4 for the LUI itself.  */
12687           offset = irel[1].r_offset - irel[0].r_offset;
12688           switch (offset - 4)
12689             {
12690             case 0:
12691               break;
12692             case 2:
12693               if (check_br16 (abfd, ptr + 4, reg))
12694                 break;
12695               continue;
12696             case 4:
12697               if (check_br32 (abfd, ptr + 4, reg))
12698                 break;
12699               continue;
12700             default:
12701               continue;
12702             }
12703
12704           nextopc = bfd_get_micromips_32 (abfd, contents + irel[1].r_offset);
12705
12706           /* Give up unless the same register is used with both
12707              relocations.  */
12708           if (OP32_SREG (nextopc) != reg)
12709             continue;
12710
12711           /* Now adjust pcrval, subtracting the offset to the LO16 reloc
12712              and rounding up to take masking of the two LSBs into account.  */
12713           pcrval = ((pcrval - offset + 3) | 3) ^ 3;
12714
12715           /* R_MICROMIPS_LO16 relaxation to R_MICROMIPS_HI0_LO16.  */
12716           if (IS_BITSIZE (symval, 16))
12717             {
12718               /* Fix the relocation's type.  */
12719               irel[1].r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_HI0_LO16);
12720
12721               /* Instructions using R_MICROMIPS_LO16 have the base or
12722                  source register in bits 20:16.  This register becomes $0
12723                  (zero) as the result of the R_MICROMIPS_HI16 being 0.  */
12724               nextopc &= ~0x001f0000;
12725               bfd_put_16 (abfd, (nextopc >> 16) & 0xffff,
12726                           contents + irel[1].r_offset);
12727             }
12728
12729           /* R_MICROMIPS_LO16 / ADDIU relaxation to R_MICROMIPS_PC23_S2.
12730              We add 4 to take LUI deletion into account while checking
12731              the PC-relative distance.  */
12732           else if (symval % 4 == 0
12733                    && IS_BITSIZE (pcrval + 4, 25)
12734                    && MATCH (nextopc, addiu_insn)
12735                    && OP32_TREG (nextopc) == OP32_SREG (nextopc)
12736                    && OP16_VALID_REG (OP32_TREG (nextopc)))
12737             {
12738               /* Fix the relocation's type.  */
12739               irel[1].r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC23_S2);
12740
12741               /* Replace ADDIU with the ADDIUPC version.  */
12742               nextopc = (addiupc_insn.match
12743                          | ADDIUPC_REG_FIELD (OP32_TREG (nextopc)));
12744
12745               bfd_put_micromips_32 (abfd, nextopc,
12746                                     contents + irel[1].r_offset);
12747             }
12748
12749           /* Can't do anything, give up, sigh...  */
12750           else
12751             continue;
12752
12753           /* Fix the relocation's type.  */
12754           irel->r_info = ELF32_R_INFO (r_symndx, R_MIPS_NONE);
12755
12756           /* Delete the LUI instruction: 4 bytes at irel->r_offset.  */
12757           delcnt = 4;
12758           deloff = 0;
12759         }
12760
12761       /* Compact branch relaxation -- due to the multitude of macros
12762          employed by the compiler/assembler, compact branches are not
12763          always generated.  Obviously, this can/will be fixed elsewhere,
12764          but there is no drawback in double checking it here.  */
12765       else if (r_type == R_MICROMIPS_PC16_S1
12766                && irel->r_offset + 5 < sec->size
12767                && ((fndopc = find_match (opcode, bz_rs_insns_32)) >= 0
12768                    || (fndopc = find_match (opcode, bz_rt_insns_32)) >= 0)
12769                && MATCH (bfd_get_16 (abfd, ptr + 4), nop_insn_16))
12770         {
12771           unsigned long reg;
12772
12773           reg = OP32_SREG (opcode) ? OP32_SREG (opcode) : OP32_TREG (opcode);
12774
12775           /* Replace BEQZ/BNEZ with the compact version.  */
12776           opcode = (bzc_insns_32[fndopc].match
12777                     | BZC32_REG_FIELD (reg)
12778                     | (opcode & 0xffff));               /* Addend value.  */
12779
12780           bfd_put_micromips_32 (abfd, opcode, ptr);
12781
12782           /* Delete the 16-bit delay slot NOP: two bytes from
12783              irel->offset + 4.  */
12784           delcnt = 2;
12785           deloff = 4;
12786         }
12787
12788       /* R_MICROMIPS_PC16_S1 relaxation to R_MICROMIPS_PC10_S1.  We need
12789          to check the distance from the next instruction, so subtract 2.  */
12790       else if (r_type == R_MICROMIPS_PC16_S1
12791                && IS_BITSIZE (pcrval - 2, 11)
12792                && find_match (opcode, b_insns_32) >= 0)
12793         {
12794           /* Fix the relocation's type.  */
12795           irel->r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC10_S1);
12796
12797           /* Replace the 32-bit opcode with a 16-bit opcode.  */
12798           bfd_put_16 (abfd,
12799                       (b_insn_16.match
12800                        | (opcode & 0x3ff)),             /* Addend value.  */
12801                       ptr);
12802
12803           /* Delete 2 bytes from irel->r_offset + 2.  */
12804           delcnt = 2;
12805           deloff = 2;
12806         }
12807
12808       /* R_MICROMIPS_PC16_S1 relaxation to R_MICROMIPS_PC7_S1.  We need
12809          to check the distance from the next instruction, so subtract 2.  */
12810       else if (r_type == R_MICROMIPS_PC16_S1
12811                && IS_BITSIZE (pcrval - 2, 8)
12812                && (((fndopc = find_match (opcode, bz_rs_insns_32)) >= 0
12813                     && OP16_VALID_REG (OP32_SREG (opcode)))
12814                    || ((fndopc = find_match (opcode, bz_rt_insns_32)) >= 0
12815                        && OP16_VALID_REG (OP32_TREG (opcode)))))
12816         {
12817           unsigned long reg;
12818
12819           reg = OP32_SREG (opcode) ? OP32_SREG (opcode) : OP32_TREG (opcode);
12820
12821           /* Fix the relocation's type.  */
12822           irel->r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC7_S1);
12823
12824           /* Replace the 32-bit opcode with a 16-bit opcode.  */
12825           bfd_put_16 (abfd,
12826                       (bz_insns_16[fndopc].match
12827                        | BZ16_REG_FIELD (reg)
12828                        | (opcode & 0x7f)),              /* Addend value.  */
12829                       ptr);
12830
12831           /* Delete 2 bytes from irel->r_offset + 2.  */
12832           delcnt = 2;
12833           deloff = 2;
12834         }
12835
12836       /* R_MICROMIPS_26_S1 -- JAL to JALS relaxation for microMIPS targets.  */
12837       else if (r_type == R_MICROMIPS_26_S1
12838                && target_is_micromips_code_p
12839                && irel->r_offset + 7 < sec->size
12840                && MATCH (opcode, jal_insn_32_bd32))
12841         {
12842           unsigned long n32opc;
12843           bfd_boolean relaxed = FALSE;
12844
12845           n32opc = bfd_get_micromips_32 (abfd, ptr + 4);
12846
12847           if (MATCH (n32opc, nop_insn_32))
12848             {
12849               /* Replace delay slot 32-bit NOP with a 16-bit NOP.  */
12850               bfd_put_16 (abfd, nop_insn_16.match, ptr + 4);
12851
12852               relaxed = TRUE;
12853             }
12854           else if (find_match (n32opc, move_insns_32) >= 0)
12855             {
12856               /* Replace delay slot 32-bit MOVE with 16-bit MOVE.  */
12857               bfd_put_16 (abfd,
12858                           (move_insn_16.match
12859                            | MOVE16_RD_FIELD (MOVE32_RD (n32opc))
12860                            | MOVE16_RS_FIELD (MOVE32_RS (n32opc))),
12861                           ptr + 4);
12862
12863               relaxed = TRUE;
12864             }
12865           /* Other 32-bit instructions relaxable to 16-bit
12866              instructions will be handled here later.  */
12867
12868           if (relaxed)
12869             {
12870               /* JAL with 32-bit delay slot that is changed to a JALS
12871                  with 16-bit delay slot.  */
12872               bfd_put_micromips_32 (abfd, jal_insn_32_bd16.match, ptr);
12873
12874               /* Delete 2 bytes from irel->r_offset + 6.  */
12875               delcnt = 2;
12876               deloff = 6;
12877             }
12878         }
12879
12880       if (delcnt != 0)
12881         {
12882           /* Note that we've changed the relocs, section contents, etc.  */
12883           elf_section_data (sec)->relocs = internal_relocs;
12884           elf_section_data (sec)->this_hdr.contents = contents;
12885           symtab_hdr->contents = (unsigned char *) isymbuf;
12886
12887           /* Delete bytes depending on the delcnt and deloff.  */
12888           if (!mips_elf_relax_delete_bytes (abfd, sec,
12889                                             irel->r_offset + deloff, delcnt))
12890             goto error_return;
12891
12892           /* That will change things, so we should relax again.
12893              Note that this is not required, and it may be slow.  */
12894           *again = TRUE;
12895         }
12896     }
12897
12898   if (isymbuf != NULL
12899       && symtab_hdr->contents != (unsigned char *) isymbuf)
12900     {
12901       if (! link_info->keep_memory)
12902         free (isymbuf);
12903       else
12904         {
12905           /* Cache the symbols for elf_link_input_bfd.  */
12906           symtab_hdr->contents = (unsigned char *) isymbuf;
12907         }
12908     }
12909
12910   if (contents != NULL
12911       && elf_section_data (sec)->this_hdr.contents != contents)
12912     {
12913       if (! link_info->keep_memory)
12914         free (contents);
12915       else
12916         {
12917           /* Cache the section contents for elf_link_input_bfd.  */
12918           elf_section_data (sec)->this_hdr.contents = contents;
12919         }
12920     }
12921
12922   if (internal_relocs != NULL
12923       && elf_section_data (sec)->relocs != internal_relocs)
12924     free (internal_relocs);
12925
12926   return TRUE;
12927
12928  error_return:
12929   if (isymbuf != NULL
12930       && symtab_hdr->contents != (unsigned char *) isymbuf)
12931     free (isymbuf);
12932   if (contents != NULL
12933       && elf_section_data (sec)->this_hdr.contents != contents)
12934     free (contents);
12935   if (internal_relocs != NULL
12936       && elf_section_data (sec)->relocs != internal_relocs)
12937     free (internal_relocs);
12938
12939   return FALSE;
12940 }
12941 \f
12942 /* Create a MIPS ELF linker hash table.  */
12943
12944 struct bfd_link_hash_table *
12945 _bfd_mips_elf_link_hash_table_create (bfd *abfd)
12946 {
12947   struct mips_elf_link_hash_table *ret;
12948   bfd_size_type amt = sizeof (struct mips_elf_link_hash_table);
12949
12950   ret = bfd_zmalloc (amt);
12951   if (ret == NULL)
12952     return NULL;
12953
12954   if (!_bfd_elf_link_hash_table_init (&ret->root, abfd,
12955                                       mips_elf_link_hash_newfunc,
12956                                       sizeof (struct mips_elf_link_hash_entry),
12957                                       MIPS_ELF_DATA))
12958     {
12959       free (ret);
12960       return NULL;
12961     }
12962
12963   return &ret->root.root;
12964 }
12965
12966 /* Likewise, but indicate that the target is VxWorks.  */
12967
12968 struct bfd_link_hash_table *
12969 _bfd_mips_vxworks_link_hash_table_create (bfd *abfd)
12970 {
12971   struct bfd_link_hash_table *ret;
12972
12973   ret = _bfd_mips_elf_link_hash_table_create (abfd);
12974   if (ret)
12975     {
12976       struct mips_elf_link_hash_table *htab;
12977
12978       htab = (struct mips_elf_link_hash_table *) ret;
12979       htab->use_plts_and_copy_relocs = TRUE;
12980       htab->is_vxworks = TRUE;
12981     }
12982   return ret;
12983 }
12984
12985 /* A function that the linker calls if we are allowed to use PLTs
12986    and copy relocs.  */
12987
12988 void
12989 _bfd_mips_elf_use_plts_and_copy_relocs (struct bfd_link_info *info)
12990 {
12991   mips_elf_hash_table (info)->use_plts_and_copy_relocs = TRUE;
12992 }
12993 \f
12994 /* We need to use a special link routine to handle the .reginfo and
12995    the .mdebug sections.  We need to merge all instances of these
12996    sections together, not write them all out sequentially.  */
12997
12998 bfd_boolean
12999 _bfd_mips_elf_final_link (bfd *abfd, struct bfd_link_info *info)
13000 {
13001   asection *o;
13002   struct bfd_link_order *p;
13003   asection *reginfo_sec, *mdebug_sec, *gptab_data_sec, *gptab_bss_sec;
13004   asection *rtproc_sec;
13005   Elf32_RegInfo reginfo;
13006   struct ecoff_debug_info debug;
13007   struct mips_htab_traverse_info hti;
13008   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
13009   const struct ecoff_debug_swap *swap = bed->elf_backend_ecoff_debug_swap;
13010   HDRR *symhdr = &debug.symbolic_header;
13011   void *mdebug_handle = NULL;
13012   asection *s;
13013   EXTR esym;
13014   unsigned int i;
13015   bfd_size_type amt;
13016   struct mips_elf_link_hash_table *htab;
13017
13018   static const char * const secname[] =
13019   {
13020     ".text", ".init", ".fini", ".data",
13021     ".rodata", ".sdata", ".sbss", ".bss"
13022   };
13023   static const int sc[] =
13024   {
13025     scText, scInit, scFini, scData,
13026     scRData, scSData, scSBss, scBss
13027   };
13028
13029   /* Sort the dynamic symbols so that those with GOT entries come after
13030      those without.  */
13031   htab = mips_elf_hash_table (info);
13032   BFD_ASSERT (htab != NULL);
13033
13034   if (!mips_elf_sort_hash_table (abfd, info))
13035     return FALSE;
13036
13037   /* Create any scheduled LA25 stubs.  */
13038   hti.info = info;
13039   hti.output_bfd = abfd;
13040   hti.error = FALSE;
13041   htab_traverse (htab->la25_stubs, mips_elf_create_la25_stub, &hti);
13042   if (hti.error)
13043     return FALSE;
13044
13045   /* Get a value for the GP register.  */
13046   if (elf_gp (abfd) == 0)
13047     {
13048       struct bfd_link_hash_entry *h;
13049
13050       h = bfd_link_hash_lookup (info->hash, "_gp", FALSE, FALSE, TRUE);
13051       if (h != NULL && h->type == bfd_link_hash_defined)
13052         elf_gp (abfd) = (h->u.def.value
13053                          + h->u.def.section->output_section->vma
13054                          + h->u.def.section->output_offset);
13055       else if (htab->is_vxworks
13056                && (h = bfd_link_hash_lookup (info->hash,
13057                                              "_GLOBAL_OFFSET_TABLE_",
13058                                              FALSE, FALSE, TRUE))
13059                && h->type == bfd_link_hash_defined)
13060         elf_gp (abfd) = (h->u.def.section->output_section->vma
13061                          + h->u.def.section->output_offset
13062                          + h->u.def.value);
13063       else if (info->relocatable)
13064         {
13065           bfd_vma lo = MINUS_ONE;
13066
13067           /* Find the GP-relative section with the lowest offset.  */
13068           for (o = abfd->sections; o != NULL; o = o->next)
13069             if (o->vma < lo
13070                 && (elf_section_data (o)->this_hdr.sh_flags & SHF_MIPS_GPREL))
13071               lo = o->vma;
13072
13073           /* And calculate GP relative to that.  */
13074           elf_gp (abfd) = lo + ELF_MIPS_GP_OFFSET (info);
13075         }
13076       else
13077         {
13078           /* If the relocate_section function needs to do a reloc
13079              involving the GP value, it should make a reloc_dangerous
13080              callback to warn that GP is not defined.  */
13081         }
13082     }
13083
13084   /* Go through the sections and collect the .reginfo and .mdebug
13085      information.  */
13086   reginfo_sec = NULL;
13087   mdebug_sec = NULL;
13088   gptab_data_sec = NULL;
13089   gptab_bss_sec = NULL;
13090   for (o = abfd->sections; o != NULL; o = o->next)
13091     {
13092       if (strcmp (o->name, ".reginfo") == 0)
13093         {
13094           memset (&reginfo, 0, sizeof reginfo);
13095
13096           /* We have found the .reginfo section in the output file.
13097              Look through all the link_orders comprising it and merge
13098              the information together.  */
13099           for (p = o->map_head.link_order; p != NULL; p = p->next)
13100             {
13101               asection *input_section;
13102               bfd *input_bfd;
13103               Elf32_External_RegInfo ext;
13104               Elf32_RegInfo sub;
13105
13106               if (p->type != bfd_indirect_link_order)
13107                 {
13108                   if (p->type == bfd_data_link_order)
13109                     continue;
13110                   abort ();
13111                 }
13112
13113               input_section = p->u.indirect.section;
13114               input_bfd = input_section->owner;
13115
13116               if (! bfd_get_section_contents (input_bfd, input_section,
13117                                               &ext, 0, sizeof ext))
13118                 return FALSE;
13119
13120               bfd_mips_elf32_swap_reginfo_in (input_bfd, &ext, &sub);
13121
13122               reginfo.ri_gprmask |= sub.ri_gprmask;
13123               reginfo.ri_cprmask[0] |= sub.ri_cprmask[0];
13124               reginfo.ri_cprmask[1] |= sub.ri_cprmask[1];
13125               reginfo.ri_cprmask[2] |= sub.ri_cprmask[2];
13126               reginfo.ri_cprmask[3] |= sub.ri_cprmask[3];
13127
13128               /* ri_gp_value is set by the function
13129                  mips_elf32_section_processing when the section is
13130                  finally written out.  */
13131
13132               /* Hack: reset the SEC_HAS_CONTENTS flag so that
13133                  elf_link_input_bfd ignores this section.  */
13134               input_section->flags &= ~SEC_HAS_CONTENTS;
13135             }
13136
13137           /* Size has been set in _bfd_mips_elf_always_size_sections.  */
13138           BFD_ASSERT(o->size == sizeof (Elf32_External_RegInfo));
13139
13140           /* Skip this section later on (I don't think this currently
13141              matters, but someday it might).  */
13142           o->map_head.link_order = NULL;
13143
13144           reginfo_sec = o;
13145         }
13146
13147       if (strcmp (o->name, ".mdebug") == 0)
13148         {
13149           struct extsym_info einfo;
13150           bfd_vma last;
13151
13152           /* We have found the .mdebug section in the output file.
13153              Look through all the link_orders comprising it and merge
13154              the information together.  */
13155           symhdr->magic = swap->sym_magic;
13156           /* FIXME: What should the version stamp be?  */
13157           symhdr->vstamp = 0;
13158           symhdr->ilineMax = 0;
13159           symhdr->cbLine = 0;
13160           symhdr->idnMax = 0;
13161           symhdr->ipdMax = 0;
13162           symhdr->isymMax = 0;
13163           symhdr->ioptMax = 0;
13164           symhdr->iauxMax = 0;
13165           symhdr->issMax = 0;
13166           symhdr->issExtMax = 0;
13167           symhdr->ifdMax = 0;
13168           symhdr->crfd = 0;
13169           symhdr->iextMax = 0;
13170
13171           /* We accumulate the debugging information itself in the
13172              debug_info structure.  */
13173           debug.line = NULL;
13174           debug.external_dnr = NULL;
13175           debug.external_pdr = NULL;
13176           debug.external_sym = NULL;
13177           debug.external_opt = NULL;
13178           debug.external_aux = NULL;
13179           debug.ss = NULL;
13180           debug.ssext = debug.ssext_end = NULL;
13181           debug.external_fdr = NULL;
13182           debug.external_rfd = NULL;
13183           debug.external_ext = debug.external_ext_end = NULL;
13184
13185           mdebug_handle = bfd_ecoff_debug_init (abfd, &debug, swap, info);
13186           if (mdebug_handle == NULL)
13187             return FALSE;
13188
13189           esym.jmptbl = 0;
13190           esym.cobol_main = 0;
13191           esym.weakext = 0;
13192           esym.reserved = 0;
13193           esym.ifd = ifdNil;
13194           esym.asym.iss = issNil;
13195           esym.asym.st = stLocal;
13196           esym.asym.reserved = 0;
13197           esym.asym.index = indexNil;
13198           last = 0;
13199           for (i = 0; i < sizeof (secname) / sizeof (secname[0]); i++)
13200             {
13201               esym.asym.sc = sc[i];
13202               s = bfd_get_section_by_name (abfd, secname[i]);
13203               if (s != NULL)
13204                 {
13205                   esym.asym.value = s->vma;
13206                   last = s->vma + s->size;
13207                 }
13208               else
13209                 esym.asym.value = last;
13210               if (!bfd_ecoff_debug_one_external (abfd, &debug, swap,
13211                                                  secname[i], &esym))
13212                 return FALSE;
13213             }
13214
13215           for (p = o->map_head.link_order; p != NULL; p = p->next)
13216             {
13217               asection *input_section;
13218               bfd *input_bfd;
13219               const struct ecoff_debug_swap *input_swap;
13220               struct ecoff_debug_info input_debug;
13221               char *eraw_src;
13222               char *eraw_end;
13223
13224               if (p->type != bfd_indirect_link_order)
13225                 {
13226                   if (p->type == bfd_data_link_order)
13227                     continue;
13228                   abort ();
13229                 }
13230
13231               input_section = p->u.indirect.section;
13232               input_bfd = input_section->owner;
13233
13234               if (!is_mips_elf (input_bfd))
13235                 {
13236                   /* I don't know what a non MIPS ELF bfd would be
13237                      doing with a .mdebug section, but I don't really
13238                      want to deal with it.  */
13239                   continue;
13240                 }
13241
13242               input_swap = (get_elf_backend_data (input_bfd)
13243                             ->elf_backend_ecoff_debug_swap);
13244
13245               BFD_ASSERT (p->size == input_section->size);
13246
13247               /* The ECOFF linking code expects that we have already
13248                  read in the debugging information and set up an
13249                  ecoff_debug_info structure, so we do that now.  */
13250               if (! _bfd_mips_elf_read_ecoff_info (input_bfd, input_section,
13251                                                    &input_debug))
13252                 return FALSE;
13253
13254               if (! (bfd_ecoff_debug_accumulate
13255                      (mdebug_handle, abfd, &debug, swap, input_bfd,
13256                       &input_debug, input_swap, info)))
13257                 return FALSE;
13258
13259               /* Loop through the external symbols.  For each one with
13260                  interesting information, try to find the symbol in
13261                  the linker global hash table and save the information
13262                  for the output external symbols.  */
13263               eraw_src = input_debug.external_ext;
13264               eraw_end = (eraw_src
13265                           + (input_debug.symbolic_header.iextMax
13266                              * input_swap->external_ext_size));
13267               for (;
13268                    eraw_src < eraw_end;
13269                    eraw_src += input_swap->external_ext_size)
13270                 {
13271                   EXTR ext;
13272                   const char *name;
13273                   struct mips_elf_link_hash_entry *h;
13274
13275                   (*input_swap->swap_ext_in) (input_bfd, eraw_src, &ext);
13276                   if (ext.asym.sc == scNil
13277                       || ext.asym.sc == scUndefined
13278                       || ext.asym.sc == scSUndefined)
13279                     continue;
13280
13281                   name = input_debug.ssext + ext.asym.iss;
13282                   h = mips_elf_link_hash_lookup (mips_elf_hash_table (info),
13283                                                  name, FALSE, FALSE, TRUE);
13284                   if (h == NULL || h->esym.ifd != -2)
13285                     continue;
13286
13287                   if (ext.ifd != -1)
13288                     {
13289                       BFD_ASSERT (ext.ifd
13290                                   < input_debug.symbolic_header.ifdMax);
13291                       ext.ifd = input_debug.ifdmap[ext.ifd];
13292                     }
13293
13294                   h->esym = ext;
13295                 }
13296
13297               /* Free up the information we just read.  */
13298               free (input_debug.line);
13299               free (input_debug.external_dnr);
13300               free (input_debug.external_pdr);
13301               free (input_debug.external_sym);
13302               free (input_debug.external_opt);
13303               free (input_debug.external_aux);
13304               free (input_debug.ss);
13305               free (input_debug.ssext);
13306               free (input_debug.external_fdr);
13307               free (input_debug.external_rfd);
13308               free (input_debug.external_ext);
13309
13310               /* Hack: reset the SEC_HAS_CONTENTS flag so that
13311                  elf_link_input_bfd ignores this section.  */
13312               input_section->flags &= ~SEC_HAS_CONTENTS;
13313             }
13314
13315           if (SGI_COMPAT (abfd) && info->shared)
13316             {
13317               /* Create .rtproc section.  */
13318               rtproc_sec = bfd_get_linker_section (abfd, ".rtproc");
13319               if (rtproc_sec == NULL)
13320                 {
13321                   flagword flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY
13322                                     | SEC_LINKER_CREATED | SEC_READONLY);
13323
13324                   rtproc_sec = bfd_make_section_anyway_with_flags (abfd,
13325                                                                    ".rtproc",
13326                                                                    flags);
13327                   if (rtproc_sec == NULL
13328                       || ! bfd_set_section_alignment (abfd, rtproc_sec, 4))
13329                     return FALSE;
13330                 }
13331
13332               if (! mips_elf_create_procedure_table (mdebug_handle, abfd,
13333                                                      info, rtproc_sec,
13334                                                      &debug))
13335                 return FALSE;
13336             }
13337
13338           /* Build the external symbol information.  */
13339           einfo.abfd = abfd;
13340           einfo.info = info;
13341           einfo.debug = &debug;
13342           einfo.swap = swap;
13343           einfo.failed = FALSE;
13344           mips_elf_link_hash_traverse (mips_elf_hash_table (info),
13345                                        mips_elf_output_extsym, &einfo);
13346           if (einfo.failed)
13347             return FALSE;
13348
13349           /* Set the size of the .mdebug section.  */
13350           o->size = bfd_ecoff_debug_size (abfd, &debug, swap);
13351
13352           /* Skip this section later on (I don't think this currently
13353              matters, but someday it might).  */
13354           o->map_head.link_order = NULL;
13355
13356           mdebug_sec = o;
13357         }
13358
13359       if (CONST_STRNEQ (o->name, ".gptab."))
13360         {
13361           const char *subname;
13362           unsigned int c;
13363           Elf32_gptab *tab;
13364           Elf32_External_gptab *ext_tab;
13365           unsigned int j;
13366
13367           /* The .gptab.sdata and .gptab.sbss sections hold
13368              information describing how the small data area would
13369              change depending upon the -G switch.  These sections
13370              not used in executables files.  */
13371           if (! info->relocatable)
13372             {
13373               for (p = o->map_head.link_order; p != NULL; p = p->next)
13374                 {
13375                   asection *input_section;
13376
13377                   if (p->type != bfd_indirect_link_order)
13378                     {
13379                       if (p->type == bfd_data_link_order)
13380                         continue;
13381                       abort ();
13382                     }
13383
13384                   input_section = p->u.indirect.section;
13385
13386                   /* Hack: reset the SEC_HAS_CONTENTS flag so that
13387                      elf_link_input_bfd ignores this section.  */
13388                   input_section->flags &= ~SEC_HAS_CONTENTS;
13389                 }
13390
13391               /* Skip this section later on (I don't think this
13392                  currently matters, but someday it might).  */
13393               o->map_head.link_order = NULL;
13394
13395               /* Really remove the section.  */
13396               bfd_section_list_remove (abfd, o);
13397               --abfd->section_count;
13398
13399               continue;
13400             }
13401
13402           /* There is one gptab for initialized data, and one for
13403              uninitialized data.  */
13404           if (strcmp (o->name, ".gptab.sdata") == 0)
13405             gptab_data_sec = o;
13406           else if (strcmp (o->name, ".gptab.sbss") == 0)
13407             gptab_bss_sec = o;
13408           else
13409             {
13410               (*_bfd_error_handler)
13411                 (_("%s: illegal section name `%s'"),
13412                  bfd_get_filename (abfd), o->name);
13413               bfd_set_error (bfd_error_nonrepresentable_section);
13414               return FALSE;
13415             }
13416
13417           /* The linker script always combines .gptab.data and
13418              .gptab.sdata into .gptab.sdata, and likewise for
13419              .gptab.bss and .gptab.sbss.  It is possible that there is
13420              no .sdata or .sbss section in the output file, in which
13421              case we must change the name of the output section.  */
13422           subname = o->name + sizeof ".gptab" - 1;
13423           if (bfd_get_section_by_name (abfd, subname) == NULL)
13424             {
13425               if (o == gptab_data_sec)
13426                 o->name = ".gptab.data";
13427               else
13428                 o->name = ".gptab.bss";
13429               subname = o->name + sizeof ".gptab" - 1;
13430               BFD_ASSERT (bfd_get_section_by_name (abfd, subname) != NULL);
13431             }
13432
13433           /* Set up the first entry.  */
13434           c = 1;
13435           amt = c * sizeof (Elf32_gptab);
13436           tab = bfd_malloc (amt);
13437           if (tab == NULL)
13438             return FALSE;
13439           tab[0].gt_header.gt_current_g_value = elf_gp_size (abfd);
13440           tab[0].gt_header.gt_unused = 0;
13441
13442           /* Combine the input sections.  */
13443           for (p = o->map_head.link_order; p != NULL; p = p->next)
13444             {
13445               asection *input_section;
13446               bfd *input_bfd;
13447               bfd_size_type size;
13448               unsigned long last;
13449               bfd_size_type gpentry;
13450
13451               if (p->type != bfd_indirect_link_order)
13452                 {
13453                   if (p->type == bfd_data_link_order)
13454                     continue;
13455                   abort ();
13456                 }
13457
13458               input_section = p->u.indirect.section;
13459               input_bfd = input_section->owner;
13460
13461               /* Combine the gptab entries for this input section one
13462                  by one.  We know that the input gptab entries are
13463                  sorted by ascending -G value.  */
13464               size = input_section->size;
13465               last = 0;
13466               for (gpentry = sizeof (Elf32_External_gptab);
13467                    gpentry < size;
13468                    gpentry += sizeof (Elf32_External_gptab))
13469                 {
13470                   Elf32_External_gptab ext_gptab;
13471                   Elf32_gptab int_gptab;
13472                   unsigned long val;
13473                   unsigned long add;
13474                   bfd_boolean exact;
13475                   unsigned int look;
13476
13477                   if (! (bfd_get_section_contents
13478                          (input_bfd, input_section, &ext_gptab, gpentry,
13479                           sizeof (Elf32_External_gptab))))
13480                     {
13481                       free (tab);
13482                       return FALSE;
13483                     }
13484
13485                   bfd_mips_elf32_swap_gptab_in (input_bfd, &ext_gptab,
13486                                                 &int_gptab);
13487                   val = int_gptab.gt_entry.gt_g_value;
13488                   add = int_gptab.gt_entry.gt_bytes - last;
13489
13490                   exact = FALSE;
13491                   for (look = 1; look < c; look++)
13492                     {
13493                       if (tab[look].gt_entry.gt_g_value >= val)
13494                         tab[look].gt_entry.gt_bytes += add;
13495
13496                       if (tab[look].gt_entry.gt_g_value == val)
13497                         exact = TRUE;
13498                     }
13499
13500                   if (! exact)
13501                     {
13502                       Elf32_gptab *new_tab;
13503                       unsigned int max;
13504
13505                       /* We need a new table entry.  */
13506                       amt = (bfd_size_type) (c + 1) * sizeof (Elf32_gptab);
13507                       new_tab = bfd_realloc (tab, amt);
13508                       if (new_tab == NULL)
13509                         {
13510                           free (tab);
13511                           return FALSE;
13512                         }
13513                       tab = new_tab;
13514                       tab[c].gt_entry.gt_g_value = val;
13515                       tab[c].gt_entry.gt_bytes = add;
13516
13517                       /* Merge in the size for the next smallest -G
13518                          value, since that will be implied by this new
13519                          value.  */
13520                       max = 0;
13521                       for (look = 1; look < c; look++)
13522                         {
13523                           if (tab[look].gt_entry.gt_g_value < val
13524                               && (max == 0
13525                                   || (tab[look].gt_entry.gt_g_value
13526                                       > tab[max].gt_entry.gt_g_value)))
13527                             max = look;
13528                         }
13529                       if (max != 0)
13530                         tab[c].gt_entry.gt_bytes +=
13531                           tab[max].gt_entry.gt_bytes;
13532
13533                       ++c;
13534                     }
13535
13536                   last = int_gptab.gt_entry.gt_bytes;
13537                 }
13538
13539               /* Hack: reset the SEC_HAS_CONTENTS flag so that
13540                  elf_link_input_bfd ignores this section.  */
13541               input_section->flags &= ~SEC_HAS_CONTENTS;
13542             }
13543
13544           /* The table must be sorted by -G value.  */
13545           if (c > 2)
13546             qsort (tab + 1, c - 1, sizeof (tab[0]), gptab_compare);
13547
13548           /* Swap out the table.  */
13549           amt = (bfd_size_type) c * sizeof (Elf32_External_gptab);
13550           ext_tab = bfd_alloc (abfd, amt);
13551           if (ext_tab == NULL)
13552             {
13553               free (tab);
13554               return FALSE;
13555             }
13556
13557           for (j = 0; j < c; j++)
13558             bfd_mips_elf32_swap_gptab_out (abfd, tab + j, ext_tab + j);
13559           free (tab);
13560
13561           o->size = c * sizeof (Elf32_External_gptab);
13562           o->contents = (bfd_byte *) ext_tab;
13563
13564           /* Skip this section later on (I don't think this currently
13565              matters, but someday it might).  */
13566           o->map_head.link_order = NULL;
13567         }
13568     }
13569
13570   /* Invoke the regular ELF backend linker to do all the work.  */
13571   if (!bfd_elf_final_link (abfd, info))
13572     return FALSE;
13573
13574   /* Now write out the computed sections.  */
13575
13576   if (reginfo_sec != NULL)
13577     {
13578       Elf32_External_RegInfo ext;
13579
13580       bfd_mips_elf32_swap_reginfo_out (abfd, &reginfo, &ext);
13581       if (! bfd_set_section_contents (abfd, reginfo_sec, &ext, 0, sizeof ext))
13582         return FALSE;
13583     }
13584
13585   if (mdebug_sec != NULL)
13586     {
13587       BFD_ASSERT (abfd->output_has_begun);
13588       if (! bfd_ecoff_write_accumulated_debug (mdebug_handle, abfd, &debug,
13589                                                swap, info,
13590                                                mdebug_sec->filepos))
13591         return FALSE;
13592
13593       bfd_ecoff_debug_free (mdebug_handle, abfd, &debug, swap, info);
13594     }
13595
13596   if (gptab_data_sec != NULL)
13597     {
13598       if (! bfd_set_section_contents (abfd, gptab_data_sec,
13599                                       gptab_data_sec->contents,
13600                                       0, gptab_data_sec->size))
13601         return FALSE;
13602     }
13603
13604   if (gptab_bss_sec != NULL)
13605     {
13606       if (! bfd_set_section_contents (abfd, gptab_bss_sec,
13607                                       gptab_bss_sec->contents,
13608                                       0, gptab_bss_sec->size))
13609         return FALSE;
13610     }
13611
13612   if (SGI_COMPAT (abfd))
13613     {
13614       rtproc_sec = bfd_get_section_by_name (abfd, ".rtproc");
13615       if (rtproc_sec != NULL)
13616         {
13617           if (! bfd_set_section_contents (abfd, rtproc_sec,
13618                                           rtproc_sec->contents,
13619                                           0, rtproc_sec->size))
13620             return FALSE;
13621         }
13622     }
13623
13624   return TRUE;
13625 }
13626 \f
13627 /* Structure for saying that BFD machine EXTENSION extends BASE.  */
13628
13629 struct mips_mach_extension {
13630   unsigned long extension, base;
13631 };
13632
13633
13634 /* An array describing how BFD machines relate to one another.  The entries
13635    are ordered topologically with MIPS I extensions listed last.  */
13636
13637 static const struct mips_mach_extension mips_mach_extensions[] = {
13638   /* MIPS64r2 extensions.  */
13639   { bfd_mach_mips_octeon2, bfd_mach_mips_octeonp },
13640   { bfd_mach_mips_octeonp, bfd_mach_mips_octeon },
13641   { bfd_mach_mips_octeon, bfd_mach_mipsisa64r2 },
13642
13643   /* MIPS64 extensions.  */
13644   { bfd_mach_mipsisa64r2, bfd_mach_mipsisa64 },
13645   { bfd_mach_mips_sb1, bfd_mach_mipsisa64 },
13646   { bfd_mach_mips_xlr, bfd_mach_mipsisa64 },
13647   { bfd_mach_mips_loongson_3a, bfd_mach_mipsisa64 },
13648
13649   /* MIPS V extensions.  */
13650   { bfd_mach_mipsisa64, bfd_mach_mips5 },
13651
13652   /* R10000 extensions.  */
13653   { bfd_mach_mips12000, bfd_mach_mips10000 },
13654   { bfd_mach_mips14000, bfd_mach_mips10000 },
13655   { bfd_mach_mips16000, bfd_mach_mips10000 },
13656
13657   /* R5000 extensions.  Note: the vr5500 ISA is an extension of the core
13658      vr5400 ISA, but doesn't include the multimedia stuff.  It seems
13659      better to allow vr5400 and vr5500 code to be merged anyway, since
13660      many libraries will just use the core ISA.  Perhaps we could add
13661      some sort of ASE flag if this ever proves a problem.  */
13662   { bfd_mach_mips5500, bfd_mach_mips5400 },
13663   { bfd_mach_mips5400, bfd_mach_mips5000 },
13664
13665   /* MIPS IV extensions.  */
13666   { bfd_mach_mips5, bfd_mach_mips8000 },
13667   { bfd_mach_mips10000, bfd_mach_mips8000 },
13668   { bfd_mach_mips5000, bfd_mach_mips8000 },
13669   { bfd_mach_mips7000, bfd_mach_mips8000 },
13670   { bfd_mach_mips9000, bfd_mach_mips8000 },
13671
13672   /* VR4100 extensions.  */
13673   { bfd_mach_mips4120, bfd_mach_mips4100 },
13674   { bfd_mach_mips4111, bfd_mach_mips4100 },
13675
13676   /* MIPS III extensions.  */
13677   { bfd_mach_mips_loongson_2e, bfd_mach_mips4000 },
13678   { bfd_mach_mips_loongson_2f, bfd_mach_mips4000 },
13679   { bfd_mach_mips8000, bfd_mach_mips4000 },
13680   { bfd_mach_mips4650, bfd_mach_mips4000 },
13681   { bfd_mach_mips4600, bfd_mach_mips4000 },
13682   { bfd_mach_mips4400, bfd_mach_mips4000 },
13683   { bfd_mach_mips4300, bfd_mach_mips4000 },
13684   { bfd_mach_mips4100, bfd_mach_mips4000 },
13685   { bfd_mach_mips4010, bfd_mach_mips4000 },
13686   { bfd_mach_mips5900, bfd_mach_mips4000 },
13687
13688   /* MIPS32 extensions.  */
13689   { bfd_mach_mipsisa32r2, bfd_mach_mipsisa32 },
13690
13691   /* MIPS II extensions.  */
13692   { bfd_mach_mips4000, bfd_mach_mips6000 },
13693   { bfd_mach_mipsisa32, bfd_mach_mips6000 },
13694
13695   /* MIPS I extensions.  */
13696   { bfd_mach_mips6000, bfd_mach_mips3000 },
13697   { bfd_mach_mips3900, bfd_mach_mips3000 }
13698 };
13699
13700
13701 /* Return true if bfd machine EXTENSION is an extension of machine BASE.  */
13702
13703 static bfd_boolean
13704 mips_mach_extends_p (unsigned long base, unsigned long extension)
13705 {
13706   size_t i;
13707
13708   if (extension == base)
13709     return TRUE;
13710
13711   if (base == bfd_mach_mipsisa32
13712       && mips_mach_extends_p (bfd_mach_mipsisa64, extension))
13713     return TRUE;
13714
13715   if (base == bfd_mach_mipsisa32r2
13716       && mips_mach_extends_p (bfd_mach_mipsisa64r2, extension))
13717     return TRUE;
13718
13719   for (i = 0; i < ARRAY_SIZE (mips_mach_extensions); i++)
13720     if (extension == mips_mach_extensions[i].extension)
13721       {
13722         extension = mips_mach_extensions[i].base;
13723         if (extension == base)
13724           return TRUE;
13725       }
13726
13727   return FALSE;
13728 }
13729
13730
13731 /* Return true if the given ELF header flags describe a 32-bit binary.  */
13732
13733 static bfd_boolean
13734 mips_32bit_flags_p (flagword flags)
13735 {
13736   return ((flags & EF_MIPS_32BITMODE) != 0
13737           || (flags & EF_MIPS_ABI) == E_MIPS_ABI_O32
13738           || (flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32
13739           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1
13740           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2
13741           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32
13742           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2);
13743 }
13744
13745
13746 /* Merge object attributes from IBFD into OBFD.  Raise an error if
13747    there are conflicting attributes.  */
13748 static bfd_boolean
13749 mips_elf_merge_obj_attributes (bfd *ibfd, bfd *obfd)
13750 {
13751   obj_attribute *in_attr;
13752   obj_attribute *out_attr;
13753   bfd *abi_fp_bfd;
13754
13755   abi_fp_bfd = mips_elf_tdata (obfd)->abi_fp_bfd;
13756   in_attr = elf_known_obj_attributes (ibfd)[OBJ_ATTR_GNU];
13757   if (!abi_fp_bfd && in_attr[Tag_GNU_MIPS_ABI_FP].i != 0)
13758     mips_elf_tdata (obfd)->abi_fp_bfd = ibfd;
13759
13760   if (!elf_known_obj_attributes_proc (obfd)[0].i)
13761     {
13762       /* This is the first object.  Copy the attributes.  */
13763       _bfd_elf_copy_obj_attributes (ibfd, obfd);
13764
13765       /* Use the Tag_null value to indicate the attributes have been
13766          initialized.  */
13767       elf_known_obj_attributes_proc (obfd)[0].i = 1;
13768
13769       return TRUE;
13770     }
13771
13772   /* Check for conflicting Tag_GNU_MIPS_ABI_FP attributes and merge
13773      non-conflicting ones.  */
13774   out_attr = elf_known_obj_attributes (obfd)[OBJ_ATTR_GNU];
13775   if (in_attr[Tag_GNU_MIPS_ABI_FP].i != out_attr[Tag_GNU_MIPS_ABI_FP].i)
13776     {
13777       out_attr[Tag_GNU_MIPS_ABI_FP].type = 1;
13778       if (out_attr[Tag_GNU_MIPS_ABI_FP].i == 0)
13779         out_attr[Tag_GNU_MIPS_ABI_FP].i = in_attr[Tag_GNU_MIPS_ABI_FP].i;
13780       else if (in_attr[Tag_GNU_MIPS_ABI_FP].i != 0)
13781         switch (out_attr[Tag_GNU_MIPS_ABI_FP].i)
13782           {
13783           case 1:
13784             switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
13785               {
13786               case 2:
13787                 _bfd_error_handler
13788                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13789                    obfd, abi_fp_bfd, ibfd, "-mdouble-float", "-msingle-float");
13790                 break;
13791
13792               case 3:
13793                 _bfd_error_handler
13794                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13795                    obfd, abi_fp_bfd, ibfd, "-mhard-float", "-msoft-float");
13796                 break;
13797
13798               case 4:
13799                 _bfd_error_handler
13800                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13801                    obfd, abi_fp_bfd, ibfd,
13802                    "-mdouble-float", "-mips32r2 -mfp64");
13803                 break;
13804
13805               default:
13806                 _bfd_error_handler
13807                   (_("Warning: %B uses %s (set by %B), "
13808                      "%B uses unknown floating point ABI %d"),
13809                    obfd, abi_fp_bfd, ibfd,
13810                    "-mdouble-float", in_attr[Tag_GNU_MIPS_ABI_FP].i);
13811                 break;
13812               }
13813             break;
13814
13815           case 2:
13816             switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
13817               {
13818               case 1:
13819                 _bfd_error_handler
13820                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13821                    obfd, abi_fp_bfd, ibfd, "-msingle-float", "-mdouble-float");
13822                 break;
13823
13824               case 3:
13825                 _bfd_error_handler
13826                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13827                    obfd, abi_fp_bfd, ibfd, "-mhard-float", "-msoft-float");
13828                 break;
13829
13830               case 4:
13831                 _bfd_error_handler
13832                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13833                    obfd, abi_fp_bfd, ibfd,
13834                    "-msingle-float", "-mips32r2 -mfp64");
13835                 break;
13836
13837               default:
13838                 _bfd_error_handler
13839                   (_("Warning: %B uses %s (set by %B), "
13840                      "%B uses unknown floating point ABI %d"),
13841                    obfd, abi_fp_bfd, ibfd,
13842                    "-msingle-float", in_attr[Tag_GNU_MIPS_ABI_FP].i);
13843                 break;
13844               }
13845             break;
13846
13847           case 3:
13848             switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
13849               {
13850               case 1:
13851               case 2:
13852               case 4:
13853                 _bfd_error_handler
13854                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13855                    obfd, abi_fp_bfd, ibfd, "-msoft-float", "-mhard-float");
13856                 break;
13857
13858               default:
13859                 _bfd_error_handler
13860                   (_("Warning: %B uses %s (set by %B), "
13861                      "%B uses unknown floating point ABI %d"),
13862                    obfd, abi_fp_bfd, ibfd,
13863                    "-msoft-float", in_attr[Tag_GNU_MIPS_ABI_FP].i);
13864                 break;
13865               }
13866             break;
13867
13868           case 4:
13869             switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
13870               {
13871               case 1:
13872                 _bfd_error_handler
13873                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13874                    obfd, abi_fp_bfd, ibfd,
13875                    "-mips32r2 -mfp64", "-mdouble-float");
13876                 break;
13877
13878               case 2:
13879                 _bfd_error_handler
13880                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13881                    obfd, abi_fp_bfd, ibfd,
13882                    "-mips32r2 -mfp64", "-msingle-float");
13883                 break;
13884
13885               case 3:
13886                 _bfd_error_handler
13887                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13888                    obfd, abi_fp_bfd, ibfd, "-mhard-float", "-msoft-float");
13889                 break;
13890
13891               default:
13892                 _bfd_error_handler
13893                   (_("Warning: %B uses %s (set by %B), "
13894                      "%B uses unknown floating point ABI %d"),
13895                    obfd, abi_fp_bfd, ibfd,
13896                    "-mips32r2 -mfp64", in_attr[Tag_GNU_MIPS_ABI_FP].i);
13897                 break;
13898               }
13899             break;
13900
13901           default:
13902             switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
13903               {
13904               case 1:
13905                 _bfd_error_handler
13906                   (_("Warning: %B uses unknown floating point ABI %d "
13907                      "(set by %B), %B uses %s"),
13908                    obfd, abi_fp_bfd, ibfd,
13909                    out_attr[Tag_GNU_MIPS_ABI_FP].i, "-mdouble-float");
13910                 break;
13911
13912               case 2:
13913                 _bfd_error_handler
13914                   (_("Warning: %B uses unknown floating point ABI %d "
13915                      "(set by %B), %B uses %s"),
13916                    obfd, abi_fp_bfd, ibfd,
13917                    out_attr[Tag_GNU_MIPS_ABI_FP].i, "-msingle-float");
13918                 break;
13919
13920               case 3:
13921                 _bfd_error_handler
13922                   (_("Warning: %B uses unknown floating point ABI %d "
13923                      "(set by %B), %B uses %s"),
13924                    obfd, abi_fp_bfd, ibfd,
13925                    out_attr[Tag_GNU_MIPS_ABI_FP].i, "-msoft-float");
13926                 break;
13927
13928               case 4:
13929                 _bfd_error_handler
13930                   (_("Warning: %B uses unknown floating point ABI %d "
13931                      "(set by %B), %B uses %s"),
13932                    obfd, abi_fp_bfd, ibfd,
13933                    out_attr[Tag_GNU_MIPS_ABI_FP].i, "-mips32r2 -mfp64");
13934                 break;
13935
13936               default:
13937                 _bfd_error_handler
13938                   (_("Warning: %B uses unknown floating point ABI %d "
13939                      "(set by %B), %B uses unknown floating point ABI %d"),
13940                    obfd, abi_fp_bfd, ibfd,
13941                    out_attr[Tag_GNU_MIPS_ABI_FP].i,
13942                    in_attr[Tag_GNU_MIPS_ABI_FP].i);
13943                 break;
13944               }
13945             break;
13946           }
13947     }
13948
13949   /* Merge Tag_compatibility attributes and any common GNU ones.  */
13950   _bfd_elf_merge_object_attributes (ibfd, obfd);
13951
13952   return TRUE;
13953 }
13954
13955 /* Merge backend specific data from an object file to the output
13956    object file when linking.  */
13957
13958 bfd_boolean
13959 _bfd_mips_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
13960 {
13961   flagword old_flags;
13962   flagword new_flags;
13963   bfd_boolean ok;
13964   bfd_boolean null_input_bfd = TRUE;
13965   asection *sec;
13966
13967   /* Check if we have the same endianness.  */
13968   if (! _bfd_generic_verify_endian_match (ibfd, obfd))
13969     {
13970       (*_bfd_error_handler)
13971         (_("%B: endianness incompatible with that of the selected emulation"),
13972          ibfd);
13973       return FALSE;
13974     }
13975
13976   if (!is_mips_elf (ibfd) || !is_mips_elf (obfd))
13977     return TRUE;
13978
13979   if (strcmp (bfd_get_target (ibfd), bfd_get_target (obfd)) != 0)
13980     {
13981       (*_bfd_error_handler)
13982         (_("%B: ABI is incompatible with that of the selected emulation"),
13983          ibfd);
13984       return FALSE;
13985     }
13986
13987   if (!mips_elf_merge_obj_attributes (ibfd, obfd))
13988     return FALSE;
13989
13990   new_flags = elf_elfheader (ibfd)->e_flags;
13991   elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_NOREORDER;
13992   old_flags = elf_elfheader (obfd)->e_flags;
13993
13994   if (! elf_flags_init (obfd))
13995     {
13996       elf_flags_init (obfd) = TRUE;
13997       elf_elfheader (obfd)->e_flags = new_flags;
13998       elf_elfheader (obfd)->e_ident[EI_CLASS]
13999         = elf_elfheader (ibfd)->e_ident[EI_CLASS];
14000
14001       if (bfd_get_arch (obfd) == bfd_get_arch (ibfd)
14002           && (bfd_get_arch_info (obfd)->the_default
14003               || mips_mach_extends_p (bfd_get_mach (obfd),
14004                                       bfd_get_mach (ibfd))))
14005         {
14006           if (! bfd_set_arch_mach (obfd, bfd_get_arch (ibfd),
14007                                    bfd_get_mach (ibfd)))
14008             return FALSE;
14009         }
14010
14011       return TRUE;
14012     }
14013
14014   /* Check flag compatibility.  */
14015
14016   new_flags &= ~EF_MIPS_NOREORDER;
14017   old_flags &= ~EF_MIPS_NOREORDER;
14018
14019   /* Some IRIX 6 BSD-compatibility objects have this bit set.  It
14020      doesn't seem to matter.  */
14021   new_flags &= ~EF_MIPS_XGOT;
14022   old_flags &= ~EF_MIPS_XGOT;
14023
14024   /* MIPSpro generates ucode info in n64 objects.  Again, we should
14025      just be able to ignore this.  */
14026   new_flags &= ~EF_MIPS_UCODE;
14027   old_flags &= ~EF_MIPS_UCODE;
14028
14029   /* DSOs should only be linked with CPIC code.  */
14030   if ((ibfd->flags & DYNAMIC) != 0)
14031     new_flags |= EF_MIPS_PIC | EF_MIPS_CPIC;
14032
14033   if (new_flags == old_flags)
14034     return TRUE;
14035
14036   /* Check to see if the input BFD actually contains any sections.
14037      If not, its flags may not have been initialised either, but it cannot
14038      actually cause any incompatibility.  */
14039   for (sec = ibfd->sections; sec != NULL; sec = sec->next)
14040     {
14041       /* Ignore synthetic sections and empty .text, .data and .bss sections
14042          which are automatically generated by gas.  Also ignore fake
14043          (s)common sections, since merely defining a common symbol does
14044          not affect compatibility.  */
14045       if ((sec->flags & SEC_IS_COMMON) == 0
14046           && strcmp (sec->name, ".reginfo")
14047           && strcmp (sec->name, ".mdebug")
14048           && (sec->size != 0
14049               || (strcmp (sec->name, ".text")
14050                   && strcmp (sec->name, ".data")
14051                   && strcmp (sec->name, ".bss"))))
14052         {
14053           null_input_bfd = FALSE;
14054           break;
14055         }
14056     }
14057   if (null_input_bfd)
14058     return TRUE;
14059
14060   ok = TRUE;
14061
14062   if (((new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0)
14063       != ((old_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0))
14064     {
14065       (*_bfd_error_handler)
14066         (_("%B: warning: linking abicalls files with non-abicalls files"),
14067          ibfd);
14068       ok = TRUE;
14069     }
14070
14071   if (new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC))
14072     elf_elfheader (obfd)->e_flags |= EF_MIPS_CPIC;
14073   if (! (new_flags & EF_MIPS_PIC))
14074     elf_elfheader (obfd)->e_flags &= ~EF_MIPS_PIC;
14075
14076   new_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC);
14077   old_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC);
14078
14079   /* Compare the ISAs.  */
14080   if (mips_32bit_flags_p (old_flags) != mips_32bit_flags_p (new_flags))
14081     {
14082       (*_bfd_error_handler)
14083         (_("%B: linking 32-bit code with 64-bit code"),
14084          ibfd);
14085       ok = FALSE;
14086     }
14087   else if (!mips_mach_extends_p (bfd_get_mach (ibfd), bfd_get_mach (obfd)))
14088     {
14089       /* OBFD's ISA isn't the same as, or an extension of, IBFD's.  */
14090       if (mips_mach_extends_p (bfd_get_mach (obfd), bfd_get_mach (ibfd)))
14091         {
14092           /* Copy the architecture info from IBFD to OBFD.  Also copy
14093              the 32-bit flag (if set) so that we continue to recognise
14094              OBFD as a 32-bit binary.  */
14095           bfd_set_arch_info (obfd, bfd_get_arch_info (ibfd));
14096           elf_elfheader (obfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH);
14097           elf_elfheader (obfd)->e_flags
14098             |= new_flags & (EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
14099
14100           /* Copy across the ABI flags if OBFD doesn't use them
14101              and if that was what caused us to treat IBFD as 32-bit.  */
14102           if ((old_flags & EF_MIPS_ABI) == 0
14103               && mips_32bit_flags_p (new_flags)
14104               && !mips_32bit_flags_p (new_flags & ~EF_MIPS_ABI))
14105             elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ABI;
14106         }
14107       else
14108         {
14109           /* The ISAs aren't compatible.  */
14110           (*_bfd_error_handler)
14111             (_("%B: linking %s module with previous %s modules"),
14112              ibfd,
14113              bfd_printable_name (ibfd),
14114              bfd_printable_name (obfd));
14115           ok = FALSE;
14116         }
14117     }
14118
14119   new_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
14120   old_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
14121
14122   /* Compare ABIs.  The 64-bit ABI does not use EF_MIPS_ABI.  But, it
14123      does set EI_CLASS differently from any 32-bit ABI.  */
14124   if ((new_flags & EF_MIPS_ABI) != (old_flags & EF_MIPS_ABI)
14125       || (elf_elfheader (ibfd)->e_ident[EI_CLASS]
14126           != elf_elfheader (obfd)->e_ident[EI_CLASS]))
14127     {
14128       /* Only error if both are set (to different values).  */
14129       if (((new_flags & EF_MIPS_ABI) && (old_flags & EF_MIPS_ABI))
14130           || (elf_elfheader (ibfd)->e_ident[EI_CLASS]
14131               != elf_elfheader (obfd)->e_ident[EI_CLASS]))
14132         {
14133           (*_bfd_error_handler)
14134             (_("%B: ABI mismatch: linking %s module with previous %s modules"),
14135              ibfd,
14136              elf_mips_abi_name (ibfd),
14137              elf_mips_abi_name (obfd));
14138           ok = FALSE;
14139         }
14140       new_flags &= ~EF_MIPS_ABI;
14141       old_flags &= ~EF_MIPS_ABI;
14142     }
14143
14144   /* Compare ASEs.  Forbid linking MIPS16 and microMIPS ASE modules together
14145      and allow arbitrary mixing of the remaining ASEs (retain the union).  */
14146   if ((new_flags & EF_MIPS_ARCH_ASE) != (old_flags & EF_MIPS_ARCH_ASE))
14147     {
14148       int old_micro = old_flags & EF_MIPS_ARCH_ASE_MICROMIPS;
14149       int new_micro = new_flags & EF_MIPS_ARCH_ASE_MICROMIPS;
14150       int old_m16 = old_flags & EF_MIPS_ARCH_ASE_M16;
14151       int new_m16 = new_flags & EF_MIPS_ARCH_ASE_M16;
14152       int micro_mis = old_m16 && new_micro;
14153       int m16_mis = old_micro && new_m16;
14154
14155       if (m16_mis || micro_mis)
14156         {
14157           (*_bfd_error_handler)
14158             (_("%B: ASE mismatch: linking %s module with previous %s modules"),
14159              ibfd,
14160              m16_mis ? "MIPS16" : "microMIPS",
14161              m16_mis ? "microMIPS" : "MIPS16");
14162           ok = FALSE;
14163         }
14164
14165       elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ARCH_ASE;
14166
14167       new_flags &= ~ EF_MIPS_ARCH_ASE;
14168       old_flags &= ~ EF_MIPS_ARCH_ASE;
14169     }
14170
14171   /* Warn about any other mismatches */
14172   if (new_flags != old_flags)
14173     {
14174       (*_bfd_error_handler)
14175         (_("%B: uses different e_flags (0x%lx) fields than previous modules (0x%lx)"),
14176          ibfd, (unsigned long) new_flags,
14177          (unsigned long) old_flags);
14178       ok = FALSE;
14179     }
14180
14181   if (! ok)
14182     {
14183       bfd_set_error (bfd_error_bad_value);
14184       return FALSE;
14185     }
14186
14187   return TRUE;
14188 }
14189
14190 /* Function to keep MIPS specific file flags like as EF_MIPS_PIC.  */
14191
14192 bfd_boolean
14193 _bfd_mips_elf_set_private_flags (bfd *abfd, flagword flags)
14194 {
14195   BFD_ASSERT (!elf_flags_init (abfd)
14196               || elf_elfheader (abfd)->e_flags == flags);
14197
14198   elf_elfheader (abfd)->e_flags = flags;
14199   elf_flags_init (abfd) = TRUE;
14200   return TRUE;
14201 }
14202
14203 char *
14204 _bfd_mips_elf_get_target_dtag (bfd_vma dtag)
14205 {
14206   switch (dtag)
14207     {
14208     default: return "";
14209     case DT_MIPS_RLD_VERSION:
14210       return "MIPS_RLD_VERSION";
14211     case DT_MIPS_TIME_STAMP:
14212       return "MIPS_TIME_STAMP";
14213     case DT_MIPS_ICHECKSUM:
14214       return "MIPS_ICHECKSUM";
14215     case DT_MIPS_IVERSION:
14216       return "MIPS_IVERSION";
14217     case DT_MIPS_FLAGS:
14218       return "MIPS_FLAGS";
14219     case DT_MIPS_BASE_ADDRESS:
14220       return "MIPS_BASE_ADDRESS";
14221     case DT_MIPS_MSYM:
14222       return "MIPS_MSYM";
14223     case DT_MIPS_CONFLICT:
14224       return "MIPS_CONFLICT";
14225     case DT_MIPS_LIBLIST:
14226       return "MIPS_LIBLIST";
14227     case DT_MIPS_LOCAL_GOTNO:
14228       return "MIPS_LOCAL_GOTNO";
14229     case DT_MIPS_CONFLICTNO:
14230       return "MIPS_CONFLICTNO";
14231     case DT_MIPS_LIBLISTNO:
14232       return "MIPS_LIBLISTNO";
14233     case DT_MIPS_SYMTABNO:
14234       return "MIPS_SYMTABNO";
14235     case DT_MIPS_UNREFEXTNO:
14236       return "MIPS_UNREFEXTNO";
14237     case DT_MIPS_GOTSYM:
14238       return "MIPS_GOTSYM";
14239     case DT_MIPS_HIPAGENO:
14240       return "MIPS_HIPAGENO";
14241     case DT_MIPS_RLD_MAP:
14242       return "MIPS_RLD_MAP";
14243     case DT_MIPS_DELTA_CLASS:
14244       return "MIPS_DELTA_CLASS";
14245     case DT_MIPS_DELTA_CLASS_NO:
14246       return "MIPS_DELTA_CLASS_NO";
14247     case DT_MIPS_DELTA_INSTANCE:
14248       return "MIPS_DELTA_INSTANCE";
14249     case DT_MIPS_DELTA_INSTANCE_NO:
14250       return "MIPS_DELTA_INSTANCE_NO";
14251     case DT_MIPS_DELTA_RELOC:
14252       return "MIPS_DELTA_RELOC";
14253     case DT_MIPS_DELTA_RELOC_NO:
14254       return "MIPS_DELTA_RELOC_NO";
14255     case DT_MIPS_DELTA_SYM:
14256       return "MIPS_DELTA_SYM";
14257     case DT_MIPS_DELTA_SYM_NO:
14258       return "MIPS_DELTA_SYM_NO";
14259     case DT_MIPS_DELTA_CLASSSYM:
14260       return "MIPS_DELTA_CLASSSYM";
14261     case DT_MIPS_DELTA_CLASSSYM_NO:
14262       return "MIPS_DELTA_CLASSSYM_NO";
14263     case DT_MIPS_CXX_FLAGS:
14264       return "MIPS_CXX_FLAGS";
14265     case DT_MIPS_PIXIE_INIT:
14266       return "MIPS_PIXIE_INIT";
14267     case DT_MIPS_SYMBOL_LIB:
14268       return "MIPS_SYMBOL_LIB";
14269     case DT_MIPS_LOCALPAGE_GOTIDX:
14270       return "MIPS_LOCALPAGE_GOTIDX";
14271     case DT_MIPS_LOCAL_GOTIDX:
14272       return "MIPS_LOCAL_GOTIDX";
14273     case DT_MIPS_HIDDEN_GOTIDX:
14274       return "MIPS_HIDDEN_GOTIDX";
14275     case DT_MIPS_PROTECTED_GOTIDX:
14276       return "MIPS_PROTECTED_GOT_IDX";
14277     case DT_MIPS_OPTIONS:
14278       return "MIPS_OPTIONS";
14279     case DT_MIPS_INTERFACE:
14280       return "MIPS_INTERFACE";
14281     case DT_MIPS_DYNSTR_ALIGN:
14282       return "DT_MIPS_DYNSTR_ALIGN";
14283     case DT_MIPS_INTERFACE_SIZE:
14284       return "DT_MIPS_INTERFACE_SIZE";
14285     case DT_MIPS_RLD_TEXT_RESOLVE_ADDR:
14286       return "DT_MIPS_RLD_TEXT_RESOLVE_ADDR";
14287     case DT_MIPS_PERF_SUFFIX:
14288       return "DT_MIPS_PERF_SUFFIX";
14289     case DT_MIPS_COMPACT_SIZE:
14290       return "DT_MIPS_COMPACT_SIZE";
14291     case DT_MIPS_GP_VALUE:
14292       return "DT_MIPS_GP_VALUE";
14293     case DT_MIPS_AUX_DYNAMIC:
14294       return "DT_MIPS_AUX_DYNAMIC";
14295     case DT_MIPS_PLTGOT:
14296       return "DT_MIPS_PLTGOT";
14297     case DT_MIPS_RWPLT:
14298       return "DT_MIPS_RWPLT";
14299     }
14300 }
14301
14302 bfd_boolean
14303 _bfd_mips_elf_print_private_bfd_data (bfd *abfd, void *ptr)
14304 {
14305   FILE *file = ptr;
14306
14307   BFD_ASSERT (abfd != NULL && ptr != NULL);
14308
14309   /* Print normal ELF private data.  */
14310   _bfd_elf_print_private_bfd_data (abfd, ptr);
14311
14312   /* xgettext:c-format */
14313   fprintf (file, _("private flags = %lx:"), elf_elfheader (abfd)->e_flags);
14314
14315   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O32)
14316     fprintf (file, _(" [abi=O32]"));
14317   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O64)
14318     fprintf (file, _(" [abi=O64]"));
14319   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32)
14320     fprintf (file, _(" [abi=EABI32]"));
14321   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI64)
14322     fprintf (file, _(" [abi=EABI64]"));
14323   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI))
14324     fprintf (file, _(" [abi unknown]"));
14325   else if (ABI_N32_P (abfd))
14326     fprintf (file, _(" [abi=N32]"));
14327   else if (ABI_64_P (abfd))
14328     fprintf (file, _(" [abi=64]"));
14329   else
14330     fprintf (file, _(" [no abi set]"));
14331
14332   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1)
14333     fprintf (file, " [mips1]");
14334   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2)
14335     fprintf (file, " [mips2]");
14336   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_3)
14337     fprintf (file, " [mips3]");
14338   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_4)
14339     fprintf (file, " [mips4]");
14340   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_5)
14341     fprintf (file, " [mips5]");
14342   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32)
14343     fprintf (file, " [mips32]");
14344   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64)
14345     fprintf (file, " [mips64]");
14346   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2)
14347     fprintf (file, " [mips32r2]");
14348   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64R2)
14349     fprintf (file, " [mips64r2]");
14350   else
14351     fprintf (file, _(" [unknown ISA]"));
14352
14353   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MDMX)
14354     fprintf (file, " [mdmx]");
14355
14356   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_M16)
14357     fprintf (file, " [mips16]");
14358
14359   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MICROMIPS)
14360     fprintf (file, " [micromips]");
14361
14362   if (elf_elfheader (abfd)->e_flags & EF_MIPS_32BITMODE)
14363     fprintf (file, " [32bitmode]");
14364   else
14365     fprintf (file, _(" [not 32bitmode]"));
14366
14367   if (elf_elfheader (abfd)->e_flags & EF_MIPS_NOREORDER)
14368     fprintf (file, " [noreorder]");
14369
14370   if (elf_elfheader (abfd)->e_flags & EF_MIPS_PIC)
14371     fprintf (file, " [PIC]");
14372
14373   if (elf_elfheader (abfd)->e_flags & EF_MIPS_CPIC)
14374     fprintf (file, " [CPIC]");
14375
14376   if (elf_elfheader (abfd)->e_flags & EF_MIPS_XGOT)
14377     fprintf (file, " [XGOT]");
14378
14379   if (elf_elfheader (abfd)->e_flags & EF_MIPS_UCODE)
14380     fprintf (file, " [UCODE]");
14381
14382   fputc ('\n', file);
14383
14384   return TRUE;
14385 }
14386
14387 const struct bfd_elf_special_section _bfd_mips_elf_special_sections[] =
14388 {
14389   { STRING_COMMA_LEN (".lit4"),   0, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
14390   { STRING_COMMA_LEN (".lit8"),   0, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
14391   { STRING_COMMA_LEN (".mdebug"), 0, SHT_MIPS_DEBUG, 0 },
14392   { STRING_COMMA_LEN (".sbss"),  -2, SHT_NOBITS,     SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
14393   { STRING_COMMA_LEN (".sdata"), -2, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
14394   { STRING_COMMA_LEN (".ucode"),  0, SHT_MIPS_UCODE, 0 },
14395   { NULL,                     0,  0, 0,              0 }
14396 };
14397
14398 /* Merge non visibility st_other attributes.  Ensure that the
14399    STO_OPTIONAL flag is copied into h->other, even if this is not a
14400    definiton of the symbol.  */
14401 void
14402 _bfd_mips_elf_merge_symbol_attribute (struct elf_link_hash_entry *h,
14403                                       const Elf_Internal_Sym *isym,
14404                                       bfd_boolean definition,
14405                                       bfd_boolean dynamic ATTRIBUTE_UNUSED)
14406 {
14407   if ((isym->st_other & ~ELF_ST_VISIBILITY (-1)) != 0)
14408     {
14409       unsigned char other;
14410
14411       other = (definition ? isym->st_other : h->other);
14412       other &= ~ELF_ST_VISIBILITY (-1);
14413       h->other = other | ELF_ST_VISIBILITY (h->other);
14414     }
14415
14416   if (!definition
14417       && ELF_MIPS_IS_OPTIONAL (isym->st_other))
14418     h->other |= STO_OPTIONAL;
14419 }
14420
14421 /* Decide whether an undefined symbol is special and can be ignored.
14422    This is the case for OPTIONAL symbols on IRIX.  */
14423 bfd_boolean
14424 _bfd_mips_elf_ignore_undef_symbol (struct elf_link_hash_entry *h)
14425 {
14426   return ELF_MIPS_IS_OPTIONAL (h->other) ? TRUE : FALSE;
14427 }
14428
14429 bfd_boolean
14430 _bfd_mips_elf_common_definition (Elf_Internal_Sym *sym)
14431 {
14432   return (sym->st_shndx == SHN_COMMON
14433           || sym->st_shndx == SHN_MIPS_ACOMMON
14434           || sym->st_shndx == SHN_MIPS_SCOMMON);
14435 }
14436
14437 /* Return address for Ith PLT stub in section PLT, for relocation REL
14438    or (bfd_vma) -1 if it should not be included.  */
14439
14440 bfd_vma
14441 _bfd_mips_elf_plt_sym_val (bfd_vma i, const asection *plt,
14442                            const arelent *rel ATTRIBUTE_UNUSED)
14443 {
14444   return (plt->vma
14445           + 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry)
14446           + i * 4 * ARRAY_SIZE (mips_exec_plt_entry));
14447 }
14448
14449 void
14450 _bfd_mips_post_process_headers (bfd *abfd, struct bfd_link_info *link_info)
14451 {
14452   struct mips_elf_link_hash_table *htab;
14453   Elf_Internal_Ehdr *i_ehdrp;
14454
14455   i_ehdrp = elf_elfheader (abfd);
14456   if (link_info)
14457     {
14458       htab = mips_elf_hash_table (link_info);
14459       BFD_ASSERT (htab != NULL);
14460
14461       if (htab->use_plts_and_copy_relocs && !htab->is_vxworks)
14462         i_ehdrp->e_ident[EI_ABIVERSION] = 1;
14463     }
14464 }