* descriptors.cc (Descriptors::close_all): New function.
[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->tls_type & GOT_TLS_GD)
2986     arg->needed += 2;
2987   if (hm->tls_type & GOT_TLS_IE)
2988     arg->needed += 1;
2989
2990   return 1;
2991 }
2992
2993 /* Count the number of TLS relocations required for the global (or
2994    forced-local) symbol in ARG1.  */
2995
2996 static int
2997 mips_elf_count_global_tls_relocs (void *arg1, void *arg2)
2998 {
2999   struct mips_elf_link_hash_entry *hm
3000     = (struct mips_elf_link_hash_entry *) arg1;
3001   struct mips_elf_count_tls_arg *arg = arg2;
3002
3003   arg->needed += mips_tls_got_relocs (arg->info, hm->tls_type, &hm->root);
3004
3005   return 1;
3006 }
3007
3008 /* Output a simple dynamic relocation into SRELOC.  */
3009
3010 static void
3011 mips_elf_output_dynamic_relocation (bfd *output_bfd,
3012                                     asection *sreloc,
3013                                     unsigned long reloc_index,
3014                                     unsigned long indx,
3015                                     int r_type,
3016                                     bfd_vma offset)
3017 {
3018   Elf_Internal_Rela rel[3];
3019
3020   memset (rel, 0, sizeof (rel));
3021
3022   rel[0].r_info = ELF_R_INFO (output_bfd, indx, r_type);
3023   rel[0].r_offset = rel[1].r_offset = rel[2].r_offset = offset;
3024
3025   if (ABI_64_P (output_bfd))
3026     {
3027       (*get_elf_backend_data (output_bfd)->s->swap_reloc_out)
3028         (output_bfd, &rel[0],
3029          (sreloc->contents
3030           + reloc_index * sizeof (Elf64_Mips_External_Rel)));
3031     }
3032   else
3033     bfd_elf32_swap_reloc_out
3034       (output_bfd, &rel[0],
3035        (sreloc->contents
3036         + reloc_index * sizeof (Elf32_External_Rel)));
3037 }
3038
3039 /* Initialize a set of TLS GOT entries for one symbol.  */
3040
3041 static void
3042 mips_elf_initialize_tls_slots (bfd *abfd, bfd_vma got_offset,
3043                                unsigned char *tls_type_p,
3044                                struct bfd_link_info *info,
3045                                struct mips_elf_link_hash_entry *h,
3046                                bfd_vma value)
3047 {
3048   struct mips_elf_link_hash_table *htab;
3049   int indx;
3050   asection *sreloc, *sgot;
3051   bfd_vma offset, offset2;
3052   bfd_boolean need_relocs = FALSE;
3053
3054   htab = mips_elf_hash_table (info);
3055   if (htab == NULL)
3056     return;
3057
3058   sgot = htab->sgot;
3059
3060   indx = 0;
3061   if (h != NULL)
3062     {
3063       bfd_boolean dyn = elf_hash_table (info)->dynamic_sections_created;
3064
3065       if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, &h->root)
3066           && (!info->shared || !SYMBOL_REFERENCES_LOCAL (info, &h->root)))
3067         indx = h->root.dynindx;
3068     }
3069
3070   if (*tls_type_p & GOT_TLS_DONE)
3071     return;
3072
3073   if ((info->shared || indx != 0)
3074       && (h == NULL
3075           || ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT
3076           || h->root.type != bfd_link_hash_undefweak))
3077     need_relocs = TRUE;
3078
3079   /* MINUS_ONE means the symbol is not defined in this object.  It may not
3080      be defined at all; assume that the value doesn't matter in that
3081      case.  Otherwise complain if we would use the value.  */
3082   BFD_ASSERT (value != MINUS_ONE || (indx != 0 && need_relocs)
3083               || h->root.root.type == bfd_link_hash_undefweak);
3084
3085   /* Emit necessary relocations.  */
3086   sreloc = mips_elf_rel_dyn_section (info, FALSE);
3087
3088   /* General Dynamic.  */
3089   if (*tls_type_p & GOT_TLS_GD)
3090     {
3091       offset = got_offset;
3092       offset2 = offset + MIPS_ELF_GOT_SIZE (abfd);
3093
3094       if (need_relocs)
3095         {
3096           mips_elf_output_dynamic_relocation
3097             (abfd, sreloc, sreloc->reloc_count++, indx,
3098              ABI_64_P (abfd) ? R_MIPS_TLS_DTPMOD64 : R_MIPS_TLS_DTPMOD32,
3099              sgot->output_offset + sgot->output_section->vma + offset);
3100
3101           if (indx)
3102             mips_elf_output_dynamic_relocation
3103               (abfd, sreloc, sreloc->reloc_count++, indx,
3104                ABI_64_P (abfd) ? R_MIPS_TLS_DTPREL64 : R_MIPS_TLS_DTPREL32,
3105                sgot->output_offset + sgot->output_section->vma + offset2);
3106           else
3107             MIPS_ELF_PUT_WORD (abfd, value - dtprel_base (info),
3108                                sgot->contents + offset2);
3109         }
3110       else
3111         {
3112           MIPS_ELF_PUT_WORD (abfd, 1,
3113                              sgot->contents + offset);
3114           MIPS_ELF_PUT_WORD (abfd, value - dtprel_base (info),
3115                              sgot->contents + offset2);
3116         }
3117
3118       got_offset += 2 * MIPS_ELF_GOT_SIZE (abfd);
3119     }
3120
3121   /* Initial Exec model.  */
3122   if (*tls_type_p & GOT_TLS_IE)
3123     {
3124       offset = got_offset;
3125
3126       if (need_relocs)
3127         {
3128           if (indx == 0)
3129             MIPS_ELF_PUT_WORD (abfd, value - elf_hash_table (info)->tls_sec->vma,
3130                                sgot->contents + offset);
3131           else
3132             MIPS_ELF_PUT_WORD (abfd, 0,
3133                                sgot->contents + offset);
3134
3135           mips_elf_output_dynamic_relocation
3136             (abfd, sreloc, sreloc->reloc_count++, indx,
3137              ABI_64_P (abfd) ? R_MIPS_TLS_TPREL64 : R_MIPS_TLS_TPREL32,
3138              sgot->output_offset + sgot->output_section->vma + offset);
3139         }
3140       else
3141         MIPS_ELF_PUT_WORD (abfd, value - tprel_base (info),
3142                            sgot->contents + offset);
3143     }
3144
3145   if (*tls_type_p & GOT_TLS_LDM)
3146     {
3147       /* The initial offset is zero, and the LD offsets will include the
3148          bias by DTP_OFFSET.  */
3149       MIPS_ELF_PUT_WORD (abfd, 0,
3150                          sgot->contents + got_offset
3151                          + MIPS_ELF_GOT_SIZE (abfd));
3152
3153       if (!info->shared)
3154         MIPS_ELF_PUT_WORD (abfd, 1,
3155                            sgot->contents + got_offset);
3156       else
3157         mips_elf_output_dynamic_relocation
3158           (abfd, sreloc, sreloc->reloc_count++, indx,
3159            ABI_64_P (abfd) ? R_MIPS_TLS_DTPMOD64 : R_MIPS_TLS_DTPMOD32,
3160            sgot->output_offset + sgot->output_section->vma + got_offset);
3161     }
3162
3163   *tls_type_p |= GOT_TLS_DONE;
3164 }
3165
3166 /* Return the GOT index to use for a relocation of type R_TYPE against
3167    a symbol accessed using TLS_TYPE models.  The GOT entries for this
3168    symbol in this GOT start at GOT_INDEX.  This function initializes the
3169    GOT entries and corresponding relocations.  */
3170
3171 static bfd_vma
3172 mips_tls_got_index (bfd *abfd, bfd_vma got_index, unsigned char *tls_type,
3173                     int r_type, struct bfd_link_info *info,
3174                     struct mips_elf_link_hash_entry *h, bfd_vma symbol)
3175 {
3176   BFD_ASSERT (tls_gottprel_reloc_p (r_type)
3177               || tls_gd_reloc_p (r_type)
3178               || tls_ldm_reloc_p (r_type));
3179
3180   mips_elf_initialize_tls_slots (abfd, got_index, tls_type, info, h, symbol);
3181
3182   if (tls_gottprel_reloc_p (r_type))
3183     {
3184       BFD_ASSERT (*tls_type & GOT_TLS_IE);
3185       if (*tls_type & GOT_TLS_GD)
3186         return got_index + 2 * MIPS_ELF_GOT_SIZE (abfd);
3187       else
3188         return got_index;
3189     }
3190
3191   if (tls_gd_reloc_p (r_type))
3192     {
3193       BFD_ASSERT (*tls_type & GOT_TLS_GD);
3194       return got_index;
3195     }
3196
3197   if (tls_ldm_reloc_p (r_type))
3198     {
3199       BFD_ASSERT (*tls_type & GOT_TLS_LDM);
3200       return got_index;
3201     }
3202
3203   return got_index;
3204 }
3205
3206 /* Return the offset from _GLOBAL_OFFSET_TABLE_ of the .got.plt entry
3207    for global symbol H.  .got.plt comes before the GOT, so the offset
3208    will be negative.  */
3209
3210 static bfd_vma
3211 mips_elf_gotplt_index (struct bfd_link_info *info,
3212                        struct elf_link_hash_entry *h)
3213 {
3214   bfd_vma plt_index, got_address, got_value;
3215   struct mips_elf_link_hash_table *htab;
3216
3217   htab = mips_elf_hash_table (info);
3218   BFD_ASSERT (htab != NULL);
3219
3220   BFD_ASSERT (h->plt.offset != (bfd_vma) -1);
3221
3222   /* This function only works for VxWorks, because a non-VxWorks .got.plt
3223      section starts with reserved entries.  */
3224   BFD_ASSERT (htab->is_vxworks);
3225
3226   /* Calculate the index of the symbol's PLT entry.  */
3227   plt_index = (h->plt.offset - htab->plt_header_size) / htab->plt_entry_size;
3228
3229   /* Calculate the address of the associated .got.plt entry.  */
3230   got_address = (htab->sgotplt->output_section->vma
3231                  + htab->sgotplt->output_offset
3232                  + plt_index * 4);
3233
3234   /* Calculate the value of _GLOBAL_OFFSET_TABLE_.  */
3235   got_value = (htab->root.hgot->root.u.def.section->output_section->vma
3236                + htab->root.hgot->root.u.def.section->output_offset
3237                + htab->root.hgot->root.u.def.value);
3238
3239   return got_address - got_value;
3240 }
3241
3242 /* Return the GOT offset for address VALUE.   If there is not yet a GOT
3243    entry for this value, create one.  If R_SYMNDX refers to a TLS symbol,
3244    create a TLS GOT entry instead.  Return -1 if no satisfactory GOT
3245    offset can be found.  */
3246
3247 static bfd_vma
3248 mips_elf_local_got_index (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
3249                           bfd_vma value, unsigned long r_symndx,
3250                           struct mips_elf_link_hash_entry *h, int r_type)
3251 {
3252   struct mips_elf_link_hash_table *htab;
3253   struct mips_got_entry *entry;
3254
3255   htab = mips_elf_hash_table (info);
3256   BFD_ASSERT (htab != NULL);
3257
3258   entry = mips_elf_create_local_got_entry (abfd, info, ibfd, value,
3259                                            r_symndx, h, r_type);
3260   if (!entry)
3261     return MINUS_ONE;
3262
3263   if (TLS_RELOC_P (r_type))
3264     {
3265       if (entry->symndx == -1 && htab->got_info->next == NULL)
3266         /* A type (3) entry in the single-GOT case.  We use the symbol's
3267            hash table entry to track the index.  */
3268         return mips_tls_got_index (abfd, h->tls_got_offset, &h->tls_type,
3269                                    r_type, info, h, value);
3270       else
3271         return mips_tls_got_index (abfd, entry->gotidx, &entry->tls_type,
3272                                    r_type, info, h, value);
3273     }
3274   else
3275     return entry->gotidx;
3276 }
3277
3278 /* Returns the GOT index for the global symbol indicated by H.  */
3279
3280 static bfd_vma
3281 mips_elf_global_got_index (bfd *abfd, bfd *ibfd, struct elf_link_hash_entry *h,
3282                            int r_type, struct bfd_link_info *info)
3283 {
3284   struct mips_elf_link_hash_table *htab;
3285   bfd_vma got_index;
3286   struct mips_got_info *g, *gg;
3287   long global_got_dynindx = 0;
3288
3289   htab = mips_elf_hash_table (info);
3290   BFD_ASSERT (htab != NULL);
3291
3292   gg = g = htab->got_info;
3293   if (g->bfd2got && ibfd)
3294     {
3295       struct mips_got_entry e, *p;
3296
3297       BFD_ASSERT (h->dynindx >= 0);
3298
3299       g = mips_elf_got_for_ibfd (g, ibfd);
3300       if (g->next != gg || TLS_RELOC_P (r_type))
3301         {
3302           e.abfd = ibfd;
3303           e.symndx = -1;
3304           e.d.h = (struct mips_elf_link_hash_entry *)h;
3305           e.tls_type = 0;
3306
3307           p = htab_find (g->got_entries, &e);
3308
3309           BFD_ASSERT (p->gotidx > 0);
3310
3311           if (TLS_RELOC_P (r_type))
3312             {
3313               bfd_vma value = MINUS_ONE;
3314               if ((h->root.type == bfd_link_hash_defined
3315                    || h->root.type == bfd_link_hash_defweak)
3316                   && h->root.u.def.section->output_section)
3317                 value = (h->root.u.def.value
3318                          + h->root.u.def.section->output_offset
3319                          + h->root.u.def.section->output_section->vma);
3320
3321               return mips_tls_got_index (abfd, p->gotidx, &p->tls_type, r_type,
3322                                          info, e.d.h, value);
3323             }
3324           else
3325             return p->gotidx;
3326         }
3327     }
3328
3329   if (gg->global_gotsym != NULL)
3330     global_got_dynindx = gg->global_gotsym->dynindx;
3331
3332   if (TLS_RELOC_P (r_type))
3333     {
3334       struct mips_elf_link_hash_entry *hm
3335         = (struct mips_elf_link_hash_entry *) h;
3336       bfd_vma value = MINUS_ONE;
3337
3338       if ((h->root.type == bfd_link_hash_defined
3339            || h->root.type == bfd_link_hash_defweak)
3340           && h->root.u.def.section->output_section)
3341         value = (h->root.u.def.value
3342                  + h->root.u.def.section->output_offset
3343                  + h->root.u.def.section->output_section->vma);
3344
3345       got_index = mips_tls_got_index (abfd, hm->tls_got_offset, &hm->tls_type,
3346                                       r_type, info, hm, value);
3347     }
3348   else
3349     {
3350       /* Once we determine the global GOT entry with the lowest dynamic
3351          symbol table index, we must put all dynamic symbols with greater
3352          indices into the GOT.  That makes it easy to calculate the GOT
3353          offset.  */
3354       BFD_ASSERT (h->dynindx >= global_got_dynindx);
3355       got_index = ((h->dynindx - global_got_dynindx + g->local_gotno)
3356                    * MIPS_ELF_GOT_SIZE (abfd));
3357     }
3358   BFD_ASSERT (got_index < htab->sgot->size);
3359
3360   return got_index;
3361 }
3362
3363 /* Find a GOT page entry that points to within 32KB of VALUE.  These
3364    entries are supposed to be placed at small offsets in the GOT, i.e.,
3365    within 32KB of GP.  Return the index of the GOT entry, or -1 if no
3366    entry could be created.  If OFFSETP is nonnull, use it to return the
3367    offset of the GOT entry from VALUE.  */
3368
3369 static bfd_vma
3370 mips_elf_got_page (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
3371                    bfd_vma value, bfd_vma *offsetp)
3372 {
3373   bfd_vma page, got_index;
3374   struct mips_got_entry *entry;
3375
3376   page = (value + 0x8000) & ~(bfd_vma) 0xffff;
3377   entry = mips_elf_create_local_got_entry (abfd, info, ibfd, page, 0,
3378                                            NULL, R_MIPS_GOT_PAGE);
3379
3380   if (!entry)
3381     return MINUS_ONE;
3382
3383   got_index = entry->gotidx;
3384
3385   if (offsetp)
3386     *offsetp = value - entry->d.address;
3387
3388   return got_index;
3389 }
3390
3391 /* Find a local GOT entry for an R_MIPS*_GOT16 relocation against VALUE.
3392    EXTERNAL is true if the relocation was originally against a global
3393    symbol that binds locally.  */
3394
3395 static bfd_vma
3396 mips_elf_got16_entry (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
3397                       bfd_vma value, bfd_boolean external)
3398 {
3399   struct mips_got_entry *entry;
3400
3401   /* GOT16 relocations against local symbols are followed by a LO16
3402      relocation; those against global symbols are not.  Thus if the
3403      symbol was originally local, the GOT16 relocation should load the
3404      equivalent of %hi(VALUE), otherwise it should load VALUE itself.  */
3405   if (! external)
3406     value = mips_elf_high (value) << 16;
3407
3408   /* It doesn't matter whether the original relocation was R_MIPS_GOT16,
3409      R_MIPS16_GOT16, R_MIPS_CALL16, etc.  The format of the entry is the
3410      same in all cases.  */
3411   entry = mips_elf_create_local_got_entry (abfd, info, ibfd, value, 0,
3412                                            NULL, R_MIPS_GOT16);
3413   if (entry)
3414     return entry->gotidx;
3415   else
3416     return MINUS_ONE;
3417 }
3418
3419 /* Returns the offset for the entry at the INDEXth position
3420    in the GOT.  */
3421
3422 static bfd_vma
3423 mips_elf_got_offset_from_index (struct bfd_link_info *info, bfd *output_bfd,
3424                                 bfd *input_bfd, bfd_vma got_index)
3425 {
3426   struct mips_elf_link_hash_table *htab;
3427   asection *sgot;
3428   bfd_vma gp;
3429
3430   htab = mips_elf_hash_table (info);
3431   BFD_ASSERT (htab != NULL);
3432
3433   sgot = htab->sgot;
3434   gp = _bfd_get_gp_value (output_bfd)
3435     + mips_elf_adjust_gp (output_bfd, htab->got_info, input_bfd);
3436
3437   return sgot->output_section->vma + sgot->output_offset + got_index - gp;
3438 }
3439
3440 /* Create and return a local GOT entry for VALUE, which was calculated
3441    from a symbol belonging to INPUT_SECTON.  Return NULL if it could not
3442    be created.  If R_SYMNDX refers to a TLS symbol, create a TLS entry
3443    instead.  */
3444
3445 static struct mips_got_entry *
3446 mips_elf_create_local_got_entry (bfd *abfd, struct bfd_link_info *info,
3447                                  bfd *ibfd, bfd_vma value,
3448                                  unsigned long r_symndx,
3449                                  struct mips_elf_link_hash_entry *h,
3450                                  int r_type)
3451 {
3452   struct mips_got_entry entry, **loc;
3453   struct mips_got_info *g;
3454   struct mips_elf_link_hash_table *htab;
3455
3456   htab = mips_elf_hash_table (info);
3457   BFD_ASSERT (htab != NULL);
3458
3459   entry.abfd = NULL;
3460   entry.symndx = -1;
3461   entry.d.address = value;
3462   entry.tls_type = 0;
3463
3464   g = mips_elf_got_for_ibfd (htab->got_info, ibfd);
3465   if (g == NULL)
3466     {
3467       g = mips_elf_got_for_ibfd (htab->got_info, abfd);
3468       BFD_ASSERT (g != NULL);
3469     }
3470
3471   /* This function shouldn't be called for symbols that live in the global
3472      area of the GOT.  */
3473   BFD_ASSERT (h == NULL || h->global_got_area == GGA_NONE);
3474   if (TLS_RELOC_P (r_type))
3475     {
3476       struct mips_got_entry *p;
3477
3478       entry.abfd = ibfd;
3479       if (tls_ldm_reloc_p (r_type))
3480         {
3481           entry.tls_type = GOT_TLS_LDM;
3482           entry.symndx = 0;
3483           entry.d.addend = 0;
3484         }
3485       else if (h == NULL)
3486         {
3487           entry.symndx = r_symndx;
3488           entry.d.addend = 0;
3489         }
3490       else
3491         entry.d.h = h;
3492
3493       p = (struct mips_got_entry *)
3494         htab_find (g->got_entries, &entry);
3495
3496       BFD_ASSERT (p);
3497       return p;
3498     }
3499
3500   loc = (struct mips_got_entry **) htab_find_slot (g->got_entries, &entry,
3501                                                    INSERT);
3502   if (*loc)
3503     return *loc;
3504
3505   entry.gotidx = MIPS_ELF_GOT_SIZE (abfd) * g->assigned_gotno++;
3506   entry.tls_type = 0;
3507
3508   *loc = (struct mips_got_entry *)bfd_alloc (abfd, sizeof entry);
3509
3510   if (! *loc)
3511     return NULL;
3512
3513   memcpy (*loc, &entry, sizeof entry);
3514
3515   if (g->assigned_gotno > g->local_gotno)
3516     {
3517       (*loc)->gotidx = -1;
3518       /* We didn't allocate enough space in the GOT.  */
3519       (*_bfd_error_handler)
3520         (_("not enough GOT space for local GOT entries"));
3521       bfd_set_error (bfd_error_bad_value);
3522       return NULL;
3523     }
3524
3525   MIPS_ELF_PUT_WORD (abfd, value,
3526                      (htab->sgot->contents + entry.gotidx));
3527
3528   /* These GOT entries need a dynamic relocation on VxWorks.  */
3529   if (htab->is_vxworks)
3530     {
3531       Elf_Internal_Rela outrel;
3532       asection *s;
3533       bfd_byte *rloc;
3534       bfd_vma got_address;
3535
3536       s = mips_elf_rel_dyn_section (info, FALSE);
3537       got_address = (htab->sgot->output_section->vma
3538                      + htab->sgot->output_offset
3539                      + entry.gotidx);
3540
3541       rloc = s->contents + (s->reloc_count++ * sizeof (Elf32_External_Rela));
3542       outrel.r_offset = got_address;
3543       outrel.r_info = ELF32_R_INFO (STN_UNDEF, R_MIPS_32);
3544       outrel.r_addend = value;
3545       bfd_elf32_swap_reloca_out (abfd, &outrel, rloc);
3546     }
3547
3548   return *loc;
3549 }
3550
3551 /* Return the number of dynamic section symbols required by OUTPUT_BFD.
3552    The number might be exact or a worst-case estimate, depending on how
3553    much information is available to elf_backend_omit_section_dynsym at
3554    the current linking stage.  */
3555
3556 static bfd_size_type
3557 count_section_dynsyms (bfd *output_bfd, struct bfd_link_info *info)
3558 {
3559   bfd_size_type count;
3560
3561   count = 0;
3562   if (info->shared || elf_hash_table (info)->is_relocatable_executable)
3563     {
3564       asection *p;
3565       const struct elf_backend_data *bed;
3566
3567       bed = get_elf_backend_data (output_bfd);
3568       for (p = output_bfd->sections; p ; p = p->next)
3569         if ((p->flags & SEC_EXCLUDE) == 0
3570             && (p->flags & SEC_ALLOC) != 0
3571             && !(*bed->elf_backend_omit_section_dynsym) (output_bfd, info, p))
3572           ++count;
3573     }
3574   return count;
3575 }
3576
3577 /* Sort the dynamic symbol table so that symbols that need GOT entries
3578    appear towards the end.  */
3579
3580 static bfd_boolean
3581 mips_elf_sort_hash_table (bfd *abfd, struct bfd_link_info *info)
3582 {
3583   struct mips_elf_link_hash_table *htab;
3584   struct mips_elf_hash_sort_data hsd;
3585   struct mips_got_info *g;
3586
3587   if (elf_hash_table (info)->dynsymcount == 0)
3588     return TRUE;
3589
3590   htab = mips_elf_hash_table (info);
3591   BFD_ASSERT (htab != NULL);
3592
3593   g = htab->got_info;
3594   if (g == NULL)
3595     return TRUE;
3596
3597   hsd.low = NULL;
3598   hsd.max_unref_got_dynindx
3599     = hsd.min_got_dynindx
3600     = (elf_hash_table (info)->dynsymcount - g->reloc_only_gotno);
3601   hsd.max_non_got_dynindx = count_section_dynsyms (abfd, info) + 1;
3602   mips_elf_link_hash_traverse (((struct mips_elf_link_hash_table *)
3603                                 elf_hash_table (info)),
3604                                mips_elf_sort_hash_table_f,
3605                                &hsd);
3606
3607   /* There should have been enough room in the symbol table to
3608      accommodate both the GOT and non-GOT symbols.  */
3609   BFD_ASSERT (hsd.max_non_got_dynindx <= hsd.min_got_dynindx);
3610   BFD_ASSERT ((unsigned long) hsd.max_unref_got_dynindx
3611               == elf_hash_table (info)->dynsymcount);
3612   BFD_ASSERT (elf_hash_table (info)->dynsymcount - hsd.min_got_dynindx
3613               == g->global_gotno);
3614
3615   /* Now we know which dynamic symbol has the lowest dynamic symbol
3616      table index in the GOT.  */
3617   g->global_gotsym = hsd.low;
3618
3619   return TRUE;
3620 }
3621
3622 /* If H needs a GOT entry, assign it the highest available dynamic
3623    index.  Otherwise, assign it the lowest available dynamic
3624    index.  */
3625
3626 static bfd_boolean
3627 mips_elf_sort_hash_table_f (struct mips_elf_link_hash_entry *h, void *data)
3628 {
3629   struct mips_elf_hash_sort_data *hsd = data;
3630
3631   /* Symbols without dynamic symbol table entries aren't interesting
3632      at all.  */
3633   if (h->root.dynindx == -1)
3634     return TRUE;
3635
3636   switch (h->global_got_area)
3637     {
3638     case GGA_NONE:
3639       h->root.dynindx = hsd->max_non_got_dynindx++;
3640       break;
3641
3642     case GGA_NORMAL:
3643       BFD_ASSERT (h->tls_type == GOT_NORMAL);
3644
3645       h->root.dynindx = --hsd->min_got_dynindx;
3646       hsd->low = (struct elf_link_hash_entry *) h;
3647       break;
3648
3649     case GGA_RELOC_ONLY:
3650       BFD_ASSERT (h->tls_type == GOT_NORMAL);
3651
3652       if (hsd->max_unref_got_dynindx == hsd->min_got_dynindx)
3653         hsd->low = (struct elf_link_hash_entry *) h;
3654       h->root.dynindx = hsd->max_unref_got_dynindx++;
3655       break;
3656     }
3657
3658   return TRUE;
3659 }
3660
3661 /* If H is a symbol that needs a global GOT entry, but has a dynamic
3662    symbol table index lower than any we've seen to date, record it for
3663    posterity.  FOR_CALL is true if the caller is only interested in
3664    using the GOT entry for calls.  */
3665
3666 static bfd_boolean
3667 mips_elf_record_global_got_symbol (struct elf_link_hash_entry *h,
3668                                    bfd *abfd, struct bfd_link_info *info,
3669                                    bfd_boolean for_call,
3670                                    unsigned char tls_flag)
3671 {
3672   struct mips_elf_link_hash_table *htab;
3673   struct mips_elf_link_hash_entry *hmips;
3674   struct mips_got_entry entry, **loc;
3675   struct mips_got_info *g;
3676
3677   htab = mips_elf_hash_table (info);
3678   BFD_ASSERT (htab != NULL);
3679
3680   hmips = (struct mips_elf_link_hash_entry *) h;
3681   if (!for_call)
3682     hmips->got_only_for_calls = FALSE;
3683
3684   /* A global symbol in the GOT must also be in the dynamic symbol
3685      table.  */
3686   if (h->dynindx == -1)
3687     {
3688       switch (ELF_ST_VISIBILITY (h->other))
3689         {
3690         case STV_INTERNAL:
3691         case STV_HIDDEN:
3692           _bfd_elf_link_hash_hide_symbol (info, h, TRUE);
3693           break;
3694         }
3695       if (!bfd_elf_link_record_dynamic_symbol (info, h))
3696         return FALSE;
3697     }
3698
3699   /* Make sure we have a GOT to put this entry into.  */
3700   g = htab->got_info;
3701   BFD_ASSERT (g != NULL);
3702
3703   entry.abfd = abfd;
3704   entry.symndx = -1;
3705   entry.d.h = (struct mips_elf_link_hash_entry *) h;
3706   entry.tls_type = 0;
3707
3708   loc = (struct mips_got_entry **) htab_find_slot (g->got_entries, &entry,
3709                                                    INSERT);
3710
3711   /* If we've already marked this entry as needing GOT space, we don't
3712      need to do it again.  */
3713   if (*loc)
3714     {
3715       (*loc)->tls_type |= tls_flag;
3716       return TRUE;
3717     }
3718
3719   *loc = (struct mips_got_entry *)bfd_alloc (abfd, sizeof entry);
3720
3721   if (! *loc)
3722     return FALSE;
3723
3724   entry.gotidx = -1;
3725   entry.tls_type = tls_flag;
3726
3727   memcpy (*loc, &entry, sizeof entry);
3728
3729   if (tls_flag == 0)
3730     hmips->global_got_area = GGA_NORMAL;
3731
3732   return TRUE;
3733 }
3734
3735 /* Reserve space in G for a GOT entry containing the value of symbol
3736    SYMNDX in input bfd ABDF, plus ADDEND.  */
3737
3738 static bfd_boolean
3739 mips_elf_record_local_got_symbol (bfd *abfd, long symndx, bfd_vma addend,
3740                                   struct bfd_link_info *info,
3741                                   unsigned char tls_flag)
3742 {
3743   struct mips_elf_link_hash_table *htab;
3744   struct mips_got_info *g;
3745   struct mips_got_entry entry, **loc;
3746
3747   htab = mips_elf_hash_table (info);
3748   BFD_ASSERT (htab != NULL);
3749
3750   g = htab->got_info;
3751   BFD_ASSERT (g != NULL);
3752
3753   entry.abfd = abfd;
3754   entry.symndx = symndx;
3755   entry.d.addend = addend;
3756   entry.tls_type = tls_flag;
3757   loc = (struct mips_got_entry **)
3758     htab_find_slot (g->got_entries, &entry, INSERT);
3759
3760   if (*loc)
3761     {
3762       if (tls_flag == GOT_TLS_GD && !((*loc)->tls_type & GOT_TLS_GD))
3763         {
3764           g->tls_gotno += 2;
3765           (*loc)->tls_type |= tls_flag;
3766         }
3767       else if (tls_flag == GOT_TLS_IE && !((*loc)->tls_type & GOT_TLS_IE))
3768         {
3769           g->tls_gotno += 1;
3770           (*loc)->tls_type |= tls_flag;
3771         }
3772       return TRUE;
3773     }
3774
3775   if (tls_flag != 0)
3776     {
3777       entry.gotidx = -1;
3778       entry.tls_type = tls_flag;
3779       if (tls_flag == GOT_TLS_IE)
3780         g->tls_gotno += 1;
3781       else if (tls_flag == GOT_TLS_GD)
3782         g->tls_gotno += 2;
3783       else if (g->tls_ldm_offset == MINUS_ONE)
3784         {
3785           g->tls_ldm_offset = MINUS_TWO;
3786           g->tls_gotno += 2;
3787         }
3788     }
3789   else
3790     {
3791       entry.gotidx = g->local_gotno++;
3792       entry.tls_type = 0;
3793     }
3794
3795   *loc = (struct mips_got_entry *)bfd_alloc (abfd, sizeof entry);
3796
3797   if (! *loc)
3798     return FALSE;
3799
3800   memcpy (*loc, &entry, sizeof entry);
3801
3802   return TRUE;
3803 }
3804
3805 /* Return the maximum number of GOT page entries required for RANGE.  */
3806
3807 static bfd_vma
3808 mips_elf_pages_for_range (const struct mips_got_page_range *range)
3809 {
3810   return (range->max_addend - range->min_addend + 0x1ffff) >> 16;
3811 }
3812
3813 /* Record that ABFD has a page relocation against symbol SYMNDX and
3814    that ADDEND is the addend for that relocation.
3815
3816    This function creates an upper bound on the number of GOT slots
3817    required; no attempt is made to combine references to non-overridable
3818    global symbols across multiple input files.  */
3819
3820 static bfd_boolean
3821 mips_elf_record_got_page_entry (struct bfd_link_info *info, bfd *abfd,
3822                                 long symndx, bfd_signed_vma addend)
3823 {
3824   struct mips_elf_link_hash_table *htab;
3825   struct mips_got_info *g;
3826   struct mips_got_page_entry lookup, *entry;
3827   struct mips_got_page_range **range_ptr, *range;
3828   bfd_vma old_pages, new_pages;
3829   void **loc;
3830
3831   htab = mips_elf_hash_table (info);
3832   BFD_ASSERT (htab != NULL);
3833
3834   g = htab->got_info;
3835   BFD_ASSERT (g != NULL);
3836
3837   /* Find the mips_got_page_entry hash table entry for this symbol.  */
3838   lookup.abfd = abfd;
3839   lookup.symndx = symndx;
3840   loc = htab_find_slot (g->got_page_entries, &lookup, INSERT);
3841   if (loc == NULL)
3842     return FALSE;
3843
3844   /* Create a mips_got_page_entry if this is the first time we've
3845      seen the symbol.  */
3846   entry = (struct mips_got_page_entry *) *loc;
3847   if (!entry)
3848     {
3849       entry = bfd_alloc (abfd, sizeof (*entry));
3850       if (!entry)
3851         return FALSE;
3852
3853       entry->abfd = abfd;
3854       entry->symndx = symndx;
3855       entry->ranges = NULL;
3856       entry->num_pages = 0;
3857       *loc = entry;
3858     }
3859
3860   /* Skip over ranges whose maximum extent cannot share a page entry
3861      with ADDEND.  */
3862   range_ptr = &entry->ranges;
3863   while (*range_ptr && addend > (*range_ptr)->max_addend + 0xffff)
3864     range_ptr = &(*range_ptr)->next;
3865
3866   /* If we scanned to the end of the list, or found a range whose
3867      minimum extent cannot share a page entry with ADDEND, create
3868      a new singleton range.  */
3869   range = *range_ptr;
3870   if (!range || addend < range->min_addend - 0xffff)
3871     {
3872       range = bfd_alloc (abfd, sizeof (*range));
3873       if (!range)
3874         return FALSE;
3875
3876       range->next = *range_ptr;
3877       range->min_addend = addend;
3878       range->max_addend = addend;
3879
3880       *range_ptr = range;
3881       entry->num_pages++;
3882       g->page_gotno++;
3883       return TRUE;
3884     }
3885
3886   /* Remember how many pages the old range contributed.  */
3887   old_pages = mips_elf_pages_for_range (range);
3888
3889   /* Update the ranges.  */
3890   if (addend < range->min_addend)
3891     range->min_addend = addend;
3892   else if (addend > range->max_addend)
3893     {
3894       if (range->next && addend >= range->next->min_addend - 0xffff)
3895         {
3896           old_pages += mips_elf_pages_for_range (range->next);
3897           range->max_addend = range->next->max_addend;
3898           range->next = range->next->next;
3899         }
3900       else
3901         range->max_addend = addend;
3902     }
3903
3904   /* Record any change in the total estimate.  */
3905   new_pages = mips_elf_pages_for_range (range);
3906   if (old_pages != new_pages)
3907     {
3908       entry->num_pages += new_pages - old_pages;
3909       g->page_gotno += new_pages - old_pages;
3910     }
3911
3912   return TRUE;
3913 }
3914
3915 /* Add room for N relocations to the .rel(a).dyn section in ABFD.  */
3916
3917 static void
3918 mips_elf_allocate_dynamic_relocations (bfd *abfd, struct bfd_link_info *info,
3919                                        unsigned int n)
3920 {
3921   asection *s;
3922   struct mips_elf_link_hash_table *htab;
3923
3924   htab = mips_elf_hash_table (info);
3925   BFD_ASSERT (htab != NULL);
3926
3927   s = mips_elf_rel_dyn_section (info, FALSE);
3928   BFD_ASSERT (s != NULL);
3929
3930   if (htab->is_vxworks)
3931     s->size += n * MIPS_ELF_RELA_SIZE (abfd);
3932   else
3933     {
3934       if (s->size == 0)
3935         {
3936           /* Make room for a null element.  */
3937           s->size += MIPS_ELF_REL_SIZE (abfd);
3938           ++s->reloc_count;
3939         }
3940       s->size += n * MIPS_ELF_REL_SIZE (abfd);
3941     }
3942 }
3943 \f
3944 /* A htab_traverse callback for GOT entries.  Set boolean *DATA to true
3945    if the GOT entry is for an indirect or warning symbol.  */
3946
3947 static int
3948 mips_elf_check_recreate_got (void **entryp, void *data)
3949 {
3950   struct mips_got_entry *entry;
3951   bfd_boolean *must_recreate;
3952
3953   entry = (struct mips_got_entry *) *entryp;
3954   must_recreate = (bfd_boolean *) data;
3955   if (entry->abfd != NULL && entry->symndx == -1)
3956     {
3957       struct mips_elf_link_hash_entry *h;
3958
3959       h = entry->d.h;
3960       if (h->root.root.type == bfd_link_hash_indirect
3961           || h->root.root.type == bfd_link_hash_warning)
3962         {
3963           *must_recreate = TRUE;
3964           return 0;
3965         }
3966     }
3967   return 1;
3968 }
3969
3970 /* A htab_traverse callback for GOT entries.  Add all entries to
3971    hash table *DATA, converting entries for indirect and warning
3972    symbols into entries for the target symbol.  Set *DATA to null
3973    on error.  */
3974
3975 static int
3976 mips_elf_recreate_got (void **entryp, void *data)
3977 {
3978   htab_t *new_got;
3979   struct mips_got_entry *entry;
3980   void **slot;
3981
3982   new_got = (htab_t *) data;
3983   entry = (struct mips_got_entry *) *entryp;
3984   if (entry->abfd != NULL && entry->symndx == -1)
3985     {
3986       struct mips_elf_link_hash_entry *h;
3987
3988       h = entry->d.h;
3989       while (h->root.root.type == bfd_link_hash_indirect
3990              || h->root.root.type == bfd_link_hash_warning)
3991         {
3992           BFD_ASSERT (h->global_got_area == GGA_NONE);
3993           h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
3994         }
3995       entry->d.h = h;
3996     }
3997   slot = htab_find_slot (*new_got, entry, INSERT);
3998   if (slot == NULL)
3999     {
4000       *new_got = NULL;
4001       return 0;
4002     }
4003   if (*slot == NULL)
4004     *slot = entry;
4005   else
4006     free (entry);
4007   return 1;
4008 }
4009
4010 /* If any entries in G->got_entries are for indirect or warning symbols,
4011    replace them with entries for the target symbol.  */
4012
4013 static bfd_boolean
4014 mips_elf_resolve_final_got_entries (struct mips_got_info *g)
4015 {
4016   bfd_boolean must_recreate;
4017   htab_t new_got;
4018
4019   must_recreate = FALSE;
4020   htab_traverse (g->got_entries, mips_elf_check_recreate_got, &must_recreate);
4021   if (must_recreate)
4022     {
4023       new_got = htab_create (htab_size (g->got_entries),
4024                              mips_elf_got_entry_hash,
4025                              mips_elf_got_entry_eq, NULL);
4026       htab_traverse (g->got_entries, mips_elf_recreate_got, &new_got);
4027       if (new_got == NULL)
4028         return FALSE;
4029
4030       /* Each entry in g->got_entries has either been copied to new_got
4031          or freed.  Now delete the hash table itself.  */
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, we will always have
4283      the full set of global entries.  Otherwise estimate those
4284      conservatively as well.  */
4285   if (to == arg->primary)
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
4700       /* Move onto the next GOT.  It will be a secondary GOT if nonull.  */
4701       g = gn;
4702
4703       /* Forbid global symbols in every non-primary GOT from having
4704          lazy-binding stubs.  */
4705       if (g)
4706         htab_traverse (g->got_entries, mips_elf_forbid_lazy_stubs, info);
4707     }
4708   while (g);
4709
4710   got->size = (gg->next->local_gotno
4711                + gg->next->global_gotno
4712                + gg->next->tls_gotno) * MIPS_ELF_GOT_SIZE (abfd);
4713
4714   needed_relocs = 0;
4715   set_got_offset_arg.value = MIPS_ELF_GOT_SIZE (abfd);
4716   set_got_offset_arg.info = info;
4717   for (g = gg->next; g && g->next != gg; g = g->next)
4718     {
4719       unsigned int save_assign;
4720
4721       /* Assign offsets to global GOT entries.  */
4722       save_assign = g->assigned_gotno;
4723       g->assigned_gotno = g->local_gotno;
4724       set_got_offset_arg.g = g;
4725       set_got_offset_arg.needed_relocs = 0;
4726       htab_traverse (g->got_entries,
4727                      mips_elf_set_global_got_offset,
4728                      &set_got_offset_arg);
4729       needed_relocs += set_got_offset_arg.needed_relocs;
4730       BFD_ASSERT (g->assigned_gotno - g->local_gotno <= g->global_gotno);
4731
4732       g->assigned_gotno = save_assign;
4733       if (info->shared)
4734         {
4735           needed_relocs += g->local_gotno - g->assigned_gotno;
4736           BFD_ASSERT (g->assigned_gotno == g->next->local_gotno
4737                       + g->next->global_gotno
4738                       + g->next->tls_gotno
4739                       + htab->reserved_gotno);
4740         }
4741     }
4742
4743   if (needed_relocs)
4744     mips_elf_allocate_dynamic_relocations (dynobj, info,
4745                                            needed_relocs);
4746
4747   return TRUE;
4748 }
4749
4750 \f
4751 /* Returns the first relocation of type r_type found, beginning with
4752    RELOCATION.  RELEND is one-past-the-end of the relocation table.  */
4753
4754 static const Elf_Internal_Rela *
4755 mips_elf_next_relocation (bfd *abfd ATTRIBUTE_UNUSED, unsigned int r_type,
4756                           const Elf_Internal_Rela *relocation,
4757                           const Elf_Internal_Rela *relend)
4758 {
4759   unsigned long r_symndx = ELF_R_SYM (abfd, relocation->r_info);
4760
4761   while (relocation < relend)
4762     {
4763       if (ELF_R_TYPE (abfd, relocation->r_info) == r_type
4764           && ELF_R_SYM (abfd, relocation->r_info) == r_symndx)
4765         return relocation;
4766
4767       ++relocation;
4768     }
4769
4770   /* We didn't find it.  */
4771   return NULL;
4772 }
4773
4774 /* Return whether an input relocation is against a local symbol.  */
4775
4776 static bfd_boolean
4777 mips_elf_local_relocation_p (bfd *input_bfd,
4778                              const Elf_Internal_Rela *relocation,
4779                              asection **local_sections)
4780 {
4781   unsigned long r_symndx;
4782   Elf_Internal_Shdr *symtab_hdr;
4783   size_t extsymoff;
4784
4785   r_symndx = ELF_R_SYM (input_bfd, relocation->r_info);
4786   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
4787   extsymoff = (elf_bad_symtab (input_bfd)) ? 0 : symtab_hdr->sh_info;
4788
4789   if (r_symndx < extsymoff)
4790     return TRUE;
4791   if (elf_bad_symtab (input_bfd) && local_sections[r_symndx] != NULL)
4792     return TRUE;
4793
4794   return FALSE;
4795 }
4796 \f
4797 /* Sign-extend VALUE, which has the indicated number of BITS.  */
4798
4799 bfd_vma
4800 _bfd_mips_elf_sign_extend (bfd_vma value, int bits)
4801 {
4802   if (value & ((bfd_vma) 1 << (bits - 1)))
4803     /* VALUE is negative.  */
4804     value |= ((bfd_vma) - 1) << bits;
4805
4806   return value;
4807 }
4808
4809 /* Return non-zero if the indicated VALUE has overflowed the maximum
4810    range expressible by a signed number with the indicated number of
4811    BITS.  */
4812
4813 static bfd_boolean
4814 mips_elf_overflow_p (bfd_vma value, int bits)
4815 {
4816   bfd_signed_vma svalue = (bfd_signed_vma) value;
4817
4818   if (svalue > (1 << (bits - 1)) - 1)
4819     /* The value is too big.  */
4820     return TRUE;
4821   else if (svalue < -(1 << (bits - 1)))
4822     /* The value is too small.  */
4823     return TRUE;
4824
4825   /* All is well.  */
4826   return FALSE;
4827 }
4828
4829 /* Calculate the %high function.  */
4830
4831 static bfd_vma
4832 mips_elf_high (bfd_vma value)
4833 {
4834   return ((value + (bfd_vma) 0x8000) >> 16) & 0xffff;
4835 }
4836
4837 /* Calculate the %higher function.  */
4838
4839 static bfd_vma
4840 mips_elf_higher (bfd_vma value ATTRIBUTE_UNUSED)
4841 {
4842 #ifdef BFD64
4843   return ((value + (bfd_vma) 0x80008000) >> 32) & 0xffff;
4844 #else
4845   abort ();
4846   return MINUS_ONE;
4847 #endif
4848 }
4849
4850 /* Calculate the %highest function.  */
4851
4852 static bfd_vma
4853 mips_elf_highest (bfd_vma value ATTRIBUTE_UNUSED)
4854 {
4855 #ifdef BFD64
4856   return ((value + (((bfd_vma) 0x8000 << 32) | 0x80008000)) >> 48) & 0xffff;
4857 #else
4858   abort ();
4859   return MINUS_ONE;
4860 #endif
4861 }
4862 \f
4863 /* Create the .compact_rel section.  */
4864
4865 static bfd_boolean
4866 mips_elf_create_compact_rel_section
4867   (bfd *abfd, struct bfd_link_info *info ATTRIBUTE_UNUSED)
4868 {
4869   flagword flags;
4870   register asection *s;
4871
4872   if (bfd_get_linker_section (abfd, ".compact_rel") == NULL)
4873     {
4874       flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED
4875                | SEC_READONLY);
4876
4877       s = bfd_make_section_anyway_with_flags (abfd, ".compact_rel", flags);
4878       if (s == NULL
4879           || ! bfd_set_section_alignment (abfd, s,
4880                                           MIPS_ELF_LOG_FILE_ALIGN (abfd)))
4881         return FALSE;
4882
4883       s->size = sizeof (Elf32_External_compact_rel);
4884     }
4885
4886   return TRUE;
4887 }
4888
4889 /* Create the .got section to hold the global offset table.  */
4890
4891 static bfd_boolean
4892 mips_elf_create_got_section (bfd *abfd, struct bfd_link_info *info)
4893 {
4894   flagword flags;
4895   register asection *s;
4896   struct elf_link_hash_entry *h;
4897   struct bfd_link_hash_entry *bh;
4898   struct mips_got_info *g;
4899   bfd_size_type amt;
4900   struct mips_elf_link_hash_table *htab;
4901
4902   htab = mips_elf_hash_table (info);
4903   BFD_ASSERT (htab != NULL);
4904
4905   /* This function may be called more than once.  */
4906   if (htab->sgot)
4907     return TRUE;
4908
4909   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
4910            | SEC_LINKER_CREATED);
4911
4912   /* We have to use an alignment of 2**4 here because this is hardcoded
4913      in the function stub generation and in the linker script.  */
4914   s = bfd_make_section_anyway_with_flags (abfd, ".got", flags);
4915   if (s == NULL
4916       || ! bfd_set_section_alignment (abfd, s, 4))
4917     return FALSE;
4918   htab->sgot = s;
4919
4920   /* Define the symbol _GLOBAL_OFFSET_TABLE_.  We don't do this in the
4921      linker script because we don't want to define the symbol if we
4922      are not creating a global offset table.  */
4923   bh = NULL;
4924   if (! (_bfd_generic_link_add_one_symbol
4925          (info, abfd, "_GLOBAL_OFFSET_TABLE_", BSF_GLOBAL, s,
4926           0, NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
4927     return FALSE;
4928
4929   h = (struct elf_link_hash_entry *) bh;
4930   h->non_elf = 0;
4931   h->def_regular = 1;
4932   h->type = STT_OBJECT;
4933   elf_hash_table (info)->hgot = h;
4934
4935   if (info->shared
4936       && ! bfd_elf_link_record_dynamic_symbol (info, h))
4937     return FALSE;
4938
4939   amt = sizeof (struct mips_got_info);
4940   g = bfd_alloc (abfd, amt);
4941   if (g == NULL)
4942     return FALSE;
4943   g->global_gotsym = NULL;
4944   g->global_gotno = 0;
4945   g->reloc_only_gotno = 0;
4946   g->tls_gotno = 0;
4947   g->local_gotno = 0;
4948   g->page_gotno = 0;
4949   g->assigned_gotno = 0;
4950   g->bfd2got = NULL;
4951   g->next = NULL;
4952   g->tls_ldm_offset = MINUS_ONE;
4953   g->got_entries = htab_try_create (1, mips_elf_got_entry_hash,
4954                                     mips_elf_got_entry_eq, NULL);
4955   if (g->got_entries == NULL)
4956     return FALSE;
4957   g->got_page_entries = htab_try_create (1, mips_got_page_entry_hash,
4958                                          mips_got_page_entry_eq, NULL);
4959   if (g->got_page_entries == NULL)
4960     return FALSE;
4961   htab->got_info = g;
4962   mips_elf_section_data (s)->elf.this_hdr.sh_flags
4963     |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL;
4964
4965   /* We also need a .got.plt section when generating PLTs.  */
4966   s = bfd_make_section_anyway_with_flags (abfd, ".got.plt",
4967                                           SEC_ALLOC | SEC_LOAD
4968                                           | SEC_HAS_CONTENTS
4969                                           | SEC_IN_MEMORY
4970                                           | SEC_LINKER_CREATED);
4971   if (s == NULL)
4972     return FALSE;
4973   htab->sgotplt = s;
4974
4975   return TRUE;
4976 }
4977 \f
4978 /* Return true if H refers to the special VxWorks __GOTT_BASE__ or
4979    __GOTT_INDEX__ symbols.  These symbols are only special for
4980    shared objects; they are not used in executables.  */
4981
4982 static bfd_boolean
4983 is_gott_symbol (struct bfd_link_info *info, struct elf_link_hash_entry *h)
4984 {
4985   return (mips_elf_hash_table (info)->is_vxworks
4986           && info->shared
4987           && (strcmp (h->root.root.string, "__GOTT_BASE__") == 0
4988               || strcmp (h->root.root.string, "__GOTT_INDEX__") == 0));
4989 }
4990
4991 /* Return TRUE if a relocation of type R_TYPE from INPUT_BFD might
4992    require an la25 stub.  See also mips_elf_local_pic_function_p,
4993    which determines whether the destination function ever requires a
4994    stub.  */
4995
4996 static bfd_boolean
4997 mips_elf_relocation_needs_la25_stub (bfd *input_bfd, int r_type,
4998                                      bfd_boolean target_is_16_bit_code_p)
4999 {
5000   /* We specifically ignore branches and jumps from EF_PIC objects,
5001      where the onus is on the compiler or programmer to perform any
5002      necessary initialization of $25.  Sometimes such initialization
5003      is unnecessary; for example, -mno-shared functions do not use
5004      the incoming value of $25, and may therefore be called directly.  */
5005   if (PIC_OBJECT_P (input_bfd))
5006     return FALSE;
5007
5008   switch (r_type)
5009     {
5010     case R_MIPS_26:
5011     case R_MIPS_PC16:
5012     case R_MICROMIPS_26_S1:
5013     case R_MICROMIPS_PC7_S1:
5014     case R_MICROMIPS_PC10_S1:
5015     case R_MICROMIPS_PC16_S1:
5016     case R_MICROMIPS_PC23_S2:
5017       return TRUE;
5018
5019     case R_MIPS16_26:
5020       return !target_is_16_bit_code_p;
5021
5022     default:
5023       return FALSE;
5024     }
5025 }
5026 \f
5027 /* Calculate the value produced by the RELOCATION (which comes from
5028    the INPUT_BFD).  The ADDEND is the addend to use for this
5029    RELOCATION; RELOCATION->R_ADDEND is ignored.
5030
5031    The result of the relocation calculation is stored in VALUEP.
5032    On exit, set *CROSS_MODE_JUMP_P to true if the relocation field
5033    is a MIPS16 or microMIPS jump to standard MIPS code, or vice versa.
5034
5035    This function returns bfd_reloc_continue if the caller need take no
5036    further action regarding this relocation, bfd_reloc_notsupported if
5037    something goes dramatically wrong, bfd_reloc_overflow if an
5038    overflow occurs, and bfd_reloc_ok to indicate success.  */
5039
5040 static bfd_reloc_status_type
5041 mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
5042                                asection *input_section,
5043                                struct bfd_link_info *info,
5044                                const Elf_Internal_Rela *relocation,
5045                                bfd_vma addend, reloc_howto_type *howto,
5046                                Elf_Internal_Sym *local_syms,
5047                                asection **local_sections, bfd_vma *valuep,
5048                                const char **namep,
5049                                bfd_boolean *cross_mode_jump_p,
5050                                bfd_boolean save_addend)
5051 {
5052   /* The eventual value we will return.  */
5053   bfd_vma value;
5054   /* The address of the symbol against which the relocation is
5055      occurring.  */
5056   bfd_vma symbol = 0;
5057   /* The final GP value to be used for the relocatable, executable, or
5058      shared object file being produced.  */
5059   bfd_vma gp;
5060   /* The place (section offset or address) of the storage unit being
5061      relocated.  */
5062   bfd_vma p;
5063   /* The value of GP used to create the relocatable object.  */
5064   bfd_vma gp0;
5065   /* The offset into the global offset table at which the address of
5066      the relocation entry symbol, adjusted by the addend, resides
5067      during execution.  */
5068   bfd_vma g = MINUS_ONE;
5069   /* The section in which the symbol referenced by the relocation is
5070      located.  */
5071   asection *sec = NULL;
5072   struct mips_elf_link_hash_entry *h = NULL;
5073   /* TRUE if the symbol referred to by this relocation is a local
5074      symbol.  */
5075   bfd_boolean local_p, was_local_p;
5076   /* TRUE if the symbol referred to by this relocation is "_gp_disp".  */
5077   bfd_boolean gp_disp_p = FALSE;
5078   /* TRUE if the symbol referred to by this relocation is
5079      "__gnu_local_gp".  */
5080   bfd_boolean gnu_local_gp_p = FALSE;
5081   Elf_Internal_Shdr *symtab_hdr;
5082   size_t extsymoff;
5083   unsigned long r_symndx;
5084   int r_type;
5085   /* TRUE if overflow occurred during the calculation of the
5086      relocation value.  */
5087   bfd_boolean overflowed_p;
5088   /* TRUE if this relocation refers to a MIPS16 function.  */
5089   bfd_boolean target_is_16_bit_code_p = FALSE;
5090   bfd_boolean target_is_micromips_code_p = FALSE;
5091   struct mips_elf_link_hash_table *htab;
5092   bfd *dynobj;
5093
5094   dynobj = elf_hash_table (info)->dynobj;
5095   htab = mips_elf_hash_table (info);
5096   BFD_ASSERT (htab != NULL);
5097
5098   /* Parse the relocation.  */
5099   r_symndx = ELF_R_SYM (input_bfd, relocation->r_info);
5100   r_type = ELF_R_TYPE (input_bfd, relocation->r_info);
5101   p = (input_section->output_section->vma
5102        + input_section->output_offset
5103        + relocation->r_offset);
5104
5105   /* Assume that there will be no overflow.  */
5106   overflowed_p = FALSE;
5107
5108   /* Figure out whether or not the symbol is local, and get the offset
5109      used in the array of hash table entries.  */
5110   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
5111   local_p = mips_elf_local_relocation_p (input_bfd, relocation,
5112                                          local_sections);
5113   was_local_p = local_p;
5114   if (! elf_bad_symtab (input_bfd))
5115     extsymoff = symtab_hdr->sh_info;
5116   else
5117     {
5118       /* The symbol table does not follow the rule that local symbols
5119          must come before globals.  */
5120       extsymoff = 0;
5121     }
5122
5123   /* Figure out the value of the symbol.  */
5124   if (local_p)
5125     {
5126       Elf_Internal_Sym *sym;
5127
5128       sym = local_syms + r_symndx;
5129       sec = local_sections[r_symndx];
5130
5131       symbol = sec->output_section->vma + sec->output_offset;
5132       if (ELF_ST_TYPE (sym->st_info) != STT_SECTION
5133           || (sec->flags & SEC_MERGE))
5134         symbol += sym->st_value;
5135       if ((sec->flags & SEC_MERGE)
5136           && ELF_ST_TYPE (sym->st_info) == STT_SECTION)
5137         {
5138           addend = _bfd_elf_rel_local_sym (abfd, sym, &sec, addend);
5139           addend -= symbol;
5140           addend += sec->output_section->vma + sec->output_offset;
5141         }
5142
5143       /* MIPS16/microMIPS text labels should be treated as odd.  */
5144       if (ELF_ST_IS_COMPRESSED (sym->st_other))
5145         ++symbol;
5146
5147       /* Record the name of this symbol, for our caller.  */
5148       *namep = bfd_elf_string_from_elf_section (input_bfd,
5149                                                 symtab_hdr->sh_link,
5150                                                 sym->st_name);
5151       if (*namep == '\0')
5152         *namep = bfd_section_name (input_bfd, sec);
5153
5154       target_is_16_bit_code_p = ELF_ST_IS_MIPS16 (sym->st_other);
5155       target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (sym->st_other);
5156     }
5157   else
5158     {
5159       /* ??? Could we use RELOC_FOR_GLOBAL_SYMBOL here ?  */
5160
5161       /* For global symbols we look up the symbol in the hash-table.  */
5162       h = ((struct mips_elf_link_hash_entry *)
5163            elf_sym_hashes (input_bfd) [r_symndx - extsymoff]);
5164       /* Find the real hash-table entry for this symbol.  */
5165       while (h->root.root.type == bfd_link_hash_indirect
5166              || h->root.root.type == bfd_link_hash_warning)
5167         h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
5168
5169       /* Record the name of this symbol, for our caller.  */
5170       *namep = h->root.root.root.string;
5171
5172       /* See if this is the special _gp_disp symbol.  Note that such a
5173          symbol must always be a global symbol.  */
5174       if (strcmp (*namep, "_gp_disp") == 0
5175           && ! NEWABI_P (input_bfd))
5176         {
5177           /* Relocations against _gp_disp are permitted only with
5178              R_MIPS_HI16 and R_MIPS_LO16 relocations.  */
5179           if (!hi16_reloc_p (r_type) && !lo16_reloc_p (r_type))
5180             return bfd_reloc_notsupported;
5181
5182           gp_disp_p = TRUE;
5183         }
5184       /* See if this is the special _gp symbol.  Note that such a
5185          symbol must always be a global symbol.  */
5186       else if (strcmp (*namep, "__gnu_local_gp") == 0)
5187         gnu_local_gp_p = TRUE;
5188
5189
5190       /* If this symbol is defined, calculate its address.  Note that
5191          _gp_disp is a magic symbol, always implicitly defined by the
5192          linker, so it's inappropriate to check to see whether or not
5193          its defined.  */
5194       else if ((h->root.root.type == bfd_link_hash_defined
5195                 || h->root.root.type == bfd_link_hash_defweak)
5196                && h->root.root.u.def.section)
5197         {
5198           sec = h->root.root.u.def.section;
5199           if (sec->output_section)
5200             symbol = (h->root.root.u.def.value
5201                       + sec->output_section->vma
5202                       + sec->output_offset);
5203           else
5204             symbol = h->root.root.u.def.value;
5205         }
5206       else if (h->root.root.type == bfd_link_hash_undefweak)
5207         /* We allow relocations against undefined weak symbols, giving
5208            it the value zero, so that you can undefined weak functions
5209            and check to see if they exist by looking at their
5210            addresses.  */
5211         symbol = 0;
5212       else if (info->unresolved_syms_in_objects == RM_IGNORE
5213                && ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT)
5214         symbol = 0;
5215       else if (strcmp (*namep, SGI_COMPAT (input_bfd)
5216                        ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING") == 0)
5217         {
5218           /* If this is a dynamic link, we should have created a
5219              _DYNAMIC_LINK symbol or _DYNAMIC_LINKING(for normal mips) symbol
5220              in in _bfd_mips_elf_create_dynamic_sections.
5221              Otherwise, we should define the symbol with a value of 0.
5222              FIXME: It should probably get into the symbol table
5223              somehow as well.  */
5224           BFD_ASSERT (! info->shared);
5225           BFD_ASSERT (bfd_get_section_by_name (abfd, ".dynamic") == NULL);
5226           symbol = 0;
5227         }
5228       else if (ELF_MIPS_IS_OPTIONAL (h->root.other))
5229         {
5230           /* This is an optional symbol - an Irix specific extension to the
5231              ELF spec.  Ignore it for now.
5232              XXX - FIXME - there is more to the spec for OPTIONAL symbols
5233              than simply ignoring them, but we do not handle this for now.
5234              For information see the "64-bit ELF Object File Specification"
5235              which is available from here:
5236              http://techpubs.sgi.com/library/manuals/4000/007-4658-001/pdf/007-4658-001.pdf  */
5237           symbol = 0;
5238         }
5239       else if ((*info->callbacks->undefined_symbol)
5240                (info, h->root.root.root.string, input_bfd,
5241                 input_section, relocation->r_offset,
5242                 (info->unresolved_syms_in_objects == RM_GENERATE_ERROR)
5243                  || ELF_ST_VISIBILITY (h->root.other)))
5244         {
5245           return bfd_reloc_undefined;
5246         }
5247       else
5248         {
5249           return bfd_reloc_notsupported;
5250         }
5251
5252       target_is_16_bit_code_p = ELF_ST_IS_MIPS16 (h->root.other);
5253       /* If the output section is the PLT section,
5254          then the target is not microMIPS.  */
5255       target_is_micromips_code_p = (htab->splt != sec
5256                                     && ELF_ST_IS_MICROMIPS (h->root.other));
5257     }
5258
5259   /* If this is a reference to a 16-bit function with a stub, we need
5260      to redirect the relocation to the stub unless:
5261
5262      (a) the relocation is for a MIPS16 JAL;
5263
5264      (b) the relocation is for a MIPS16 PIC call, and there are no
5265          non-MIPS16 uses of the GOT slot; or
5266
5267      (c) the section allows direct references to MIPS16 functions.  */
5268   if (r_type != R_MIPS16_26
5269       && !info->relocatable
5270       && ((h != NULL
5271            && h->fn_stub != NULL
5272            && (r_type != R_MIPS16_CALL16 || h->need_fn_stub))
5273           || (local_p
5274               && elf_tdata (input_bfd)->local_stubs != NULL
5275               && elf_tdata (input_bfd)->local_stubs[r_symndx] != NULL))
5276       && !section_allows_mips16_refs_p (input_section))
5277     {
5278       /* This is a 32- or 64-bit call to a 16-bit function.  We should
5279          have already noticed that we were going to need the
5280          stub.  */
5281       if (local_p)
5282         {
5283           sec = elf_tdata (input_bfd)->local_stubs[r_symndx];
5284           value = 0;
5285         }
5286       else
5287         {
5288           BFD_ASSERT (h->need_fn_stub);
5289           if (h->la25_stub)
5290             {
5291               /* If a LA25 header for the stub itself exists, point to the
5292                  prepended LUI/ADDIU sequence.  */
5293               sec = h->la25_stub->stub_section;
5294               value = h->la25_stub->offset;
5295             }
5296           else
5297             {
5298               sec = h->fn_stub;
5299               value = 0;
5300             }
5301         }
5302
5303       symbol = sec->output_section->vma + sec->output_offset + value;
5304       /* The target is 16-bit, but the stub isn't.  */
5305       target_is_16_bit_code_p = FALSE;
5306     }
5307   /* If this is a 16-bit call to a 32- or 64-bit function with a stub, we
5308      need to redirect the call to the stub.  Note that we specifically
5309      exclude R_MIPS16_CALL16 from this behavior; indirect calls should
5310      use an indirect stub instead.  */
5311   else if (r_type == R_MIPS16_26 && !info->relocatable
5312            && ((h != NULL && (h->call_stub != NULL || h->call_fp_stub != NULL))
5313                || (local_p
5314                    && elf_tdata (input_bfd)->local_call_stubs != NULL
5315                    && elf_tdata (input_bfd)->local_call_stubs[r_symndx] != NULL))
5316            && !target_is_16_bit_code_p)
5317     {
5318       if (local_p)
5319         sec = elf_tdata (input_bfd)->local_call_stubs[r_symndx];
5320       else
5321         {
5322           /* If both call_stub and call_fp_stub are defined, we can figure
5323              out which one to use by checking which one appears in the input
5324              file.  */
5325           if (h->call_stub != NULL && h->call_fp_stub != NULL)
5326             {
5327               asection *o;
5328
5329               sec = NULL;
5330               for (o = input_bfd->sections; o != NULL; o = o->next)
5331                 {
5332                   if (CALL_FP_STUB_P (bfd_get_section_name (input_bfd, o)))
5333                     {
5334                       sec = h->call_fp_stub;
5335                       break;
5336                     }
5337                 }
5338               if (sec == NULL)
5339                 sec = h->call_stub;
5340             }
5341           else if (h->call_stub != NULL)
5342             sec = h->call_stub;
5343           else
5344             sec = h->call_fp_stub;
5345         }
5346
5347       BFD_ASSERT (sec->size > 0);
5348       symbol = sec->output_section->vma + sec->output_offset;
5349     }
5350   /* If this is a direct call to a PIC function, redirect to the
5351      non-PIC stub.  */
5352   else if (h != NULL && h->la25_stub
5353            && mips_elf_relocation_needs_la25_stub (input_bfd, r_type,
5354                                                    target_is_16_bit_code_p))
5355     symbol = (h->la25_stub->stub_section->output_section->vma
5356               + h->la25_stub->stub_section->output_offset
5357               + h->la25_stub->offset);
5358
5359   /* Make sure MIPS16 and microMIPS are not used together.  */
5360   if ((r_type == R_MIPS16_26 && target_is_micromips_code_p)
5361       || (micromips_branch_reloc_p (r_type) && target_is_16_bit_code_p))
5362    {
5363       (*_bfd_error_handler)
5364         (_("MIPS16 and microMIPS functions cannot call each other"));
5365       return bfd_reloc_notsupported;
5366    }
5367
5368   /* Calls from 16-bit code to 32-bit code and vice versa require the
5369      mode change.  However, we can ignore calls to undefined weak symbols,
5370      which should never be executed at runtime.  This exception is important
5371      because the assembly writer may have "known" that any definition of the
5372      symbol would be 16-bit code, and that direct jumps were therefore
5373      acceptable.  */
5374   *cross_mode_jump_p = (!info->relocatable
5375                         && !(h && h->root.root.type == bfd_link_hash_undefweak)
5376                         && ((r_type == R_MIPS16_26 && !target_is_16_bit_code_p)
5377                             || (r_type == R_MICROMIPS_26_S1
5378                                 && !target_is_micromips_code_p)
5379                             || ((r_type == R_MIPS_26 || r_type == R_MIPS_JALR)
5380                                 && (target_is_16_bit_code_p
5381                                     || target_is_micromips_code_p))));
5382
5383   local_p = (h == NULL
5384              || (h->got_only_for_calls
5385                  ? SYMBOL_CALLS_LOCAL (info, &h->root)
5386                  : SYMBOL_REFERENCES_LOCAL (info, &h->root)));
5387
5388   gp0 = _bfd_get_gp_value (input_bfd);
5389   gp = _bfd_get_gp_value (abfd);
5390   if (htab->got_info)
5391     gp += mips_elf_adjust_gp (abfd, htab->got_info, input_bfd);
5392
5393   if (gnu_local_gp_p)
5394     symbol = gp;
5395
5396   /* Global R_MIPS_GOT_PAGE/R_MICROMIPS_GOT_PAGE relocations are equivalent
5397      to R_MIPS_GOT_DISP/R_MICROMIPS_GOT_DISP.  The addend is applied by the
5398      corresponding R_MIPS_GOT_OFST/R_MICROMIPS_GOT_OFST.  */
5399   if (got_page_reloc_p (r_type) && !local_p)
5400     {
5401       r_type = (micromips_reloc_p (r_type)
5402                 ? R_MICROMIPS_GOT_DISP : R_MIPS_GOT_DISP);
5403       addend = 0;
5404     }
5405
5406   /* If we haven't already determined the GOT offset, and we're going
5407      to need it, get it now.  */
5408   switch (r_type)
5409     {
5410     case R_MIPS16_CALL16:
5411     case R_MIPS16_GOT16:
5412     case R_MIPS_CALL16:
5413     case R_MIPS_GOT16:
5414     case R_MIPS_GOT_DISP:
5415     case R_MIPS_GOT_HI16:
5416     case R_MIPS_CALL_HI16:
5417     case R_MIPS_GOT_LO16:
5418     case R_MIPS_CALL_LO16:
5419     case R_MICROMIPS_CALL16:
5420     case R_MICROMIPS_GOT16:
5421     case R_MICROMIPS_GOT_DISP:
5422     case R_MICROMIPS_GOT_HI16:
5423     case R_MICROMIPS_CALL_HI16:
5424     case R_MICROMIPS_GOT_LO16:
5425     case R_MICROMIPS_CALL_LO16:
5426     case R_MIPS_TLS_GD:
5427     case R_MIPS_TLS_GOTTPREL:
5428     case R_MIPS_TLS_LDM:
5429     case R_MIPS16_TLS_GD:
5430     case R_MIPS16_TLS_GOTTPREL:
5431     case R_MIPS16_TLS_LDM:
5432     case R_MICROMIPS_TLS_GD:
5433     case R_MICROMIPS_TLS_GOTTPREL:
5434     case R_MICROMIPS_TLS_LDM:
5435       /* Find the index into the GOT where this value is located.  */
5436       if (tls_ldm_reloc_p (r_type))
5437         {
5438           g = mips_elf_local_got_index (abfd, input_bfd, info,
5439                                         0, 0, NULL, r_type);
5440           if (g == MINUS_ONE)
5441             return bfd_reloc_outofrange;
5442         }
5443       else if (!local_p)
5444         {
5445           /* On VxWorks, CALL relocations should refer to the .got.plt
5446              entry, which is initialized to point at the PLT stub.  */
5447           if (htab->is_vxworks
5448               && (call_hi16_reloc_p (r_type)
5449                   || call_lo16_reloc_p (r_type)
5450                   || call16_reloc_p (r_type)))
5451             {
5452               BFD_ASSERT (addend == 0);
5453               BFD_ASSERT (h->root.needs_plt);
5454               g = mips_elf_gotplt_index (info, &h->root);
5455             }
5456           else
5457             {
5458               BFD_ASSERT (addend == 0);
5459               g = mips_elf_global_got_index (dynobj, input_bfd,
5460                                              &h->root, r_type, info);
5461               if (h->tls_type == GOT_NORMAL
5462                   && !elf_hash_table (info)->dynamic_sections_created)
5463                 /* This is a static link.  We must initialize the GOT entry.  */
5464                 MIPS_ELF_PUT_WORD (dynobj, symbol, htab->sgot->contents + g);
5465             }
5466         }
5467       else if (!htab->is_vxworks
5468                && (call16_reloc_p (r_type) || got16_reloc_p (r_type)))
5469         /* The calculation below does not involve "g".  */
5470         break;
5471       else
5472         {
5473           g = mips_elf_local_got_index (abfd, input_bfd, info,
5474                                         symbol + addend, r_symndx, h, r_type);
5475           if (g == MINUS_ONE)
5476             return bfd_reloc_outofrange;
5477         }
5478
5479       /* Convert GOT indices to actual offsets.  */
5480       g = mips_elf_got_offset_from_index (info, abfd, input_bfd, g);
5481       break;
5482     }
5483
5484   /* Relocations against the VxWorks __GOTT_BASE__ and __GOTT_INDEX__
5485      symbols are resolved by the loader.  Add them to .rela.dyn.  */
5486   if (h != NULL && is_gott_symbol (info, &h->root))
5487     {
5488       Elf_Internal_Rela outrel;
5489       bfd_byte *loc;
5490       asection *s;
5491
5492       s = mips_elf_rel_dyn_section (info, FALSE);
5493       loc = s->contents + s->reloc_count++ * sizeof (Elf32_External_Rela);
5494
5495       outrel.r_offset = (input_section->output_section->vma
5496                          + input_section->output_offset
5497                          + relocation->r_offset);
5498       outrel.r_info = ELF32_R_INFO (h->root.dynindx, r_type);
5499       outrel.r_addend = addend;
5500       bfd_elf32_swap_reloca_out (abfd, &outrel, loc);
5501
5502       /* If we've written this relocation for a readonly section,
5503          we need to set DF_TEXTREL again, so that we do not delete the
5504          DT_TEXTREL tag.  */
5505       if (MIPS_ELF_READONLY_SECTION (input_section))
5506         info->flags |= DF_TEXTREL;
5507
5508       *valuep = 0;
5509       return bfd_reloc_ok;
5510     }
5511
5512   /* Figure out what kind of relocation is being performed.  */
5513   switch (r_type)
5514     {
5515     case R_MIPS_NONE:
5516       return bfd_reloc_continue;
5517
5518     case R_MIPS_16:
5519       value = symbol + _bfd_mips_elf_sign_extend (addend, 16);
5520       overflowed_p = mips_elf_overflow_p (value, 16);
5521       break;
5522
5523     case R_MIPS_32:
5524     case R_MIPS_REL32:
5525     case R_MIPS_64:
5526       if ((info->shared
5527            || (htab->root.dynamic_sections_created
5528                && h != NULL
5529                && h->root.def_dynamic
5530                && !h->root.def_regular
5531                && !h->has_static_relocs))
5532           && r_symndx != STN_UNDEF
5533           && (h == NULL
5534               || h->root.root.type != bfd_link_hash_undefweak
5535               || ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT)
5536           && (input_section->flags & SEC_ALLOC) != 0)
5537         {
5538           /* If we're creating a shared library, then we can't know
5539              where the symbol will end up.  So, we create a relocation
5540              record in the output, and leave the job up to the dynamic
5541              linker.  We must do the same for executable references to
5542              shared library symbols, unless we've decided to use copy
5543              relocs or PLTs instead.  */
5544           value = addend;
5545           if (!mips_elf_create_dynamic_relocation (abfd,
5546                                                    info,
5547                                                    relocation,
5548                                                    h,
5549                                                    sec,
5550                                                    symbol,
5551                                                    &value,
5552                                                    input_section))
5553             return bfd_reloc_undefined;
5554         }
5555       else
5556         {
5557           if (r_type != R_MIPS_REL32)
5558             value = symbol + addend;
5559           else
5560             value = addend;
5561         }
5562       value &= howto->dst_mask;
5563       break;
5564
5565     case R_MIPS_PC32:
5566       value = symbol + addend - p;
5567       value &= howto->dst_mask;
5568       break;
5569
5570     case R_MIPS16_26:
5571       /* The calculation for R_MIPS16_26 is just the same as for an
5572          R_MIPS_26.  It's only the storage of the relocated field into
5573          the output file that's different.  That's handled in
5574          mips_elf_perform_relocation.  So, we just fall through to the
5575          R_MIPS_26 case here.  */
5576     case R_MIPS_26:
5577     case R_MICROMIPS_26_S1:
5578       {
5579         unsigned int shift;
5580
5581         /* Make sure the target of JALX is word-aligned.  Bit 0 must be
5582            the correct ISA mode selector and bit 1 must be 0.  */
5583         if (*cross_mode_jump_p && (symbol & 3) != (r_type == R_MIPS_26))
5584           return bfd_reloc_outofrange;
5585
5586         /* Shift is 2, unusually, for microMIPS JALX.  */
5587         shift = (!*cross_mode_jump_p && r_type == R_MICROMIPS_26_S1) ? 1 : 2;
5588
5589         if (was_local_p)
5590           value = addend | ((p + 4) & (0xfc000000 << shift));
5591         else
5592           value = _bfd_mips_elf_sign_extend (addend, 26 + shift);
5593         value = (value + symbol) >> shift;
5594         if (!was_local_p && h->root.root.type != bfd_link_hash_undefweak)
5595           overflowed_p = (value >> 26) != ((p + 4) >> (26 + shift));
5596         value &= howto->dst_mask;
5597       }
5598       break;
5599
5600     case R_MIPS_TLS_DTPREL_HI16:
5601     case R_MIPS16_TLS_DTPREL_HI16:
5602     case R_MICROMIPS_TLS_DTPREL_HI16:
5603       value = (mips_elf_high (addend + symbol - dtprel_base (info))
5604                & howto->dst_mask);
5605       break;
5606
5607     case R_MIPS_TLS_DTPREL_LO16:
5608     case R_MIPS_TLS_DTPREL32:
5609     case R_MIPS_TLS_DTPREL64:
5610     case R_MIPS16_TLS_DTPREL_LO16:
5611     case R_MICROMIPS_TLS_DTPREL_LO16:
5612       value = (symbol + addend - dtprel_base (info)) & howto->dst_mask;
5613       break;
5614
5615     case R_MIPS_TLS_TPREL_HI16:
5616     case R_MIPS16_TLS_TPREL_HI16:
5617     case R_MICROMIPS_TLS_TPREL_HI16:
5618       value = (mips_elf_high (addend + symbol - tprel_base (info))
5619                & howto->dst_mask);
5620       break;
5621
5622     case R_MIPS_TLS_TPREL_LO16:
5623     case R_MIPS_TLS_TPREL32:
5624     case R_MIPS_TLS_TPREL64:
5625     case R_MIPS16_TLS_TPREL_LO16:
5626     case R_MICROMIPS_TLS_TPREL_LO16:
5627       value = (symbol + addend - tprel_base (info)) & howto->dst_mask;
5628       break;
5629
5630     case R_MIPS_HI16:
5631     case R_MIPS16_HI16:
5632     case R_MICROMIPS_HI16:
5633       if (!gp_disp_p)
5634         {
5635           value = mips_elf_high (addend + symbol);
5636           value &= howto->dst_mask;
5637         }
5638       else
5639         {
5640           /* For MIPS16 ABI code we generate this sequence
5641                 0: li      $v0,%hi(_gp_disp)
5642                 4: addiupc $v1,%lo(_gp_disp)
5643                 8: sll     $v0,16
5644                12: addu    $v0,$v1
5645                14: move    $gp,$v0
5646              So the offsets of hi and lo relocs are the same, but the
5647              base $pc is that used by the ADDIUPC instruction at $t9 + 4.
5648              ADDIUPC clears the low two bits of the instruction address,
5649              so the base is ($t9 + 4) & ~3.  */
5650           if (r_type == R_MIPS16_HI16)
5651             value = mips_elf_high (addend + gp - ((p + 4) & ~(bfd_vma) 0x3));
5652           /* The microMIPS .cpload sequence uses the same assembly
5653              instructions as the traditional psABI version, but the
5654              incoming $t9 has the low bit set.  */
5655           else if (r_type == R_MICROMIPS_HI16)
5656             value = mips_elf_high (addend + gp - p - 1);
5657           else
5658             value = mips_elf_high (addend + gp - p);
5659           overflowed_p = mips_elf_overflow_p (value, 16);
5660         }
5661       break;
5662
5663     case R_MIPS_LO16:
5664     case R_MIPS16_LO16:
5665     case R_MICROMIPS_LO16:
5666     case R_MICROMIPS_HI0_LO16:
5667       if (!gp_disp_p)
5668         value = (symbol + addend) & howto->dst_mask;
5669       else
5670         {
5671           /* See the comment for R_MIPS16_HI16 above for the reason
5672              for this conditional.  */
5673           if (r_type == R_MIPS16_LO16)
5674             value = addend + gp - (p & ~(bfd_vma) 0x3);
5675           else if (r_type == R_MICROMIPS_LO16
5676                    || r_type == R_MICROMIPS_HI0_LO16)
5677             value = addend + gp - p + 3;
5678           else
5679             value = addend + gp - p + 4;
5680           /* The MIPS ABI requires checking the R_MIPS_LO16 relocation
5681              for overflow.  But, on, say, IRIX5, relocations against
5682              _gp_disp are normally generated from the .cpload
5683              pseudo-op.  It generates code that normally looks like
5684              this:
5685
5686                lui    $gp,%hi(_gp_disp)
5687                addiu  $gp,$gp,%lo(_gp_disp)
5688                addu   $gp,$gp,$t9
5689
5690              Here $t9 holds the address of the function being called,
5691              as required by the MIPS ELF ABI.  The R_MIPS_LO16
5692              relocation can easily overflow in this situation, but the
5693              R_MIPS_HI16 relocation will handle the overflow.
5694              Therefore, we consider this a bug in the MIPS ABI, and do
5695              not check for overflow here.  */
5696         }
5697       break;
5698
5699     case R_MIPS_LITERAL:
5700     case R_MICROMIPS_LITERAL:
5701       /* Because we don't merge literal sections, we can handle this
5702          just like R_MIPS_GPREL16.  In the long run, we should merge
5703          shared literals, and then we will need to additional work
5704          here.  */
5705
5706       /* Fall through.  */
5707
5708     case R_MIPS16_GPREL:
5709       /* The R_MIPS16_GPREL performs the same calculation as
5710          R_MIPS_GPREL16, but stores the relocated bits in a different
5711          order.  We don't need to do anything special here; the
5712          differences are handled in mips_elf_perform_relocation.  */
5713     case R_MIPS_GPREL16:
5714     case R_MICROMIPS_GPREL7_S2:
5715     case R_MICROMIPS_GPREL16:
5716       /* Only sign-extend the addend if it was extracted from the
5717          instruction.  If the addend was separate, leave it alone,
5718          otherwise we may lose significant bits.  */
5719       if (howto->partial_inplace)
5720         addend = _bfd_mips_elf_sign_extend (addend, 16);
5721       value = symbol + addend - gp;
5722       /* If the symbol was local, any earlier relocatable links will
5723          have adjusted its addend with the gp offset, so compensate
5724          for that now.  Don't do it for symbols forced local in this
5725          link, though, since they won't have had the gp offset applied
5726          to them before.  */
5727       if (was_local_p)
5728         value += gp0;
5729       overflowed_p = mips_elf_overflow_p (value, 16);
5730       break;
5731
5732     case R_MIPS16_GOT16:
5733     case R_MIPS16_CALL16:
5734     case R_MIPS_GOT16:
5735     case R_MIPS_CALL16:
5736     case R_MICROMIPS_GOT16:
5737     case R_MICROMIPS_CALL16:
5738       /* VxWorks does not have separate local and global semantics for
5739          R_MIPS*_GOT16; every relocation evaluates to "G".  */
5740       if (!htab->is_vxworks && local_p)
5741         {
5742           value = mips_elf_got16_entry (abfd, input_bfd, info,
5743                                         symbol + addend, !was_local_p);
5744           if (value == MINUS_ONE)
5745             return bfd_reloc_outofrange;
5746           value
5747             = mips_elf_got_offset_from_index (info, abfd, input_bfd, value);
5748           overflowed_p = mips_elf_overflow_p (value, 16);
5749           break;
5750         }
5751
5752       /* Fall through.  */
5753
5754     case R_MIPS_TLS_GD:
5755     case R_MIPS_TLS_GOTTPREL:
5756     case R_MIPS_TLS_LDM:
5757     case R_MIPS_GOT_DISP:
5758     case R_MIPS16_TLS_GD:
5759     case R_MIPS16_TLS_GOTTPREL:
5760     case R_MIPS16_TLS_LDM:
5761     case R_MICROMIPS_TLS_GD:
5762     case R_MICROMIPS_TLS_GOTTPREL:
5763     case R_MICROMIPS_TLS_LDM:
5764     case R_MICROMIPS_GOT_DISP:
5765       value = g;
5766       overflowed_p = mips_elf_overflow_p (value, 16);
5767       break;
5768
5769     case R_MIPS_GPREL32:
5770       value = (addend + symbol + gp0 - gp);
5771       if (!save_addend)
5772         value &= howto->dst_mask;
5773       break;
5774
5775     case R_MIPS_PC16:
5776     case R_MIPS_GNU_REL16_S2:
5777       value = symbol + _bfd_mips_elf_sign_extend (addend, 18) - p;
5778       overflowed_p = mips_elf_overflow_p (value, 18);
5779       value >>= howto->rightshift;
5780       value &= howto->dst_mask;
5781       break;
5782
5783     case R_MICROMIPS_PC7_S1:
5784       value = symbol + _bfd_mips_elf_sign_extend (addend, 8) - p;
5785       overflowed_p = mips_elf_overflow_p (value, 8);
5786       value >>= howto->rightshift;
5787       value &= howto->dst_mask;
5788       break;
5789
5790     case R_MICROMIPS_PC10_S1:
5791       value = symbol + _bfd_mips_elf_sign_extend (addend, 11) - p;
5792       overflowed_p = mips_elf_overflow_p (value, 11);
5793       value >>= howto->rightshift;
5794       value &= howto->dst_mask;
5795       break;
5796
5797     case R_MICROMIPS_PC16_S1:
5798       value = symbol + _bfd_mips_elf_sign_extend (addend, 17) - p;
5799       overflowed_p = mips_elf_overflow_p (value, 17);
5800       value >>= howto->rightshift;
5801       value &= howto->dst_mask;
5802       break;
5803
5804     case R_MICROMIPS_PC23_S2:
5805       value = symbol + _bfd_mips_elf_sign_extend (addend, 25) - ((p | 3) ^ 3);
5806       overflowed_p = mips_elf_overflow_p (value, 25);
5807       value >>= howto->rightshift;
5808       value &= howto->dst_mask;
5809       break;
5810
5811     case R_MIPS_GOT_HI16:
5812     case R_MIPS_CALL_HI16:
5813     case R_MICROMIPS_GOT_HI16:
5814     case R_MICROMIPS_CALL_HI16:
5815       /* We're allowed to handle these two relocations identically.
5816          The dynamic linker is allowed to handle the CALL relocations
5817          differently by creating a lazy evaluation stub.  */
5818       value = g;
5819       value = mips_elf_high (value);
5820       value &= howto->dst_mask;
5821       break;
5822
5823     case R_MIPS_GOT_LO16:
5824     case R_MIPS_CALL_LO16:
5825     case R_MICROMIPS_GOT_LO16:
5826     case R_MICROMIPS_CALL_LO16:
5827       value = g & howto->dst_mask;
5828       break;
5829
5830     case R_MIPS_GOT_PAGE:
5831     case R_MICROMIPS_GOT_PAGE:
5832       value = mips_elf_got_page (abfd, input_bfd, info, symbol + addend, NULL);
5833       if (value == MINUS_ONE)
5834         return bfd_reloc_outofrange;
5835       value = mips_elf_got_offset_from_index (info, abfd, input_bfd, value);
5836       overflowed_p = mips_elf_overflow_p (value, 16);
5837       break;
5838
5839     case R_MIPS_GOT_OFST:
5840     case R_MICROMIPS_GOT_OFST:
5841       if (local_p)
5842         mips_elf_got_page (abfd, input_bfd, info, symbol + addend, &value);
5843       else
5844         value = addend;
5845       overflowed_p = mips_elf_overflow_p (value, 16);
5846       break;
5847
5848     case R_MIPS_SUB:
5849     case R_MICROMIPS_SUB:
5850       value = symbol - addend;
5851       value &= howto->dst_mask;
5852       break;
5853
5854     case R_MIPS_HIGHER:
5855     case R_MICROMIPS_HIGHER:
5856       value = mips_elf_higher (addend + symbol);
5857       value &= howto->dst_mask;
5858       break;
5859
5860     case R_MIPS_HIGHEST:
5861     case R_MICROMIPS_HIGHEST:
5862       value = mips_elf_highest (addend + symbol);
5863       value &= howto->dst_mask;
5864       break;
5865
5866     case R_MIPS_SCN_DISP:
5867     case R_MICROMIPS_SCN_DISP:
5868       value = symbol + addend - sec->output_offset;
5869       value &= howto->dst_mask;
5870       break;
5871
5872     case R_MIPS_JALR:
5873     case R_MICROMIPS_JALR:
5874       /* This relocation is only a hint.  In some cases, we optimize
5875          it into a bal instruction.  But we don't try to optimize
5876          when the symbol does not resolve locally.  */
5877       if (h != NULL && !SYMBOL_CALLS_LOCAL (info, &h->root))
5878         return bfd_reloc_continue;
5879       value = symbol + addend;
5880       break;
5881
5882     case R_MIPS_PJUMP:
5883     case R_MIPS_GNU_VTINHERIT:
5884     case R_MIPS_GNU_VTENTRY:
5885       /* We don't do anything with these at present.  */
5886       return bfd_reloc_continue;
5887
5888     default:
5889       /* An unrecognized relocation type.  */
5890       return bfd_reloc_notsupported;
5891     }
5892
5893   /* Store the VALUE for our caller.  */
5894   *valuep = value;
5895   return overflowed_p ? bfd_reloc_overflow : bfd_reloc_ok;
5896 }
5897
5898 /* Obtain the field relocated by RELOCATION.  */
5899
5900 static bfd_vma
5901 mips_elf_obtain_contents (reloc_howto_type *howto,
5902                           const Elf_Internal_Rela *relocation,
5903                           bfd *input_bfd, bfd_byte *contents)
5904 {
5905   bfd_vma x;
5906   bfd_byte *location = contents + relocation->r_offset;
5907
5908   /* Obtain the bytes.  */
5909   x = bfd_get ((8 * bfd_get_reloc_size (howto)), input_bfd, location);
5910
5911   return x;
5912 }
5913
5914 /* It has been determined that the result of the RELOCATION is the
5915    VALUE.  Use HOWTO to place VALUE into the output file at the
5916    appropriate position.  The SECTION is the section to which the
5917    relocation applies.
5918    CROSS_MODE_JUMP_P is true if the relocation field
5919    is a MIPS16 or microMIPS jump to standard MIPS code, or vice versa.
5920
5921    Returns FALSE if anything goes wrong.  */
5922
5923 static bfd_boolean
5924 mips_elf_perform_relocation (struct bfd_link_info *info,
5925                              reloc_howto_type *howto,
5926                              const Elf_Internal_Rela *relocation,
5927                              bfd_vma value, bfd *input_bfd,
5928                              asection *input_section, bfd_byte *contents,
5929                              bfd_boolean cross_mode_jump_p)
5930 {
5931   bfd_vma x;
5932   bfd_byte *location;
5933   int r_type = ELF_R_TYPE (input_bfd, relocation->r_info);
5934
5935   /* Figure out where the relocation is occurring.  */
5936   location = contents + relocation->r_offset;
5937
5938   _bfd_mips_elf_reloc_unshuffle (input_bfd, r_type, FALSE, location);
5939
5940   /* Obtain the current value.  */
5941   x = mips_elf_obtain_contents (howto, relocation, input_bfd, contents);
5942
5943   /* Clear the field we are setting.  */
5944   x &= ~howto->dst_mask;
5945
5946   /* Set the field.  */
5947   x |= (value & howto->dst_mask);
5948
5949   /* If required, turn JAL into JALX.  */
5950   if (cross_mode_jump_p && jal_reloc_p (r_type))
5951     {
5952       bfd_boolean ok;
5953       bfd_vma opcode = x >> 26;
5954       bfd_vma jalx_opcode;
5955
5956       /* Check to see if the opcode is already JAL or JALX.  */
5957       if (r_type == R_MIPS16_26)
5958         {
5959           ok = ((opcode == 0x6) || (opcode == 0x7));
5960           jalx_opcode = 0x7;
5961         }
5962       else if (r_type == R_MICROMIPS_26_S1)
5963         {
5964           ok = ((opcode == 0x3d) || (opcode == 0x3c));
5965           jalx_opcode = 0x3c;
5966         }
5967       else
5968         {
5969           ok = ((opcode == 0x3) || (opcode == 0x1d));
5970           jalx_opcode = 0x1d;
5971         }
5972
5973       /* If the opcode is not JAL or JALX, there's a problem.  We cannot
5974          convert J or JALS to JALX.  */
5975       if (!ok)
5976         {
5977           (*_bfd_error_handler)
5978             (_("%B: %A+0x%lx: Unsupported jump between ISA modes; consider recompiling with interlinking enabled."),
5979              input_bfd,
5980              input_section,
5981              (unsigned long) relocation->r_offset);
5982           bfd_set_error (bfd_error_bad_value);
5983           return FALSE;
5984         }
5985
5986       /* Make this the JALX opcode.  */
5987       x = (x & ~(0x3f << 26)) | (jalx_opcode << 26);
5988     }
5989
5990   /* Try converting JAL to BAL and J(AL)R to B(AL), if the target is in
5991      range.  */
5992   if (!info->relocatable
5993       && !cross_mode_jump_p
5994       && ((JAL_TO_BAL_P (input_bfd)
5995            && r_type == R_MIPS_26
5996            && (x >> 26) == 0x3)         /* jal addr */
5997           || (JALR_TO_BAL_P (input_bfd)
5998               && r_type == R_MIPS_JALR
5999               && x == 0x0320f809)       /* jalr t9 */
6000           || (JR_TO_B_P (input_bfd)
6001               && r_type == R_MIPS_JALR
6002               && x == 0x03200008)))     /* jr t9 */
6003     {
6004       bfd_vma addr;
6005       bfd_vma dest;
6006       bfd_signed_vma off;
6007
6008       addr = (input_section->output_section->vma
6009               + input_section->output_offset
6010               + relocation->r_offset
6011               + 4);
6012       if (r_type == R_MIPS_26)
6013         dest = (value << 2) | ((addr >> 28) << 28);
6014       else
6015         dest = value;
6016       off = dest - addr;
6017       if (off <= 0x1ffff && off >= -0x20000)
6018         {
6019           if (x == 0x03200008)  /* jr t9 */
6020             x = 0x10000000 | (((bfd_vma) off >> 2) & 0xffff);   /* b addr */
6021           else
6022             x = 0x04110000 | (((bfd_vma) off >> 2) & 0xffff);   /* bal addr */
6023         }
6024     }
6025
6026   /* Put the value into the output.  */
6027   bfd_put (8 * bfd_get_reloc_size (howto), input_bfd, x, location);
6028
6029   _bfd_mips_elf_reloc_shuffle (input_bfd, r_type, !info->relocatable,
6030                                location);
6031
6032   return TRUE;
6033 }
6034 \f
6035 /* Create a rel.dyn relocation for the dynamic linker to resolve.  REL
6036    is the original relocation, which is now being transformed into a
6037    dynamic relocation.  The ADDENDP is adjusted if necessary; the
6038    caller should store the result in place of the original addend.  */
6039
6040 static bfd_boolean
6041 mips_elf_create_dynamic_relocation (bfd *output_bfd,
6042                                     struct bfd_link_info *info,
6043                                     const Elf_Internal_Rela *rel,
6044                                     struct mips_elf_link_hash_entry *h,
6045                                     asection *sec, bfd_vma symbol,
6046                                     bfd_vma *addendp, asection *input_section)
6047 {
6048   Elf_Internal_Rela outrel[3];
6049   asection *sreloc;
6050   bfd *dynobj;
6051   int r_type;
6052   long indx;
6053   bfd_boolean defined_p;
6054   struct mips_elf_link_hash_table *htab;
6055
6056   htab = mips_elf_hash_table (info);
6057   BFD_ASSERT (htab != NULL);
6058
6059   r_type = ELF_R_TYPE (output_bfd, rel->r_info);
6060   dynobj = elf_hash_table (info)->dynobj;
6061   sreloc = mips_elf_rel_dyn_section (info, FALSE);
6062   BFD_ASSERT (sreloc != NULL);
6063   BFD_ASSERT (sreloc->contents != NULL);
6064   BFD_ASSERT (sreloc->reloc_count * MIPS_ELF_REL_SIZE (output_bfd)
6065               < sreloc->size);
6066
6067   outrel[0].r_offset =
6068     _bfd_elf_section_offset (output_bfd, info, input_section, rel[0].r_offset);
6069   if (ABI_64_P (output_bfd))
6070     {
6071       outrel[1].r_offset =
6072         _bfd_elf_section_offset (output_bfd, info, input_section, rel[1].r_offset);
6073       outrel[2].r_offset =
6074         _bfd_elf_section_offset (output_bfd, info, input_section, rel[2].r_offset);
6075     }
6076
6077   if (outrel[0].r_offset == MINUS_ONE)
6078     /* The relocation field has been deleted.  */
6079     return TRUE;
6080
6081   if (outrel[0].r_offset == MINUS_TWO)
6082     {
6083       /* The relocation field has been converted into a relative value of
6084          some sort.  Functions like _bfd_elf_write_section_eh_frame expect
6085          the field to be fully relocated, so add in the symbol's value.  */
6086       *addendp += symbol;
6087       return TRUE;
6088     }
6089
6090   /* We must now calculate the dynamic symbol table index to use
6091      in the relocation.  */
6092   if (h != NULL && ! SYMBOL_REFERENCES_LOCAL (info, &h->root))
6093     {
6094       BFD_ASSERT (htab->is_vxworks || h->global_got_area != GGA_NONE);
6095       indx = h->root.dynindx;
6096       if (SGI_COMPAT (output_bfd))
6097         defined_p = h->root.def_regular;
6098       else
6099         /* ??? glibc's ld.so just adds the final GOT entry to the
6100            relocation field.  It therefore treats relocs against
6101            defined symbols in the same way as relocs against
6102            undefined symbols.  */
6103         defined_p = FALSE;
6104     }
6105   else
6106     {
6107       if (sec != NULL && bfd_is_abs_section (sec))
6108         indx = 0;
6109       else if (sec == NULL || sec->owner == NULL)
6110         {
6111           bfd_set_error (bfd_error_bad_value);
6112           return FALSE;
6113         }
6114       else
6115         {
6116           indx = elf_section_data (sec->output_section)->dynindx;
6117           if (indx == 0)
6118             {
6119               asection *osec = htab->root.text_index_section;
6120               indx = elf_section_data (osec)->dynindx;
6121             }
6122           if (indx == 0)
6123             abort ();
6124         }
6125
6126       /* Instead of generating a relocation using the section
6127          symbol, we may as well make it a fully relative
6128          relocation.  We want to avoid generating relocations to
6129          local symbols because we used to generate them
6130          incorrectly, without adding the original symbol value,
6131          which is mandated by the ABI for section symbols.  In
6132          order to give dynamic loaders and applications time to
6133          phase out the incorrect use, we refrain from emitting
6134          section-relative relocations.  It's not like they're
6135          useful, after all.  This should be a bit more efficient
6136          as well.  */
6137       /* ??? Although this behavior is compatible with glibc's ld.so,
6138          the ABI says that relocations against STN_UNDEF should have
6139          a symbol value of 0.  Irix rld honors this, so relocations
6140          against STN_UNDEF have no effect.  */
6141       if (!SGI_COMPAT (output_bfd))
6142         indx = 0;
6143       defined_p = TRUE;
6144     }
6145
6146   /* If the relocation was previously an absolute relocation and
6147      this symbol will not be referred to by the relocation, we must
6148      adjust it by the value we give it in the dynamic symbol table.
6149      Otherwise leave the job up to the dynamic linker.  */
6150   if (defined_p && r_type != R_MIPS_REL32)
6151     *addendp += symbol;
6152
6153   if (htab->is_vxworks)
6154     /* VxWorks uses non-relative relocations for this.  */
6155     outrel[0].r_info = ELF32_R_INFO (indx, R_MIPS_32);
6156   else
6157     /* The relocation is always an REL32 relocation because we don't
6158        know where the shared library will wind up at load-time.  */
6159     outrel[0].r_info = ELF_R_INFO (output_bfd, (unsigned long) indx,
6160                                    R_MIPS_REL32);
6161
6162   /* For strict adherence to the ABI specification, we should
6163      generate a R_MIPS_64 relocation record by itself before the
6164      _REL32/_64 record as well, such that the addend is read in as
6165      a 64-bit value (REL32 is a 32-bit relocation, after all).
6166      However, since none of the existing ELF64 MIPS dynamic
6167      loaders seems to care, we don't waste space with these
6168      artificial relocations.  If this turns out to not be true,
6169      mips_elf_allocate_dynamic_relocation() should be tweaked so
6170      as to make room for a pair of dynamic relocations per
6171      invocation if ABI_64_P, and here we should generate an
6172      additional relocation record with R_MIPS_64 by itself for a
6173      NULL symbol before this relocation record.  */
6174   outrel[1].r_info = ELF_R_INFO (output_bfd, 0,
6175                                  ABI_64_P (output_bfd)
6176                                  ? R_MIPS_64
6177                                  : R_MIPS_NONE);
6178   outrel[2].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_NONE);
6179
6180   /* Adjust the output offset of the relocation to reference the
6181      correct location in the output file.  */
6182   outrel[0].r_offset += (input_section->output_section->vma
6183                          + input_section->output_offset);
6184   outrel[1].r_offset += (input_section->output_section->vma
6185                          + input_section->output_offset);
6186   outrel[2].r_offset += (input_section->output_section->vma
6187                          + input_section->output_offset);
6188
6189   /* Put the relocation back out.  We have to use the special
6190      relocation outputter in the 64-bit case since the 64-bit
6191      relocation format is non-standard.  */
6192   if (ABI_64_P (output_bfd))
6193     {
6194       (*get_elf_backend_data (output_bfd)->s->swap_reloc_out)
6195         (output_bfd, &outrel[0],
6196          (sreloc->contents
6197           + sreloc->reloc_count * sizeof (Elf64_Mips_External_Rel)));
6198     }
6199   else if (htab->is_vxworks)
6200     {
6201       /* VxWorks uses RELA rather than REL dynamic relocations.  */
6202       outrel[0].r_addend = *addendp;
6203       bfd_elf32_swap_reloca_out
6204         (output_bfd, &outrel[0],
6205          (sreloc->contents
6206           + sreloc->reloc_count * sizeof (Elf32_External_Rela)));
6207     }
6208   else
6209     bfd_elf32_swap_reloc_out
6210       (output_bfd, &outrel[0],
6211        (sreloc->contents + sreloc->reloc_count * sizeof (Elf32_External_Rel)));
6212
6213   /* We've now added another relocation.  */
6214   ++sreloc->reloc_count;
6215
6216   /* Make sure the output section is writable.  The dynamic linker
6217      will be writing to it.  */
6218   elf_section_data (input_section->output_section)->this_hdr.sh_flags
6219     |= SHF_WRITE;
6220
6221   /* On IRIX5, make an entry of compact relocation info.  */
6222   if (IRIX_COMPAT (output_bfd) == ict_irix5)
6223     {
6224       asection *scpt = bfd_get_linker_section (dynobj, ".compact_rel");
6225       bfd_byte *cr;
6226
6227       if (scpt)
6228         {
6229           Elf32_crinfo cptrel;
6230
6231           mips_elf_set_cr_format (cptrel, CRF_MIPS_LONG);
6232           cptrel.vaddr = (rel->r_offset
6233                           + input_section->output_section->vma
6234                           + input_section->output_offset);
6235           if (r_type == R_MIPS_REL32)
6236             mips_elf_set_cr_type (cptrel, CRT_MIPS_REL32);
6237           else
6238             mips_elf_set_cr_type (cptrel, CRT_MIPS_WORD);
6239           mips_elf_set_cr_dist2to (cptrel, 0);
6240           cptrel.konst = *addendp;
6241
6242           cr = (scpt->contents
6243                 + sizeof (Elf32_External_compact_rel));
6244           mips_elf_set_cr_relvaddr (cptrel, 0);
6245           bfd_elf32_swap_crinfo_out (output_bfd, &cptrel,
6246                                      ((Elf32_External_crinfo *) cr
6247                                       + scpt->reloc_count));
6248           ++scpt->reloc_count;
6249         }
6250     }
6251
6252   /* If we've written this relocation for a readonly section,
6253      we need to set DF_TEXTREL again, so that we do not delete the
6254      DT_TEXTREL tag.  */
6255   if (MIPS_ELF_READONLY_SECTION (input_section))
6256     info->flags |= DF_TEXTREL;
6257
6258   return TRUE;
6259 }
6260 \f
6261 /* Return the MACH for a MIPS e_flags value.  */
6262
6263 unsigned long
6264 _bfd_elf_mips_mach (flagword flags)
6265 {
6266   switch (flags & EF_MIPS_MACH)
6267     {
6268     case E_MIPS_MACH_3900:
6269       return bfd_mach_mips3900;
6270
6271     case E_MIPS_MACH_4010:
6272       return bfd_mach_mips4010;
6273
6274     case E_MIPS_MACH_4100:
6275       return bfd_mach_mips4100;
6276
6277     case E_MIPS_MACH_4111:
6278       return bfd_mach_mips4111;
6279
6280     case E_MIPS_MACH_4120:
6281       return bfd_mach_mips4120;
6282
6283     case E_MIPS_MACH_4650:
6284       return bfd_mach_mips4650;
6285
6286     case E_MIPS_MACH_5400:
6287       return bfd_mach_mips5400;
6288
6289     case E_MIPS_MACH_5500:
6290       return bfd_mach_mips5500;
6291
6292     case E_MIPS_MACH_5900:
6293       return bfd_mach_mips5900;
6294
6295     case E_MIPS_MACH_9000:
6296       return bfd_mach_mips9000;
6297
6298     case E_MIPS_MACH_SB1:
6299       return bfd_mach_mips_sb1;
6300
6301     case E_MIPS_MACH_LS2E:
6302       return bfd_mach_mips_loongson_2e;
6303
6304     case E_MIPS_MACH_LS2F:
6305       return bfd_mach_mips_loongson_2f;
6306
6307     case E_MIPS_MACH_LS3A:
6308       return bfd_mach_mips_loongson_3a;
6309
6310     case E_MIPS_MACH_OCTEON2:
6311       return bfd_mach_mips_octeon2;
6312
6313     case E_MIPS_MACH_OCTEON:
6314       return bfd_mach_mips_octeon;
6315
6316     case E_MIPS_MACH_XLR:
6317       return bfd_mach_mips_xlr;
6318
6319     default:
6320       switch (flags & EF_MIPS_ARCH)
6321         {
6322         default:
6323         case E_MIPS_ARCH_1:
6324           return bfd_mach_mips3000;
6325
6326         case E_MIPS_ARCH_2:
6327           return bfd_mach_mips6000;
6328
6329         case E_MIPS_ARCH_3:
6330           return bfd_mach_mips4000;
6331
6332         case E_MIPS_ARCH_4:
6333           return bfd_mach_mips8000;
6334
6335         case E_MIPS_ARCH_5:
6336           return bfd_mach_mips5;
6337
6338         case E_MIPS_ARCH_32:
6339           return bfd_mach_mipsisa32;
6340
6341         case E_MIPS_ARCH_64:
6342           return bfd_mach_mipsisa64;
6343
6344         case E_MIPS_ARCH_32R2:
6345           return bfd_mach_mipsisa32r2;
6346
6347         case E_MIPS_ARCH_64R2:
6348           return bfd_mach_mipsisa64r2;
6349         }
6350     }
6351
6352   return 0;
6353 }
6354
6355 /* Return printable name for ABI.  */
6356
6357 static INLINE char *
6358 elf_mips_abi_name (bfd *abfd)
6359 {
6360   flagword flags;
6361
6362   flags = elf_elfheader (abfd)->e_flags;
6363   switch (flags & EF_MIPS_ABI)
6364     {
6365     case 0:
6366       if (ABI_N32_P (abfd))
6367         return "N32";
6368       else if (ABI_64_P (abfd))
6369         return "64";
6370       else
6371         return "none";
6372     case E_MIPS_ABI_O32:
6373       return "O32";
6374     case E_MIPS_ABI_O64:
6375       return "O64";
6376     case E_MIPS_ABI_EABI32:
6377       return "EABI32";
6378     case E_MIPS_ABI_EABI64:
6379       return "EABI64";
6380     default:
6381       return "unknown abi";
6382     }
6383 }
6384 \f
6385 /* MIPS ELF uses two common sections.  One is the usual one, and the
6386    other is for small objects.  All the small objects are kept
6387    together, and then referenced via the gp pointer, which yields
6388    faster assembler code.  This is what we use for the small common
6389    section.  This approach is copied from ecoff.c.  */
6390 static asection mips_elf_scom_section;
6391 static asymbol mips_elf_scom_symbol;
6392 static asymbol *mips_elf_scom_symbol_ptr;
6393
6394 /* MIPS ELF also uses an acommon section, which represents an
6395    allocated common symbol which may be overridden by a
6396    definition in a shared library.  */
6397 static asection mips_elf_acom_section;
6398 static asymbol mips_elf_acom_symbol;
6399 static asymbol *mips_elf_acom_symbol_ptr;
6400
6401 /* This is used for both the 32-bit and the 64-bit ABI.  */
6402
6403 void
6404 _bfd_mips_elf_symbol_processing (bfd *abfd, asymbol *asym)
6405 {
6406   elf_symbol_type *elfsym;
6407
6408   /* Handle the special MIPS section numbers that a symbol may use.  */
6409   elfsym = (elf_symbol_type *) asym;
6410   switch (elfsym->internal_elf_sym.st_shndx)
6411     {
6412     case SHN_MIPS_ACOMMON:
6413       /* This section is used in a dynamically linked executable file.
6414          It is an allocated common section.  The dynamic linker can
6415          either resolve these symbols to something in a shared
6416          library, or it can just leave them here.  For our purposes,
6417          we can consider these symbols to be in a new section.  */
6418       if (mips_elf_acom_section.name == NULL)
6419         {
6420           /* Initialize the acommon section.  */
6421           mips_elf_acom_section.name = ".acommon";
6422           mips_elf_acom_section.flags = SEC_ALLOC;
6423           mips_elf_acom_section.output_section = &mips_elf_acom_section;
6424           mips_elf_acom_section.symbol = &mips_elf_acom_symbol;
6425           mips_elf_acom_section.symbol_ptr_ptr = &mips_elf_acom_symbol_ptr;
6426           mips_elf_acom_symbol.name = ".acommon";
6427           mips_elf_acom_symbol.flags = BSF_SECTION_SYM;
6428           mips_elf_acom_symbol.section = &mips_elf_acom_section;
6429           mips_elf_acom_symbol_ptr = &mips_elf_acom_symbol;
6430         }
6431       asym->section = &mips_elf_acom_section;
6432       break;
6433
6434     case SHN_COMMON:
6435       /* Common symbols less than the GP size are automatically
6436          treated as SHN_MIPS_SCOMMON symbols on IRIX5.  */
6437       if (asym->value > elf_gp_size (abfd)
6438           || ELF_ST_TYPE (elfsym->internal_elf_sym.st_info) == STT_TLS
6439           || IRIX_COMPAT (abfd) == ict_irix6)
6440         break;
6441       /* Fall through.  */
6442     case SHN_MIPS_SCOMMON:
6443       if (mips_elf_scom_section.name == NULL)
6444         {
6445           /* Initialize the small common section.  */
6446           mips_elf_scom_section.name = ".scommon";
6447           mips_elf_scom_section.flags = SEC_IS_COMMON;
6448           mips_elf_scom_section.output_section = &mips_elf_scom_section;
6449           mips_elf_scom_section.symbol = &mips_elf_scom_symbol;
6450           mips_elf_scom_section.symbol_ptr_ptr = &mips_elf_scom_symbol_ptr;
6451           mips_elf_scom_symbol.name = ".scommon";
6452           mips_elf_scom_symbol.flags = BSF_SECTION_SYM;
6453           mips_elf_scom_symbol.section = &mips_elf_scom_section;
6454           mips_elf_scom_symbol_ptr = &mips_elf_scom_symbol;
6455         }
6456       asym->section = &mips_elf_scom_section;
6457       asym->value = elfsym->internal_elf_sym.st_size;
6458       break;
6459
6460     case SHN_MIPS_SUNDEFINED:
6461       asym->section = bfd_und_section_ptr;
6462       break;
6463
6464     case SHN_MIPS_TEXT:
6465       {
6466         asection *section = bfd_get_section_by_name (abfd, ".text");
6467
6468         if (section != NULL)
6469           {
6470             asym->section = section;
6471             /* MIPS_TEXT is a bit special, the address is not an offset
6472                to the base of the .text section.  So substract the section
6473                base address to make it an offset.  */
6474             asym->value -= section->vma;
6475           }
6476       }
6477       break;
6478
6479     case SHN_MIPS_DATA:
6480       {
6481         asection *section = bfd_get_section_by_name (abfd, ".data");
6482
6483         if (section != NULL)
6484           {
6485             asym->section = section;
6486             /* MIPS_DATA is a bit special, the address is not an offset
6487                to the base of the .data section.  So substract the section
6488                base address to make it an offset.  */
6489             asym->value -= section->vma;
6490           }
6491       }
6492       break;
6493     }
6494
6495   /* If this is an odd-valued function symbol, assume it's a MIPS16
6496      or microMIPS one.  */
6497   if (ELF_ST_TYPE (elfsym->internal_elf_sym.st_info) == STT_FUNC
6498       && (asym->value & 1) != 0)
6499     {
6500       asym->value--;
6501       if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MICROMIPS)
6502         elfsym->internal_elf_sym.st_other
6503           = ELF_ST_SET_MICROMIPS (elfsym->internal_elf_sym.st_other);
6504       else
6505         elfsym->internal_elf_sym.st_other
6506           = ELF_ST_SET_MIPS16 (elfsym->internal_elf_sym.st_other);
6507     }
6508 }
6509 \f
6510 /* Implement elf_backend_eh_frame_address_size.  This differs from
6511    the default in the way it handles EABI64.
6512
6513    EABI64 was originally specified as an LP64 ABI, and that is what
6514    -mabi=eabi normally gives on a 64-bit target.  However, gcc has
6515    historically accepted the combination of -mabi=eabi and -mlong32,
6516    and this ILP32 variation has become semi-official over time.
6517    Both forms use elf32 and have pointer-sized FDE addresses.
6518
6519    If an EABI object was generated by GCC 4.0 or above, it will have
6520    an empty .gcc_compiled_longXX section, where XX is the size of longs
6521    in bits.  Unfortunately, ILP32 objects generated by earlier compilers
6522    have no special marking to distinguish them from LP64 objects.
6523
6524    We don't want users of the official LP64 ABI to be punished for the
6525    existence of the ILP32 variant, but at the same time, we don't want
6526    to mistakenly interpret pre-4.0 ILP32 objects as being LP64 objects.
6527    We therefore take the following approach:
6528
6529       - If ABFD contains a .gcc_compiled_longXX section, use it to
6530         determine the pointer size.
6531
6532       - Otherwise check the type of the first relocation.  Assume that
6533         the LP64 ABI is being used if the relocation is of type R_MIPS_64.
6534
6535       - Otherwise punt.
6536
6537    The second check is enough to detect LP64 objects generated by pre-4.0
6538    compilers because, in the kind of output generated by those compilers,
6539    the first relocation will be associated with either a CIE personality
6540    routine or an FDE start address.  Furthermore, the compilers never
6541    used a special (non-pointer) encoding for this ABI.
6542
6543    Checking the relocation type should also be safe because there is no
6544    reason to use R_MIPS_64 in an ILP32 object.  Pre-4.0 compilers never
6545    did so.  */
6546
6547 unsigned int
6548 _bfd_mips_elf_eh_frame_address_size (bfd *abfd, asection *sec)
6549 {
6550   if (elf_elfheader (abfd)->e_ident[EI_CLASS] == ELFCLASS64)
6551     return 8;
6552   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI64)
6553     {
6554       bfd_boolean long32_p, long64_p;
6555
6556       long32_p = bfd_get_section_by_name (abfd, ".gcc_compiled_long32") != 0;
6557       long64_p = bfd_get_section_by_name (abfd, ".gcc_compiled_long64") != 0;
6558       if (long32_p && long64_p)
6559         return 0;
6560       if (long32_p)
6561         return 4;
6562       if (long64_p)
6563         return 8;
6564
6565       if (sec->reloc_count > 0
6566           && elf_section_data (sec)->relocs != NULL
6567           && (ELF32_R_TYPE (elf_section_data (sec)->relocs[0].r_info)
6568               == R_MIPS_64))
6569         return 8;
6570
6571       return 0;
6572     }
6573   return 4;
6574 }
6575 \f
6576 /* There appears to be a bug in the MIPSpro linker that causes GOT_DISP
6577    relocations against two unnamed section symbols to resolve to the
6578    same address.  For example, if we have code like:
6579
6580         lw      $4,%got_disp(.data)($gp)
6581         lw      $25,%got_disp(.text)($gp)
6582         jalr    $25
6583
6584    then the linker will resolve both relocations to .data and the program
6585    will jump there rather than to .text.
6586
6587    We can work around this problem by giving names to local section symbols.
6588    This is also what the MIPSpro tools do.  */
6589
6590 bfd_boolean
6591 _bfd_mips_elf_name_local_section_symbols (bfd *abfd)
6592 {
6593   return SGI_COMPAT (abfd);
6594 }
6595 \f
6596 /* Work over a section just before writing it out.  This routine is
6597    used by both the 32-bit and the 64-bit ABI.  FIXME: We recognize
6598    sections that need the SHF_MIPS_GPREL flag by name; there has to be
6599    a better way.  */
6600
6601 bfd_boolean
6602 _bfd_mips_elf_section_processing (bfd *abfd, Elf_Internal_Shdr *hdr)
6603 {
6604   if (hdr->sh_type == SHT_MIPS_REGINFO
6605       && hdr->sh_size > 0)
6606     {
6607       bfd_byte buf[4];
6608
6609       BFD_ASSERT (hdr->sh_size == sizeof (Elf32_External_RegInfo));
6610       BFD_ASSERT (hdr->contents == NULL);
6611
6612       if (bfd_seek (abfd,
6613                     hdr->sh_offset + sizeof (Elf32_External_RegInfo) - 4,
6614                     SEEK_SET) != 0)
6615         return FALSE;
6616       H_PUT_32 (abfd, elf_gp (abfd), buf);
6617       if (bfd_bwrite (buf, 4, abfd) != 4)
6618         return FALSE;
6619     }
6620
6621   if (hdr->sh_type == SHT_MIPS_OPTIONS
6622       && hdr->bfd_section != NULL
6623       && mips_elf_section_data (hdr->bfd_section) != NULL
6624       && mips_elf_section_data (hdr->bfd_section)->u.tdata != NULL)
6625     {
6626       bfd_byte *contents, *l, *lend;
6627
6628       /* We stored the section contents in the tdata field in the
6629          set_section_contents routine.  We save the section contents
6630          so that we don't have to read them again.
6631          At this point we know that elf_gp is set, so we can look
6632          through the section contents to see if there is an
6633          ODK_REGINFO structure.  */
6634
6635       contents = mips_elf_section_data (hdr->bfd_section)->u.tdata;
6636       l = contents;
6637       lend = contents + hdr->sh_size;
6638       while (l + sizeof (Elf_External_Options) <= lend)
6639         {
6640           Elf_Internal_Options intopt;
6641
6642           bfd_mips_elf_swap_options_in (abfd, (Elf_External_Options *) l,
6643                                         &intopt);
6644           if (intopt.size < sizeof (Elf_External_Options))
6645             {
6646               (*_bfd_error_handler)
6647                 (_("%B: Warning: bad `%s' option size %u smaller than its header"),
6648                 abfd, MIPS_ELF_OPTIONS_SECTION_NAME (abfd), intopt.size);
6649               break;
6650             }
6651           if (ABI_64_P (abfd) && intopt.kind == ODK_REGINFO)
6652             {
6653               bfd_byte buf[8];
6654
6655               if (bfd_seek (abfd,
6656                             (hdr->sh_offset
6657                              + (l - contents)
6658                              + sizeof (Elf_External_Options)
6659                              + (sizeof (Elf64_External_RegInfo) - 8)),
6660                              SEEK_SET) != 0)
6661                 return FALSE;
6662               H_PUT_64 (abfd, elf_gp (abfd), buf);
6663               if (bfd_bwrite (buf, 8, abfd) != 8)
6664                 return FALSE;
6665             }
6666           else if (intopt.kind == ODK_REGINFO)
6667             {
6668               bfd_byte buf[4];
6669
6670               if (bfd_seek (abfd,
6671                             (hdr->sh_offset
6672                              + (l - contents)
6673                              + sizeof (Elf_External_Options)
6674                              + (sizeof (Elf32_External_RegInfo) - 4)),
6675                             SEEK_SET) != 0)
6676                 return FALSE;
6677               H_PUT_32 (abfd, elf_gp (abfd), buf);
6678               if (bfd_bwrite (buf, 4, abfd) != 4)
6679                 return FALSE;
6680             }
6681           l += intopt.size;
6682         }
6683     }
6684
6685   if (hdr->bfd_section != NULL)
6686     {
6687       const char *name = bfd_get_section_name (abfd, hdr->bfd_section);
6688
6689       /* .sbss is not handled specially here because the GNU/Linux
6690          prelinker can convert .sbss from NOBITS to PROGBITS and
6691          changing it back to NOBITS breaks the binary.  The entry in
6692          _bfd_mips_elf_special_sections will ensure the correct flags
6693          are set on .sbss if BFD creates it without reading it from an
6694          input file, and without special handling here the flags set
6695          on it in an input file will be followed.  */
6696       if (strcmp (name, ".sdata") == 0
6697           || strcmp (name, ".lit8") == 0
6698           || strcmp (name, ".lit4") == 0)
6699         {
6700           hdr->sh_flags |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL;
6701           hdr->sh_type = SHT_PROGBITS;
6702         }
6703       else if (strcmp (name, ".srdata") == 0)
6704         {
6705           hdr->sh_flags |= SHF_ALLOC | SHF_MIPS_GPREL;
6706           hdr->sh_type = SHT_PROGBITS;
6707         }
6708       else if (strcmp (name, ".compact_rel") == 0)
6709         {
6710           hdr->sh_flags = 0;
6711           hdr->sh_type = SHT_PROGBITS;
6712         }
6713       else if (strcmp (name, ".rtproc") == 0)
6714         {
6715           if (hdr->sh_addralign != 0 && hdr->sh_entsize == 0)
6716             {
6717               unsigned int adjust;
6718
6719               adjust = hdr->sh_size % hdr->sh_addralign;
6720               if (adjust != 0)
6721                 hdr->sh_size += hdr->sh_addralign - adjust;
6722             }
6723         }
6724     }
6725
6726   return TRUE;
6727 }
6728
6729 /* Handle a MIPS specific section when reading an object file.  This
6730    is called when elfcode.h finds a section with an unknown type.
6731    This routine supports both the 32-bit and 64-bit ELF ABI.
6732
6733    FIXME: We need to handle the SHF_MIPS_GPREL flag, but I'm not sure
6734    how to.  */
6735
6736 bfd_boolean
6737 _bfd_mips_elf_section_from_shdr (bfd *abfd,
6738                                  Elf_Internal_Shdr *hdr,
6739                                  const char *name,
6740                                  int shindex)
6741 {
6742   flagword flags = 0;
6743
6744   /* There ought to be a place to keep ELF backend specific flags, but
6745      at the moment there isn't one.  We just keep track of the
6746      sections by their name, instead.  Fortunately, the ABI gives
6747      suggested names for all the MIPS specific sections, so we will
6748      probably get away with this.  */
6749   switch (hdr->sh_type)
6750     {
6751     case SHT_MIPS_LIBLIST:
6752       if (strcmp (name, ".liblist") != 0)
6753         return FALSE;
6754       break;
6755     case SHT_MIPS_MSYM:
6756       if (strcmp (name, ".msym") != 0)
6757         return FALSE;
6758       break;
6759     case SHT_MIPS_CONFLICT:
6760       if (strcmp (name, ".conflict") != 0)
6761         return FALSE;
6762       break;
6763     case SHT_MIPS_GPTAB:
6764       if (! CONST_STRNEQ (name, ".gptab."))
6765         return FALSE;
6766       break;
6767     case SHT_MIPS_UCODE:
6768       if (strcmp (name, ".ucode") != 0)
6769         return FALSE;
6770       break;
6771     case SHT_MIPS_DEBUG:
6772       if (strcmp (name, ".mdebug") != 0)
6773         return FALSE;
6774       flags = SEC_DEBUGGING;
6775       break;
6776     case SHT_MIPS_REGINFO:
6777       if (strcmp (name, ".reginfo") != 0
6778           || hdr->sh_size != sizeof (Elf32_External_RegInfo))
6779         return FALSE;
6780       flags = (SEC_LINK_ONCE | SEC_LINK_DUPLICATES_SAME_SIZE);
6781       break;
6782     case SHT_MIPS_IFACE:
6783       if (strcmp (name, ".MIPS.interfaces") != 0)
6784         return FALSE;
6785       break;
6786     case SHT_MIPS_CONTENT:
6787       if (! CONST_STRNEQ (name, ".MIPS.content"))
6788         return FALSE;
6789       break;
6790     case SHT_MIPS_OPTIONS:
6791       if (!MIPS_ELF_OPTIONS_SECTION_NAME_P (name))
6792         return FALSE;
6793       break;
6794     case SHT_MIPS_DWARF:
6795       if (! CONST_STRNEQ (name, ".debug_")
6796           && ! CONST_STRNEQ (name, ".zdebug_"))
6797         return FALSE;
6798       break;
6799     case SHT_MIPS_SYMBOL_LIB:
6800       if (strcmp (name, ".MIPS.symlib") != 0)
6801         return FALSE;
6802       break;
6803     case SHT_MIPS_EVENTS:
6804       if (! CONST_STRNEQ (name, ".MIPS.events")
6805           && ! CONST_STRNEQ (name, ".MIPS.post_rel"))
6806         return FALSE;
6807       break;
6808     default:
6809       break;
6810     }
6811
6812   if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
6813     return FALSE;
6814
6815   if (flags)
6816     {
6817       if (! bfd_set_section_flags (abfd, hdr->bfd_section,
6818                                    (bfd_get_section_flags (abfd,
6819                                                            hdr->bfd_section)
6820                                     | flags)))
6821         return FALSE;
6822     }
6823
6824   /* FIXME: We should record sh_info for a .gptab section.  */
6825
6826   /* For a .reginfo section, set the gp value in the tdata information
6827      from the contents of this section.  We need the gp value while
6828      processing relocs, so we just get it now.  The .reginfo section
6829      is not used in the 64-bit MIPS ELF ABI.  */
6830   if (hdr->sh_type == SHT_MIPS_REGINFO)
6831     {
6832       Elf32_External_RegInfo ext;
6833       Elf32_RegInfo s;
6834
6835       if (! bfd_get_section_contents (abfd, hdr->bfd_section,
6836                                       &ext, 0, sizeof ext))
6837         return FALSE;
6838       bfd_mips_elf32_swap_reginfo_in (abfd, &ext, &s);
6839       elf_gp (abfd) = s.ri_gp_value;
6840     }
6841
6842   /* For a SHT_MIPS_OPTIONS section, look for a ODK_REGINFO entry, and
6843      set the gp value based on what we find.  We may see both
6844      SHT_MIPS_REGINFO and SHT_MIPS_OPTIONS/ODK_REGINFO; in that case,
6845      they should agree.  */
6846   if (hdr->sh_type == SHT_MIPS_OPTIONS)
6847     {
6848       bfd_byte *contents, *l, *lend;
6849
6850       contents = bfd_malloc (hdr->sh_size);
6851       if (contents == NULL)
6852         return FALSE;
6853       if (! bfd_get_section_contents (abfd, hdr->bfd_section, contents,
6854                                       0, hdr->sh_size))
6855         {
6856           free (contents);
6857           return FALSE;
6858         }
6859       l = contents;
6860       lend = contents + hdr->sh_size;
6861       while (l + sizeof (Elf_External_Options) <= lend)
6862         {
6863           Elf_Internal_Options intopt;
6864
6865           bfd_mips_elf_swap_options_in (abfd, (Elf_External_Options *) l,
6866                                         &intopt);
6867           if (intopt.size < sizeof (Elf_External_Options))
6868             {
6869               (*_bfd_error_handler)
6870                 (_("%B: Warning: bad `%s' option size %u smaller than its header"),
6871                 abfd, MIPS_ELF_OPTIONS_SECTION_NAME (abfd), intopt.size);
6872               break;
6873             }
6874           if (ABI_64_P (abfd) && intopt.kind == ODK_REGINFO)
6875             {
6876               Elf64_Internal_RegInfo intreg;
6877
6878               bfd_mips_elf64_swap_reginfo_in
6879                 (abfd,
6880                  ((Elf64_External_RegInfo *)
6881                   (l + sizeof (Elf_External_Options))),
6882                  &intreg);
6883               elf_gp (abfd) = intreg.ri_gp_value;
6884             }
6885           else if (intopt.kind == ODK_REGINFO)
6886             {
6887               Elf32_RegInfo intreg;
6888
6889               bfd_mips_elf32_swap_reginfo_in
6890                 (abfd,
6891                  ((Elf32_External_RegInfo *)
6892                   (l + sizeof (Elf_External_Options))),
6893                  &intreg);
6894               elf_gp (abfd) = intreg.ri_gp_value;
6895             }
6896           l += intopt.size;
6897         }
6898       free (contents);
6899     }
6900
6901   return TRUE;
6902 }
6903
6904 /* Set the correct type for a MIPS ELF section.  We do this by the
6905    section name, which is a hack, but ought to work.  This routine is
6906    used by both the 32-bit and the 64-bit ABI.  */
6907
6908 bfd_boolean
6909 _bfd_mips_elf_fake_sections (bfd *abfd, Elf_Internal_Shdr *hdr, asection *sec)
6910 {
6911   const char *name = bfd_get_section_name (abfd, sec);
6912
6913   if (strcmp (name, ".liblist") == 0)
6914     {
6915       hdr->sh_type = SHT_MIPS_LIBLIST;
6916       hdr->sh_info = sec->size / sizeof (Elf32_Lib);
6917       /* The sh_link field is set in final_write_processing.  */
6918     }
6919   else if (strcmp (name, ".conflict") == 0)
6920     hdr->sh_type = SHT_MIPS_CONFLICT;
6921   else if (CONST_STRNEQ (name, ".gptab."))
6922     {
6923       hdr->sh_type = SHT_MIPS_GPTAB;
6924       hdr->sh_entsize = sizeof (Elf32_External_gptab);
6925       /* The sh_info field is set in final_write_processing.  */
6926     }
6927   else if (strcmp (name, ".ucode") == 0)
6928     hdr->sh_type = SHT_MIPS_UCODE;
6929   else if (strcmp (name, ".mdebug") == 0)
6930     {
6931       hdr->sh_type = SHT_MIPS_DEBUG;
6932       /* In a shared object on IRIX 5.3, the .mdebug section has an
6933          entsize of 0.  FIXME: Does this matter?  */
6934       if (SGI_COMPAT (abfd) && (abfd->flags & DYNAMIC) != 0)
6935         hdr->sh_entsize = 0;
6936       else
6937         hdr->sh_entsize = 1;
6938     }
6939   else if (strcmp (name, ".reginfo") == 0)
6940     {
6941       hdr->sh_type = SHT_MIPS_REGINFO;
6942       /* In a shared object on IRIX 5.3, the .reginfo section has an
6943          entsize of 0x18.  FIXME: Does this matter?  */
6944       if (SGI_COMPAT (abfd))
6945         {
6946           if ((abfd->flags & DYNAMIC) != 0)
6947             hdr->sh_entsize = sizeof (Elf32_External_RegInfo);
6948           else
6949             hdr->sh_entsize = 1;
6950         }
6951       else
6952         hdr->sh_entsize = sizeof (Elf32_External_RegInfo);
6953     }
6954   else if (SGI_COMPAT (abfd)
6955            && (strcmp (name, ".hash") == 0
6956                || strcmp (name, ".dynamic") == 0
6957                || strcmp (name, ".dynstr") == 0))
6958     {
6959       if (SGI_COMPAT (abfd))
6960         hdr->sh_entsize = 0;
6961 #if 0
6962       /* This isn't how the IRIX6 linker behaves.  */
6963       hdr->sh_info = SIZEOF_MIPS_DYNSYM_SECNAMES;
6964 #endif
6965     }
6966   else if (strcmp (name, ".got") == 0
6967            || strcmp (name, ".srdata") == 0
6968            || strcmp (name, ".sdata") == 0
6969            || strcmp (name, ".sbss") == 0
6970            || strcmp (name, ".lit4") == 0
6971            || strcmp (name, ".lit8") == 0)
6972     hdr->sh_flags |= SHF_MIPS_GPREL;
6973   else if (strcmp (name, ".MIPS.interfaces") == 0)
6974     {
6975       hdr->sh_type = SHT_MIPS_IFACE;
6976       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
6977     }
6978   else if (CONST_STRNEQ (name, ".MIPS.content"))
6979     {
6980       hdr->sh_type = SHT_MIPS_CONTENT;
6981       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
6982       /* The sh_info field is set in final_write_processing.  */
6983     }
6984   else if (MIPS_ELF_OPTIONS_SECTION_NAME_P (name))
6985     {
6986       hdr->sh_type = SHT_MIPS_OPTIONS;
6987       hdr->sh_entsize = 1;
6988       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
6989     }
6990   else if (CONST_STRNEQ (name, ".debug_")
6991            || CONST_STRNEQ (name, ".zdebug_"))
6992     {
6993       hdr->sh_type = SHT_MIPS_DWARF;
6994
6995       /* Irix facilities such as libexc expect a single .debug_frame
6996          per executable, the system ones have NOSTRIP set and the linker
6997          doesn't merge sections with different flags so ...  */
6998       if (SGI_COMPAT (abfd) && CONST_STRNEQ (name, ".debug_frame"))
6999         hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7000     }
7001   else if (strcmp (name, ".MIPS.symlib") == 0)
7002     {
7003       hdr->sh_type = SHT_MIPS_SYMBOL_LIB;
7004       /* The sh_link and sh_info fields are set in
7005          final_write_processing.  */
7006     }
7007   else if (CONST_STRNEQ (name, ".MIPS.events")
7008            || CONST_STRNEQ (name, ".MIPS.post_rel"))
7009     {
7010       hdr->sh_type = SHT_MIPS_EVENTS;
7011       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7012       /* The sh_link field is set in final_write_processing.  */
7013     }
7014   else if (strcmp (name, ".msym") == 0)
7015     {
7016       hdr->sh_type = SHT_MIPS_MSYM;
7017       hdr->sh_flags |= SHF_ALLOC;
7018       hdr->sh_entsize = 8;
7019     }
7020
7021   /* The generic elf_fake_sections will set up REL_HDR using the default
7022    kind of relocations.  We used to set up a second header for the
7023    non-default kind of relocations here, but only NewABI would use
7024    these, and the IRIX ld doesn't like resulting empty RELA sections.
7025    Thus we create those header only on demand now.  */
7026
7027   return TRUE;
7028 }
7029
7030 /* Given a BFD section, try to locate the corresponding ELF section
7031    index.  This is used by both the 32-bit and the 64-bit ABI.
7032    Actually, it's not clear to me that the 64-bit ABI supports these,
7033    but for non-PIC objects we will certainly want support for at least
7034    the .scommon section.  */
7035
7036 bfd_boolean
7037 _bfd_mips_elf_section_from_bfd_section (bfd *abfd ATTRIBUTE_UNUSED,
7038                                         asection *sec, int *retval)
7039 {
7040   if (strcmp (bfd_get_section_name (abfd, sec), ".scommon") == 0)
7041     {
7042       *retval = SHN_MIPS_SCOMMON;
7043       return TRUE;
7044     }
7045   if (strcmp (bfd_get_section_name (abfd, sec), ".acommon") == 0)
7046     {
7047       *retval = SHN_MIPS_ACOMMON;
7048       return TRUE;
7049     }
7050   return FALSE;
7051 }
7052 \f
7053 /* Hook called by the linker routine which adds symbols from an object
7054    file.  We must handle the special MIPS section numbers here.  */
7055
7056 bfd_boolean
7057 _bfd_mips_elf_add_symbol_hook (bfd *abfd, struct bfd_link_info *info,
7058                                Elf_Internal_Sym *sym, const char **namep,
7059                                flagword *flagsp ATTRIBUTE_UNUSED,
7060                                asection **secp, bfd_vma *valp)
7061 {
7062   if (SGI_COMPAT (abfd)
7063       && (abfd->flags & DYNAMIC) != 0
7064       && strcmp (*namep, "_rld_new_interface") == 0)
7065     {
7066       /* Skip IRIX5 rld entry name.  */
7067       *namep = NULL;
7068       return TRUE;
7069     }
7070
7071   /* Shared objects may have a dynamic symbol '_gp_disp' defined as
7072      a SECTION *ABS*.  This causes ld to think it can resolve _gp_disp
7073      by setting a DT_NEEDED for the shared object.  Since _gp_disp is
7074      a magic symbol resolved by the linker, we ignore this bogus definition
7075      of _gp_disp.  New ABI objects do not suffer from this problem so this
7076      is not done for them. */
7077   if (!NEWABI_P(abfd)
7078       && (sym->st_shndx == SHN_ABS)
7079       && (strcmp (*namep, "_gp_disp") == 0))
7080     {
7081       *namep = NULL;
7082       return TRUE;
7083     }
7084
7085   switch (sym->st_shndx)
7086     {
7087     case SHN_COMMON:
7088       /* Common symbols less than the GP size are automatically
7089          treated as SHN_MIPS_SCOMMON symbols.  */
7090       if (sym->st_size > elf_gp_size (abfd)
7091           || ELF_ST_TYPE (sym->st_info) == STT_TLS
7092           || IRIX_COMPAT (abfd) == ict_irix6)
7093         break;
7094       /* Fall through.  */
7095     case SHN_MIPS_SCOMMON:
7096       *secp = bfd_make_section_old_way (abfd, ".scommon");
7097       (*secp)->flags |= SEC_IS_COMMON;
7098       *valp = sym->st_size;
7099       break;
7100
7101     case SHN_MIPS_TEXT:
7102       /* This section is used in a shared object.  */
7103       if (elf_tdata (abfd)->elf_text_section == NULL)
7104         {
7105           asymbol *elf_text_symbol;
7106           asection *elf_text_section;
7107           bfd_size_type amt = sizeof (asection);
7108
7109           elf_text_section = bfd_zalloc (abfd, amt);
7110           if (elf_text_section == NULL)
7111             return FALSE;
7112
7113           amt = sizeof (asymbol);
7114           elf_text_symbol = bfd_zalloc (abfd, amt);
7115           if (elf_text_symbol == NULL)
7116             return FALSE;
7117
7118           /* Initialize the section.  */
7119
7120           elf_tdata (abfd)->elf_text_section = elf_text_section;
7121           elf_tdata (abfd)->elf_text_symbol = elf_text_symbol;
7122
7123           elf_text_section->symbol = elf_text_symbol;
7124           elf_text_section->symbol_ptr_ptr = &elf_tdata (abfd)->elf_text_symbol;
7125
7126           elf_text_section->name = ".text";
7127           elf_text_section->flags = SEC_NO_FLAGS;
7128           elf_text_section->output_section = NULL;
7129           elf_text_section->owner = abfd;
7130           elf_text_symbol->name = ".text";
7131           elf_text_symbol->flags = BSF_SECTION_SYM | BSF_DYNAMIC;
7132           elf_text_symbol->section = elf_text_section;
7133         }
7134       /* This code used to do *secp = bfd_und_section_ptr if
7135          info->shared.  I don't know why, and that doesn't make sense,
7136          so I took it out.  */
7137       *secp = elf_tdata (abfd)->elf_text_section;
7138       break;
7139
7140     case SHN_MIPS_ACOMMON:
7141       /* Fall through. XXX Can we treat this as allocated data?  */
7142     case SHN_MIPS_DATA:
7143       /* This section is used in a shared object.  */
7144       if (elf_tdata (abfd)->elf_data_section == NULL)
7145         {
7146           asymbol *elf_data_symbol;
7147           asection *elf_data_section;
7148           bfd_size_type amt = sizeof (asection);
7149
7150           elf_data_section = bfd_zalloc (abfd, amt);
7151           if (elf_data_section == NULL)
7152             return FALSE;
7153
7154           amt = sizeof (asymbol);
7155           elf_data_symbol = bfd_zalloc (abfd, amt);
7156           if (elf_data_symbol == NULL)
7157             return FALSE;
7158
7159           /* Initialize the section.  */
7160
7161           elf_tdata (abfd)->elf_data_section = elf_data_section;
7162           elf_tdata (abfd)->elf_data_symbol = elf_data_symbol;
7163
7164           elf_data_section->symbol = elf_data_symbol;
7165           elf_data_section->symbol_ptr_ptr = &elf_tdata (abfd)->elf_data_symbol;
7166
7167           elf_data_section->name = ".data";
7168           elf_data_section->flags = SEC_NO_FLAGS;
7169           elf_data_section->output_section = NULL;
7170           elf_data_section->owner = abfd;
7171           elf_data_symbol->name = ".data";
7172           elf_data_symbol->flags = BSF_SECTION_SYM | BSF_DYNAMIC;
7173           elf_data_symbol->section = elf_data_section;
7174         }
7175       /* This code used to do *secp = bfd_und_section_ptr if
7176          info->shared.  I don't know why, and that doesn't make sense,
7177          so I took it out.  */
7178       *secp = elf_tdata (abfd)->elf_data_section;
7179       break;
7180
7181     case SHN_MIPS_SUNDEFINED:
7182       *secp = bfd_und_section_ptr;
7183       break;
7184     }
7185
7186   if (SGI_COMPAT (abfd)
7187       && ! info->shared
7188       && info->output_bfd->xvec == abfd->xvec
7189       && strcmp (*namep, "__rld_obj_head") == 0)
7190     {
7191       struct elf_link_hash_entry *h;
7192       struct bfd_link_hash_entry *bh;
7193
7194       /* Mark __rld_obj_head as dynamic.  */
7195       bh = NULL;
7196       if (! (_bfd_generic_link_add_one_symbol
7197              (info, abfd, *namep, BSF_GLOBAL, *secp, *valp, NULL, FALSE,
7198               get_elf_backend_data (abfd)->collect, &bh)))
7199         return FALSE;
7200
7201       h = (struct elf_link_hash_entry *) bh;
7202       h->non_elf = 0;
7203       h->def_regular = 1;
7204       h->type = STT_OBJECT;
7205
7206       if (! bfd_elf_link_record_dynamic_symbol (info, h))
7207         return FALSE;
7208
7209       mips_elf_hash_table (info)->use_rld_obj_head = TRUE;
7210       mips_elf_hash_table (info)->rld_symbol = h;
7211     }
7212
7213   /* If this is a mips16 text symbol, add 1 to the value to make it
7214      odd.  This will cause something like .word SYM to come up with
7215      the right value when it is loaded into the PC.  */
7216   if (ELF_ST_IS_COMPRESSED (sym->st_other))
7217     ++*valp;
7218
7219   return TRUE;
7220 }
7221
7222 /* This hook function is called before the linker writes out a global
7223    symbol.  We mark symbols as small common if appropriate.  This is
7224    also where we undo the increment of the value for a mips16 symbol.  */
7225
7226 int
7227 _bfd_mips_elf_link_output_symbol_hook
7228   (struct bfd_link_info *info ATTRIBUTE_UNUSED,
7229    const char *name ATTRIBUTE_UNUSED, Elf_Internal_Sym *sym,
7230    asection *input_sec, struct elf_link_hash_entry *h ATTRIBUTE_UNUSED)
7231 {
7232   /* If we see a common symbol, which implies a relocatable link, then
7233      if a symbol was small common in an input file, mark it as small
7234      common in the output file.  */
7235   if (sym->st_shndx == SHN_COMMON
7236       && strcmp (input_sec->name, ".scommon") == 0)
7237     sym->st_shndx = SHN_MIPS_SCOMMON;
7238
7239   if (ELF_ST_IS_COMPRESSED (sym->st_other))
7240     sym->st_value &= ~1;
7241
7242   return 1;
7243 }
7244 \f
7245 /* Functions for the dynamic linker.  */
7246
7247 /* Create dynamic sections when linking against a dynamic object.  */
7248
7249 bfd_boolean
7250 _bfd_mips_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
7251 {
7252   struct elf_link_hash_entry *h;
7253   struct bfd_link_hash_entry *bh;
7254   flagword flags;
7255   register asection *s;
7256   const char * const *namep;
7257   struct mips_elf_link_hash_table *htab;
7258
7259   htab = mips_elf_hash_table (info);
7260   BFD_ASSERT (htab != NULL);
7261
7262   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
7263            | SEC_LINKER_CREATED | SEC_READONLY);
7264
7265   /* The psABI requires a read-only .dynamic section, but the VxWorks
7266      EABI doesn't.  */
7267   if (!htab->is_vxworks)
7268     {
7269       s = bfd_get_linker_section (abfd, ".dynamic");
7270       if (s != NULL)
7271         {
7272           if (! bfd_set_section_flags (abfd, s, flags))
7273             return FALSE;
7274         }
7275     }
7276
7277   /* We need to create .got section.  */
7278   if (!mips_elf_create_got_section (abfd, info))
7279     return FALSE;
7280
7281   if (! mips_elf_rel_dyn_section (info, TRUE))
7282     return FALSE;
7283
7284   /* Create .stub section.  */
7285   s = bfd_make_section_anyway_with_flags (abfd,
7286                                           MIPS_ELF_STUB_SECTION_NAME (abfd),
7287                                           flags | SEC_CODE);
7288   if (s == NULL
7289       || ! bfd_set_section_alignment (abfd, s,
7290                                       MIPS_ELF_LOG_FILE_ALIGN (abfd)))
7291     return FALSE;
7292   htab->sstubs = s;
7293
7294   if (!mips_elf_hash_table (info)->use_rld_obj_head
7295       && !info->shared
7296       && bfd_get_linker_section (abfd, ".rld_map") == NULL)
7297     {
7298       s = bfd_make_section_anyway_with_flags (abfd, ".rld_map",
7299                                               flags &~ (flagword) SEC_READONLY);
7300       if (s == NULL
7301           || ! bfd_set_section_alignment (abfd, s,
7302                                           MIPS_ELF_LOG_FILE_ALIGN (abfd)))
7303         return FALSE;
7304     }
7305
7306   /* On IRIX5, we adjust add some additional symbols and change the
7307      alignments of several sections.  There is no ABI documentation
7308      indicating that this is necessary on IRIX6, nor any evidence that
7309      the linker takes such action.  */
7310   if (IRIX_COMPAT (abfd) == ict_irix5)
7311     {
7312       for (namep = mips_elf_dynsym_rtproc_names; *namep != NULL; namep++)
7313         {
7314           bh = NULL;
7315           if (! (_bfd_generic_link_add_one_symbol
7316                  (info, abfd, *namep, BSF_GLOBAL, bfd_und_section_ptr, 0,
7317                   NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
7318             return FALSE;
7319
7320           h = (struct elf_link_hash_entry *) bh;
7321           h->non_elf = 0;
7322           h->def_regular = 1;
7323           h->type = STT_SECTION;
7324
7325           if (! bfd_elf_link_record_dynamic_symbol (info, h))
7326             return FALSE;
7327         }
7328
7329       /* We need to create a .compact_rel section.  */
7330       if (SGI_COMPAT (abfd))
7331         {
7332           if (!mips_elf_create_compact_rel_section (abfd, info))
7333             return FALSE;
7334         }
7335
7336       /* Change alignments of some sections.  */
7337       s = bfd_get_linker_section (abfd, ".hash");
7338       if (s != NULL)
7339         bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7340       s = bfd_get_linker_section (abfd, ".dynsym");
7341       if (s != NULL)
7342         bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7343       s = bfd_get_linker_section (abfd, ".dynstr");
7344       if (s != NULL)
7345         bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7346       /* ??? */
7347       s = bfd_get_section_by_name (abfd, ".reginfo");
7348       if (s != NULL)
7349         bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7350       s = bfd_get_linker_section (abfd, ".dynamic");
7351       if (s != NULL)
7352         bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7353     }
7354
7355   if (!info->shared)
7356     {
7357       const char *name;
7358
7359       name = SGI_COMPAT (abfd) ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING";
7360       bh = NULL;
7361       if (!(_bfd_generic_link_add_one_symbol
7362             (info, abfd, name, BSF_GLOBAL, bfd_abs_section_ptr, 0,
7363              NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
7364         return FALSE;
7365
7366       h = (struct elf_link_hash_entry *) bh;
7367       h->non_elf = 0;
7368       h->def_regular = 1;
7369       h->type = STT_SECTION;
7370
7371       if (! bfd_elf_link_record_dynamic_symbol (info, h))
7372         return FALSE;
7373
7374       if (! mips_elf_hash_table (info)->use_rld_obj_head)
7375         {
7376           /* __rld_map is a four byte word located in the .data section
7377              and is filled in by the rtld to contain a pointer to
7378              the _r_debug structure. Its symbol value will be set in
7379              _bfd_mips_elf_finish_dynamic_symbol.  */
7380           s = bfd_get_linker_section (abfd, ".rld_map");
7381           BFD_ASSERT (s != NULL);
7382
7383           name = SGI_COMPAT (abfd) ? "__rld_map" : "__RLD_MAP";
7384           bh = NULL;
7385           if (!(_bfd_generic_link_add_one_symbol
7386                 (info, abfd, name, BSF_GLOBAL, s, 0, NULL, FALSE,
7387                  get_elf_backend_data (abfd)->collect, &bh)))
7388             return FALSE;
7389
7390           h = (struct elf_link_hash_entry *) bh;
7391           h->non_elf = 0;
7392           h->def_regular = 1;
7393           h->type = STT_OBJECT;
7394
7395           if (! bfd_elf_link_record_dynamic_symbol (info, h))
7396             return FALSE;
7397           mips_elf_hash_table (info)->rld_symbol = h;
7398         }
7399     }
7400
7401   /* Create the .plt, .rel(a).plt, .dynbss and .rel(a).bss sections.
7402      Also create the _PROCEDURE_LINKAGE_TABLE symbol.  */
7403   if (!_bfd_elf_create_dynamic_sections (abfd, info))
7404     return FALSE;
7405
7406   /* Cache the sections created above.  */
7407   htab->splt = bfd_get_linker_section (abfd, ".plt");
7408   htab->sdynbss = bfd_get_linker_section (abfd, ".dynbss");
7409   if (htab->is_vxworks)
7410     {
7411       htab->srelbss = bfd_get_linker_section (abfd, ".rela.bss");
7412       htab->srelplt = bfd_get_linker_section (abfd, ".rela.plt");
7413     }
7414   else
7415     htab->srelplt = bfd_get_linker_section (abfd, ".rel.plt");
7416   if (!htab->sdynbss
7417       || (htab->is_vxworks && !htab->srelbss && !info->shared)
7418       || !htab->srelplt
7419       || !htab->splt)
7420     abort ();
7421
7422   if (htab->is_vxworks)
7423     {
7424       /* Do the usual VxWorks handling.  */
7425       if (!elf_vxworks_create_dynamic_sections (abfd, info, &htab->srelplt2))
7426         return FALSE;
7427
7428       /* Work out the PLT sizes.  */
7429       if (info->shared)
7430         {
7431           htab->plt_header_size
7432             = 4 * ARRAY_SIZE (mips_vxworks_shared_plt0_entry);
7433           htab->plt_entry_size
7434             = 4 * ARRAY_SIZE (mips_vxworks_shared_plt_entry);
7435         }
7436       else
7437         {
7438           htab->plt_header_size
7439             = 4 * ARRAY_SIZE (mips_vxworks_exec_plt0_entry);
7440           htab->plt_entry_size
7441             = 4 * ARRAY_SIZE (mips_vxworks_exec_plt_entry);
7442         }
7443     }
7444   else if (!info->shared)
7445     {
7446       /* All variants of the plt0 entry are the same size.  */
7447       htab->plt_header_size = 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry);
7448       htab->plt_entry_size = 4 * ARRAY_SIZE (mips_exec_plt_entry);
7449     }
7450
7451   return TRUE;
7452 }
7453 \f
7454 /* Return true if relocation REL against section SEC is a REL rather than
7455    RELA relocation.  RELOCS is the first relocation in the section and
7456    ABFD is the bfd that contains SEC.  */
7457
7458 static bfd_boolean
7459 mips_elf_rel_relocation_p (bfd *abfd, asection *sec,
7460                            const Elf_Internal_Rela *relocs,
7461                            const Elf_Internal_Rela *rel)
7462 {
7463   Elf_Internal_Shdr *rel_hdr;
7464   const struct elf_backend_data *bed;
7465
7466   /* To determine which flavor of relocation this is, we depend on the
7467      fact that the INPUT_SECTION's REL_HDR is read before RELA_HDR.  */
7468   rel_hdr = elf_section_data (sec)->rel.hdr;
7469   if (rel_hdr == NULL)
7470     return FALSE;
7471   bed = get_elf_backend_data (abfd);
7472   return ((size_t) (rel - relocs)
7473           < NUM_SHDR_ENTRIES (rel_hdr) * bed->s->int_rels_per_ext_rel);
7474 }
7475
7476 /* Read the addend for REL relocation REL, which belongs to bfd ABFD.
7477    HOWTO is the relocation's howto and CONTENTS points to the contents
7478    of the section that REL is against.  */
7479
7480 static bfd_vma
7481 mips_elf_read_rel_addend (bfd *abfd, const Elf_Internal_Rela *rel,
7482                           reloc_howto_type *howto, bfd_byte *contents)
7483 {
7484   bfd_byte *location;
7485   unsigned int r_type;
7486   bfd_vma addend;
7487
7488   r_type = ELF_R_TYPE (abfd, rel->r_info);
7489   location = contents + rel->r_offset;
7490
7491   /* Get the addend, which is stored in the input file.  */
7492   _bfd_mips_elf_reloc_unshuffle (abfd, r_type, FALSE, location);
7493   addend = mips_elf_obtain_contents (howto, rel, abfd, contents);
7494   _bfd_mips_elf_reloc_shuffle (abfd, r_type, FALSE, location);
7495
7496   return addend & howto->src_mask;
7497 }
7498
7499 /* REL is a relocation in ABFD that needs a partnering LO16 relocation
7500    and *ADDEND is the addend for REL itself.  Look for the LO16 relocation
7501    and update *ADDEND with the final addend.  Return true on success
7502    or false if the LO16 could not be found.  RELEND is the exclusive
7503    upper bound on the relocations for REL's section.  */
7504
7505 static bfd_boolean
7506 mips_elf_add_lo16_rel_addend (bfd *abfd,
7507                               const Elf_Internal_Rela *rel,
7508                               const Elf_Internal_Rela *relend,
7509                               bfd_byte *contents, bfd_vma *addend)
7510 {
7511   unsigned int r_type, lo16_type;
7512   const Elf_Internal_Rela *lo16_relocation;
7513   reloc_howto_type *lo16_howto;
7514   bfd_vma l;
7515
7516   r_type = ELF_R_TYPE (abfd, rel->r_info);
7517   if (mips16_reloc_p (r_type))
7518     lo16_type = R_MIPS16_LO16;
7519   else if (micromips_reloc_p (r_type))
7520     lo16_type = R_MICROMIPS_LO16;
7521   else
7522     lo16_type = R_MIPS_LO16;
7523
7524   /* The combined value is the sum of the HI16 addend, left-shifted by
7525      sixteen bits, and the LO16 addend, sign extended.  (Usually, the
7526      code does a `lui' of the HI16 value, and then an `addiu' of the
7527      LO16 value.)
7528
7529      Scan ahead to find a matching LO16 relocation.
7530
7531      According to the MIPS ELF ABI, the R_MIPS_LO16 relocation must
7532      be immediately following.  However, for the IRIX6 ABI, the next
7533      relocation may be a composed relocation consisting of several
7534      relocations for the same address.  In that case, the R_MIPS_LO16
7535      relocation may occur as one of these.  We permit a similar
7536      extension in general, as that is useful for GCC.
7537
7538      In some cases GCC dead code elimination removes the LO16 but keeps
7539      the corresponding HI16.  This is strictly speaking a violation of
7540      the ABI but not immediately harmful.  */
7541   lo16_relocation = mips_elf_next_relocation (abfd, lo16_type, rel, relend);
7542   if (lo16_relocation == NULL)
7543     return FALSE;
7544
7545   /* Obtain the addend kept there.  */
7546   lo16_howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, lo16_type, FALSE);
7547   l = mips_elf_read_rel_addend (abfd, lo16_relocation, lo16_howto, contents);
7548
7549   l <<= lo16_howto->rightshift;
7550   l = _bfd_mips_elf_sign_extend (l, 16);
7551
7552   *addend <<= 16;
7553   *addend += l;
7554   return TRUE;
7555 }
7556
7557 /* Try to read the contents of section SEC in bfd ABFD.  Return true and
7558    store the contents in *CONTENTS on success.  Assume that *CONTENTS
7559    already holds the contents if it is nonull on entry.  */
7560
7561 static bfd_boolean
7562 mips_elf_get_section_contents (bfd *abfd, asection *sec, bfd_byte **contents)
7563 {
7564   if (*contents)
7565     return TRUE;
7566
7567   /* Get cached copy if it exists.  */
7568   if (elf_section_data (sec)->this_hdr.contents != NULL)
7569     {
7570       *contents = elf_section_data (sec)->this_hdr.contents;
7571       return TRUE;
7572     }
7573
7574   return bfd_malloc_and_get_section (abfd, sec, contents);
7575 }
7576
7577 /* Look through the relocs for a section during the first phase, and
7578    allocate space in the global offset table.  */
7579
7580 bfd_boolean
7581 _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
7582                             asection *sec, const Elf_Internal_Rela *relocs)
7583 {
7584   const char *name;
7585   bfd *dynobj;
7586   Elf_Internal_Shdr *symtab_hdr;
7587   struct elf_link_hash_entry **sym_hashes;
7588   size_t extsymoff;
7589   const Elf_Internal_Rela *rel;
7590   const Elf_Internal_Rela *rel_end;
7591   asection *sreloc;
7592   const struct elf_backend_data *bed;
7593   struct mips_elf_link_hash_table *htab;
7594   bfd_byte *contents;
7595   bfd_vma addend;
7596   reloc_howto_type *howto;
7597
7598   if (info->relocatable)
7599     return TRUE;
7600
7601   htab = mips_elf_hash_table (info);
7602   BFD_ASSERT (htab != NULL);
7603
7604   dynobj = elf_hash_table (info)->dynobj;
7605   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
7606   sym_hashes = elf_sym_hashes (abfd);
7607   extsymoff = (elf_bad_symtab (abfd)) ? 0 : symtab_hdr->sh_info;
7608
7609   bed = get_elf_backend_data (abfd);
7610   rel_end = relocs + sec->reloc_count * bed->s->int_rels_per_ext_rel;
7611
7612   /* Check for the mips16 stub sections.  */
7613
7614   name = bfd_get_section_name (abfd, sec);
7615   if (FN_STUB_P (name))
7616     {
7617       unsigned long r_symndx;
7618
7619       /* Look at the relocation information to figure out which symbol
7620          this is for.  */
7621
7622       r_symndx = mips16_stub_symndx (bed, sec, relocs, rel_end);
7623       if (r_symndx == 0)
7624         {
7625           (*_bfd_error_handler)
7626             (_("%B: Warning: cannot determine the target function for"
7627                " stub section `%s'"),
7628              abfd, name);
7629           bfd_set_error (bfd_error_bad_value);
7630           return FALSE;
7631         }
7632
7633       if (r_symndx < extsymoff
7634           || sym_hashes[r_symndx - extsymoff] == NULL)
7635         {
7636           asection *o;
7637
7638           /* This stub is for a local symbol.  This stub will only be
7639              needed if there is some relocation in this BFD, other
7640              than a 16 bit function call, which refers to this symbol.  */
7641           for (o = abfd->sections; o != NULL; o = o->next)
7642             {
7643               Elf_Internal_Rela *sec_relocs;
7644               const Elf_Internal_Rela *r, *rend;
7645
7646               /* We can ignore stub sections when looking for relocs.  */
7647               if ((o->flags & SEC_RELOC) == 0
7648                   || o->reloc_count == 0
7649                   || section_allows_mips16_refs_p (o))
7650                 continue;
7651
7652               sec_relocs
7653                 = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
7654                                              info->keep_memory);
7655               if (sec_relocs == NULL)
7656                 return FALSE;
7657
7658               rend = sec_relocs + o->reloc_count;
7659               for (r = sec_relocs; r < rend; r++)
7660                 if (ELF_R_SYM (abfd, r->r_info) == r_symndx
7661                     && !mips16_call_reloc_p (ELF_R_TYPE (abfd, r->r_info)))
7662                   break;
7663
7664               if (elf_section_data (o)->relocs != sec_relocs)
7665                 free (sec_relocs);
7666
7667               if (r < rend)
7668                 break;
7669             }
7670
7671           if (o == NULL)
7672             {
7673               /* There is no non-call reloc for this stub, so we do
7674                  not need it.  Since this function is called before
7675                  the linker maps input sections to output sections, we
7676                  can easily discard it by setting the SEC_EXCLUDE
7677                  flag.  */
7678               sec->flags |= SEC_EXCLUDE;
7679               return TRUE;
7680             }
7681
7682           /* Record this stub in an array of local symbol stubs for
7683              this BFD.  */
7684           if (elf_tdata (abfd)->local_stubs == NULL)
7685             {
7686               unsigned long symcount;
7687               asection **n;
7688               bfd_size_type amt;
7689
7690               if (elf_bad_symtab (abfd))
7691                 symcount = NUM_SHDR_ENTRIES (symtab_hdr);
7692               else
7693                 symcount = symtab_hdr->sh_info;
7694               amt = symcount * sizeof (asection *);
7695               n = bfd_zalloc (abfd, amt);
7696               if (n == NULL)
7697                 return FALSE;
7698               elf_tdata (abfd)->local_stubs = n;
7699             }
7700
7701           sec->flags |= SEC_KEEP;
7702           elf_tdata (abfd)->local_stubs[r_symndx] = sec;
7703
7704           /* We don't need to set mips16_stubs_seen in this case.
7705              That flag is used to see whether we need to look through
7706              the global symbol table for stubs.  We don't need to set
7707              it here, because we just have a local stub.  */
7708         }
7709       else
7710         {
7711           struct mips_elf_link_hash_entry *h;
7712
7713           h = ((struct mips_elf_link_hash_entry *)
7714                sym_hashes[r_symndx - extsymoff]);
7715
7716           while (h->root.root.type == bfd_link_hash_indirect
7717                  || h->root.root.type == bfd_link_hash_warning)
7718             h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
7719
7720           /* H is the symbol this stub is for.  */
7721
7722           /* If we already have an appropriate stub for this function, we
7723              don't need another one, so we can discard this one.  Since
7724              this function is called before the linker maps input sections
7725              to output sections, we can easily discard it by setting the
7726              SEC_EXCLUDE flag.  */
7727           if (h->fn_stub != NULL)
7728             {
7729               sec->flags |= SEC_EXCLUDE;
7730               return TRUE;
7731             }
7732
7733           sec->flags |= SEC_KEEP;
7734           h->fn_stub = sec;
7735           mips_elf_hash_table (info)->mips16_stubs_seen = TRUE;
7736         }
7737     }
7738   else if (CALL_STUB_P (name) || CALL_FP_STUB_P (name))
7739     {
7740       unsigned long r_symndx;
7741       struct mips_elf_link_hash_entry *h;
7742       asection **loc;
7743
7744       /* Look at the relocation information to figure out which symbol
7745          this is for.  */
7746
7747       r_symndx = mips16_stub_symndx (bed, sec, relocs, rel_end);
7748       if (r_symndx == 0)
7749         {
7750           (*_bfd_error_handler)
7751             (_("%B: Warning: cannot determine the target function for"
7752                " stub section `%s'"),
7753              abfd, name);
7754           bfd_set_error (bfd_error_bad_value);
7755           return FALSE;
7756         }
7757
7758       if (r_symndx < extsymoff
7759           || sym_hashes[r_symndx - extsymoff] == NULL)
7760         {
7761           asection *o;
7762
7763           /* This stub is for a local symbol.  This stub will only be
7764              needed if there is some relocation (R_MIPS16_26) in this BFD
7765              that refers to this symbol.  */
7766           for (o = abfd->sections; o != NULL; o = o->next)
7767             {
7768               Elf_Internal_Rela *sec_relocs;
7769               const Elf_Internal_Rela *r, *rend;
7770
7771               /* We can ignore stub sections when looking for relocs.  */
7772               if ((o->flags & SEC_RELOC) == 0
7773                   || o->reloc_count == 0
7774                   || section_allows_mips16_refs_p (o))
7775                 continue;
7776
7777               sec_relocs
7778                 = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
7779                                              info->keep_memory);
7780               if (sec_relocs == NULL)
7781                 return FALSE;
7782
7783               rend = sec_relocs + o->reloc_count;
7784               for (r = sec_relocs; r < rend; r++)
7785                 if (ELF_R_SYM (abfd, r->r_info) == r_symndx
7786                     && ELF_R_TYPE (abfd, r->r_info) == R_MIPS16_26)
7787                     break;
7788
7789               if (elf_section_data (o)->relocs != sec_relocs)
7790                 free (sec_relocs);
7791
7792               if (r < rend)
7793                 break;
7794             }
7795
7796           if (o == NULL)
7797             {
7798               /* There is no non-call reloc for this stub, so we do
7799                  not need it.  Since this function is called before
7800                  the linker maps input sections to output sections, we
7801                  can easily discard it by setting the SEC_EXCLUDE
7802                  flag.  */
7803               sec->flags |= SEC_EXCLUDE;
7804               return TRUE;
7805             }
7806
7807           /* Record this stub in an array of local symbol call_stubs for
7808              this BFD.  */
7809           if (elf_tdata (abfd)->local_call_stubs == NULL)
7810             {
7811               unsigned long symcount;
7812               asection **n;
7813               bfd_size_type amt;
7814
7815               if (elf_bad_symtab (abfd))
7816                 symcount = NUM_SHDR_ENTRIES (symtab_hdr);
7817               else
7818                 symcount = symtab_hdr->sh_info;
7819               amt = symcount * sizeof (asection *);
7820               n = bfd_zalloc (abfd, amt);
7821               if (n == NULL)
7822                 return FALSE;
7823               elf_tdata (abfd)->local_call_stubs = n;
7824             }
7825
7826           sec->flags |= SEC_KEEP;
7827           elf_tdata (abfd)->local_call_stubs[r_symndx] = sec;
7828
7829           /* We don't need to set mips16_stubs_seen in this case.
7830              That flag is used to see whether we need to look through
7831              the global symbol table for stubs.  We don't need to set
7832              it here, because we just have a local stub.  */
7833         }
7834       else
7835         {
7836           h = ((struct mips_elf_link_hash_entry *)
7837                sym_hashes[r_symndx - extsymoff]);
7838
7839           /* H is the symbol this stub is for.  */
7840
7841           if (CALL_FP_STUB_P (name))
7842             loc = &h->call_fp_stub;
7843           else
7844             loc = &h->call_stub;
7845
7846           /* If we already have an appropriate stub for this function, we
7847              don't need another one, so we can discard this one.  Since
7848              this function is called before the linker maps input sections
7849              to output sections, we can easily discard it by setting the
7850              SEC_EXCLUDE flag.  */
7851           if (*loc != NULL)
7852             {
7853               sec->flags |= SEC_EXCLUDE;
7854               return TRUE;
7855             }
7856
7857           sec->flags |= SEC_KEEP;
7858           *loc = sec;
7859           mips_elf_hash_table (info)->mips16_stubs_seen = TRUE;
7860         }
7861     }
7862
7863   sreloc = NULL;
7864   contents = NULL;
7865   for (rel = relocs; rel < rel_end; ++rel)
7866     {
7867       unsigned long r_symndx;
7868       unsigned int r_type;
7869       struct elf_link_hash_entry *h;
7870       bfd_boolean can_make_dynamic_p;
7871
7872       r_symndx = ELF_R_SYM (abfd, rel->r_info);
7873       r_type = ELF_R_TYPE (abfd, rel->r_info);
7874
7875       if (r_symndx < extsymoff)
7876         h = NULL;
7877       else if (r_symndx >= extsymoff + NUM_SHDR_ENTRIES (symtab_hdr))
7878         {
7879           (*_bfd_error_handler)
7880             (_("%B: Malformed reloc detected for section %s"),
7881              abfd, name);
7882           bfd_set_error (bfd_error_bad_value);
7883           return FALSE;
7884         }
7885       else
7886         {
7887           h = sym_hashes[r_symndx - extsymoff];
7888           while (h != NULL
7889                  && (h->root.type == bfd_link_hash_indirect
7890                      || h->root.type == bfd_link_hash_warning))
7891             h = (struct elf_link_hash_entry *) h->root.u.i.link;
7892         }
7893
7894       /* Set CAN_MAKE_DYNAMIC_P to true if we can convert this
7895          relocation into a dynamic one.  */
7896       can_make_dynamic_p = FALSE;
7897       switch (r_type)
7898         {
7899         case R_MIPS_GOT16:
7900         case R_MIPS_CALL16:
7901         case R_MIPS_CALL_HI16:
7902         case R_MIPS_CALL_LO16:
7903         case R_MIPS_GOT_HI16:
7904         case R_MIPS_GOT_LO16:
7905         case R_MIPS_GOT_PAGE:
7906         case R_MIPS_GOT_OFST:
7907         case R_MIPS_GOT_DISP:
7908         case R_MIPS_TLS_GOTTPREL:
7909         case R_MIPS_TLS_GD:
7910         case R_MIPS_TLS_LDM:
7911         case R_MIPS16_GOT16:
7912         case R_MIPS16_CALL16:
7913         case R_MIPS16_TLS_GOTTPREL:
7914         case R_MIPS16_TLS_GD:
7915         case R_MIPS16_TLS_LDM:
7916         case R_MICROMIPS_GOT16:
7917         case R_MICROMIPS_CALL16:
7918         case R_MICROMIPS_CALL_HI16:
7919         case R_MICROMIPS_CALL_LO16:
7920         case R_MICROMIPS_GOT_HI16:
7921         case R_MICROMIPS_GOT_LO16:
7922         case R_MICROMIPS_GOT_PAGE:
7923         case R_MICROMIPS_GOT_OFST:
7924         case R_MICROMIPS_GOT_DISP:
7925         case R_MICROMIPS_TLS_GOTTPREL:
7926         case R_MICROMIPS_TLS_GD:
7927         case R_MICROMIPS_TLS_LDM:
7928           if (dynobj == NULL)
7929             elf_hash_table (info)->dynobj = dynobj = abfd;
7930           if (!mips_elf_create_got_section (dynobj, info))
7931             return FALSE;
7932           if (htab->is_vxworks && !info->shared)
7933             {
7934               (*_bfd_error_handler)
7935                 (_("%B: GOT reloc at 0x%lx not expected in executables"),
7936                  abfd, (unsigned long) rel->r_offset);
7937               bfd_set_error (bfd_error_bad_value);
7938               return FALSE;
7939             }
7940           break;
7941
7942           /* This is just a hint; it can safely be ignored.  Don't set
7943              has_static_relocs for the corresponding symbol.  */
7944         case R_MIPS_JALR:
7945         case R_MICROMIPS_JALR:
7946           break;
7947
7948         case R_MIPS_32:
7949         case R_MIPS_REL32:
7950         case R_MIPS_64:
7951           /* In VxWorks executables, references to external symbols
7952              must be handled using copy relocs or PLT entries; it is not
7953              possible to convert this relocation into a dynamic one.
7954
7955              For executables that use PLTs and copy-relocs, we have a
7956              choice between converting the relocation into a dynamic
7957              one or using copy relocations or PLT entries.  It is
7958              usually better to do the former, unless the relocation is
7959              against a read-only section.  */
7960           if ((info->shared
7961                || (h != NULL
7962                    && !htab->is_vxworks
7963                    && strcmp (h->root.root.string, "__gnu_local_gp") != 0
7964                    && !(!info->nocopyreloc
7965                         && !PIC_OBJECT_P (abfd)
7966                         && MIPS_ELF_READONLY_SECTION (sec))))
7967               && (sec->flags & SEC_ALLOC) != 0)
7968             {
7969               can_make_dynamic_p = TRUE;
7970               if (dynobj == NULL)
7971                 elf_hash_table (info)->dynobj = dynobj = abfd;
7972               break;
7973             }
7974           /* For sections that are not SEC_ALLOC a copy reloc would be
7975              output if possible (implying questionable semantics for
7976              read-only data objects) or otherwise the final link would
7977              fail as ld.so will not process them and could not therefore
7978              handle any outstanding dynamic relocations.
7979
7980              For such sections that are also SEC_DEBUGGING, we can avoid
7981              these problems by simply ignoring any relocs as these
7982              sections have a predefined use and we know it is safe to do
7983              so.
7984
7985              This is needed in cases such as a global symbol definition
7986              in a shared library causing a common symbol from an object
7987              file to be converted to an undefined reference.  If that
7988              happens, then all the relocations against this symbol from
7989              SEC_DEBUGGING sections in the object file will resolve to
7990              nil.  */
7991           if ((sec->flags & SEC_DEBUGGING) != 0)
7992             break;
7993           /* Fall through.  */
7994
7995         default:
7996           /* Most static relocations require pointer equality, except
7997              for branches.  */
7998           if (h)
7999             h->pointer_equality_needed = TRUE;
8000           /* Fall through.  */
8001
8002         case R_MIPS_26:
8003         case R_MIPS_PC16:
8004         case R_MIPS16_26:
8005         case R_MICROMIPS_26_S1:
8006         case R_MICROMIPS_PC7_S1:
8007         case R_MICROMIPS_PC10_S1:
8008         case R_MICROMIPS_PC16_S1:
8009         case R_MICROMIPS_PC23_S2:
8010           if (h)
8011             ((struct mips_elf_link_hash_entry *) h)->has_static_relocs = TRUE;
8012           break;
8013         }
8014
8015       if (h)
8016         {
8017           /* Relocations against the special VxWorks __GOTT_BASE__ and
8018              __GOTT_INDEX__ symbols must be left to the loader.  Allocate
8019              room for them in .rela.dyn.  */
8020           if (is_gott_symbol (info, h))
8021             {
8022               if (sreloc == NULL)
8023                 {
8024                   sreloc = mips_elf_rel_dyn_section (info, TRUE);
8025                   if (sreloc == NULL)
8026                     return FALSE;
8027                 }
8028               mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
8029               if (MIPS_ELF_READONLY_SECTION (sec))
8030                 /* We tell the dynamic linker that there are
8031                    relocations against the text segment.  */
8032                 info->flags |= DF_TEXTREL;
8033             }
8034         }
8035       else if (call_lo16_reloc_p (r_type)
8036                || got_lo16_reloc_p (r_type)
8037                || got_disp_reloc_p (r_type)
8038                || (got16_reloc_p (r_type) && htab->is_vxworks))
8039         {
8040           /* We may need a local GOT entry for this relocation.  We
8041              don't count R_MIPS_GOT_PAGE because we can estimate the
8042              maximum number of pages needed by looking at the size of
8043              the segment.  Similar comments apply to R_MIPS*_GOT16 and
8044              R_MIPS*_CALL16, except on VxWorks, where GOT relocations
8045              always evaluate to "G".  We don't count R_MIPS_GOT_HI16, or
8046              R_MIPS_CALL_HI16 because these are always followed by an
8047              R_MIPS_GOT_LO16 or R_MIPS_CALL_LO16.  */
8048           if (!mips_elf_record_local_got_symbol (abfd, r_symndx,
8049                                                  rel->r_addend, info, 0))
8050             return FALSE;
8051         }
8052
8053       if (h != NULL
8054           && mips_elf_relocation_needs_la25_stub (abfd, r_type,
8055                                                   ELF_ST_IS_MIPS16 (h->other)))
8056         ((struct mips_elf_link_hash_entry *) h)->has_nonpic_branches = TRUE;
8057
8058       switch (r_type)
8059         {
8060         case R_MIPS_CALL16:
8061         case R_MIPS16_CALL16:
8062         case R_MICROMIPS_CALL16:
8063           if (h == NULL)
8064             {
8065               (*_bfd_error_handler)
8066                 (_("%B: CALL16 reloc at 0x%lx not against global symbol"),
8067                  abfd, (unsigned long) rel->r_offset);
8068               bfd_set_error (bfd_error_bad_value);
8069               return FALSE;
8070             }
8071           /* Fall through.  */
8072
8073         case R_MIPS_CALL_HI16:
8074         case R_MIPS_CALL_LO16:
8075         case R_MICROMIPS_CALL_HI16:
8076         case R_MICROMIPS_CALL_LO16:
8077           if (h != NULL)
8078             {
8079               /* Make sure there is room in the regular GOT to hold the
8080                  function's address.  We may eliminate it in favour of
8081                  a .got.plt entry later; see mips_elf_count_got_symbols.  */
8082               if (!mips_elf_record_global_got_symbol (h, abfd, info, TRUE, 0))
8083                 return FALSE;
8084
8085               /* We need a stub, not a plt entry for the undefined
8086                  function.  But we record it as if it needs plt.  See
8087                  _bfd_elf_adjust_dynamic_symbol.  */
8088               h->needs_plt = 1;
8089               h->type = STT_FUNC;
8090             }
8091           break;
8092
8093         case R_MIPS_GOT_PAGE:
8094         case R_MICROMIPS_GOT_PAGE:
8095           /* If this is a global, overridable symbol, GOT_PAGE will
8096              decay to GOT_DISP, so we'll need a GOT entry for it.  */
8097           if (h)
8098             {
8099               struct mips_elf_link_hash_entry *hmips =
8100                 (struct mips_elf_link_hash_entry *) h;
8101
8102               /* This symbol is definitely not overridable.  */
8103               if (hmips->root.def_regular
8104                   && ! (info->shared && ! info->symbolic
8105                         && ! hmips->root.forced_local))
8106                 h = NULL;
8107             }
8108           /* Fall through.  */
8109
8110         case R_MIPS16_GOT16:
8111         case R_MIPS_GOT16:
8112         case R_MIPS_GOT_HI16:
8113         case R_MIPS_GOT_LO16:
8114         case R_MICROMIPS_GOT16:
8115         case R_MICROMIPS_GOT_HI16:
8116         case R_MICROMIPS_GOT_LO16:
8117           if (!h || got_page_reloc_p (r_type))
8118             {
8119               /* This relocation needs (or may need, if h != NULL) a
8120                  page entry in the GOT.  For R_MIPS_GOT_PAGE we do not
8121                  know for sure until we know whether the symbol is
8122                  preemptible.  */
8123               if (mips_elf_rel_relocation_p (abfd, sec, relocs, rel))
8124                 {
8125                   if (!mips_elf_get_section_contents (abfd, sec, &contents))
8126                     return FALSE;
8127                   howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, FALSE);
8128                   addend = mips_elf_read_rel_addend (abfd, rel,
8129                                                      howto, contents);
8130                   if (got16_reloc_p (r_type))
8131                     mips_elf_add_lo16_rel_addend (abfd, rel, rel_end,
8132                                                   contents, &addend);
8133                   else
8134                     addend <<= howto->rightshift;
8135                 }
8136               else
8137                 addend = rel->r_addend;
8138               if (!mips_elf_record_got_page_entry (info, abfd, r_symndx,
8139                                                    addend))
8140                 return FALSE;
8141             }
8142           /* Fall through.  */
8143
8144         case R_MIPS_GOT_DISP:
8145         case R_MICROMIPS_GOT_DISP:
8146           if (h && !mips_elf_record_global_got_symbol (h, abfd, info,
8147                                                        FALSE, 0))
8148             return FALSE;
8149           break;
8150
8151         case R_MIPS_TLS_GOTTPREL:
8152         case R_MIPS16_TLS_GOTTPREL:
8153         case R_MICROMIPS_TLS_GOTTPREL:
8154           if (info->shared)
8155             info->flags |= DF_STATIC_TLS;
8156           /* Fall through */
8157
8158         case R_MIPS_TLS_LDM:
8159         case R_MIPS16_TLS_LDM:
8160         case R_MICROMIPS_TLS_LDM:
8161           if (tls_ldm_reloc_p (r_type))
8162             {
8163               r_symndx = STN_UNDEF;
8164               h = NULL;
8165             }
8166           /* Fall through */
8167
8168         case R_MIPS_TLS_GD:
8169         case R_MIPS16_TLS_GD:
8170         case R_MICROMIPS_TLS_GD:
8171           /* This symbol requires a global offset table entry, or two
8172              for TLS GD relocations.  */
8173           {
8174             unsigned char flag;
8175
8176             flag = (tls_gd_reloc_p (r_type)
8177                     ? GOT_TLS_GD
8178                     : tls_ldm_reloc_p (r_type) ? GOT_TLS_LDM : GOT_TLS_IE);
8179             if (h != NULL)
8180               {
8181                 struct mips_elf_link_hash_entry *hmips =
8182                   (struct mips_elf_link_hash_entry *) h;
8183                 hmips->tls_type |= flag;
8184
8185                 if (h && !mips_elf_record_global_got_symbol (h, abfd, info,
8186                                                              FALSE, flag))
8187                   return FALSE;
8188               }
8189             else
8190               {
8191                 BFD_ASSERT (flag == GOT_TLS_LDM || r_symndx != STN_UNDEF);
8192
8193                 if (!mips_elf_record_local_got_symbol (abfd, r_symndx,
8194                                                        rel->r_addend,
8195                                                        info, flag))
8196                   return FALSE;
8197               }
8198           }
8199           break;
8200
8201         case R_MIPS_32:
8202         case R_MIPS_REL32:
8203         case R_MIPS_64:
8204           /* In VxWorks executables, references to external symbols
8205              are handled using copy relocs or PLT stubs, so there's
8206              no need to add a .rela.dyn entry for this relocation.  */
8207           if (can_make_dynamic_p)
8208             {
8209               if (sreloc == NULL)
8210                 {
8211                   sreloc = mips_elf_rel_dyn_section (info, TRUE);
8212                   if (sreloc == NULL)
8213                     return FALSE;
8214                 }
8215               if (info->shared && h == NULL)
8216                 {
8217                   /* When creating a shared object, we must copy these
8218                      reloc types into the output file as R_MIPS_REL32
8219                      relocs.  Make room for this reloc in .rel(a).dyn.  */
8220                   mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
8221                   if (MIPS_ELF_READONLY_SECTION (sec))
8222                     /* We tell the dynamic linker that there are
8223                        relocations against the text segment.  */
8224                     info->flags |= DF_TEXTREL;
8225                 }
8226               else
8227                 {
8228                   struct mips_elf_link_hash_entry *hmips;
8229
8230                   /* For a shared object, we must copy this relocation
8231                      unless the symbol turns out to be undefined and
8232                      weak with non-default visibility, in which case
8233                      it will be left as zero.
8234
8235                      We could elide R_MIPS_REL32 for locally binding symbols
8236                      in shared libraries, but do not yet do so.
8237
8238                      For an executable, we only need to copy this
8239                      reloc if the symbol is defined in a dynamic
8240                      object.  */
8241                   hmips = (struct mips_elf_link_hash_entry *) h;
8242                   ++hmips->possibly_dynamic_relocs;
8243                   if (MIPS_ELF_READONLY_SECTION (sec))
8244                     /* We need it to tell the dynamic linker if there
8245                        are relocations against the text segment.  */
8246                     hmips->readonly_reloc = TRUE;
8247                 }
8248             }
8249
8250           if (SGI_COMPAT (abfd))
8251             mips_elf_hash_table (info)->compact_rel_size +=
8252               sizeof (Elf32_External_crinfo);
8253           break;
8254
8255         case R_MIPS_26:
8256         case R_MIPS_GPREL16:
8257         case R_MIPS_LITERAL:
8258         case R_MIPS_GPREL32:
8259         case R_MICROMIPS_26_S1:
8260         case R_MICROMIPS_GPREL16:
8261         case R_MICROMIPS_LITERAL:
8262         case R_MICROMIPS_GPREL7_S2:
8263           if (SGI_COMPAT (abfd))
8264             mips_elf_hash_table (info)->compact_rel_size +=
8265               sizeof (Elf32_External_crinfo);
8266           break;
8267
8268           /* This relocation describes the C++ object vtable hierarchy.
8269              Reconstruct it for later use during GC.  */
8270         case R_MIPS_GNU_VTINHERIT:
8271           if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
8272             return FALSE;
8273           break;
8274
8275           /* This relocation describes which C++ vtable entries are actually
8276              used.  Record for later use during GC.  */
8277         case R_MIPS_GNU_VTENTRY:
8278           BFD_ASSERT (h != NULL);
8279           if (h != NULL
8280               && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset))
8281             return FALSE;
8282           break;
8283
8284         default:
8285           break;
8286         }
8287
8288       /* We must not create a stub for a symbol that has relocations
8289          related to taking the function's address.  This doesn't apply to
8290          VxWorks, where CALL relocs refer to a .got.plt entry instead of
8291          a normal .got entry.  */
8292       if (!htab->is_vxworks && h != NULL)
8293         switch (r_type)
8294           {
8295           default:
8296             ((struct mips_elf_link_hash_entry *) h)->no_fn_stub = TRUE;
8297             break;
8298           case R_MIPS16_CALL16:
8299           case R_MIPS_CALL16:
8300           case R_MIPS_CALL_HI16:
8301           case R_MIPS_CALL_LO16:
8302           case R_MIPS_JALR:
8303           case R_MICROMIPS_CALL16:
8304           case R_MICROMIPS_CALL_HI16:
8305           case R_MICROMIPS_CALL_LO16:
8306           case R_MICROMIPS_JALR:
8307             break;
8308           }
8309
8310       /* See if this reloc would need to refer to a MIPS16 hard-float stub,
8311          if there is one.  We only need to handle global symbols here;
8312          we decide whether to keep or delete stubs for local symbols
8313          when processing the stub's relocations.  */
8314       if (h != NULL
8315           && !mips16_call_reloc_p (r_type)
8316           && !section_allows_mips16_refs_p (sec))
8317         {
8318           struct mips_elf_link_hash_entry *mh;
8319
8320           mh = (struct mips_elf_link_hash_entry *) h;
8321           mh->need_fn_stub = TRUE;
8322         }
8323
8324       /* Refuse some position-dependent relocations when creating a
8325          shared library.  Do not refuse R_MIPS_32 / R_MIPS_64; they're
8326          not PIC, but we can create dynamic relocations and the result
8327          will be fine.  Also do not refuse R_MIPS_LO16, which can be
8328          combined with R_MIPS_GOT16.  */
8329       if (info->shared)
8330         {
8331           switch (r_type)
8332             {
8333             case R_MIPS16_HI16:
8334             case R_MIPS_HI16:
8335             case R_MIPS_HIGHER:
8336             case R_MIPS_HIGHEST:
8337             case R_MICROMIPS_HI16:
8338             case R_MICROMIPS_HIGHER:
8339             case R_MICROMIPS_HIGHEST:
8340               /* Don't refuse a high part relocation if it's against
8341                  no symbol (e.g. part of a compound relocation).  */
8342               if (r_symndx == STN_UNDEF)
8343                 break;
8344
8345               /* R_MIPS_HI16 against _gp_disp is used for $gp setup,
8346                  and has a special meaning.  */
8347               if (!NEWABI_P (abfd) && h != NULL
8348                   && strcmp (h->root.root.string, "_gp_disp") == 0)
8349                 break;
8350
8351               /* Likewise __GOTT_BASE__ and __GOTT_INDEX__ on VxWorks.  */
8352               if (is_gott_symbol (info, h))
8353                 break;
8354
8355               /* FALLTHROUGH */
8356
8357             case R_MIPS16_26:
8358             case R_MIPS_26:
8359             case R_MICROMIPS_26_S1:
8360               howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, FALSE);
8361               (*_bfd_error_handler)
8362                 (_("%B: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC"),
8363                  abfd, howto->name,
8364                  (h) ? h->root.root.string : "a local symbol");
8365               bfd_set_error (bfd_error_bad_value);
8366               return FALSE;
8367             default:
8368               break;
8369             }
8370         }
8371     }
8372
8373   return TRUE;
8374 }
8375 \f
8376 bfd_boolean
8377 _bfd_mips_relax_section (bfd *abfd, asection *sec,
8378                          struct bfd_link_info *link_info,
8379                          bfd_boolean *again)
8380 {
8381   Elf_Internal_Rela *internal_relocs;
8382   Elf_Internal_Rela *irel, *irelend;
8383   Elf_Internal_Shdr *symtab_hdr;
8384   bfd_byte *contents = NULL;
8385   size_t extsymoff;
8386   bfd_boolean changed_contents = FALSE;
8387   bfd_vma sec_start = sec->output_section->vma + sec->output_offset;
8388   Elf_Internal_Sym *isymbuf = NULL;
8389
8390   /* We are not currently changing any sizes, so only one pass.  */
8391   *again = FALSE;
8392
8393   if (link_info->relocatable)
8394     return TRUE;
8395
8396   internal_relocs = _bfd_elf_link_read_relocs (abfd, sec, NULL, NULL,
8397                                                link_info->keep_memory);
8398   if (internal_relocs == NULL)
8399     return TRUE;
8400
8401   irelend = internal_relocs + sec->reloc_count
8402     * get_elf_backend_data (abfd)->s->int_rels_per_ext_rel;
8403   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
8404   extsymoff = (elf_bad_symtab (abfd)) ? 0 : symtab_hdr->sh_info;
8405
8406   for (irel = internal_relocs; irel < irelend; irel++)
8407     {
8408       bfd_vma symval;
8409       bfd_signed_vma sym_offset;
8410       unsigned int r_type;
8411       unsigned long r_symndx;
8412       asection *sym_sec;
8413       unsigned long instruction;
8414
8415       /* Turn jalr into bgezal, and jr into beq, if they're marked
8416          with a JALR relocation, that indicate where they jump to.
8417          This saves some pipeline bubbles.  */
8418       r_type = ELF_R_TYPE (abfd, irel->r_info);
8419       if (r_type != R_MIPS_JALR)
8420         continue;
8421
8422       r_symndx = ELF_R_SYM (abfd, irel->r_info);
8423       /* Compute the address of the jump target.  */
8424       if (r_symndx >= extsymoff)
8425         {
8426           struct mips_elf_link_hash_entry *h
8427             = ((struct mips_elf_link_hash_entry *)
8428                elf_sym_hashes (abfd) [r_symndx - extsymoff]);
8429
8430           while (h->root.root.type == bfd_link_hash_indirect
8431                  || h->root.root.type == bfd_link_hash_warning)
8432             h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
8433
8434           /* If a symbol is undefined, or if it may be overridden,
8435              skip it.  */
8436           if (! ((h->root.root.type == bfd_link_hash_defined
8437                   || h->root.root.type == bfd_link_hash_defweak)
8438                  && h->root.root.u.def.section)
8439               || (link_info->shared && ! link_info->symbolic
8440                   && !h->root.forced_local))
8441             continue;
8442
8443           sym_sec = h->root.root.u.def.section;
8444           if (sym_sec->output_section)
8445             symval = (h->root.root.u.def.value
8446                       + sym_sec->output_section->vma
8447                       + sym_sec->output_offset);
8448           else
8449             symval = h->root.root.u.def.value;
8450         }
8451       else
8452         {
8453           Elf_Internal_Sym *isym;
8454
8455           /* Read this BFD's symbols if we haven't done so already.  */
8456           if (isymbuf == NULL && symtab_hdr->sh_info != 0)
8457             {
8458               isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
8459               if (isymbuf == NULL)
8460                 isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
8461                                                 symtab_hdr->sh_info, 0,
8462                                                 NULL, NULL, NULL);
8463               if (isymbuf == NULL)
8464                 goto relax_return;
8465             }
8466
8467           isym = isymbuf + r_symndx;
8468           if (isym->st_shndx == SHN_UNDEF)
8469             continue;
8470           else if (isym->st_shndx == SHN_ABS)
8471             sym_sec = bfd_abs_section_ptr;
8472           else if (isym->st_shndx == SHN_COMMON)
8473             sym_sec = bfd_com_section_ptr;
8474           else
8475             sym_sec
8476               = bfd_section_from_elf_index (abfd, isym->st_shndx);
8477           symval = isym->st_value
8478             + sym_sec->output_section->vma
8479             + sym_sec->output_offset;
8480         }
8481
8482       /* Compute branch offset, from delay slot of the jump to the
8483          branch target.  */
8484       sym_offset = (symval + irel->r_addend)
8485         - (sec_start + irel->r_offset + 4);
8486
8487       /* Branch offset must be properly aligned.  */
8488       if ((sym_offset & 3) != 0)
8489         continue;
8490
8491       sym_offset >>= 2;
8492
8493       /* Check that it's in range.  */
8494       if (sym_offset < -0x8000 || sym_offset >= 0x8000)
8495         continue;
8496
8497       /* Get the section contents if we haven't done so already.  */
8498       if (!mips_elf_get_section_contents (abfd, sec, &contents))
8499         goto relax_return;
8500
8501       instruction = bfd_get_32 (abfd, contents + irel->r_offset);
8502
8503       /* If it was jalr <reg>, turn it into bgezal $zero, <target>.  */
8504       if ((instruction & 0xfc1fffff) == 0x0000f809)
8505         instruction = 0x04110000;
8506       /* If it was jr <reg>, turn it into b <target>.  */
8507       else if ((instruction & 0xfc1fffff) == 0x00000008)
8508         instruction = 0x10000000;
8509       else
8510         continue;
8511
8512       instruction |= (sym_offset & 0xffff);
8513       bfd_put_32 (abfd, instruction, contents + irel->r_offset);
8514       changed_contents = TRUE;
8515     }
8516
8517   if (contents != NULL
8518       && elf_section_data (sec)->this_hdr.contents != contents)
8519     {
8520       if (!changed_contents && !link_info->keep_memory)
8521         free (contents);
8522       else
8523         {
8524           /* Cache the section contents for elf_link_input_bfd.  */
8525           elf_section_data (sec)->this_hdr.contents = contents;
8526         }
8527     }
8528   return TRUE;
8529
8530  relax_return:
8531   if (contents != NULL
8532       && elf_section_data (sec)->this_hdr.contents != contents)
8533     free (contents);
8534   return FALSE;
8535 }
8536 \f
8537 /* Allocate space for global sym dynamic relocs.  */
8538
8539 static bfd_boolean
8540 allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
8541 {
8542   struct bfd_link_info *info = inf;
8543   bfd *dynobj;
8544   struct mips_elf_link_hash_entry *hmips;
8545   struct mips_elf_link_hash_table *htab;
8546
8547   htab = mips_elf_hash_table (info);
8548   BFD_ASSERT (htab != NULL);
8549
8550   dynobj = elf_hash_table (info)->dynobj;
8551   hmips = (struct mips_elf_link_hash_entry *) h;
8552
8553   /* VxWorks executables are handled elsewhere; we only need to
8554      allocate relocations in shared objects.  */
8555   if (htab->is_vxworks && !info->shared)
8556     return TRUE;
8557
8558   /* Ignore indirect symbols.  All relocations against such symbols
8559      will be redirected to the target symbol.  */
8560   if (h->root.type == bfd_link_hash_indirect)
8561     return TRUE;
8562
8563   /* If this symbol is defined in a dynamic object, or we are creating
8564      a shared library, we will need to copy any R_MIPS_32 or
8565      R_MIPS_REL32 relocs against it into the output file.  */
8566   if (! info->relocatable
8567       && hmips->possibly_dynamic_relocs != 0
8568       && (h->root.type == bfd_link_hash_defweak
8569           || (!h->def_regular && !ELF_COMMON_DEF_P (h))
8570           || info->shared))
8571     {
8572       bfd_boolean do_copy = TRUE;
8573
8574       if (h->root.type == bfd_link_hash_undefweak)
8575         {
8576           /* Do not copy relocations for undefined weak symbols with
8577              non-default visibility.  */
8578           if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
8579             do_copy = FALSE;
8580
8581           /* Make sure undefined weak symbols are output as a dynamic
8582              symbol in PIEs.  */
8583           else if (h->dynindx == -1 && !h->forced_local)
8584             {
8585               if (! bfd_elf_link_record_dynamic_symbol (info, h))
8586                 return FALSE;
8587             }
8588         }
8589
8590       if (do_copy)
8591         {
8592           /* Even though we don't directly need a GOT entry for this symbol,
8593              the SVR4 psABI requires it to have a dynamic symbol table
8594              index greater that DT_MIPS_GOTSYM if there are dynamic
8595              relocations against it.
8596
8597              VxWorks does not enforce the same mapping between the GOT
8598              and the symbol table, so the same requirement does not
8599              apply there.  */
8600           if (!htab->is_vxworks)
8601             {
8602               if (hmips->global_got_area > GGA_RELOC_ONLY)
8603                 hmips->global_got_area = GGA_RELOC_ONLY;
8604               hmips->got_only_for_calls = FALSE;
8605             }
8606
8607           mips_elf_allocate_dynamic_relocations
8608             (dynobj, info, hmips->possibly_dynamic_relocs);
8609           if (hmips->readonly_reloc)
8610             /* We tell the dynamic linker that there are relocations
8611                against the text segment.  */
8612             info->flags |= DF_TEXTREL;
8613         }
8614     }
8615
8616   return TRUE;
8617 }
8618
8619 /* Adjust a symbol defined by a dynamic object and referenced by a
8620    regular object.  The current definition is in some section of the
8621    dynamic object, but we're not including those sections.  We have to
8622    change the definition to something the rest of the link can
8623    understand.  */
8624
8625 bfd_boolean
8626 _bfd_mips_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
8627                                      struct elf_link_hash_entry *h)
8628 {
8629   bfd *dynobj;
8630   struct mips_elf_link_hash_entry *hmips;
8631   struct mips_elf_link_hash_table *htab;
8632
8633   htab = mips_elf_hash_table (info);
8634   BFD_ASSERT (htab != NULL);
8635
8636   dynobj = elf_hash_table (info)->dynobj;
8637   hmips = (struct mips_elf_link_hash_entry *) h;
8638
8639   /* Make sure we know what is going on here.  */
8640   BFD_ASSERT (dynobj != NULL
8641               && (h->needs_plt
8642                   || h->u.weakdef != NULL
8643                   || (h->def_dynamic
8644                       && h->ref_regular
8645                       && !h->def_regular)));
8646
8647   hmips = (struct mips_elf_link_hash_entry *) h;
8648
8649   /* If there are call relocations against an externally-defined symbol,
8650      see whether we can create a MIPS lazy-binding stub for it.  We can
8651      only do this if all references to the function are through call
8652      relocations, and in that case, the traditional lazy-binding stubs
8653      are much more efficient than PLT entries.
8654
8655      Traditional stubs are only available on SVR4 psABI-based systems;
8656      VxWorks always uses PLTs instead.  */
8657   if (!htab->is_vxworks && h->needs_plt && !hmips->no_fn_stub)
8658     {
8659       if (! elf_hash_table (info)->dynamic_sections_created)
8660         return TRUE;
8661
8662       /* If this symbol is not defined in a regular file, then set
8663          the symbol to the stub location.  This is required to make
8664          function pointers compare as equal between the normal
8665          executable and the shared library.  */
8666       if (!h->def_regular)
8667         {
8668           hmips->needs_lazy_stub = TRUE;
8669           htab->lazy_stub_count++;
8670           return TRUE;
8671         }
8672     }
8673   /* As above, VxWorks requires PLT entries for externally-defined
8674      functions that are only accessed through call relocations.
8675
8676      Both VxWorks and non-VxWorks targets also need PLT entries if there
8677      are static-only relocations against an externally-defined function.
8678      This can technically occur for shared libraries if there are
8679      branches to the symbol, although it is unlikely that this will be
8680      used in practice due to the short ranges involved.  It can occur
8681      for any relative or absolute relocation in executables; in that
8682      case, the PLT entry becomes the function's canonical address.  */
8683   else if (((h->needs_plt && !hmips->no_fn_stub)
8684             || (h->type == STT_FUNC && hmips->has_static_relocs))
8685            && htab->use_plts_and_copy_relocs
8686            && !SYMBOL_CALLS_LOCAL (info, h)
8687            && !(ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
8688                 && h->root.type == bfd_link_hash_undefweak))
8689     {
8690       /* If this is the first symbol to need a PLT entry, allocate room
8691          for the header.  */
8692       if (htab->splt->size == 0)
8693         {
8694           BFD_ASSERT (htab->sgotplt->size == 0);
8695
8696           /* If we're using the PLT additions to the psABI, each PLT
8697              entry is 16 bytes and the PLT0 entry is 32 bytes.
8698              Encourage better cache usage by aligning.  We do this
8699              lazily to avoid pessimizing traditional objects.  */
8700           if (!htab->is_vxworks
8701               && !bfd_set_section_alignment (dynobj, htab->splt, 5))
8702             return FALSE;
8703
8704           /* Make sure that .got.plt is word-aligned.  We do this lazily
8705              for the same reason as above.  */
8706           if (!bfd_set_section_alignment (dynobj, htab->sgotplt,
8707                                           MIPS_ELF_LOG_FILE_ALIGN (dynobj)))
8708             return FALSE;
8709
8710           htab->splt->size += htab->plt_header_size;
8711
8712           /* On non-VxWorks targets, the first two entries in .got.plt
8713              are reserved.  */
8714           if (!htab->is_vxworks)
8715             htab->sgotplt->size
8716               += get_elf_backend_data (dynobj)->got_header_size;
8717
8718           /* On VxWorks, also allocate room for the header's
8719              .rela.plt.unloaded entries.  */
8720           if (htab->is_vxworks && !info->shared)
8721             htab->srelplt2->size += 2 * sizeof (Elf32_External_Rela);
8722         }
8723
8724       /* Assign the next .plt entry to this symbol.  */
8725       h->plt.offset = htab->splt->size;
8726       htab->splt->size += htab->plt_entry_size;
8727
8728       /* If the output file has no definition of the symbol, set the
8729          symbol's value to the address of the stub.  */
8730       if (!info->shared && !h->def_regular)
8731         {
8732           h->root.u.def.section = htab->splt;
8733           h->root.u.def.value = h->plt.offset;
8734           /* For VxWorks, point at the PLT load stub rather than the
8735              lazy resolution stub; this stub will become the canonical
8736              function address.  */
8737           if (htab->is_vxworks)
8738             h->root.u.def.value += 8;
8739         }
8740
8741       /* Make room for the .got.plt entry and the R_MIPS_JUMP_SLOT
8742          relocation.  */
8743       htab->sgotplt->size += MIPS_ELF_GOT_SIZE (dynobj);
8744       htab->srelplt->size += (htab->is_vxworks
8745                               ? MIPS_ELF_RELA_SIZE (dynobj)
8746                               : MIPS_ELF_REL_SIZE (dynobj));
8747
8748       /* Make room for the .rela.plt.unloaded relocations.  */
8749       if (htab->is_vxworks && !info->shared)
8750         htab->srelplt2->size += 3 * sizeof (Elf32_External_Rela);
8751
8752       /* All relocations against this symbol that could have been made
8753          dynamic will now refer to the PLT entry instead.  */
8754       hmips->possibly_dynamic_relocs = 0;
8755
8756       return TRUE;
8757     }
8758
8759   /* If this is a weak symbol, and there is a real definition, the
8760      processor independent code will have arranged for us to see the
8761      real definition first, and we can just use the same value.  */
8762   if (h->u.weakdef != NULL)
8763     {
8764       BFD_ASSERT (h->u.weakdef->root.type == bfd_link_hash_defined
8765                   || h->u.weakdef->root.type == bfd_link_hash_defweak);
8766       h->root.u.def.section = h->u.weakdef->root.u.def.section;
8767       h->root.u.def.value = h->u.weakdef->root.u.def.value;
8768       return TRUE;
8769     }
8770
8771   /* Otherwise, there is nothing further to do for symbols defined
8772      in regular objects.  */
8773   if (h->def_regular)
8774     return TRUE;
8775
8776   /* There's also nothing more to do if we'll convert all relocations
8777      against this symbol into dynamic relocations.  */
8778   if (!hmips->has_static_relocs)
8779     return TRUE;
8780
8781   /* We're now relying on copy relocations.  Complain if we have
8782      some that we can't convert.  */
8783   if (!htab->use_plts_and_copy_relocs || info->shared)
8784     {
8785       (*_bfd_error_handler) (_("non-dynamic relocations refer to "
8786                                "dynamic symbol %s"),
8787                              h->root.root.string);
8788       bfd_set_error (bfd_error_bad_value);
8789       return FALSE;
8790     }
8791
8792   /* We must allocate the symbol in our .dynbss section, which will
8793      become part of the .bss section of the executable.  There will be
8794      an entry for this symbol in the .dynsym section.  The dynamic
8795      object will contain position independent code, so all references
8796      from the dynamic object to this symbol will go through the global
8797      offset table.  The dynamic linker will use the .dynsym entry to
8798      determine the address it must put in the global offset table, so
8799      both the dynamic object and the regular object will refer to the
8800      same memory location for the variable.  */
8801
8802   if ((h->root.u.def.section->flags & SEC_ALLOC) != 0)
8803     {
8804       if (htab->is_vxworks)
8805         htab->srelbss->size += sizeof (Elf32_External_Rela);
8806       else
8807         mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
8808       h->needs_copy = 1;
8809     }
8810
8811   /* All relocations against this symbol that could have been made
8812      dynamic will now refer to the local copy instead.  */
8813   hmips->possibly_dynamic_relocs = 0;
8814
8815   return _bfd_elf_adjust_dynamic_copy (h, htab->sdynbss);
8816 }
8817 \f
8818 /* This function is called after all the input files have been read,
8819    and the input sections have been assigned to output sections.  We
8820    check for any mips16 stub sections that we can discard.  */
8821
8822 bfd_boolean
8823 _bfd_mips_elf_always_size_sections (bfd *output_bfd,
8824                                     struct bfd_link_info *info)
8825 {
8826   asection *ri;
8827   struct mips_elf_link_hash_table *htab;
8828   struct mips_htab_traverse_info hti;
8829
8830   htab = mips_elf_hash_table (info);
8831   BFD_ASSERT (htab != NULL);
8832
8833   /* The .reginfo section has a fixed size.  */
8834   ri = bfd_get_section_by_name (output_bfd, ".reginfo");
8835   if (ri != NULL)
8836     bfd_set_section_size (output_bfd, ri, sizeof (Elf32_External_RegInfo));
8837
8838   hti.info = info;
8839   hti.output_bfd = output_bfd;
8840   hti.error = FALSE;
8841   mips_elf_link_hash_traverse (mips_elf_hash_table (info),
8842                                mips_elf_check_symbols, &hti);
8843   if (hti.error)
8844     return FALSE;
8845
8846   return TRUE;
8847 }
8848
8849 /* If the link uses a GOT, lay it out and work out its size.  */
8850
8851 static bfd_boolean
8852 mips_elf_lay_out_got (bfd *output_bfd, struct bfd_link_info *info)
8853 {
8854   bfd *dynobj;
8855   asection *s;
8856   struct mips_got_info *g;
8857   bfd_size_type loadable_size = 0;
8858   bfd_size_type page_gotno;
8859   bfd *sub;
8860   struct mips_elf_count_tls_arg count_tls_arg;
8861   struct mips_elf_link_hash_table *htab;
8862
8863   htab = mips_elf_hash_table (info);
8864   BFD_ASSERT (htab != NULL);
8865
8866   s = htab->sgot;
8867   if (s == NULL)
8868     return TRUE;
8869
8870   dynobj = elf_hash_table (info)->dynobj;
8871   g = htab->got_info;
8872
8873   /* Allocate room for the reserved entries.  VxWorks always reserves
8874      3 entries; other objects only reserve 2 entries.  */
8875   BFD_ASSERT (g->assigned_gotno == 0);
8876   if (htab->is_vxworks)
8877     htab->reserved_gotno = 3;
8878   else
8879     htab->reserved_gotno = 2;
8880   g->local_gotno += htab->reserved_gotno;
8881   g->assigned_gotno = htab->reserved_gotno;
8882
8883   /* Replace entries for indirect and warning symbols with entries for
8884      the target symbol.  */
8885   if (!mips_elf_resolve_final_got_entries (g))
8886     return FALSE;
8887
8888   /* Count the number of GOT symbols.  */
8889   mips_elf_link_hash_traverse (htab, mips_elf_count_got_symbols, info);
8890
8891   /* Calculate the total loadable size of the output.  That
8892      will give us the maximum number of GOT_PAGE entries
8893      required.  */
8894   for (sub = info->input_bfds; sub; sub = sub->link_next)
8895     {
8896       asection *subsection;
8897
8898       for (subsection = sub->sections;
8899            subsection;
8900            subsection = subsection->next)
8901         {
8902           if ((subsection->flags & SEC_ALLOC) == 0)
8903             continue;
8904           loadable_size += ((subsection->size + 0xf)
8905                             &~ (bfd_size_type) 0xf);
8906         }
8907     }
8908
8909   if (htab->is_vxworks)
8910     /* There's no need to allocate page entries for VxWorks; R_MIPS*_GOT16
8911        relocations against local symbols evaluate to "G", and the EABI does
8912        not include R_MIPS_GOT_PAGE.  */
8913     page_gotno = 0;
8914   else
8915     /* Assume there are two loadable segments consisting of contiguous
8916        sections.  Is 5 enough?  */
8917     page_gotno = (loadable_size >> 16) + 5;
8918
8919   /* Choose the smaller of the two estimates; both are intended to be
8920      conservative.  */
8921   if (page_gotno > g->page_gotno)
8922     page_gotno = g->page_gotno;
8923
8924   g->local_gotno += page_gotno;
8925   s->size += g->local_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
8926   s->size += g->global_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
8927
8928   /* We need to calculate tls_gotno for global symbols at this point
8929      instead of building it up earlier, to avoid doublecounting
8930      entries for one global symbol from multiple input files.  */
8931   count_tls_arg.info = info;
8932   count_tls_arg.needed = 0;
8933   elf_link_hash_traverse (elf_hash_table (info),
8934                           mips_elf_count_global_tls_entries,
8935                           &count_tls_arg);
8936   g->tls_gotno += count_tls_arg.needed;
8937   s->size += g->tls_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
8938
8939   /* VxWorks does not support multiple GOTs.  It initializes $gp to
8940      __GOTT_BASE__[__GOTT_INDEX__], the value of which is set by the
8941      dynamic loader.  */
8942   if (htab->is_vxworks)
8943     {
8944       /* VxWorks executables do not need a GOT.  */
8945       if (info->shared)
8946         {
8947           /* Each VxWorks GOT entry needs an explicit relocation.  */
8948           unsigned int count;
8949
8950           count = g->global_gotno + g->local_gotno - htab->reserved_gotno;
8951           if (count)
8952             mips_elf_allocate_dynamic_relocations (dynobj, info, count);
8953         }
8954     }
8955   else if (s->size > MIPS_ELF_GOT_MAX_SIZE (info))
8956     {
8957       if (!mips_elf_multi_got (output_bfd, info, s, page_gotno))
8958         return FALSE;
8959     }
8960   else
8961     {
8962       struct mips_elf_count_tls_arg arg;
8963
8964       /* Set up TLS entries.  */
8965       g->tls_assigned_gotno = g->global_gotno + g->local_gotno;
8966       htab_traverse (g->got_entries, mips_elf_initialize_tls_index, g);
8967
8968       /* Allocate room for the TLS relocations.  */
8969       arg.info = info;
8970       arg.needed = 0;
8971       htab_traverse (g->got_entries, mips_elf_count_local_tls_relocs, &arg);
8972       elf_link_hash_traverse (elf_hash_table (info),
8973                               mips_elf_count_global_tls_relocs,
8974                               &arg);
8975       if (arg.needed)
8976         mips_elf_allocate_dynamic_relocations (dynobj, info, arg.needed);
8977     }
8978
8979   return TRUE;
8980 }
8981
8982 /* Estimate the size of the .MIPS.stubs section.  */
8983
8984 static void
8985 mips_elf_estimate_stub_size (bfd *output_bfd, struct bfd_link_info *info)
8986 {
8987   struct mips_elf_link_hash_table *htab;
8988   bfd_size_type dynsymcount;
8989
8990   htab = mips_elf_hash_table (info);
8991   BFD_ASSERT (htab != NULL);
8992
8993   if (htab->lazy_stub_count == 0)
8994     return;
8995
8996   /* IRIX rld assumes that a function stub isn't at the end of the .text
8997      section, so add a dummy entry to the end.  */
8998   htab->lazy_stub_count++;
8999
9000   /* Get a worst-case estimate of the number of dynamic symbols needed.
9001      At this point, dynsymcount does not account for section symbols
9002      and count_section_dynsyms may overestimate the number that will
9003      be needed.  */
9004   dynsymcount = (elf_hash_table (info)->dynsymcount
9005                  + count_section_dynsyms (output_bfd, info));
9006
9007   /* Determine the size of one stub entry.  */
9008   htab->function_stub_size = (dynsymcount > 0x10000
9009                               ? MIPS_FUNCTION_STUB_BIG_SIZE
9010                               : MIPS_FUNCTION_STUB_NORMAL_SIZE);
9011
9012   htab->sstubs->size = htab->lazy_stub_count * htab->function_stub_size;
9013 }
9014
9015 /* A mips_elf_link_hash_traverse callback for which DATA points to the
9016    MIPS hash table.  If H needs a traditional MIPS lazy-binding stub,
9017    allocate an entry in the stubs section.  */
9018
9019 static bfd_boolean
9020 mips_elf_allocate_lazy_stub (struct mips_elf_link_hash_entry *h, void **data)
9021 {
9022   struct mips_elf_link_hash_table *htab;
9023
9024   htab = (struct mips_elf_link_hash_table *) data;
9025   if (h->needs_lazy_stub)
9026     {
9027       h->root.root.u.def.section = htab->sstubs;
9028       h->root.root.u.def.value = htab->sstubs->size;
9029       h->root.plt.offset = htab->sstubs->size;
9030       htab->sstubs->size += htab->function_stub_size;
9031     }
9032   return TRUE;
9033 }
9034
9035 /* Allocate offsets in the stubs section to each symbol that needs one.
9036    Set the final size of the .MIPS.stub section.  */
9037
9038 static void
9039 mips_elf_lay_out_lazy_stubs (struct bfd_link_info *info)
9040 {
9041   struct mips_elf_link_hash_table *htab;
9042
9043   htab = mips_elf_hash_table (info);
9044   BFD_ASSERT (htab != NULL);
9045
9046   if (htab->lazy_stub_count == 0)
9047     return;
9048
9049   htab->sstubs->size = 0;
9050   mips_elf_link_hash_traverse (htab, mips_elf_allocate_lazy_stub, htab);
9051   htab->sstubs->size += htab->function_stub_size;
9052   BFD_ASSERT (htab->sstubs->size
9053               == htab->lazy_stub_count * htab->function_stub_size);
9054 }
9055
9056 /* Set the sizes of the dynamic sections.  */
9057
9058 bfd_boolean
9059 _bfd_mips_elf_size_dynamic_sections (bfd *output_bfd,
9060                                      struct bfd_link_info *info)
9061 {
9062   bfd *dynobj;
9063   asection *s, *sreldyn;
9064   bfd_boolean reltext;
9065   struct mips_elf_link_hash_table *htab;
9066
9067   htab = mips_elf_hash_table (info);
9068   BFD_ASSERT (htab != NULL);
9069   dynobj = elf_hash_table (info)->dynobj;
9070   BFD_ASSERT (dynobj != NULL);
9071
9072   if (elf_hash_table (info)->dynamic_sections_created)
9073     {
9074       /* Set the contents of the .interp section to the interpreter.  */
9075       if (info->executable)
9076         {
9077           s = bfd_get_linker_section (dynobj, ".interp");
9078           BFD_ASSERT (s != NULL);
9079           s->size
9080             = strlen (ELF_DYNAMIC_INTERPRETER (output_bfd)) + 1;
9081           s->contents
9082             = (bfd_byte *) ELF_DYNAMIC_INTERPRETER (output_bfd);
9083         }
9084
9085       /* Create a symbol for the PLT, if we know that we are using it.  */
9086       if (htab->splt && htab->splt->size > 0 && htab->root.hplt == NULL)
9087         {
9088           struct elf_link_hash_entry *h;
9089
9090           BFD_ASSERT (htab->use_plts_and_copy_relocs);
9091
9092           h = _bfd_elf_define_linkage_sym (dynobj, info, htab->splt,
9093                                            "_PROCEDURE_LINKAGE_TABLE_");
9094           htab->root.hplt = h;
9095           if (h == NULL)
9096             return FALSE;
9097           h->type = STT_FUNC;
9098         }
9099     }
9100
9101   /* Allocate space for global sym dynamic relocs.  */
9102   elf_link_hash_traverse (&htab->root, allocate_dynrelocs, info);
9103
9104   mips_elf_estimate_stub_size (output_bfd, info);
9105
9106   if (!mips_elf_lay_out_got (output_bfd, info))
9107     return FALSE;
9108
9109   mips_elf_lay_out_lazy_stubs (info);
9110
9111   /* The check_relocs and adjust_dynamic_symbol entry points have
9112      determined the sizes of the various dynamic sections.  Allocate
9113      memory for them.  */
9114   reltext = FALSE;
9115   for (s = dynobj->sections; s != NULL; s = s->next)
9116     {
9117       const char *name;
9118
9119       /* It's OK to base decisions on the section name, because none
9120          of the dynobj section names depend upon the input files.  */
9121       name = bfd_get_section_name (dynobj, s);
9122
9123       if ((s->flags & SEC_LINKER_CREATED) == 0)
9124         continue;
9125
9126       if (CONST_STRNEQ (name, ".rel"))
9127         {
9128           if (s->size != 0)
9129             {
9130               const char *outname;
9131               asection *target;
9132
9133               /* If this relocation section applies to a read only
9134                  section, then we probably need a DT_TEXTREL entry.
9135                  If the relocation section is .rel(a).dyn, we always
9136                  assert a DT_TEXTREL entry rather than testing whether
9137                  there exists a relocation to a read only section or
9138                  not.  */
9139               outname = bfd_get_section_name (output_bfd,
9140                                               s->output_section);
9141               target = bfd_get_section_by_name (output_bfd, outname + 4);
9142               if ((target != NULL
9143                    && (target->flags & SEC_READONLY) != 0
9144                    && (target->flags & SEC_ALLOC) != 0)
9145                   || strcmp (outname, MIPS_ELF_REL_DYN_NAME (info)) == 0)
9146                 reltext = TRUE;
9147
9148               /* We use the reloc_count field as a counter if we need
9149                  to copy relocs into the output file.  */
9150               if (strcmp (name, MIPS_ELF_REL_DYN_NAME (info)) != 0)
9151                 s->reloc_count = 0;
9152
9153               /* If combreloc is enabled, elf_link_sort_relocs() will
9154                  sort relocations, but in a different way than we do,
9155                  and before we're done creating relocations.  Also, it
9156                  will move them around between input sections'
9157                  relocation's contents, so our sorting would be
9158                  broken, so don't let it run.  */
9159               info->combreloc = 0;
9160             }
9161         }
9162       else if (! info->shared
9163                && ! mips_elf_hash_table (info)->use_rld_obj_head
9164                && CONST_STRNEQ (name, ".rld_map"))
9165         {
9166           /* We add a room for __rld_map.  It will be filled in by the
9167              rtld to contain a pointer to the _r_debug structure.  */
9168           s->size += MIPS_ELF_RLD_MAP_SIZE (output_bfd);
9169         }
9170       else if (SGI_COMPAT (output_bfd)
9171                && CONST_STRNEQ (name, ".compact_rel"))
9172         s->size += mips_elf_hash_table (info)->compact_rel_size;
9173       else if (s == htab->splt)
9174         {
9175           /* If the last PLT entry has a branch delay slot, allocate
9176              room for an extra nop to fill the delay slot.  This is
9177              for CPUs without load interlocking.  */
9178           if (! LOAD_INTERLOCKS_P (output_bfd)
9179               && ! htab->is_vxworks && s->size > 0)
9180             s->size += 4;
9181         }
9182       else if (! CONST_STRNEQ (name, ".init")
9183                && s != htab->sgot
9184                && s != htab->sgotplt
9185                && s != htab->sstubs
9186                && s != htab->sdynbss)
9187         {
9188           /* It's not one of our sections, so don't allocate space.  */
9189           continue;
9190         }
9191
9192       if (s->size == 0)
9193         {
9194           s->flags |= SEC_EXCLUDE;
9195           continue;
9196         }
9197
9198       if ((s->flags & SEC_HAS_CONTENTS) == 0)
9199         continue;
9200
9201       /* Allocate memory for the section contents.  */
9202       s->contents = bfd_zalloc (dynobj, s->size);
9203       if (s->contents == NULL)
9204         {
9205           bfd_set_error (bfd_error_no_memory);
9206           return FALSE;
9207         }
9208     }
9209
9210   if (elf_hash_table (info)->dynamic_sections_created)
9211     {
9212       /* Add some entries to the .dynamic section.  We fill in the
9213          values later, in _bfd_mips_elf_finish_dynamic_sections, but we
9214          must add the entries now so that we get the correct size for
9215          the .dynamic section.  */
9216
9217       /* SGI object has the equivalence of DT_DEBUG in the
9218          DT_MIPS_RLD_MAP entry.  This must come first because glibc
9219          only fills in DT_MIPS_RLD_MAP (not DT_DEBUG) and some tools
9220          may only look at the first one they see.  */
9221       if (!info->shared
9222           && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_MAP, 0))
9223         return FALSE;
9224
9225       /* The DT_DEBUG entry may be filled in by the dynamic linker and
9226          used by the debugger.  */
9227       if (info->executable
9228           && !SGI_COMPAT (output_bfd)
9229           && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_DEBUG, 0))
9230         return FALSE;
9231
9232       if (reltext && (SGI_COMPAT (output_bfd) || htab->is_vxworks))
9233         info->flags |= DF_TEXTREL;
9234
9235       if ((info->flags & DF_TEXTREL) != 0)
9236         {
9237           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_TEXTREL, 0))
9238             return FALSE;
9239
9240           /* Clear the DF_TEXTREL flag.  It will be set again if we
9241              write out an actual text relocation; we may not, because
9242              at this point we do not know whether e.g. any .eh_frame
9243              absolute relocations have been converted to PC-relative.  */
9244           info->flags &= ~DF_TEXTREL;
9245         }
9246
9247       if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTGOT, 0))
9248         return FALSE;
9249
9250       sreldyn = mips_elf_rel_dyn_section (info, FALSE);
9251       if (htab->is_vxworks)
9252         {
9253           /* VxWorks uses .rela.dyn instead of .rel.dyn.  It does not
9254              use any of the DT_MIPS_* tags.  */
9255           if (sreldyn && sreldyn->size > 0)
9256             {
9257               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELA, 0))
9258                 return FALSE;
9259
9260               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELASZ, 0))
9261                 return FALSE;
9262
9263               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELAENT, 0))
9264                 return FALSE;
9265             }
9266         }
9267       else
9268         {
9269           if (sreldyn && sreldyn->size > 0)
9270             {
9271               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_REL, 0))
9272                 return FALSE;
9273
9274               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELSZ, 0))
9275                 return FALSE;
9276
9277               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELENT, 0))
9278                 return FALSE;
9279             }
9280
9281           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_VERSION, 0))
9282             return FALSE;
9283
9284           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_FLAGS, 0))
9285             return FALSE;
9286
9287           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_BASE_ADDRESS, 0))
9288             return FALSE;
9289
9290           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_LOCAL_GOTNO, 0))
9291             return FALSE;
9292
9293           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_SYMTABNO, 0))
9294             return FALSE;
9295
9296           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_UNREFEXTNO, 0))
9297             return FALSE;
9298
9299           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_GOTSYM, 0))
9300             return FALSE;
9301
9302           if (IRIX_COMPAT (dynobj) == ict_irix5
9303               && ! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_HIPAGENO, 0))
9304             return FALSE;
9305
9306           if (IRIX_COMPAT (dynobj) == ict_irix6
9307               && (bfd_get_section_by_name
9308                   (output_bfd, MIPS_ELF_OPTIONS_SECTION_NAME (dynobj)))
9309               && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_OPTIONS, 0))
9310             return FALSE;
9311         }
9312       if (htab->splt->size > 0)
9313         {
9314           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTREL, 0))
9315             return FALSE;
9316
9317           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_JMPREL, 0))
9318             return FALSE;
9319
9320           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTRELSZ, 0))
9321             return FALSE;
9322
9323           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_PLTGOT, 0))
9324             return FALSE;
9325         }
9326       if (htab->is_vxworks
9327           && !elf_vxworks_add_dynamic_entries (output_bfd, info))
9328         return FALSE;
9329     }
9330
9331   return TRUE;
9332 }
9333 \f
9334 /* REL is a relocation in INPUT_BFD that is being copied to OUTPUT_BFD.
9335    Adjust its R_ADDEND field so that it is correct for the output file.
9336    LOCAL_SYMS and LOCAL_SECTIONS are arrays of INPUT_BFD's local symbols
9337    and sections respectively; both use symbol indexes.  */
9338
9339 static void
9340 mips_elf_adjust_addend (bfd *output_bfd, struct bfd_link_info *info,
9341                         bfd *input_bfd, Elf_Internal_Sym *local_syms,
9342                         asection **local_sections, Elf_Internal_Rela *rel)
9343 {
9344   unsigned int r_type, r_symndx;
9345   Elf_Internal_Sym *sym;
9346   asection *sec;
9347
9348   if (mips_elf_local_relocation_p (input_bfd, rel, local_sections))
9349     {
9350       r_type = ELF_R_TYPE (output_bfd, rel->r_info);
9351       if (gprel16_reloc_p (r_type)
9352           || r_type == R_MIPS_GPREL32
9353           || literal_reloc_p (r_type))
9354         {
9355           rel->r_addend += _bfd_get_gp_value (input_bfd);
9356           rel->r_addend -= _bfd_get_gp_value (output_bfd);
9357         }
9358
9359       r_symndx = ELF_R_SYM (output_bfd, rel->r_info);
9360       sym = local_syms + r_symndx;
9361
9362       /* Adjust REL's addend to account for section merging.  */
9363       if (!info->relocatable)
9364         {
9365           sec = local_sections[r_symndx];
9366           _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
9367         }
9368
9369       /* This would normally be done by the rela_normal code in elflink.c.  */
9370       if (ELF_ST_TYPE (sym->st_info) == STT_SECTION)
9371         rel->r_addend += local_sections[r_symndx]->output_offset;
9372     }
9373 }
9374
9375 /* Handle relocations against symbols from removed linkonce sections,
9376    or sections discarded by a linker script.  We use this wrapper around
9377    RELOC_AGAINST_DISCARDED_SECTION to handle triplets of compound relocs
9378    on 64-bit ELF targets.  In this case for any relocation handled, which
9379    always be the first in a triplet, the remaining two have to be processed
9380    together with the first, even if they are R_MIPS_NONE.  It is the symbol
9381    index referred by the first reloc that applies to all the three and the
9382    remaining two never refer to an object symbol.  And it is the final
9383    relocation (the last non-null one) that determines the output field of
9384    the whole relocation so retrieve the corresponding howto structure for
9385    the relocatable field to be cleared by RELOC_AGAINST_DISCARDED_SECTION.
9386
9387    Note that RELOC_AGAINST_DISCARDED_SECTION is a macro that uses "continue"
9388    and therefore requires to be pasted in a loop.  It also defines a block
9389    and does not protect any of its arguments, hence the extra brackets.  */
9390
9391 static void
9392 mips_reloc_against_discarded_section (bfd *output_bfd,
9393                                       struct bfd_link_info *info,
9394                                       bfd *input_bfd, asection *input_section,
9395                                       Elf_Internal_Rela **rel,
9396                                       const Elf_Internal_Rela **relend,
9397                                       bfd_boolean rel_reloc,
9398                                       reloc_howto_type *howto,
9399                                       bfd_byte *contents)
9400 {
9401   const struct elf_backend_data *bed = get_elf_backend_data (output_bfd);
9402   int count = bed->s->int_rels_per_ext_rel;
9403   unsigned int r_type;
9404   int i;
9405
9406   for (i = count - 1; i > 0; i--)
9407     {
9408       r_type = ELF_R_TYPE (output_bfd, (*rel)[i].r_info);
9409       if (r_type != R_MIPS_NONE)
9410         {
9411           howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, r_type, !rel_reloc);
9412           break;
9413         }
9414     }
9415   do
9416     {
9417        RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
9418                                         (*rel), count, (*relend),
9419                                         howto, i, contents);
9420     }
9421   while (0);
9422 }
9423
9424 /* Relocate a MIPS ELF section.  */
9425
9426 bfd_boolean
9427 _bfd_mips_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
9428                                 bfd *input_bfd, asection *input_section,
9429                                 bfd_byte *contents, Elf_Internal_Rela *relocs,
9430                                 Elf_Internal_Sym *local_syms,
9431                                 asection **local_sections)
9432 {
9433   Elf_Internal_Rela *rel;
9434   const Elf_Internal_Rela *relend;
9435   bfd_vma addend = 0;
9436   bfd_boolean use_saved_addend_p = FALSE;
9437   const struct elf_backend_data *bed;
9438
9439   bed = get_elf_backend_data (output_bfd);
9440   relend = relocs + input_section->reloc_count * bed->s->int_rels_per_ext_rel;
9441   for (rel = relocs; rel < relend; ++rel)
9442     {
9443       const char *name;
9444       bfd_vma value = 0;
9445       reloc_howto_type *howto;
9446       bfd_boolean cross_mode_jump_p;
9447       /* TRUE if the relocation is a RELA relocation, rather than a
9448          REL relocation.  */
9449       bfd_boolean rela_relocation_p = TRUE;
9450       unsigned int r_type = ELF_R_TYPE (output_bfd, rel->r_info);
9451       const char *msg;
9452       unsigned long r_symndx;
9453       asection *sec;
9454       Elf_Internal_Shdr *symtab_hdr;
9455       struct elf_link_hash_entry *h;
9456       bfd_boolean rel_reloc;
9457
9458       rel_reloc = (NEWABI_P (input_bfd)
9459                    && mips_elf_rel_relocation_p (input_bfd, input_section,
9460                                                  relocs, rel));
9461       /* Find the relocation howto for this relocation.  */
9462       howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, r_type, !rel_reloc);
9463
9464       r_symndx = ELF_R_SYM (input_bfd, rel->r_info);
9465       symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
9466       if (mips_elf_local_relocation_p (input_bfd, rel, local_sections))
9467         {
9468           sec = local_sections[r_symndx];
9469           h = NULL;
9470         }
9471       else
9472         {
9473           unsigned long extsymoff;
9474
9475           extsymoff = 0;
9476           if (!elf_bad_symtab (input_bfd))
9477             extsymoff = symtab_hdr->sh_info;
9478           h = elf_sym_hashes (input_bfd) [r_symndx - extsymoff];
9479           while (h->root.type == bfd_link_hash_indirect
9480                  || h->root.type == bfd_link_hash_warning)
9481             h = (struct elf_link_hash_entry *) h->root.u.i.link;
9482
9483           sec = NULL;
9484           if (h->root.type == bfd_link_hash_defined
9485               || h->root.type == bfd_link_hash_defweak)
9486             sec = h->root.u.def.section;
9487         }
9488
9489       if (sec != NULL && discarded_section (sec))
9490         {
9491           mips_reloc_against_discarded_section (output_bfd, info, input_bfd,
9492                                                 input_section, &rel, &relend,
9493                                                 rel_reloc, howto, contents);
9494           continue;
9495         }
9496
9497       if (r_type == R_MIPS_64 && ! NEWABI_P (input_bfd))
9498         {
9499           /* Some 32-bit code uses R_MIPS_64.  In particular, people use
9500              64-bit code, but make sure all their addresses are in the
9501              lowermost or uppermost 32-bit section of the 64-bit address
9502              space.  Thus, when they use an R_MIPS_64 they mean what is
9503              usually meant by R_MIPS_32, with the exception that the
9504              stored value is sign-extended to 64 bits.  */
9505           howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, R_MIPS_32, FALSE);
9506
9507           /* On big-endian systems, we need to lie about the position
9508              of the reloc.  */
9509           if (bfd_big_endian (input_bfd))
9510             rel->r_offset += 4;
9511         }
9512
9513       if (!use_saved_addend_p)
9514         {
9515           /* If these relocations were originally of the REL variety,
9516              we must pull the addend out of the field that will be
9517              relocated.  Otherwise, we simply use the contents of the
9518              RELA relocation.  */
9519           if (mips_elf_rel_relocation_p (input_bfd, input_section,
9520                                          relocs, rel))
9521             {
9522               rela_relocation_p = FALSE;
9523               addend = mips_elf_read_rel_addend (input_bfd, rel,
9524                                                  howto, contents);
9525               if (hi16_reloc_p (r_type)
9526                   || (got16_reloc_p (r_type)
9527                       && mips_elf_local_relocation_p (input_bfd, rel,
9528                                                       local_sections)))
9529                 {
9530                   if (!mips_elf_add_lo16_rel_addend (input_bfd, rel, relend,
9531                                                      contents, &addend))
9532                     {
9533                       if (h)
9534                         name = h->root.root.string;
9535                       else
9536                         name = bfd_elf_sym_name (input_bfd, symtab_hdr,
9537                                                  local_syms + r_symndx,
9538                                                  sec);
9539                       (*_bfd_error_handler)
9540                         (_("%B: Can't find matching LO16 reloc against `%s' for %s at 0x%lx in section `%A'"),
9541                          input_bfd, input_section, name, howto->name,
9542                          rel->r_offset);
9543                     }
9544                 }
9545               else
9546                 addend <<= howto->rightshift;
9547             }
9548           else
9549             addend = rel->r_addend;
9550           mips_elf_adjust_addend (output_bfd, info, input_bfd,
9551                                   local_syms, local_sections, rel);
9552         }
9553
9554       if (info->relocatable)
9555         {
9556           if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd)
9557               && bfd_big_endian (input_bfd))
9558             rel->r_offset -= 4;
9559
9560           if (!rela_relocation_p && rel->r_addend)
9561             {
9562               addend += rel->r_addend;
9563               if (hi16_reloc_p (r_type) || got16_reloc_p (r_type))
9564                 addend = mips_elf_high (addend);
9565               else if (r_type == R_MIPS_HIGHER)
9566                 addend = mips_elf_higher (addend);
9567               else if (r_type == R_MIPS_HIGHEST)
9568                 addend = mips_elf_highest (addend);
9569               else
9570                 addend >>= howto->rightshift;
9571
9572               /* We use the source mask, rather than the destination
9573                  mask because the place to which we are writing will be
9574                  source of the addend in the final link.  */
9575               addend &= howto->src_mask;
9576
9577               if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd))
9578                 /* See the comment above about using R_MIPS_64 in the 32-bit
9579                    ABI.  Here, we need to update the addend.  It would be
9580                    possible to get away with just using the R_MIPS_32 reloc
9581                    but for endianness.  */
9582                 {
9583                   bfd_vma sign_bits;
9584                   bfd_vma low_bits;
9585                   bfd_vma high_bits;
9586
9587                   if (addend & ((bfd_vma) 1 << 31))
9588 #ifdef BFD64
9589                     sign_bits = ((bfd_vma) 1 << 32) - 1;
9590 #else
9591                     sign_bits = -1;
9592 #endif
9593                   else
9594                     sign_bits = 0;
9595
9596                   /* If we don't know that we have a 64-bit type,
9597                      do two separate stores.  */
9598                   if (bfd_big_endian (input_bfd))
9599                     {
9600                       /* Store the sign-bits (which are most significant)
9601                          first.  */
9602                       low_bits = sign_bits;
9603                       high_bits = addend;
9604                     }
9605                   else
9606                     {
9607                       low_bits = addend;
9608                       high_bits = sign_bits;
9609                     }
9610                   bfd_put_32 (input_bfd, low_bits,
9611                               contents + rel->r_offset);
9612                   bfd_put_32 (input_bfd, high_bits,
9613                               contents + rel->r_offset + 4);
9614                   continue;
9615                 }
9616
9617               if (! mips_elf_perform_relocation (info, howto, rel, addend,
9618                                                  input_bfd, input_section,
9619                                                  contents, FALSE))
9620                 return FALSE;
9621             }
9622
9623           /* Go on to the next relocation.  */
9624           continue;
9625         }
9626
9627       /* In the N32 and 64-bit ABIs there may be multiple consecutive
9628          relocations for the same offset.  In that case we are
9629          supposed to treat the output of each relocation as the addend
9630          for the next.  */
9631       if (rel + 1 < relend
9632           && rel->r_offset == rel[1].r_offset
9633           && ELF_R_TYPE (input_bfd, rel[1].r_info) != R_MIPS_NONE)
9634         use_saved_addend_p = TRUE;
9635       else
9636         use_saved_addend_p = FALSE;
9637
9638       /* Figure out what value we are supposed to relocate.  */
9639       switch (mips_elf_calculate_relocation (output_bfd, input_bfd,
9640                                              input_section, info, rel,
9641                                              addend, howto, local_syms,
9642                                              local_sections, &value,
9643                                              &name, &cross_mode_jump_p,
9644                                              use_saved_addend_p))
9645         {
9646         case bfd_reloc_continue:
9647           /* There's nothing to do.  */
9648           continue;
9649
9650         case bfd_reloc_undefined:
9651           /* mips_elf_calculate_relocation already called the
9652              undefined_symbol callback.  There's no real point in
9653              trying to perform the relocation at this point, so we
9654              just skip ahead to the next relocation.  */
9655           continue;
9656
9657         case bfd_reloc_notsupported:
9658           msg = _("internal error: unsupported relocation error");
9659           info->callbacks->warning
9660             (info, msg, name, input_bfd, input_section, rel->r_offset);
9661           return FALSE;
9662
9663         case bfd_reloc_overflow:
9664           if (use_saved_addend_p)
9665             /* Ignore overflow until we reach the last relocation for
9666                a given location.  */
9667             ;
9668           else
9669             {
9670               struct mips_elf_link_hash_table *htab;
9671
9672               htab = mips_elf_hash_table (info);
9673               BFD_ASSERT (htab != NULL);
9674               BFD_ASSERT (name != NULL);
9675               if (!htab->small_data_overflow_reported
9676                   && (gprel16_reloc_p (howto->type)
9677                       || literal_reloc_p (howto->type)))
9678                 {
9679                   msg = _("small-data section exceeds 64KB;"
9680                           " lower small-data size limit (see option -G)");
9681
9682                   htab->small_data_overflow_reported = TRUE;
9683                   (*info->callbacks->einfo) ("%P: %s\n", msg);
9684                 }
9685               if (! ((*info->callbacks->reloc_overflow)
9686                      (info, NULL, name, howto->name, (bfd_vma) 0,
9687                       input_bfd, input_section, rel->r_offset)))
9688                 return FALSE;
9689             }
9690           break;
9691
9692         case bfd_reloc_ok:
9693           break;
9694
9695         case bfd_reloc_outofrange:
9696           if (jal_reloc_p (howto->type))
9697             {
9698               msg = _("JALX to a non-word-aligned address");
9699               info->callbacks->warning
9700                 (info, msg, name, input_bfd, input_section, rel->r_offset);
9701               return FALSE;
9702             }
9703           /* Fall through.  */
9704
9705         default:
9706           abort ();
9707           break;
9708         }
9709
9710       /* If we've got another relocation for the address, keep going
9711          until we reach the last one.  */
9712       if (use_saved_addend_p)
9713         {
9714           addend = value;
9715           continue;
9716         }
9717
9718       if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd))
9719         /* See the comment above about using R_MIPS_64 in the 32-bit
9720            ABI.  Until now, we've been using the HOWTO for R_MIPS_32;
9721            that calculated the right value.  Now, however, we
9722            sign-extend the 32-bit result to 64-bits, and store it as a
9723            64-bit value.  We are especially generous here in that we
9724            go to extreme lengths to support this usage on systems with
9725            only a 32-bit VMA.  */
9726         {
9727           bfd_vma sign_bits;
9728           bfd_vma low_bits;
9729           bfd_vma high_bits;
9730
9731           if (value & ((bfd_vma) 1 << 31))
9732 #ifdef BFD64
9733             sign_bits = ((bfd_vma) 1 << 32) - 1;
9734 #else
9735             sign_bits = -1;
9736 #endif
9737           else
9738             sign_bits = 0;
9739
9740           /* If we don't know that we have a 64-bit type,
9741              do two separate stores.  */
9742           if (bfd_big_endian (input_bfd))
9743             {
9744               /* Undo what we did above.  */
9745               rel->r_offset -= 4;
9746               /* Store the sign-bits (which are most significant)
9747                  first.  */
9748               low_bits = sign_bits;
9749               high_bits = value;
9750             }
9751           else
9752             {
9753               low_bits = value;
9754               high_bits = sign_bits;
9755             }
9756           bfd_put_32 (input_bfd, low_bits,
9757                       contents + rel->r_offset);
9758           bfd_put_32 (input_bfd, high_bits,
9759                       contents + rel->r_offset + 4);
9760           continue;
9761         }
9762
9763       /* Actually perform the relocation.  */
9764       if (! mips_elf_perform_relocation (info, howto, rel, value,
9765                                          input_bfd, input_section,
9766                                          contents, cross_mode_jump_p))
9767         return FALSE;
9768     }
9769
9770   return TRUE;
9771 }
9772 \f
9773 /* A function that iterates over each entry in la25_stubs and fills
9774    in the code for each one.  DATA points to a mips_htab_traverse_info.  */
9775
9776 static int
9777 mips_elf_create_la25_stub (void **slot, void *data)
9778 {
9779   struct mips_htab_traverse_info *hti;
9780   struct mips_elf_link_hash_table *htab;
9781   struct mips_elf_la25_stub *stub;
9782   asection *s;
9783   bfd_byte *loc;
9784   bfd_vma offset, target, target_high, target_low;
9785
9786   stub = (struct mips_elf_la25_stub *) *slot;
9787   hti = (struct mips_htab_traverse_info *) data;
9788   htab = mips_elf_hash_table (hti->info);
9789   BFD_ASSERT (htab != NULL);
9790
9791   /* Create the section contents, if we haven't already.  */
9792   s = stub->stub_section;
9793   loc = s->contents;
9794   if (loc == NULL)
9795     {
9796       loc = bfd_malloc (s->size);
9797       if (loc == NULL)
9798         {
9799           hti->error = TRUE;
9800           return FALSE;
9801         }
9802       s->contents = loc;
9803     }
9804
9805   /* Work out where in the section this stub should go.  */
9806   offset = stub->offset;
9807
9808   /* Work out the target address.  */
9809   target = mips_elf_get_la25_target (stub, &s);
9810   target += s->output_section->vma + s->output_offset;
9811
9812   target_high = ((target + 0x8000) >> 16) & 0xffff;
9813   target_low = (target & 0xffff);
9814
9815   if (stub->stub_section != htab->strampoline)
9816     {
9817       /* This is a simple LUI/ADDIU stub.  Zero out the beginning
9818          of the section and write the two instructions at the end.  */
9819       memset (loc, 0, offset);
9820       loc += offset;
9821       if (ELF_ST_IS_MICROMIPS (stub->h->root.other))
9822         {
9823           bfd_put_micromips_32 (hti->output_bfd,
9824                                 LA25_LUI_MICROMIPS (target_high),
9825                                 loc);
9826           bfd_put_micromips_32 (hti->output_bfd,
9827                                 LA25_ADDIU_MICROMIPS (target_low),
9828                                 loc + 4);
9829         }
9830       else
9831         {
9832           bfd_put_32 (hti->output_bfd, LA25_LUI (target_high), loc);
9833           bfd_put_32 (hti->output_bfd, LA25_ADDIU (target_low), loc + 4);
9834         }
9835     }
9836   else
9837     {
9838       /* This is trampoline.  */
9839       loc += offset;
9840       if (ELF_ST_IS_MICROMIPS (stub->h->root.other))
9841         {
9842           bfd_put_micromips_32 (hti->output_bfd,
9843                                 LA25_LUI_MICROMIPS (target_high), loc);
9844           bfd_put_micromips_32 (hti->output_bfd,
9845                                 LA25_J_MICROMIPS (target), loc + 4);
9846           bfd_put_micromips_32 (hti->output_bfd,
9847                                 LA25_ADDIU_MICROMIPS (target_low), loc + 8);
9848           bfd_put_32 (hti->output_bfd, 0, loc + 12);
9849         }
9850       else
9851         {
9852           bfd_put_32 (hti->output_bfd, LA25_LUI (target_high), loc);
9853           bfd_put_32 (hti->output_bfd, LA25_J (target), loc + 4);
9854           bfd_put_32 (hti->output_bfd, LA25_ADDIU (target_low), loc + 8);
9855           bfd_put_32 (hti->output_bfd, 0, loc + 12);
9856         }
9857     }
9858   return TRUE;
9859 }
9860
9861 /* If NAME is one of the special IRIX6 symbols defined by the linker,
9862    adjust it appropriately now.  */
9863
9864 static void
9865 mips_elf_irix6_finish_dynamic_symbol (bfd *abfd ATTRIBUTE_UNUSED,
9866                                       const char *name, Elf_Internal_Sym *sym)
9867 {
9868   /* The linker script takes care of providing names and values for
9869      these, but we must place them into the right sections.  */
9870   static const char* const text_section_symbols[] = {
9871     "_ftext",
9872     "_etext",
9873     "__dso_displacement",
9874     "__elf_header",
9875     "__program_header_table",
9876     NULL
9877   };
9878
9879   static const char* const data_section_symbols[] = {
9880     "_fdata",
9881     "_edata",
9882     "_end",
9883     "_fbss",
9884     NULL
9885   };
9886
9887   const char* const *p;
9888   int i;
9889
9890   for (i = 0; i < 2; ++i)
9891     for (p = (i == 0) ? text_section_symbols : data_section_symbols;
9892          *p;
9893          ++p)
9894       if (strcmp (*p, name) == 0)
9895         {
9896           /* All of these symbols are given type STT_SECTION by the
9897              IRIX6 linker.  */
9898           sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
9899           sym->st_other = STO_PROTECTED;
9900
9901           /* The IRIX linker puts these symbols in special sections.  */
9902           if (i == 0)
9903             sym->st_shndx = SHN_MIPS_TEXT;
9904           else
9905             sym->st_shndx = SHN_MIPS_DATA;
9906
9907           break;
9908         }
9909 }
9910
9911 /* Finish up dynamic symbol handling.  We set the contents of various
9912    dynamic sections here.  */
9913
9914 bfd_boolean
9915 _bfd_mips_elf_finish_dynamic_symbol (bfd *output_bfd,
9916                                      struct bfd_link_info *info,
9917                                      struct elf_link_hash_entry *h,
9918                                      Elf_Internal_Sym *sym)
9919 {
9920   bfd *dynobj;
9921   asection *sgot;
9922   struct mips_got_info *g, *gg;
9923   const char *name;
9924   int idx;
9925   struct mips_elf_link_hash_table *htab;
9926   struct mips_elf_link_hash_entry *hmips;
9927
9928   htab = mips_elf_hash_table (info);
9929   BFD_ASSERT (htab != NULL);
9930   dynobj = elf_hash_table (info)->dynobj;
9931   hmips = (struct mips_elf_link_hash_entry *) h;
9932
9933   BFD_ASSERT (!htab->is_vxworks);
9934
9935   if (h->plt.offset != MINUS_ONE && hmips->no_fn_stub)
9936     {
9937       /* We've decided to create a PLT entry for this symbol.  */
9938       bfd_byte *loc;
9939       bfd_vma header_address, plt_index, got_address;
9940       bfd_vma got_address_high, got_address_low, load;
9941       const bfd_vma *plt_entry;
9942
9943       BFD_ASSERT (htab->use_plts_and_copy_relocs);
9944       BFD_ASSERT (h->dynindx != -1);
9945       BFD_ASSERT (htab->splt != NULL);
9946       BFD_ASSERT (h->plt.offset <= htab->splt->size);
9947       BFD_ASSERT (!h->def_regular);
9948
9949       /* Calculate the address of the PLT header.  */
9950       header_address = (htab->splt->output_section->vma
9951                         + htab->splt->output_offset);
9952
9953       /* Calculate the index of the entry.  */
9954       plt_index = ((h->plt.offset - htab->plt_header_size)
9955                    / htab->plt_entry_size);
9956
9957       /* Calculate the address of the .got.plt entry.  */
9958       got_address = (htab->sgotplt->output_section->vma
9959                      + htab->sgotplt->output_offset
9960                      + (2 + plt_index) * MIPS_ELF_GOT_SIZE (dynobj));
9961       got_address_high = ((got_address + 0x8000) >> 16) & 0xffff;
9962       got_address_low = got_address & 0xffff;
9963
9964       /* Initially point the .got.plt entry at the PLT header.  */
9965       loc = (htab->sgotplt->contents
9966              + (2 + plt_index) * MIPS_ELF_GOT_SIZE (dynobj));
9967       if (ABI_64_P (output_bfd))
9968         bfd_put_64 (output_bfd, header_address, loc);
9969       else
9970         bfd_put_32 (output_bfd, header_address, loc);
9971
9972       /* Find out where the .plt entry should go.  */
9973       loc = htab->splt->contents + h->plt.offset;
9974
9975       /* Pick the load opcode.  */
9976       load = MIPS_ELF_LOAD_WORD (output_bfd);
9977
9978       /* Fill in the PLT entry itself.  */
9979       plt_entry = mips_exec_plt_entry;
9980       bfd_put_32 (output_bfd, plt_entry[0] | got_address_high, loc);
9981       bfd_put_32 (output_bfd, plt_entry[1] | got_address_low | load, loc + 4);
9982
9983       if (! LOAD_INTERLOCKS_P (output_bfd))
9984         {
9985           bfd_put_32 (output_bfd, plt_entry[2] | got_address_low, loc + 8);
9986           bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
9987         }
9988       else
9989         {
9990           bfd_put_32 (output_bfd, plt_entry[3], loc + 8);
9991           bfd_put_32 (output_bfd, plt_entry[2] | got_address_low, loc + 12);
9992         }
9993
9994       /* Emit an R_MIPS_JUMP_SLOT relocation against the .got.plt entry.  */
9995       mips_elf_output_dynamic_relocation (output_bfd, htab->srelplt,
9996                                           plt_index, h->dynindx,
9997                                           R_MIPS_JUMP_SLOT, got_address);
9998
9999       /* We distinguish between PLT entries and lazy-binding stubs by
10000          giving the former an st_other value of STO_MIPS_PLT.  Set the
10001          flag and leave the value if there are any relocations in the
10002          binary where pointer equality matters.  */
10003       sym->st_shndx = SHN_UNDEF;
10004       if (h->pointer_equality_needed)
10005         sym->st_other = STO_MIPS_PLT;
10006       else
10007         sym->st_value = 0;
10008     }
10009   else if (h->plt.offset != MINUS_ONE)
10010     {
10011       /* We've decided to create a lazy-binding stub.  */
10012       bfd_byte stub[MIPS_FUNCTION_STUB_BIG_SIZE];
10013
10014       /* This symbol has a stub.  Set it up.  */
10015
10016       BFD_ASSERT (h->dynindx != -1);
10017
10018       BFD_ASSERT ((htab->function_stub_size == MIPS_FUNCTION_STUB_BIG_SIZE)
10019                   || (h->dynindx <= 0xffff));
10020
10021       /* Values up to 2^31 - 1 are allowed.  Larger values would cause
10022          sign extension at runtime in the stub, resulting in a negative
10023          index value.  */
10024       if (h->dynindx & ~0x7fffffff)
10025         return FALSE;
10026
10027       /* Fill the stub.  */
10028       idx = 0;
10029       bfd_put_32 (output_bfd, STUB_LW (output_bfd), stub + idx);
10030       idx += 4;
10031       bfd_put_32 (output_bfd, STUB_MOVE (output_bfd), stub + idx);
10032       idx += 4;
10033       if (htab->function_stub_size == MIPS_FUNCTION_STUB_BIG_SIZE)
10034         {
10035           bfd_put_32 (output_bfd, STUB_LUI ((h->dynindx >> 16) & 0x7fff),
10036                       stub + idx);
10037           idx += 4;
10038         }
10039       bfd_put_32 (output_bfd, STUB_JALR, stub + idx);
10040       idx += 4;
10041
10042       /* If a large stub is not required and sign extension is not a
10043          problem, then use legacy code in the stub.  */
10044       if (htab->function_stub_size == MIPS_FUNCTION_STUB_BIG_SIZE)
10045         bfd_put_32 (output_bfd, STUB_ORI (h->dynindx & 0xffff), stub + idx);
10046       else if (h->dynindx & ~0x7fff)
10047         bfd_put_32 (output_bfd, STUB_LI16U (h->dynindx & 0xffff), stub + idx);
10048       else
10049         bfd_put_32 (output_bfd, STUB_LI16S (output_bfd, h->dynindx),
10050                     stub + idx);
10051
10052       BFD_ASSERT (h->plt.offset <= htab->sstubs->size);
10053       memcpy (htab->sstubs->contents + h->plt.offset,
10054               stub, htab->function_stub_size);
10055
10056       /* Mark the symbol as undefined.  plt.offset != -1 occurs
10057          only for the referenced symbol.  */
10058       sym->st_shndx = SHN_UNDEF;
10059
10060       /* The run-time linker uses the st_value field of the symbol
10061          to reset the global offset table entry for this external
10062          to its stub address when unlinking a shared object.  */
10063       sym->st_value = (htab->sstubs->output_section->vma
10064                        + htab->sstubs->output_offset
10065                        + h->plt.offset);
10066     }
10067
10068   /* If we have a MIPS16 function with a stub, the dynamic symbol must
10069      refer to the stub, since only the stub uses the standard calling
10070      conventions.  */
10071   if (h->dynindx != -1 && hmips->fn_stub != NULL)
10072     {
10073       BFD_ASSERT (hmips->need_fn_stub);
10074       sym->st_value = (hmips->fn_stub->output_section->vma
10075                        + hmips->fn_stub->output_offset);
10076       sym->st_size = hmips->fn_stub->size;
10077       sym->st_other = ELF_ST_VISIBILITY (sym->st_other);
10078     }
10079
10080   BFD_ASSERT (h->dynindx != -1
10081               || h->forced_local);
10082
10083   sgot = htab->sgot;
10084   g = htab->got_info;
10085   BFD_ASSERT (g != NULL);
10086
10087   /* Run through the global symbol table, creating GOT entries for all
10088      the symbols that need them.  */
10089   if (hmips->global_got_area != GGA_NONE)
10090     {
10091       bfd_vma offset;
10092       bfd_vma value;
10093
10094       value = sym->st_value;
10095       offset = mips_elf_global_got_index (dynobj, output_bfd, h,
10096                                           R_MIPS_GOT16, info);
10097       MIPS_ELF_PUT_WORD (output_bfd, value, sgot->contents + offset);
10098     }
10099
10100   if (hmips->global_got_area != GGA_NONE && g->next && h->type != STT_TLS)
10101     {
10102       struct mips_got_entry e, *p;
10103       bfd_vma entry;
10104       bfd_vma offset;
10105
10106       gg = g;
10107
10108       e.abfd = output_bfd;
10109       e.symndx = -1;
10110       e.d.h = hmips;
10111       e.tls_type = 0;
10112
10113       for (g = g->next; g->next != gg; g = g->next)
10114         {
10115           if (g->got_entries
10116               && (p = (struct mips_got_entry *) htab_find (g->got_entries,
10117                                                            &e)))
10118             {
10119               offset = p->gotidx;
10120               if (info->shared
10121                   || (elf_hash_table (info)->dynamic_sections_created
10122                       && p->d.h != NULL
10123                       && p->d.h->root.def_dynamic
10124                       && !p->d.h->root.def_regular))
10125                 {
10126                   /* Create an R_MIPS_REL32 relocation for this entry.  Due to
10127                      the various compatibility problems, it's easier to mock
10128                      up an R_MIPS_32 or R_MIPS_64 relocation and leave
10129                      mips_elf_create_dynamic_relocation to calculate the
10130                      appropriate addend.  */
10131                   Elf_Internal_Rela rel[3];
10132
10133                   memset (rel, 0, sizeof (rel));
10134                   if (ABI_64_P (output_bfd))
10135                     rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_64);
10136                   else
10137                     rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_32);
10138                   rel[0].r_offset = rel[1].r_offset = rel[2].r_offset = offset;
10139
10140                   entry = 0;
10141                   if (! (mips_elf_create_dynamic_relocation
10142                          (output_bfd, info, rel,
10143                           e.d.h, NULL, sym->st_value, &entry, sgot)))
10144                     return FALSE;
10145                 }
10146               else
10147                 entry = sym->st_value;
10148               MIPS_ELF_PUT_WORD (output_bfd, entry, sgot->contents + offset);
10149             }
10150         }
10151     }
10152
10153   /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute.  */
10154   name = h->root.root.string;
10155   if (h == elf_hash_table (info)->hdynamic
10156       || h == elf_hash_table (info)->hgot)
10157     sym->st_shndx = SHN_ABS;
10158   else if (strcmp (name, "_DYNAMIC_LINK") == 0
10159            || strcmp (name, "_DYNAMIC_LINKING") == 0)
10160     {
10161       sym->st_shndx = SHN_ABS;
10162       sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10163       sym->st_value = 1;
10164     }
10165   else if (strcmp (name, "_gp_disp") == 0 && ! NEWABI_P (output_bfd))
10166     {
10167       sym->st_shndx = SHN_ABS;
10168       sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10169       sym->st_value = elf_gp (output_bfd);
10170     }
10171   else if (SGI_COMPAT (output_bfd))
10172     {
10173       if (strcmp (name, mips_elf_dynsym_rtproc_names[0]) == 0
10174           || strcmp (name, mips_elf_dynsym_rtproc_names[1]) == 0)
10175         {
10176           sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10177           sym->st_other = STO_PROTECTED;
10178           sym->st_value = 0;
10179           sym->st_shndx = SHN_MIPS_DATA;
10180         }
10181       else if (strcmp (name, mips_elf_dynsym_rtproc_names[2]) == 0)
10182         {
10183           sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10184           sym->st_other = STO_PROTECTED;
10185           sym->st_value = mips_elf_hash_table (info)->procedure_count;
10186           sym->st_shndx = SHN_ABS;
10187         }
10188       else if (sym->st_shndx != SHN_UNDEF && sym->st_shndx != SHN_ABS)
10189         {
10190           if (h->type == STT_FUNC)
10191             sym->st_shndx = SHN_MIPS_TEXT;
10192           else if (h->type == STT_OBJECT)
10193             sym->st_shndx = SHN_MIPS_DATA;
10194         }
10195     }
10196
10197   /* Emit a copy reloc, if needed.  */
10198   if (h->needs_copy)
10199     {
10200       asection *s;
10201       bfd_vma symval;
10202
10203       BFD_ASSERT (h->dynindx != -1);
10204       BFD_ASSERT (htab->use_plts_and_copy_relocs);
10205
10206       s = mips_elf_rel_dyn_section (info, FALSE);
10207       symval = (h->root.u.def.section->output_section->vma
10208                 + h->root.u.def.section->output_offset
10209                 + h->root.u.def.value);
10210       mips_elf_output_dynamic_relocation (output_bfd, s, s->reloc_count++,
10211                                           h->dynindx, R_MIPS_COPY, symval);
10212     }
10213
10214   /* Handle the IRIX6-specific symbols.  */
10215   if (IRIX_COMPAT (output_bfd) == ict_irix6)
10216     mips_elf_irix6_finish_dynamic_symbol (output_bfd, name, sym);
10217
10218   /* Keep dynamic MIPS16 symbols odd.  This allows the dynamic linker to
10219      treat MIPS16 symbols like any other.  */
10220   if (ELF_ST_IS_MIPS16 (sym->st_other))
10221     {
10222       BFD_ASSERT (sym->st_value & 1);
10223       sym->st_other -= STO_MIPS16;
10224     }
10225
10226   return TRUE;
10227 }
10228
10229 /* Likewise, for VxWorks.  */
10230
10231 bfd_boolean
10232 _bfd_mips_vxworks_finish_dynamic_symbol (bfd *output_bfd,
10233                                          struct bfd_link_info *info,
10234                                          struct elf_link_hash_entry *h,
10235                                          Elf_Internal_Sym *sym)
10236 {
10237   bfd *dynobj;
10238   asection *sgot;
10239   struct mips_got_info *g;
10240   struct mips_elf_link_hash_table *htab;
10241   struct mips_elf_link_hash_entry *hmips;
10242
10243   htab = mips_elf_hash_table (info);
10244   BFD_ASSERT (htab != NULL);
10245   dynobj = elf_hash_table (info)->dynobj;
10246   hmips = (struct mips_elf_link_hash_entry *) h;
10247
10248   if (h->plt.offset != (bfd_vma) -1)
10249     {
10250       bfd_byte *loc;
10251       bfd_vma plt_address, plt_index, got_address, got_offset, branch_offset;
10252       Elf_Internal_Rela rel;
10253       static const bfd_vma *plt_entry;
10254
10255       BFD_ASSERT (h->dynindx != -1);
10256       BFD_ASSERT (htab->splt != NULL);
10257       BFD_ASSERT (h->plt.offset <= htab->splt->size);
10258
10259       /* Calculate the address of the .plt entry.  */
10260       plt_address = (htab->splt->output_section->vma
10261                      + htab->splt->output_offset
10262                      + h->plt.offset);
10263
10264       /* Calculate the index of the entry.  */
10265       plt_index = ((h->plt.offset - htab->plt_header_size)
10266                    / htab->plt_entry_size);
10267
10268       /* Calculate the address of the .got.plt entry.  */
10269       got_address = (htab->sgotplt->output_section->vma
10270                      + htab->sgotplt->output_offset
10271                      + plt_index * 4);
10272
10273       /* Calculate the offset of the .got.plt entry from
10274          _GLOBAL_OFFSET_TABLE_.  */
10275       got_offset = mips_elf_gotplt_index (info, h);
10276
10277       /* Calculate the offset for the branch at the start of the PLT
10278          entry.  The branch jumps to the beginning of .plt.  */
10279       branch_offset = -(h->plt.offset / 4 + 1) & 0xffff;
10280
10281       /* Fill in the initial value of the .got.plt entry.  */
10282       bfd_put_32 (output_bfd, plt_address,
10283                   htab->sgotplt->contents + plt_index * 4);
10284
10285       /* Find out where the .plt entry should go.  */
10286       loc = htab->splt->contents + h->plt.offset;
10287
10288       if (info->shared)
10289         {
10290           plt_entry = mips_vxworks_shared_plt_entry;
10291           bfd_put_32 (output_bfd, plt_entry[0] | branch_offset, loc);
10292           bfd_put_32 (output_bfd, plt_entry[1] | plt_index, loc + 4);
10293         }
10294       else
10295         {
10296           bfd_vma got_address_high, got_address_low;
10297
10298           plt_entry = mips_vxworks_exec_plt_entry;
10299           got_address_high = ((got_address + 0x8000) >> 16) & 0xffff;
10300           got_address_low = got_address & 0xffff;
10301
10302           bfd_put_32 (output_bfd, plt_entry[0] | branch_offset, loc);
10303           bfd_put_32 (output_bfd, plt_entry[1] | plt_index, loc + 4);
10304           bfd_put_32 (output_bfd, plt_entry[2] | got_address_high, loc + 8);
10305           bfd_put_32 (output_bfd, plt_entry[3] | got_address_low, loc + 12);
10306           bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
10307           bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
10308           bfd_put_32 (output_bfd, plt_entry[6], loc + 24);
10309           bfd_put_32 (output_bfd, plt_entry[7], loc + 28);
10310
10311           loc = (htab->srelplt2->contents
10312                  + (plt_index * 3 + 2) * sizeof (Elf32_External_Rela));
10313
10314           /* Emit a relocation for the .got.plt entry.  */
10315           rel.r_offset = got_address;
10316           rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_MIPS_32);
10317           rel.r_addend = h->plt.offset;
10318           bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10319
10320           /* Emit a relocation for the lui of %hi(<.got.plt slot>).  */
10321           loc += sizeof (Elf32_External_Rela);
10322           rel.r_offset = plt_address + 8;
10323           rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
10324           rel.r_addend = got_offset;
10325           bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10326
10327           /* Emit a relocation for the addiu of %lo(<.got.plt slot>).  */
10328           loc += sizeof (Elf32_External_Rela);
10329           rel.r_offset += 4;
10330           rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
10331           bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10332         }
10333
10334       /* Emit an R_MIPS_JUMP_SLOT relocation against the .got.plt entry.  */
10335       loc = htab->srelplt->contents + plt_index * sizeof (Elf32_External_Rela);
10336       rel.r_offset = got_address;
10337       rel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_JUMP_SLOT);
10338       rel.r_addend = 0;
10339       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10340
10341       if (!h->def_regular)
10342         sym->st_shndx = SHN_UNDEF;
10343     }
10344
10345   BFD_ASSERT (h->dynindx != -1 || h->forced_local);
10346
10347   sgot = htab->sgot;
10348   g = htab->got_info;
10349   BFD_ASSERT (g != NULL);
10350
10351   /* See if this symbol has an entry in the GOT.  */
10352   if (hmips->global_got_area != GGA_NONE)
10353     {
10354       bfd_vma offset;
10355       Elf_Internal_Rela outrel;
10356       bfd_byte *loc;
10357       asection *s;
10358
10359       /* Install the symbol value in the GOT.   */
10360       offset = mips_elf_global_got_index (dynobj, output_bfd, h,
10361                                           R_MIPS_GOT16, info);
10362       MIPS_ELF_PUT_WORD (output_bfd, sym->st_value, sgot->contents + offset);
10363
10364       /* Add a dynamic relocation for it.  */
10365       s = mips_elf_rel_dyn_section (info, FALSE);
10366       loc = s->contents + (s->reloc_count++ * sizeof (Elf32_External_Rela));
10367       outrel.r_offset = (sgot->output_section->vma
10368                          + sgot->output_offset
10369                          + offset);
10370       outrel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_32);
10371       outrel.r_addend = 0;
10372       bfd_elf32_swap_reloca_out (dynobj, &outrel, loc);
10373     }
10374
10375   /* Emit a copy reloc, if needed.  */
10376   if (h->needs_copy)
10377     {
10378       Elf_Internal_Rela rel;
10379
10380       BFD_ASSERT (h->dynindx != -1);
10381
10382       rel.r_offset = (h->root.u.def.section->output_section->vma
10383                       + h->root.u.def.section->output_offset
10384                       + h->root.u.def.value);
10385       rel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_COPY);
10386       rel.r_addend = 0;
10387       bfd_elf32_swap_reloca_out (output_bfd, &rel,
10388                                  htab->srelbss->contents
10389                                  + (htab->srelbss->reloc_count
10390                                     * sizeof (Elf32_External_Rela)));
10391       ++htab->srelbss->reloc_count;
10392     }
10393
10394   /* If this is a mips16/microMIPS symbol, force the value to be even.  */
10395   if (ELF_ST_IS_COMPRESSED (sym->st_other))
10396     sym->st_value &= ~1;
10397
10398   return TRUE;
10399 }
10400
10401 /* Write out a plt0 entry to the beginning of .plt.  */
10402
10403 static void
10404 mips_finish_exec_plt (bfd *output_bfd, struct bfd_link_info *info)
10405 {
10406   bfd_byte *loc;
10407   bfd_vma gotplt_value, gotplt_value_high, gotplt_value_low;
10408   static const bfd_vma *plt_entry;
10409   struct mips_elf_link_hash_table *htab;
10410
10411   htab = mips_elf_hash_table (info);
10412   BFD_ASSERT (htab != NULL);
10413
10414   if (ABI_64_P (output_bfd))
10415     plt_entry = mips_n64_exec_plt0_entry;
10416   else if (ABI_N32_P (output_bfd))
10417     plt_entry = mips_n32_exec_plt0_entry;
10418   else
10419     plt_entry = mips_o32_exec_plt0_entry;
10420
10421   /* Calculate the value of .got.plt.  */
10422   gotplt_value = (htab->sgotplt->output_section->vma
10423                   + htab->sgotplt->output_offset);
10424   gotplt_value_high = ((gotplt_value + 0x8000) >> 16) & 0xffff;
10425   gotplt_value_low = gotplt_value & 0xffff;
10426
10427   /* The PLT sequence is not safe for N64 if .got.plt's address can
10428      not be loaded in two instructions.  */
10429   BFD_ASSERT ((gotplt_value & ~(bfd_vma) 0x7fffffff) == 0
10430               || ~(gotplt_value | 0x7fffffff) == 0);
10431
10432   /* Install the PLT header.  */
10433   loc = htab->splt->contents;
10434   bfd_put_32 (output_bfd, plt_entry[0] | gotplt_value_high, loc);
10435   bfd_put_32 (output_bfd, plt_entry[1] | gotplt_value_low, loc + 4);
10436   bfd_put_32 (output_bfd, plt_entry[2] | gotplt_value_low, loc + 8);
10437   bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
10438   bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
10439   bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
10440   bfd_put_32 (output_bfd, plt_entry[6], loc + 24);
10441   bfd_put_32 (output_bfd, plt_entry[7], loc + 28);
10442 }
10443
10444 /* Install the PLT header for a VxWorks executable and finalize the
10445    contents of .rela.plt.unloaded.  */
10446
10447 static void
10448 mips_vxworks_finish_exec_plt (bfd *output_bfd, struct bfd_link_info *info)
10449 {
10450   Elf_Internal_Rela rela;
10451   bfd_byte *loc;
10452   bfd_vma got_value, got_value_high, got_value_low, plt_address;
10453   static const bfd_vma *plt_entry;
10454   struct mips_elf_link_hash_table *htab;
10455
10456   htab = mips_elf_hash_table (info);
10457   BFD_ASSERT (htab != NULL);
10458
10459   plt_entry = mips_vxworks_exec_plt0_entry;
10460
10461   /* Calculate the value of _GLOBAL_OFFSET_TABLE_.  */
10462   got_value = (htab->root.hgot->root.u.def.section->output_section->vma
10463                + htab->root.hgot->root.u.def.section->output_offset
10464                + htab->root.hgot->root.u.def.value);
10465
10466   got_value_high = ((got_value + 0x8000) >> 16) & 0xffff;
10467   got_value_low = got_value & 0xffff;
10468
10469   /* Calculate the address of the PLT header.  */
10470   plt_address = htab->splt->output_section->vma + htab->splt->output_offset;
10471
10472   /* Install the PLT header.  */
10473   loc = htab->splt->contents;
10474   bfd_put_32 (output_bfd, plt_entry[0] | got_value_high, loc);
10475   bfd_put_32 (output_bfd, plt_entry[1] | got_value_low, loc + 4);
10476   bfd_put_32 (output_bfd, plt_entry[2], loc + 8);
10477   bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
10478   bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
10479   bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
10480
10481   /* Output the relocation for the lui of %hi(_GLOBAL_OFFSET_TABLE_).  */
10482   loc = htab->srelplt2->contents;
10483   rela.r_offset = plt_address;
10484   rela.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
10485   rela.r_addend = 0;
10486   bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
10487   loc += sizeof (Elf32_External_Rela);
10488
10489   /* Output the relocation for the following addiu of
10490      %lo(_GLOBAL_OFFSET_TABLE_).  */
10491   rela.r_offset += 4;
10492   rela.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
10493   bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
10494   loc += sizeof (Elf32_External_Rela);
10495
10496   /* Fix up the remaining relocations.  They may have the wrong
10497      symbol index for _G_O_T_ or _P_L_T_ depending on the order
10498      in which symbols were output.  */
10499   while (loc < htab->srelplt2->contents + htab->srelplt2->size)
10500     {
10501       Elf_Internal_Rela rel;
10502
10503       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
10504       rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_MIPS_32);
10505       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10506       loc += sizeof (Elf32_External_Rela);
10507
10508       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
10509       rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
10510       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10511       loc += sizeof (Elf32_External_Rela);
10512
10513       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
10514       rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
10515       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10516       loc += sizeof (Elf32_External_Rela);
10517     }
10518 }
10519
10520 /* Install the PLT header for a VxWorks shared library.  */
10521
10522 static void
10523 mips_vxworks_finish_shared_plt (bfd *output_bfd, struct bfd_link_info *info)
10524 {
10525   unsigned int i;
10526   struct mips_elf_link_hash_table *htab;
10527
10528   htab = mips_elf_hash_table (info);
10529   BFD_ASSERT (htab != NULL);
10530
10531   /* We just need to copy the entry byte-by-byte.  */
10532   for (i = 0; i < ARRAY_SIZE (mips_vxworks_shared_plt0_entry); i++)
10533     bfd_put_32 (output_bfd, mips_vxworks_shared_plt0_entry[i],
10534                 htab->splt->contents + i * 4);
10535 }
10536
10537 /* Finish up the dynamic sections.  */
10538
10539 bfd_boolean
10540 _bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd,
10541                                        struct bfd_link_info *info)
10542 {
10543   bfd *dynobj;
10544   asection *sdyn;
10545   asection *sgot;
10546   struct mips_got_info *gg, *g;
10547   struct mips_elf_link_hash_table *htab;
10548
10549   htab = mips_elf_hash_table (info);
10550   BFD_ASSERT (htab != NULL);
10551
10552   dynobj = elf_hash_table (info)->dynobj;
10553
10554   sdyn = bfd_get_linker_section (dynobj, ".dynamic");
10555
10556   sgot = htab->sgot;
10557   gg = htab->got_info;
10558
10559   if (elf_hash_table (info)->dynamic_sections_created)
10560     {
10561       bfd_byte *b;
10562       int dyn_to_skip = 0, dyn_skipped = 0;
10563
10564       BFD_ASSERT (sdyn != NULL);
10565       BFD_ASSERT (gg != NULL);
10566
10567       g = mips_elf_got_for_ibfd (gg, output_bfd);
10568       BFD_ASSERT (g != NULL);
10569
10570       for (b = sdyn->contents;
10571            b < sdyn->contents + sdyn->size;
10572            b += MIPS_ELF_DYN_SIZE (dynobj))
10573         {
10574           Elf_Internal_Dyn dyn;
10575           const char *name;
10576           size_t elemsize;
10577           asection *s;
10578           bfd_boolean swap_out_p;
10579
10580           /* Read in the current dynamic entry.  */
10581           (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
10582
10583           /* Assume that we're going to modify it and write it out.  */
10584           swap_out_p = TRUE;
10585
10586           switch (dyn.d_tag)
10587             {
10588             case DT_RELENT:
10589               dyn.d_un.d_val = MIPS_ELF_REL_SIZE (dynobj);
10590               break;
10591
10592             case DT_RELAENT:
10593               BFD_ASSERT (htab->is_vxworks);
10594               dyn.d_un.d_val = MIPS_ELF_RELA_SIZE (dynobj);
10595               break;
10596
10597             case DT_STRSZ:
10598               /* Rewrite DT_STRSZ.  */
10599               dyn.d_un.d_val =
10600                 _bfd_elf_strtab_size (elf_hash_table (info)->dynstr);
10601               break;
10602
10603             case DT_PLTGOT:
10604               s = htab->sgot;
10605               dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
10606               break;
10607
10608             case DT_MIPS_PLTGOT:
10609               s = htab->sgotplt;
10610               dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
10611               break;
10612
10613             case DT_MIPS_RLD_VERSION:
10614               dyn.d_un.d_val = 1; /* XXX */
10615               break;
10616
10617             case DT_MIPS_FLAGS:
10618               dyn.d_un.d_val = RHF_NOTPOT; /* XXX */
10619               break;
10620
10621             case DT_MIPS_TIME_STAMP:
10622               {
10623                 time_t t;
10624                 time (&t);
10625                 dyn.d_un.d_val = t;
10626               }
10627               break;
10628
10629             case DT_MIPS_ICHECKSUM:
10630               /* XXX FIXME: */
10631               swap_out_p = FALSE;
10632               break;
10633
10634             case DT_MIPS_IVERSION:
10635               /* XXX FIXME: */
10636               swap_out_p = FALSE;
10637               break;
10638
10639             case DT_MIPS_BASE_ADDRESS:
10640               s = output_bfd->sections;
10641               BFD_ASSERT (s != NULL);
10642               dyn.d_un.d_ptr = s->vma & ~(bfd_vma) 0xffff;
10643               break;
10644
10645             case DT_MIPS_LOCAL_GOTNO:
10646               dyn.d_un.d_val = g->local_gotno;
10647               break;
10648
10649             case DT_MIPS_UNREFEXTNO:
10650               /* The index into the dynamic symbol table which is the
10651                  entry of the first external symbol that is not
10652                  referenced within the same object.  */
10653               dyn.d_un.d_val = bfd_count_sections (output_bfd) + 1;
10654               break;
10655
10656             case DT_MIPS_GOTSYM:
10657               if (gg->global_gotsym)
10658                 {
10659                   dyn.d_un.d_val = gg->global_gotsym->dynindx;
10660                   break;
10661                 }
10662               /* In case if we don't have global got symbols we default
10663                  to setting DT_MIPS_GOTSYM to the same value as
10664                  DT_MIPS_SYMTABNO, so we just fall through.  */
10665
10666             case DT_MIPS_SYMTABNO:
10667               name = ".dynsym";
10668               elemsize = MIPS_ELF_SYM_SIZE (output_bfd);
10669               s = bfd_get_section_by_name (output_bfd, name);
10670               BFD_ASSERT (s != NULL);
10671
10672               dyn.d_un.d_val = s->size / elemsize;
10673               break;
10674
10675             case DT_MIPS_HIPAGENO:
10676               dyn.d_un.d_val = g->local_gotno - htab->reserved_gotno;
10677               break;
10678
10679             case DT_MIPS_RLD_MAP:
10680               {
10681                 struct elf_link_hash_entry *h;
10682                 h = mips_elf_hash_table (info)->rld_symbol;
10683                 if (!h)
10684                   {
10685                     dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
10686                     swap_out_p = FALSE;
10687                     break;
10688                   }
10689                 s = h->root.u.def.section;
10690                 dyn.d_un.d_ptr = (s->output_section->vma + s->output_offset
10691                                   + h->root.u.def.value);
10692               }
10693               break;
10694
10695             case DT_MIPS_OPTIONS:
10696               s = (bfd_get_section_by_name
10697                    (output_bfd, MIPS_ELF_OPTIONS_SECTION_NAME (output_bfd)));
10698               dyn.d_un.d_ptr = s->vma;
10699               break;
10700
10701             case DT_RELASZ:
10702               BFD_ASSERT (htab->is_vxworks);
10703               /* The count does not include the JUMP_SLOT relocations.  */
10704               if (htab->srelplt)
10705                 dyn.d_un.d_val -= htab->srelplt->size;
10706               break;
10707
10708             case DT_PLTREL:
10709               BFD_ASSERT (htab->use_plts_and_copy_relocs);
10710               if (htab->is_vxworks)
10711                 dyn.d_un.d_val = DT_RELA;
10712               else
10713                 dyn.d_un.d_val = DT_REL;
10714               break;
10715
10716             case DT_PLTRELSZ:
10717               BFD_ASSERT (htab->use_plts_and_copy_relocs);
10718               dyn.d_un.d_val = htab->srelplt->size;
10719               break;
10720
10721             case DT_JMPREL:
10722               BFD_ASSERT (htab->use_plts_and_copy_relocs);
10723               dyn.d_un.d_ptr = (htab->srelplt->output_section->vma
10724                                 + htab->srelplt->output_offset);
10725               break;
10726
10727             case DT_TEXTREL:
10728               /* If we didn't need any text relocations after all, delete
10729                  the dynamic tag.  */
10730               if (!(info->flags & DF_TEXTREL))
10731                 {
10732                   dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
10733                   swap_out_p = FALSE;
10734                 }
10735               break;
10736
10737             case DT_FLAGS:
10738               /* If we didn't need any text relocations after all, clear
10739                  DF_TEXTREL from DT_FLAGS.  */
10740               if (!(info->flags & DF_TEXTREL))
10741                 dyn.d_un.d_val &= ~DF_TEXTREL;
10742               else
10743                 swap_out_p = FALSE;
10744               break;
10745
10746             default:
10747               swap_out_p = FALSE;
10748               if (htab->is_vxworks
10749                   && elf_vxworks_finish_dynamic_entry (output_bfd, &dyn))
10750                 swap_out_p = TRUE;
10751               break;
10752             }
10753
10754           if (swap_out_p || dyn_skipped)
10755             (*get_elf_backend_data (dynobj)->s->swap_dyn_out)
10756               (dynobj, &dyn, b - dyn_skipped);
10757
10758           if (dyn_to_skip)
10759             {
10760               dyn_skipped += dyn_to_skip;
10761               dyn_to_skip = 0;
10762             }
10763         }
10764
10765       /* Wipe out any trailing entries if we shifted down a dynamic tag.  */
10766       if (dyn_skipped > 0)
10767         memset (b - dyn_skipped, 0, dyn_skipped);
10768     }
10769
10770   if (sgot != NULL && sgot->size > 0
10771       && !bfd_is_abs_section (sgot->output_section))
10772     {
10773       if (htab->is_vxworks)
10774         {
10775           /* The first entry of the global offset table points to the
10776              ".dynamic" section.  The second is initialized by the
10777              loader and contains the shared library identifier.
10778              The third is also initialized by the loader and points
10779              to the lazy resolution stub.  */
10780           MIPS_ELF_PUT_WORD (output_bfd,
10781                              sdyn->output_offset + sdyn->output_section->vma,
10782                              sgot->contents);
10783           MIPS_ELF_PUT_WORD (output_bfd, 0,
10784                              sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd));
10785           MIPS_ELF_PUT_WORD (output_bfd, 0,
10786                              sgot->contents
10787                              + 2 * MIPS_ELF_GOT_SIZE (output_bfd));
10788         }
10789       else
10790         {
10791           /* The first entry of the global offset table will be filled at
10792              runtime. The second entry will be used by some runtime loaders.
10793              This isn't the case of IRIX rld.  */
10794           MIPS_ELF_PUT_WORD (output_bfd, (bfd_vma) 0, sgot->contents);
10795           MIPS_ELF_PUT_WORD (output_bfd, MIPS_ELF_GNU_GOT1_MASK (output_bfd),
10796                              sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd));
10797         }
10798
10799       elf_section_data (sgot->output_section)->this_hdr.sh_entsize
10800          = MIPS_ELF_GOT_SIZE (output_bfd);
10801     }
10802
10803   /* Generate dynamic relocations for the non-primary gots.  */
10804   if (gg != NULL && gg->next)
10805     {
10806       Elf_Internal_Rela rel[3];
10807       bfd_vma addend = 0;
10808
10809       memset (rel, 0, sizeof (rel));
10810       rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_REL32);
10811
10812       for (g = gg->next; g->next != gg; g = g->next)
10813         {
10814           bfd_vma got_index = g->next->local_gotno + g->next->global_gotno
10815             + g->next->tls_gotno;
10816
10817           MIPS_ELF_PUT_WORD (output_bfd, 0, sgot->contents
10818                              + got_index++ * MIPS_ELF_GOT_SIZE (output_bfd));
10819           MIPS_ELF_PUT_WORD (output_bfd, MIPS_ELF_GNU_GOT1_MASK (output_bfd),
10820                              sgot->contents
10821                              + got_index++ * MIPS_ELF_GOT_SIZE (output_bfd));
10822
10823           if (! info->shared)
10824             continue;
10825
10826           while (got_index < g->assigned_gotno)
10827             {
10828               rel[0].r_offset = rel[1].r_offset = rel[2].r_offset
10829                 = got_index++ * MIPS_ELF_GOT_SIZE (output_bfd);
10830               if (!(mips_elf_create_dynamic_relocation
10831                     (output_bfd, info, rel, NULL,
10832                      bfd_abs_section_ptr,
10833                      0, &addend, sgot)))
10834                 return FALSE;
10835               BFD_ASSERT (addend == 0);
10836             }
10837         }
10838     }
10839
10840   /* The generation of dynamic relocations for the non-primary gots
10841      adds more dynamic relocations.  We cannot count them until
10842      here.  */
10843
10844   if (elf_hash_table (info)->dynamic_sections_created)
10845     {
10846       bfd_byte *b;
10847       bfd_boolean swap_out_p;
10848
10849       BFD_ASSERT (sdyn != NULL);
10850
10851       for (b = sdyn->contents;
10852            b < sdyn->contents + sdyn->size;
10853            b += MIPS_ELF_DYN_SIZE (dynobj))
10854         {
10855           Elf_Internal_Dyn dyn;
10856           asection *s;
10857
10858           /* Read in the current dynamic entry.  */
10859           (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
10860
10861           /* Assume that we're going to modify it and write it out.  */
10862           swap_out_p = TRUE;
10863
10864           switch (dyn.d_tag)
10865             {
10866             case DT_RELSZ:
10867               /* Reduce DT_RELSZ to account for any relocations we
10868                  decided not to make.  This is for the n64 irix rld,
10869                  which doesn't seem to apply any relocations if there
10870                  are trailing null entries.  */
10871               s = mips_elf_rel_dyn_section (info, FALSE);
10872               dyn.d_un.d_val = (s->reloc_count
10873                                 * (ABI_64_P (output_bfd)
10874                                    ? sizeof (Elf64_Mips_External_Rel)
10875                                    : sizeof (Elf32_External_Rel)));
10876               /* Adjust the section size too.  Tools like the prelinker
10877                  can reasonably expect the values to the same.  */
10878               elf_section_data (s->output_section)->this_hdr.sh_size
10879                 = dyn.d_un.d_val;
10880               break;
10881
10882             default:
10883               swap_out_p = FALSE;
10884               break;
10885             }
10886
10887           if (swap_out_p)
10888             (*get_elf_backend_data (dynobj)->s->swap_dyn_out)
10889               (dynobj, &dyn, b);
10890         }
10891     }
10892
10893   {
10894     asection *s;
10895     Elf32_compact_rel cpt;
10896
10897     if (SGI_COMPAT (output_bfd))
10898       {
10899         /* Write .compact_rel section out.  */
10900         s = bfd_get_linker_section (dynobj, ".compact_rel");
10901         if (s != NULL)
10902           {
10903             cpt.id1 = 1;
10904             cpt.num = s->reloc_count;
10905             cpt.id2 = 2;
10906             cpt.offset = (s->output_section->filepos
10907                           + sizeof (Elf32_External_compact_rel));
10908             cpt.reserved0 = 0;
10909             cpt.reserved1 = 0;
10910             bfd_elf32_swap_compact_rel_out (output_bfd, &cpt,
10911                                             ((Elf32_External_compact_rel *)
10912                                              s->contents));
10913
10914             /* Clean up a dummy stub function entry in .text.  */
10915             if (htab->sstubs != NULL)
10916               {
10917                 file_ptr dummy_offset;
10918
10919                 BFD_ASSERT (htab->sstubs->size >= htab->function_stub_size);
10920                 dummy_offset = htab->sstubs->size - htab->function_stub_size;
10921                 memset (htab->sstubs->contents + dummy_offset, 0,
10922                         htab->function_stub_size);
10923               }
10924           }
10925       }
10926
10927     /* The psABI says that the dynamic relocations must be sorted in
10928        increasing order of r_symndx.  The VxWorks EABI doesn't require
10929        this, and because the code below handles REL rather than RELA
10930        relocations, using it for VxWorks would be outright harmful.  */
10931     if (!htab->is_vxworks)
10932       {
10933         s = mips_elf_rel_dyn_section (info, FALSE);
10934         if (s != NULL
10935             && s->size > (bfd_vma)2 * MIPS_ELF_REL_SIZE (output_bfd))
10936           {
10937             reldyn_sorting_bfd = output_bfd;
10938
10939             if (ABI_64_P (output_bfd))
10940               qsort ((Elf64_External_Rel *) s->contents + 1,
10941                      s->reloc_count - 1, sizeof (Elf64_Mips_External_Rel),
10942                      sort_dynamic_relocs_64);
10943             else
10944               qsort ((Elf32_External_Rel *) s->contents + 1,
10945                      s->reloc_count - 1, sizeof (Elf32_External_Rel),
10946                      sort_dynamic_relocs);
10947           }
10948       }
10949   }
10950
10951   if (htab->splt && htab->splt->size > 0)
10952     {
10953       if (htab->is_vxworks)
10954         {
10955           if (info->shared)
10956             mips_vxworks_finish_shared_plt (output_bfd, info);
10957           else
10958             mips_vxworks_finish_exec_plt (output_bfd, info);
10959         }
10960       else
10961         {
10962           BFD_ASSERT (!info->shared);
10963           mips_finish_exec_plt (output_bfd, info);
10964         }
10965     }
10966   return TRUE;
10967 }
10968
10969
10970 /* Set ABFD's EF_MIPS_ARCH and EF_MIPS_MACH flags.  */
10971
10972 static void
10973 mips_set_isa_flags (bfd *abfd)
10974 {
10975   flagword val;
10976
10977   switch (bfd_get_mach (abfd))
10978     {
10979     default:
10980     case bfd_mach_mips3000:
10981       val = E_MIPS_ARCH_1;
10982       break;
10983
10984     case bfd_mach_mips3900:
10985       val = E_MIPS_ARCH_1 | E_MIPS_MACH_3900;
10986       break;
10987
10988     case bfd_mach_mips6000:
10989       val = E_MIPS_ARCH_2;
10990       break;
10991
10992     case bfd_mach_mips4000:
10993     case bfd_mach_mips4300:
10994     case bfd_mach_mips4400:
10995     case bfd_mach_mips4600:
10996       val = E_MIPS_ARCH_3;
10997       break;
10998
10999     case bfd_mach_mips4010:
11000       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4010;
11001       break;
11002
11003     case bfd_mach_mips4100:
11004       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4100;
11005       break;
11006
11007     case bfd_mach_mips4111:
11008       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4111;
11009       break;
11010
11011     case bfd_mach_mips4120:
11012       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4120;
11013       break;
11014
11015     case bfd_mach_mips4650:
11016       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4650;
11017       break;
11018
11019     case bfd_mach_mips5400:
11020       val = E_MIPS_ARCH_4 | E_MIPS_MACH_5400;
11021       break;
11022
11023     case bfd_mach_mips5500:
11024       val = E_MIPS_ARCH_4 | E_MIPS_MACH_5500;
11025       break;
11026
11027     case bfd_mach_mips5900:
11028       val = E_MIPS_ARCH_3 | E_MIPS_MACH_5900;
11029       break;
11030
11031     case bfd_mach_mips9000:
11032       val = E_MIPS_ARCH_4 | E_MIPS_MACH_9000;
11033       break;
11034
11035     case bfd_mach_mips5000:
11036     case bfd_mach_mips7000:
11037     case bfd_mach_mips8000:
11038     case bfd_mach_mips10000:
11039     case bfd_mach_mips12000:
11040     case bfd_mach_mips14000:
11041     case bfd_mach_mips16000:
11042       val = E_MIPS_ARCH_4;
11043       break;
11044
11045     case bfd_mach_mips5:
11046       val = E_MIPS_ARCH_5;
11047       break;
11048
11049     case bfd_mach_mips_loongson_2e:
11050       val = E_MIPS_ARCH_3 | E_MIPS_MACH_LS2E;
11051       break;
11052
11053     case bfd_mach_mips_loongson_2f:
11054       val = E_MIPS_ARCH_3 | E_MIPS_MACH_LS2F;
11055       break;
11056
11057     case bfd_mach_mips_sb1:
11058       val = E_MIPS_ARCH_64 | E_MIPS_MACH_SB1;
11059       break;
11060
11061     case bfd_mach_mips_loongson_3a:
11062       val = E_MIPS_ARCH_64 | E_MIPS_MACH_LS3A;
11063       break;
11064
11065     case bfd_mach_mips_octeon:
11066     case bfd_mach_mips_octeonp:
11067       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON;
11068       break;
11069
11070     case bfd_mach_mips_xlr:
11071       val = E_MIPS_ARCH_64 | E_MIPS_MACH_XLR;
11072       break;
11073
11074     case bfd_mach_mips_octeon2:
11075       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON2;
11076       break;
11077
11078     case bfd_mach_mipsisa32:
11079       val = E_MIPS_ARCH_32;
11080       break;
11081
11082     case bfd_mach_mipsisa64:
11083       val = E_MIPS_ARCH_64;
11084       break;
11085
11086     case bfd_mach_mipsisa32r2:
11087       val = E_MIPS_ARCH_32R2;
11088       break;
11089
11090     case bfd_mach_mipsisa64r2:
11091       val = E_MIPS_ARCH_64R2;
11092       break;
11093     }
11094   elf_elfheader (abfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH);
11095   elf_elfheader (abfd)->e_flags |= val;
11096
11097 }
11098
11099
11100 /* The final processing done just before writing out a MIPS ELF object
11101    file.  This gets the MIPS architecture right based on the machine
11102    number.  This is used by both the 32-bit and the 64-bit ABI.  */
11103
11104 void
11105 _bfd_mips_elf_final_write_processing (bfd *abfd,
11106                                       bfd_boolean linker ATTRIBUTE_UNUSED)
11107 {
11108   unsigned int i;
11109   Elf_Internal_Shdr **hdrpp;
11110   const char *name;
11111   asection *sec;
11112
11113   /* Keep the existing EF_MIPS_MACH and EF_MIPS_ARCH flags if the former
11114      is nonzero.  This is for compatibility with old objects, which used
11115      a combination of a 32-bit EF_MIPS_ARCH and a 64-bit EF_MIPS_MACH.  */
11116   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == 0)
11117     mips_set_isa_flags (abfd);
11118
11119   /* Set the sh_info field for .gptab sections and other appropriate
11120      info for each special section.  */
11121   for (i = 1, hdrpp = elf_elfsections (abfd) + 1;
11122        i < elf_numsections (abfd);
11123        i++, hdrpp++)
11124     {
11125       switch ((*hdrpp)->sh_type)
11126         {
11127         case SHT_MIPS_MSYM:
11128         case SHT_MIPS_LIBLIST:
11129           sec = bfd_get_section_by_name (abfd, ".dynstr");
11130           if (sec != NULL)
11131             (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
11132           break;
11133
11134         case SHT_MIPS_GPTAB:
11135           BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
11136           name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
11137           BFD_ASSERT (name != NULL
11138                       && CONST_STRNEQ (name, ".gptab."));
11139           sec = bfd_get_section_by_name (abfd, name + sizeof ".gptab" - 1);
11140           BFD_ASSERT (sec != NULL);
11141           (*hdrpp)->sh_info = elf_section_data (sec)->this_idx;
11142           break;
11143
11144         case SHT_MIPS_CONTENT:
11145           BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
11146           name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
11147           BFD_ASSERT (name != NULL
11148                       && CONST_STRNEQ (name, ".MIPS.content"));
11149           sec = bfd_get_section_by_name (abfd,
11150                                          name + sizeof ".MIPS.content" - 1);
11151           BFD_ASSERT (sec != NULL);
11152           (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
11153           break;
11154
11155         case SHT_MIPS_SYMBOL_LIB:
11156           sec = bfd_get_section_by_name (abfd, ".dynsym");
11157           if (sec != NULL)
11158             (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
11159           sec = bfd_get_section_by_name (abfd, ".liblist");
11160           if (sec != NULL)
11161             (*hdrpp)->sh_info = elf_section_data (sec)->this_idx;
11162           break;
11163
11164         case SHT_MIPS_EVENTS:
11165           BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
11166           name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
11167           BFD_ASSERT (name != NULL);
11168           if (CONST_STRNEQ (name, ".MIPS.events"))
11169             sec = bfd_get_section_by_name (abfd,
11170                                            name + sizeof ".MIPS.events" - 1);
11171           else
11172             {
11173               BFD_ASSERT (CONST_STRNEQ (name, ".MIPS.post_rel"));
11174               sec = bfd_get_section_by_name (abfd,
11175                                              (name
11176                                               + sizeof ".MIPS.post_rel" - 1));
11177             }
11178           BFD_ASSERT (sec != NULL);
11179           (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
11180           break;
11181
11182         }
11183     }
11184 }
11185 \f
11186 /* When creating an IRIX5 executable, we need REGINFO and RTPROC
11187    segments.  */
11188
11189 int
11190 _bfd_mips_elf_additional_program_headers (bfd *abfd,
11191                                           struct bfd_link_info *info ATTRIBUTE_UNUSED)
11192 {
11193   asection *s;
11194   int ret = 0;
11195
11196   /* See if we need a PT_MIPS_REGINFO segment.  */
11197   s = bfd_get_section_by_name (abfd, ".reginfo");
11198   if (s && (s->flags & SEC_LOAD))
11199     ++ret;
11200
11201   /* See if we need a PT_MIPS_OPTIONS segment.  */
11202   if (IRIX_COMPAT (abfd) == ict_irix6
11203       && bfd_get_section_by_name (abfd,
11204                                   MIPS_ELF_OPTIONS_SECTION_NAME (abfd)))
11205     ++ret;
11206
11207   /* See if we need a PT_MIPS_RTPROC segment.  */
11208   if (IRIX_COMPAT (abfd) == ict_irix5
11209       && bfd_get_section_by_name (abfd, ".dynamic")
11210       && bfd_get_section_by_name (abfd, ".mdebug"))
11211     ++ret;
11212
11213   /* Allocate a PT_NULL header in dynamic objects.  See
11214      _bfd_mips_elf_modify_segment_map for details.  */
11215   if (!SGI_COMPAT (abfd)
11216       && bfd_get_section_by_name (abfd, ".dynamic"))
11217     ++ret;
11218
11219   return ret;
11220 }
11221
11222 /* Modify the segment map for an IRIX5 executable.  */
11223
11224 bfd_boolean
11225 _bfd_mips_elf_modify_segment_map (bfd *abfd,
11226                                   struct bfd_link_info *info)
11227 {
11228   asection *s;
11229   struct elf_segment_map *m, **pm;
11230   bfd_size_type amt;
11231
11232   /* If there is a .reginfo section, we need a PT_MIPS_REGINFO
11233      segment.  */
11234   s = bfd_get_section_by_name (abfd, ".reginfo");
11235   if (s != NULL && (s->flags & SEC_LOAD) != 0)
11236     {
11237       for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
11238         if (m->p_type == PT_MIPS_REGINFO)
11239           break;
11240       if (m == NULL)
11241         {
11242           amt = sizeof *m;
11243           m = bfd_zalloc (abfd, amt);
11244           if (m == NULL)
11245             return FALSE;
11246
11247           m->p_type = PT_MIPS_REGINFO;
11248           m->count = 1;
11249           m->sections[0] = s;
11250
11251           /* We want to put it after the PHDR and INTERP segments.  */
11252           pm = &elf_tdata (abfd)->segment_map;
11253           while (*pm != NULL
11254                  && ((*pm)->p_type == PT_PHDR
11255                      || (*pm)->p_type == PT_INTERP))
11256             pm = &(*pm)->next;
11257
11258           m->next = *pm;
11259           *pm = m;
11260         }
11261     }
11262
11263   /* For IRIX 6, we don't have .mdebug sections, nor does anything but
11264      .dynamic end up in PT_DYNAMIC.  However, we do have to insert a
11265      PT_MIPS_OPTIONS segment immediately following the program header
11266      table.  */
11267   if (NEWABI_P (abfd)
11268       /* On non-IRIX6 new abi, we'll have already created a segment
11269          for this section, so don't create another.  I'm not sure this
11270          is not also the case for IRIX 6, but I can't test it right
11271          now.  */
11272       && IRIX_COMPAT (abfd) == ict_irix6)
11273     {
11274       for (s = abfd->sections; s; s = s->next)
11275         if (elf_section_data (s)->this_hdr.sh_type == SHT_MIPS_OPTIONS)
11276           break;
11277
11278       if (s)
11279         {
11280           struct elf_segment_map *options_segment;
11281
11282           pm = &elf_tdata (abfd)->segment_map;
11283           while (*pm != NULL
11284                  && ((*pm)->p_type == PT_PHDR
11285                      || (*pm)->p_type == PT_INTERP))
11286             pm = &(*pm)->next;
11287
11288           if (*pm == NULL || (*pm)->p_type != PT_MIPS_OPTIONS)
11289             {
11290               amt = sizeof (struct elf_segment_map);
11291               options_segment = bfd_zalloc (abfd, amt);
11292               options_segment->next = *pm;
11293               options_segment->p_type = PT_MIPS_OPTIONS;
11294               options_segment->p_flags = PF_R;
11295               options_segment->p_flags_valid = TRUE;
11296               options_segment->count = 1;
11297               options_segment->sections[0] = s;
11298               *pm = options_segment;
11299             }
11300         }
11301     }
11302   else
11303     {
11304       if (IRIX_COMPAT (abfd) == ict_irix5)
11305         {
11306           /* If there are .dynamic and .mdebug sections, we make a room
11307              for the RTPROC header.  FIXME: Rewrite without section names.  */
11308           if (bfd_get_section_by_name (abfd, ".interp") == NULL
11309               && bfd_get_section_by_name (abfd, ".dynamic") != NULL
11310               && bfd_get_section_by_name (abfd, ".mdebug") != NULL)
11311             {
11312               for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
11313                 if (m->p_type == PT_MIPS_RTPROC)
11314                   break;
11315               if (m == NULL)
11316                 {
11317                   amt = sizeof *m;
11318                   m = bfd_zalloc (abfd, amt);
11319                   if (m == NULL)
11320                     return FALSE;
11321
11322                   m->p_type = PT_MIPS_RTPROC;
11323
11324                   s = bfd_get_section_by_name (abfd, ".rtproc");
11325                   if (s == NULL)
11326                     {
11327                       m->count = 0;
11328                       m->p_flags = 0;
11329                       m->p_flags_valid = 1;
11330                     }
11331                   else
11332                     {
11333                       m->count = 1;
11334                       m->sections[0] = s;
11335                     }
11336
11337                   /* We want to put it after the DYNAMIC segment.  */
11338                   pm = &elf_tdata (abfd)->segment_map;
11339                   while (*pm != NULL && (*pm)->p_type != PT_DYNAMIC)
11340                     pm = &(*pm)->next;
11341                   if (*pm != NULL)
11342                     pm = &(*pm)->next;
11343
11344                   m->next = *pm;
11345                   *pm = m;
11346                 }
11347             }
11348         }
11349       /* On IRIX5, the PT_DYNAMIC segment includes the .dynamic,
11350          .dynstr, .dynsym, and .hash sections, and everything in
11351          between.  */
11352       for (pm = &elf_tdata (abfd)->segment_map; *pm != NULL;
11353            pm = &(*pm)->next)
11354         if ((*pm)->p_type == PT_DYNAMIC)
11355           break;
11356       m = *pm;
11357       if (m != NULL && IRIX_COMPAT (abfd) == ict_none)
11358         {
11359           /* For a normal mips executable the permissions for the PT_DYNAMIC
11360              segment are read, write and execute. We do that here since
11361              the code in elf.c sets only the read permission. This matters
11362              sometimes for the dynamic linker.  */
11363           if (bfd_get_section_by_name (abfd, ".dynamic") != NULL)
11364             {
11365               m->p_flags = PF_R | PF_W | PF_X;
11366               m->p_flags_valid = 1;
11367             }
11368         }
11369       /* GNU/Linux binaries do not need the extended PT_DYNAMIC section.
11370          glibc's dynamic linker has traditionally derived the number of
11371          tags from the p_filesz field, and sometimes allocates stack
11372          arrays of that size.  An overly-big PT_DYNAMIC segment can
11373          be actively harmful in such cases.  Making PT_DYNAMIC contain
11374          other sections can also make life hard for the prelinker,
11375          which might move one of the other sections to a different
11376          PT_LOAD segment.  */
11377       if (SGI_COMPAT (abfd)
11378           && m != NULL
11379           && m->count == 1
11380           && strcmp (m->sections[0]->name, ".dynamic") == 0)
11381         {
11382           static const char *sec_names[] =
11383           {
11384             ".dynamic", ".dynstr", ".dynsym", ".hash"
11385           };
11386           bfd_vma low, high;
11387           unsigned int i, c;
11388           struct elf_segment_map *n;
11389
11390           low = ~(bfd_vma) 0;
11391           high = 0;
11392           for (i = 0; i < sizeof sec_names / sizeof sec_names[0]; i++)
11393             {
11394               s = bfd_get_section_by_name (abfd, sec_names[i]);
11395               if (s != NULL && (s->flags & SEC_LOAD) != 0)
11396                 {
11397                   bfd_size_type sz;
11398
11399                   if (low > s->vma)
11400                     low = s->vma;
11401                   sz = s->size;
11402                   if (high < s->vma + sz)
11403                     high = s->vma + sz;
11404                 }
11405             }
11406
11407           c = 0;
11408           for (s = abfd->sections; s != NULL; s = s->next)
11409             if ((s->flags & SEC_LOAD) != 0
11410                 && s->vma >= low
11411                 && s->vma + s->size <= high)
11412               ++c;
11413
11414           amt = sizeof *n + (bfd_size_type) (c - 1) * sizeof (asection *);
11415           n = bfd_zalloc (abfd, amt);
11416           if (n == NULL)
11417             return FALSE;
11418           *n = *m;
11419           n->count = c;
11420
11421           i = 0;
11422           for (s = abfd->sections; s != NULL; s = s->next)
11423             {
11424               if ((s->flags & SEC_LOAD) != 0
11425                   && s->vma >= low
11426                   && s->vma + s->size <= high)
11427                 {
11428                   n->sections[i] = s;
11429                   ++i;
11430                 }
11431             }
11432
11433           *pm = n;
11434         }
11435     }
11436
11437   /* Allocate a spare program header in dynamic objects so that tools
11438      like the prelinker can add an extra PT_LOAD entry.
11439
11440      If the prelinker needs to make room for a new PT_LOAD entry, its
11441      standard procedure is to move the first (read-only) sections into
11442      the new (writable) segment.  However, the MIPS ABI requires
11443      .dynamic to be in a read-only segment, and the section will often
11444      start within sizeof (ElfNN_Phdr) bytes of the last program header.
11445
11446      Although the prelinker could in principle move .dynamic to a
11447      writable segment, it seems better to allocate a spare program
11448      header instead, and avoid the need to move any sections.
11449      There is a long tradition of allocating spare dynamic tags,
11450      so allocating a spare program header seems like a natural
11451      extension.
11452
11453      If INFO is NULL, we may be copying an already prelinked binary
11454      with objcopy or strip, so do not add this header.  */
11455   if (info != NULL
11456       && !SGI_COMPAT (abfd)
11457       && bfd_get_section_by_name (abfd, ".dynamic"))
11458     {
11459       for (pm = &elf_tdata (abfd)->segment_map; *pm != NULL; pm = &(*pm)->next)
11460         if ((*pm)->p_type == PT_NULL)
11461           break;
11462       if (*pm == NULL)
11463         {
11464           m = bfd_zalloc (abfd, sizeof (*m));
11465           if (m == NULL)
11466             return FALSE;
11467
11468           m->p_type = PT_NULL;
11469           *pm = m;
11470         }
11471     }
11472
11473   return TRUE;
11474 }
11475 \f
11476 /* Return the section that should be marked against GC for a given
11477    relocation.  */
11478
11479 asection *
11480 _bfd_mips_elf_gc_mark_hook (asection *sec,
11481                             struct bfd_link_info *info,
11482                             Elf_Internal_Rela *rel,
11483                             struct elf_link_hash_entry *h,
11484                             Elf_Internal_Sym *sym)
11485 {
11486   /* ??? Do mips16 stub sections need to be handled special?  */
11487
11488   if (h != NULL)
11489     switch (ELF_R_TYPE (sec->owner, rel->r_info))
11490       {
11491       case R_MIPS_GNU_VTINHERIT:
11492       case R_MIPS_GNU_VTENTRY:
11493         return NULL;
11494       }
11495
11496   return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
11497 }
11498
11499 /* Update the got entry reference counts for the section being removed.  */
11500
11501 bfd_boolean
11502 _bfd_mips_elf_gc_sweep_hook (bfd *abfd ATTRIBUTE_UNUSED,
11503                              struct bfd_link_info *info ATTRIBUTE_UNUSED,
11504                              asection *sec ATTRIBUTE_UNUSED,
11505                              const Elf_Internal_Rela *relocs ATTRIBUTE_UNUSED)
11506 {
11507 #if 0
11508   Elf_Internal_Shdr *symtab_hdr;
11509   struct elf_link_hash_entry **sym_hashes;
11510   bfd_signed_vma *local_got_refcounts;
11511   const Elf_Internal_Rela *rel, *relend;
11512   unsigned long r_symndx;
11513   struct elf_link_hash_entry *h;
11514
11515   if (info->relocatable)
11516     return TRUE;
11517
11518   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
11519   sym_hashes = elf_sym_hashes (abfd);
11520   local_got_refcounts = elf_local_got_refcounts (abfd);
11521
11522   relend = relocs + sec->reloc_count;
11523   for (rel = relocs; rel < relend; rel++)
11524     switch (ELF_R_TYPE (abfd, rel->r_info))
11525       {
11526       case R_MIPS16_GOT16:
11527       case R_MIPS16_CALL16:
11528       case R_MIPS_GOT16:
11529       case R_MIPS_CALL16:
11530       case R_MIPS_CALL_HI16:
11531       case R_MIPS_CALL_LO16:
11532       case R_MIPS_GOT_HI16:
11533       case R_MIPS_GOT_LO16:
11534       case R_MIPS_GOT_DISP:
11535       case R_MIPS_GOT_PAGE:
11536       case R_MIPS_GOT_OFST:
11537       case R_MICROMIPS_GOT16:
11538       case R_MICROMIPS_CALL16:
11539       case R_MICROMIPS_CALL_HI16:
11540       case R_MICROMIPS_CALL_LO16:
11541       case R_MICROMIPS_GOT_HI16:
11542       case R_MICROMIPS_GOT_LO16:
11543       case R_MICROMIPS_GOT_DISP:
11544       case R_MICROMIPS_GOT_PAGE:
11545       case R_MICROMIPS_GOT_OFST:
11546         /* ??? It would seem that the existing MIPS code does no sort
11547            of reference counting or whatnot on its GOT and PLT entries,
11548            so it is not possible to garbage collect them at this time.  */
11549         break;
11550
11551       default:
11552         break;
11553       }
11554 #endif
11555
11556   return TRUE;
11557 }
11558 \f
11559 /* Copy data from a MIPS ELF indirect symbol to its direct symbol,
11560    hiding the old indirect symbol.  Process additional relocation
11561    information.  Also called for weakdefs, in which case we just let
11562    _bfd_elf_link_hash_copy_indirect copy the flags for us.  */
11563
11564 void
11565 _bfd_mips_elf_copy_indirect_symbol (struct bfd_link_info *info,
11566                                     struct elf_link_hash_entry *dir,
11567                                     struct elf_link_hash_entry *ind)
11568 {
11569   struct mips_elf_link_hash_entry *dirmips, *indmips;
11570
11571   _bfd_elf_link_hash_copy_indirect (info, dir, ind);
11572
11573   dirmips = (struct mips_elf_link_hash_entry *) dir;
11574   indmips = (struct mips_elf_link_hash_entry *) ind;
11575   /* Any absolute non-dynamic relocations against an indirect or weak
11576      definition will be against the target symbol.  */
11577   if (indmips->has_static_relocs)
11578     dirmips->has_static_relocs = TRUE;
11579
11580   if (ind->root.type != bfd_link_hash_indirect)
11581     return;
11582
11583   dirmips->possibly_dynamic_relocs += indmips->possibly_dynamic_relocs;
11584   if (indmips->readonly_reloc)
11585     dirmips->readonly_reloc = TRUE;
11586   if (indmips->no_fn_stub)
11587     dirmips->no_fn_stub = TRUE;
11588   if (indmips->fn_stub)
11589     {
11590       dirmips->fn_stub = indmips->fn_stub;
11591       indmips->fn_stub = NULL;
11592     }
11593   if (indmips->need_fn_stub)
11594     {
11595       dirmips->need_fn_stub = TRUE;
11596       indmips->need_fn_stub = FALSE;
11597     }
11598   if (indmips->call_stub)
11599     {
11600       dirmips->call_stub = indmips->call_stub;
11601       indmips->call_stub = NULL;
11602     }
11603   if (indmips->call_fp_stub)
11604     {
11605       dirmips->call_fp_stub = indmips->call_fp_stub;
11606       indmips->call_fp_stub = NULL;
11607     }
11608   if (indmips->global_got_area < dirmips->global_got_area)
11609     dirmips->global_got_area = indmips->global_got_area;
11610   if (indmips->global_got_area < GGA_NONE)
11611     indmips->global_got_area = GGA_NONE;
11612   if (indmips->has_nonpic_branches)
11613     dirmips->has_nonpic_branches = TRUE;
11614
11615   if (dirmips->tls_type == 0)
11616     dirmips->tls_type = indmips->tls_type;
11617 }
11618 \f
11619 #define PDR_SIZE 32
11620
11621 bfd_boolean
11622 _bfd_mips_elf_discard_info (bfd *abfd, struct elf_reloc_cookie *cookie,
11623                             struct bfd_link_info *info)
11624 {
11625   asection *o;
11626   bfd_boolean ret = FALSE;
11627   unsigned char *tdata;
11628   size_t i, skip;
11629
11630   o = bfd_get_section_by_name (abfd, ".pdr");
11631   if (! o)
11632     return FALSE;
11633   if (o->size == 0)
11634     return FALSE;
11635   if (o->size % PDR_SIZE != 0)
11636     return FALSE;
11637   if (o->output_section != NULL
11638       && bfd_is_abs_section (o->output_section))
11639     return FALSE;
11640
11641   tdata = bfd_zmalloc (o->size / PDR_SIZE);
11642   if (! tdata)
11643     return FALSE;
11644
11645   cookie->rels = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
11646                                             info->keep_memory);
11647   if (!cookie->rels)
11648     {
11649       free (tdata);
11650       return FALSE;
11651     }
11652
11653   cookie->rel = cookie->rels;
11654   cookie->relend = cookie->rels + o->reloc_count;
11655
11656   for (i = 0, skip = 0; i < o->size / PDR_SIZE; i ++)
11657     {
11658       if (bfd_elf_reloc_symbol_deleted_p (i * PDR_SIZE, cookie))
11659         {
11660           tdata[i] = 1;
11661           skip ++;
11662         }
11663     }
11664
11665   if (skip != 0)
11666     {
11667       mips_elf_section_data (o)->u.tdata = tdata;
11668       o->size -= skip * PDR_SIZE;
11669       ret = TRUE;
11670     }
11671   else
11672     free (tdata);
11673
11674   if (! info->keep_memory)
11675     free (cookie->rels);
11676
11677   return ret;
11678 }
11679
11680 bfd_boolean
11681 _bfd_mips_elf_ignore_discarded_relocs (asection *sec)
11682 {
11683   if (strcmp (sec->name, ".pdr") == 0)
11684     return TRUE;
11685   return FALSE;
11686 }
11687
11688 bfd_boolean
11689 _bfd_mips_elf_write_section (bfd *output_bfd,
11690                              struct bfd_link_info *link_info ATTRIBUTE_UNUSED,
11691                              asection *sec, bfd_byte *contents)
11692 {
11693   bfd_byte *to, *from, *end;
11694   int i;
11695
11696   if (strcmp (sec->name, ".pdr") != 0)
11697     return FALSE;
11698
11699   if (mips_elf_section_data (sec)->u.tdata == NULL)
11700     return FALSE;
11701
11702   to = contents;
11703   end = contents + sec->size;
11704   for (from = contents, i = 0;
11705        from < end;
11706        from += PDR_SIZE, i++)
11707     {
11708       if ((mips_elf_section_data (sec)->u.tdata)[i] == 1)
11709         continue;
11710       if (to != from)
11711         memcpy (to, from, PDR_SIZE);
11712       to += PDR_SIZE;
11713     }
11714   bfd_set_section_contents (output_bfd, sec->output_section, contents,
11715                             sec->output_offset, sec->size);
11716   return TRUE;
11717 }
11718 \f
11719 /* microMIPS code retains local labels for linker relaxation.  Omit them
11720    from output by default for clarity.  */
11721
11722 bfd_boolean
11723 _bfd_mips_elf_is_target_special_symbol (bfd *abfd, asymbol *sym)
11724 {
11725   return _bfd_elf_is_local_label_name (abfd, sym->name);
11726 }
11727
11728 /* MIPS ELF uses a special find_nearest_line routine in order the
11729    handle the ECOFF debugging information.  */
11730
11731 struct mips_elf_find_line
11732 {
11733   struct ecoff_debug_info d;
11734   struct ecoff_find_line i;
11735 };
11736
11737 bfd_boolean
11738 _bfd_mips_elf_find_nearest_line (bfd *abfd, asection *section,
11739                                  asymbol **symbols, bfd_vma offset,
11740                                  const char **filename_ptr,
11741                                  const char **functionname_ptr,
11742                                  unsigned int *line_ptr)
11743 {
11744   asection *msec;
11745
11746   if (_bfd_dwarf1_find_nearest_line (abfd, section, symbols, offset,
11747                                      filename_ptr, functionname_ptr,
11748                                      line_ptr))
11749     return TRUE;
11750
11751   if (_bfd_dwarf2_find_nearest_line (abfd, dwarf_debug_sections,
11752                                      section, symbols, offset,
11753                                      filename_ptr, functionname_ptr,
11754                                      line_ptr, NULL, ABI_64_P (abfd) ? 8 : 0,
11755                                      &elf_tdata (abfd)->dwarf2_find_line_info))
11756     return TRUE;
11757
11758   msec = bfd_get_section_by_name (abfd, ".mdebug");
11759   if (msec != NULL)
11760     {
11761       flagword origflags;
11762       struct mips_elf_find_line *fi;
11763       const struct ecoff_debug_swap * const swap =
11764         get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
11765
11766       /* If we are called during a link, mips_elf_final_link may have
11767          cleared the SEC_HAS_CONTENTS field.  We force it back on here
11768          if appropriate (which it normally will be).  */
11769       origflags = msec->flags;
11770       if (elf_section_data (msec)->this_hdr.sh_type != SHT_NOBITS)
11771         msec->flags |= SEC_HAS_CONTENTS;
11772
11773       fi = elf_tdata (abfd)->find_line_info;
11774       if (fi == NULL)
11775         {
11776           bfd_size_type external_fdr_size;
11777           char *fraw_src;
11778           char *fraw_end;
11779           struct fdr *fdr_ptr;
11780           bfd_size_type amt = sizeof (struct mips_elf_find_line);
11781
11782           fi = bfd_zalloc (abfd, amt);
11783           if (fi == NULL)
11784             {
11785               msec->flags = origflags;
11786               return FALSE;
11787             }
11788
11789           if (! _bfd_mips_elf_read_ecoff_info (abfd, msec, &fi->d))
11790             {
11791               msec->flags = origflags;
11792               return FALSE;
11793             }
11794
11795           /* Swap in the FDR information.  */
11796           amt = fi->d.symbolic_header.ifdMax * sizeof (struct fdr);
11797           fi->d.fdr = bfd_alloc (abfd, amt);
11798           if (fi->d.fdr == NULL)
11799             {
11800               msec->flags = origflags;
11801               return FALSE;
11802             }
11803           external_fdr_size = swap->external_fdr_size;
11804           fdr_ptr = fi->d.fdr;
11805           fraw_src = (char *) fi->d.external_fdr;
11806           fraw_end = (fraw_src
11807                       + fi->d.symbolic_header.ifdMax * external_fdr_size);
11808           for (; fraw_src < fraw_end; fraw_src += external_fdr_size, fdr_ptr++)
11809             (*swap->swap_fdr_in) (abfd, fraw_src, fdr_ptr);
11810
11811           elf_tdata (abfd)->find_line_info = fi;
11812
11813           /* Note that we don't bother to ever free this information.
11814              find_nearest_line is either called all the time, as in
11815              objdump -l, so the information should be saved, or it is
11816              rarely called, as in ld error messages, so the memory
11817              wasted is unimportant.  Still, it would probably be a
11818              good idea for free_cached_info to throw it away.  */
11819         }
11820
11821       if (_bfd_ecoff_locate_line (abfd, section, offset, &fi->d, swap,
11822                                   &fi->i, filename_ptr, functionname_ptr,
11823                                   line_ptr))
11824         {
11825           msec->flags = origflags;
11826           return TRUE;
11827         }
11828
11829       msec->flags = origflags;
11830     }
11831
11832   /* Fall back on the generic ELF find_nearest_line routine.  */
11833
11834   return _bfd_elf_find_nearest_line (abfd, section, symbols, offset,
11835                                      filename_ptr, functionname_ptr,
11836                                      line_ptr);
11837 }
11838
11839 bfd_boolean
11840 _bfd_mips_elf_find_inliner_info (bfd *abfd,
11841                                  const char **filename_ptr,
11842                                  const char **functionname_ptr,
11843                                  unsigned int *line_ptr)
11844 {
11845   bfd_boolean found;
11846   found = _bfd_dwarf2_find_inliner_info (abfd, filename_ptr,
11847                                          functionname_ptr, line_ptr,
11848                                          & elf_tdata (abfd)->dwarf2_find_line_info);
11849   return found;
11850 }
11851
11852 \f
11853 /* When are writing out the .options or .MIPS.options section,
11854    remember the bytes we are writing out, so that we can install the
11855    GP value in the section_processing routine.  */
11856
11857 bfd_boolean
11858 _bfd_mips_elf_set_section_contents (bfd *abfd, sec_ptr section,
11859                                     const void *location,
11860                                     file_ptr offset, bfd_size_type count)
11861 {
11862   if (MIPS_ELF_OPTIONS_SECTION_NAME_P (section->name))
11863     {
11864       bfd_byte *c;
11865
11866       if (elf_section_data (section) == NULL)
11867         {
11868           bfd_size_type amt = sizeof (struct bfd_elf_section_data);
11869           section->used_by_bfd = bfd_zalloc (abfd, amt);
11870           if (elf_section_data (section) == NULL)
11871             return FALSE;
11872         }
11873       c = mips_elf_section_data (section)->u.tdata;
11874       if (c == NULL)
11875         {
11876           c = bfd_zalloc (abfd, section->size);
11877           if (c == NULL)
11878             return FALSE;
11879           mips_elf_section_data (section)->u.tdata = c;
11880         }
11881
11882       memcpy (c + offset, location, count);
11883     }
11884
11885   return _bfd_elf_set_section_contents (abfd, section, location, offset,
11886                                         count);
11887 }
11888
11889 /* This is almost identical to bfd_generic_get_... except that some
11890    MIPS relocations need to be handled specially.  Sigh.  */
11891
11892 bfd_byte *
11893 _bfd_elf_mips_get_relocated_section_contents
11894   (bfd *abfd,
11895    struct bfd_link_info *link_info,
11896    struct bfd_link_order *link_order,
11897    bfd_byte *data,
11898    bfd_boolean relocatable,
11899    asymbol **symbols)
11900 {
11901   /* Get enough memory to hold the stuff */
11902   bfd *input_bfd = link_order->u.indirect.section->owner;
11903   asection *input_section = link_order->u.indirect.section;
11904   bfd_size_type sz;
11905
11906   long reloc_size = bfd_get_reloc_upper_bound (input_bfd, input_section);
11907   arelent **reloc_vector = NULL;
11908   long reloc_count;
11909
11910   if (reloc_size < 0)
11911     goto error_return;
11912
11913   reloc_vector = bfd_malloc (reloc_size);
11914   if (reloc_vector == NULL && reloc_size != 0)
11915     goto error_return;
11916
11917   /* read in the section */
11918   sz = input_section->rawsize ? input_section->rawsize : input_section->size;
11919   if (!bfd_get_section_contents (input_bfd, input_section, data, 0, sz))
11920     goto error_return;
11921
11922   reloc_count = bfd_canonicalize_reloc (input_bfd,
11923                                         input_section,
11924                                         reloc_vector,
11925                                         symbols);
11926   if (reloc_count < 0)
11927     goto error_return;
11928
11929   if (reloc_count > 0)
11930     {
11931       arelent **parent;
11932       /* for mips */
11933       int gp_found;
11934       bfd_vma gp = 0x12345678;  /* initialize just to shut gcc up */
11935
11936       {
11937         struct bfd_hash_entry *h;
11938         struct bfd_link_hash_entry *lh;
11939         /* Skip all this stuff if we aren't mixing formats.  */
11940         if (abfd && input_bfd
11941             && abfd->xvec == input_bfd->xvec)
11942           lh = 0;
11943         else
11944           {
11945             h = bfd_hash_lookup (&link_info->hash->table, "_gp", FALSE, FALSE);
11946             lh = (struct bfd_link_hash_entry *) h;
11947           }
11948       lookup:
11949         if (lh)
11950           {
11951             switch (lh->type)
11952               {
11953               case bfd_link_hash_undefined:
11954               case bfd_link_hash_undefweak:
11955               case bfd_link_hash_common:
11956                 gp_found = 0;
11957                 break;
11958               case bfd_link_hash_defined:
11959               case bfd_link_hash_defweak:
11960                 gp_found = 1;
11961                 gp = lh->u.def.value;
11962                 break;
11963               case bfd_link_hash_indirect:
11964               case bfd_link_hash_warning:
11965                 lh = lh->u.i.link;
11966                 /* @@FIXME  ignoring warning for now */
11967                 goto lookup;
11968               case bfd_link_hash_new:
11969               default:
11970                 abort ();
11971               }
11972           }
11973         else
11974           gp_found = 0;
11975       }
11976       /* end mips */
11977       for (parent = reloc_vector; *parent != NULL; parent++)
11978         {
11979           char *error_message = NULL;
11980           bfd_reloc_status_type r;
11981
11982           /* Specific to MIPS: Deal with relocation types that require
11983              knowing the gp of the output bfd.  */
11984           asymbol *sym = *(*parent)->sym_ptr_ptr;
11985
11986           /* If we've managed to find the gp and have a special
11987              function for the relocation then go ahead, else default
11988              to the generic handling.  */
11989           if (gp_found
11990               && (*parent)->howto->special_function
11991               == _bfd_mips_elf32_gprel16_reloc)
11992             r = _bfd_mips_elf_gprel16_with_gp (input_bfd, sym, *parent,
11993                                                input_section, relocatable,
11994                                                data, gp);
11995           else
11996             r = bfd_perform_relocation (input_bfd, *parent, data,
11997                                         input_section,
11998                                         relocatable ? abfd : NULL,
11999                                         &error_message);
12000
12001           if (relocatable)
12002             {
12003               asection *os = input_section->output_section;
12004
12005               /* A partial link, so keep the relocs */
12006               os->orelocation[os->reloc_count] = *parent;
12007               os->reloc_count++;
12008             }
12009
12010           if (r != bfd_reloc_ok)
12011             {
12012               switch (r)
12013                 {
12014                 case bfd_reloc_undefined:
12015                   if (!((*link_info->callbacks->undefined_symbol)
12016                         (link_info, bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
12017                          input_bfd, input_section, (*parent)->address, TRUE)))
12018                     goto error_return;
12019                   break;
12020                 case bfd_reloc_dangerous:
12021                   BFD_ASSERT (error_message != NULL);
12022                   if (!((*link_info->callbacks->reloc_dangerous)
12023                         (link_info, error_message, input_bfd, input_section,
12024                          (*parent)->address)))
12025                     goto error_return;
12026                   break;
12027                 case bfd_reloc_overflow:
12028                   if (!((*link_info->callbacks->reloc_overflow)
12029                         (link_info, NULL,
12030                          bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
12031                          (*parent)->howto->name, (*parent)->addend,
12032                          input_bfd, input_section, (*parent)->address)))
12033                     goto error_return;
12034                   break;
12035                 case bfd_reloc_outofrange:
12036                 default:
12037                   abort ();
12038                   break;
12039                 }
12040
12041             }
12042         }
12043     }
12044   if (reloc_vector != NULL)
12045     free (reloc_vector);
12046   return data;
12047
12048 error_return:
12049   if (reloc_vector != NULL)
12050     free (reloc_vector);
12051   return NULL;
12052 }
12053 \f
12054 static bfd_boolean
12055 mips_elf_relax_delete_bytes (bfd *abfd,
12056                              asection *sec, bfd_vma addr, int count)
12057 {
12058   Elf_Internal_Shdr *symtab_hdr;
12059   unsigned int sec_shndx;
12060   bfd_byte *contents;
12061   Elf_Internal_Rela *irel, *irelend;
12062   Elf_Internal_Sym *isym;
12063   Elf_Internal_Sym *isymend;
12064   struct elf_link_hash_entry **sym_hashes;
12065   struct elf_link_hash_entry **end_hashes;
12066   struct elf_link_hash_entry **start_hashes;
12067   unsigned int symcount;
12068
12069   sec_shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
12070   contents = elf_section_data (sec)->this_hdr.contents;
12071
12072   irel = elf_section_data (sec)->relocs;
12073   irelend = irel + sec->reloc_count;
12074
12075   /* Actually delete the bytes.  */
12076   memmove (contents + addr, contents + addr + count,
12077            (size_t) (sec->size - addr - count));
12078   sec->size -= count;
12079
12080   /* Adjust all the relocs.  */
12081   for (irel = elf_section_data (sec)->relocs; irel < irelend; irel++)
12082     {
12083       /* Get the new reloc address.  */
12084       if (irel->r_offset > addr)
12085         irel->r_offset -= count;
12086     }
12087
12088   BFD_ASSERT (addr % 2 == 0);
12089   BFD_ASSERT (count % 2 == 0);
12090
12091   /* Adjust the local symbols defined in this section.  */
12092   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
12093   isym = (Elf_Internal_Sym *) symtab_hdr->contents;
12094   for (isymend = isym + symtab_hdr->sh_info; isym < isymend; isym++)
12095     if (isym->st_shndx == sec_shndx && isym->st_value > addr)
12096       isym->st_value -= count;
12097
12098   /* Now adjust the global symbols defined in this section.  */
12099   symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym)
12100               - symtab_hdr->sh_info);
12101   sym_hashes = start_hashes = elf_sym_hashes (abfd);
12102   end_hashes = sym_hashes + symcount;
12103
12104   for (; sym_hashes < end_hashes; sym_hashes++)
12105     {
12106       struct elf_link_hash_entry *sym_hash = *sym_hashes;
12107
12108       if ((sym_hash->root.type == bfd_link_hash_defined
12109            || sym_hash->root.type == bfd_link_hash_defweak)
12110           && sym_hash->root.u.def.section == sec)
12111         {
12112           bfd_vma value = sym_hash->root.u.def.value;
12113
12114           if (ELF_ST_IS_MICROMIPS (sym_hash->other))
12115             value &= MINUS_TWO;
12116           if (value > addr)
12117             sym_hash->root.u.def.value -= count;
12118         }
12119     }
12120
12121   return TRUE;
12122 }
12123
12124
12125 /* Opcodes needed for microMIPS relaxation as found in
12126    opcodes/micromips-opc.c.  */
12127
12128 struct opcode_descriptor {
12129   unsigned long match;
12130   unsigned long mask;
12131 };
12132
12133 /* The $ra register aka $31.  */
12134
12135 #define RA 31
12136
12137 /* 32-bit instruction format register fields.  */
12138
12139 #define OP32_SREG(opcode) (((opcode) >> 16) & 0x1f)
12140 #define OP32_TREG(opcode) (((opcode) >> 21) & 0x1f)
12141
12142 /* Check if a 5-bit register index can be abbreviated to 3 bits.  */
12143
12144 #define OP16_VALID_REG(r) \
12145   ((2 <= (r) && (r) <= 7) || (16 <= (r) && (r) <= 17))
12146
12147
12148 /* 32-bit and 16-bit branches.  */
12149
12150 static const struct opcode_descriptor b_insns_32[] = {
12151   { /* "b",     "p",            */ 0x40400000, 0xffff0000 }, /* bgez 0 */
12152   { /* "b",     "p",            */ 0x94000000, 0xffff0000 }, /* beq 0, 0 */
12153   { 0, 0 }  /* End marker for find_match().  */
12154 };
12155
12156 static const struct opcode_descriptor bc_insn_32 =
12157   { /* "bc(1|2)(ft)", "N,p",    */ 0x42800000, 0xfec30000 };
12158
12159 static const struct opcode_descriptor bz_insn_32 =
12160   { /* "b(g|l)(e|t)z", "s,p",   */ 0x40000000, 0xff200000 };
12161
12162 static const struct opcode_descriptor bzal_insn_32 =
12163   { /* "b(ge|lt)zal", "s,p",    */ 0x40200000, 0xffa00000 };
12164
12165 static const struct opcode_descriptor beq_insn_32 =
12166   { /* "b(eq|ne)", "s,t,p",     */ 0x94000000, 0xdc000000 };
12167
12168 static const struct opcode_descriptor b_insn_16 =
12169   { /* "b",     "mD",           */ 0xcc00,     0xfc00 };
12170
12171 static const struct opcode_descriptor bz_insn_16 =
12172   { /* "b(eq|ne)z", "md,mE",    */ 0x8c00,     0xdc00 };
12173
12174
12175 /* 32-bit and 16-bit branch EQ and NE zero.  */
12176
12177 /* NOTE: All opcode tables have BEQ/BNE in the same order: first the
12178    eq and second the ne.  This convention is used when replacing a
12179    32-bit BEQ/BNE with the 16-bit version.  */
12180
12181 #define BZC32_REG_FIELD(r) (((r) & 0x1f) << 16)
12182
12183 static const struct opcode_descriptor bz_rs_insns_32[] = {
12184   { /* "beqz",  "s,p",          */ 0x94000000, 0xffe00000 },
12185   { /* "bnez",  "s,p",          */ 0xb4000000, 0xffe00000 },
12186   { 0, 0 }  /* End marker for find_match().  */
12187 };
12188
12189 static const struct opcode_descriptor bz_rt_insns_32[] = {
12190   { /* "beqz",  "t,p",          */ 0x94000000, 0xfc01f000 },
12191   { /* "bnez",  "t,p",          */ 0xb4000000, 0xfc01f000 },
12192   { 0, 0 }  /* End marker for find_match().  */
12193 };
12194
12195 static const struct opcode_descriptor bzc_insns_32[] = {
12196   { /* "beqzc", "s,p",          */ 0x40e00000, 0xffe00000 },
12197   { /* "bnezc", "s,p",          */ 0x40a00000, 0xffe00000 },
12198   { 0, 0 }  /* End marker for find_match().  */
12199 };
12200
12201 static const struct opcode_descriptor bz_insns_16[] = {
12202   { /* "beqz",  "md,mE",        */ 0x8c00,     0xfc00 },
12203   { /* "bnez",  "md,mE",        */ 0xac00,     0xfc00 },
12204   { 0, 0 }  /* End marker for find_match().  */
12205 };
12206
12207 /* Switch between a 5-bit register index and its 3-bit shorthand.  */
12208
12209 #define BZ16_REG(opcode) ((((((opcode) >> 7) & 7) + 0x1e) & 0x17) + 2)
12210 #define BZ16_REG_FIELD(r) \
12211   (((2 <= (r) && (r) <= 7) ? (r) : ((r) - 16)) << 7)
12212
12213
12214 /* 32-bit instructions with a delay slot.  */
12215
12216 static const struct opcode_descriptor jal_insn_32_bd16 =
12217   { /* "jals",  "a",            */ 0x74000000, 0xfc000000 };
12218
12219 static const struct opcode_descriptor jal_insn_32_bd32 =
12220   { /* "jal",   "a",            */ 0xf4000000, 0xfc000000 };
12221
12222 static const struct opcode_descriptor jal_x_insn_32_bd32 =
12223   { /* "jal[x]", "a",           */ 0xf0000000, 0xf8000000 };
12224
12225 static const struct opcode_descriptor j_insn_32 =
12226   { /* "j",     "a",            */ 0xd4000000, 0xfc000000 };
12227
12228 static const struct opcode_descriptor jalr_insn_32 =
12229   { /* "jalr[.hb]", "t,s",      */ 0x00000f3c, 0xfc00efff };
12230
12231 /* This table can be compacted, because no opcode replacement is made.  */
12232
12233 static const struct opcode_descriptor ds_insns_32_bd16[] = {
12234   { /* "jals",  "a",            */ 0x74000000, 0xfc000000 },
12235
12236   { /* "jalrs[.hb]", "t,s",     */ 0x00004f3c, 0xfc00efff },
12237   { /* "b(ge|lt)zals", "s,p",   */ 0x42200000, 0xffa00000 },
12238
12239   { /* "b(g|l)(e|t)z", "s,p",   */ 0x40000000, 0xff200000 },
12240   { /* "b(eq|ne)", "s,t,p",     */ 0x94000000, 0xdc000000 },
12241   { /* "j",     "a",            */ 0xd4000000, 0xfc000000 },
12242   { 0, 0 }  /* End marker for find_match().  */
12243 };
12244
12245 /* This table can be compacted, because no opcode replacement is made.  */
12246
12247 static const struct opcode_descriptor ds_insns_32_bd32[] = {
12248   { /* "jal[x]", "a",           */ 0xf0000000, 0xf8000000 },
12249
12250   { /* "jalr[.hb]", "t,s",      */ 0x00000f3c, 0xfc00efff },
12251   { /* "b(ge|lt)zal", "s,p",    */ 0x40200000, 0xffa00000 },
12252   { 0, 0 }  /* End marker for find_match().  */
12253 };
12254
12255
12256 /* 16-bit instructions with a delay slot.  */
12257
12258 static const struct opcode_descriptor jalr_insn_16_bd16 =
12259   { /* "jalrs", "my,mj",        */ 0x45e0,     0xffe0 };
12260
12261 static const struct opcode_descriptor jalr_insn_16_bd32 =
12262   { /* "jalr",  "my,mj",        */ 0x45c0,     0xffe0 };
12263
12264 static const struct opcode_descriptor jr_insn_16 =
12265   { /* "jr",    "mj",           */ 0x4580,     0xffe0 };
12266
12267 #define JR16_REG(opcode) ((opcode) & 0x1f)
12268
12269 /* This table can be compacted, because no opcode replacement is made.  */
12270
12271 static const struct opcode_descriptor ds_insns_16_bd16[] = {
12272   { /* "jalrs", "my,mj",        */ 0x45e0,     0xffe0 },
12273
12274   { /* "b",     "mD",           */ 0xcc00,     0xfc00 },
12275   { /* "b(eq|ne)z", "md,mE",    */ 0x8c00,     0xdc00 },
12276   { /* "jr",    "mj",           */ 0x4580,     0xffe0 },
12277   { 0, 0 }  /* End marker for find_match().  */
12278 };
12279
12280
12281 /* LUI instruction.  */
12282
12283 static const struct opcode_descriptor lui_insn =
12284  { /* "lui",    "s,u",          */ 0x41a00000, 0xffe00000 };
12285
12286
12287 /* ADDIU instruction.  */
12288
12289 static const struct opcode_descriptor addiu_insn =
12290   { /* "addiu", "t,r,j",        */ 0x30000000, 0xfc000000 };
12291
12292 static const struct opcode_descriptor addiupc_insn =
12293   { /* "addiu", "mb,$pc,mQ",    */ 0x78000000, 0xfc000000 };
12294
12295 #define ADDIUPC_REG_FIELD(r) \
12296   (((2 <= (r) && (r) <= 7) ? (r) : ((r) - 16)) << 23)
12297
12298
12299 /* Relaxable instructions in a JAL delay slot: MOVE.  */
12300
12301 /* The 16-bit move has rd in 9:5 and rs in 4:0.  The 32-bit moves
12302    (ADDU, OR) have rd in 15:11 and rs in 10:16.  */
12303 #define MOVE32_RD(opcode) (((opcode) >> 11) & 0x1f)
12304 #define MOVE32_RS(opcode) (((opcode) >> 16) & 0x1f)
12305
12306 #define MOVE16_RD_FIELD(r) (((r) & 0x1f) << 5)
12307 #define MOVE16_RS_FIELD(r) (((r) & 0x1f)     )
12308
12309 static const struct opcode_descriptor move_insns_32[] = {
12310   { /* "move",  "d,s",          */ 0x00000150, 0xffe007ff }, /* addu d,s,$0 */
12311   { /* "move",  "d,s",          */ 0x00000290, 0xffe007ff }, /* or   d,s,$0 */
12312   { 0, 0 }  /* End marker for find_match().  */
12313 };
12314
12315 static const struct opcode_descriptor move_insn_16 =
12316   { /* "move",  "mp,mj",        */ 0x0c00,     0xfc00 };
12317
12318
12319 /* NOP instructions.  */
12320
12321 static const struct opcode_descriptor nop_insn_32 =
12322   { /* "nop",   "",             */ 0x00000000, 0xffffffff };
12323
12324 static const struct opcode_descriptor nop_insn_16 =
12325   { /* "nop",   "",             */ 0x0c00,     0xffff };
12326
12327
12328 /* Instruction match support.  */
12329
12330 #define MATCH(opcode, insn) ((opcode & insn.mask) == insn.match)
12331
12332 static int
12333 find_match (unsigned long opcode, const struct opcode_descriptor insn[])
12334 {
12335   unsigned long indx;
12336
12337   for (indx = 0; insn[indx].mask != 0; indx++)
12338     if (MATCH (opcode, insn[indx]))
12339       return indx;
12340
12341   return -1;
12342 }
12343
12344
12345 /* Branch and delay slot decoding support.  */
12346
12347 /* If PTR points to what *might* be a 16-bit branch or jump, then
12348    return the minimum length of its delay slot, otherwise return 0.
12349    Non-zero results are not definitive as we might be checking against
12350    the second half of another instruction.  */
12351
12352 static int
12353 check_br16_dslot (bfd *abfd, bfd_byte *ptr)
12354 {
12355   unsigned long opcode;
12356   int bdsize;
12357
12358   opcode = bfd_get_16 (abfd, ptr);
12359   if (MATCH (opcode, jalr_insn_16_bd32) != 0)
12360     /* 16-bit branch/jump with a 32-bit delay slot.  */
12361     bdsize = 4;
12362   else if (MATCH (opcode, jalr_insn_16_bd16) != 0
12363            || find_match (opcode, ds_insns_16_bd16) >= 0)
12364     /* 16-bit branch/jump with a 16-bit delay slot.  */
12365     bdsize = 2;
12366   else
12367     /* No delay slot.  */
12368     bdsize = 0;
12369
12370   return bdsize;
12371 }
12372
12373 /* If PTR points to what *might* be a 32-bit branch or jump, then
12374    return the minimum length of its delay slot, otherwise return 0.
12375    Non-zero results are not definitive as we might be checking against
12376    the second half of another instruction.  */
12377
12378 static int
12379 check_br32_dslot (bfd *abfd, bfd_byte *ptr)
12380 {
12381   unsigned long opcode;
12382   int bdsize;
12383
12384   opcode = bfd_get_micromips_32 (abfd, ptr);
12385   if (find_match (opcode, ds_insns_32_bd32) >= 0)
12386     /* 32-bit branch/jump with a 32-bit delay slot.  */
12387     bdsize = 4;
12388   else if (find_match (opcode, ds_insns_32_bd16) >= 0)
12389     /* 32-bit branch/jump with a 16-bit delay slot.  */
12390     bdsize = 2;
12391   else
12392     /* No delay slot.  */
12393     bdsize = 0;
12394
12395   return bdsize;
12396 }
12397
12398 /* If PTR points to a 16-bit branch or jump with a 32-bit delay slot
12399    that doesn't fiddle with REG, then return TRUE, otherwise FALSE.  */
12400
12401 static bfd_boolean
12402 check_br16 (bfd *abfd, bfd_byte *ptr, unsigned long reg)
12403 {
12404   unsigned long opcode;
12405
12406   opcode = bfd_get_16 (abfd, ptr);
12407   if (MATCH (opcode, b_insn_16)
12408                                                 /* B16  */
12409       || (MATCH (opcode, jr_insn_16) && reg != JR16_REG (opcode))
12410                                                 /* JR16  */
12411       || (MATCH (opcode, bz_insn_16) && reg != BZ16_REG (opcode))
12412                                                 /* BEQZ16, BNEZ16  */
12413       || (MATCH (opcode, jalr_insn_16_bd32)
12414                                                 /* JALR16  */
12415           && reg != JR16_REG (opcode) && reg != RA))
12416     return TRUE;
12417
12418   return FALSE;
12419 }
12420
12421 /* If PTR points to a 32-bit branch or jump that doesn't fiddle with REG,
12422    then return TRUE, otherwise FALSE.  */
12423
12424 static bfd_boolean
12425 check_br32 (bfd *abfd, bfd_byte *ptr, unsigned long reg)
12426 {
12427   unsigned long opcode;
12428
12429   opcode = bfd_get_micromips_32 (abfd, ptr);
12430   if (MATCH (opcode, j_insn_32)
12431                                                 /* J  */
12432       || MATCH (opcode, bc_insn_32)
12433                                                 /* BC1F, BC1T, BC2F, BC2T  */
12434       || (MATCH (opcode, jal_x_insn_32_bd32) && reg != RA)
12435                                                 /* JAL, JALX  */
12436       || (MATCH (opcode, bz_insn_32) && reg != OP32_SREG (opcode))
12437                                                 /* BGEZ, BGTZ, BLEZ, BLTZ  */
12438       || (MATCH (opcode, bzal_insn_32)
12439                                                 /* BGEZAL, BLTZAL  */
12440           && reg != OP32_SREG (opcode) && reg != RA)
12441       || ((MATCH (opcode, jalr_insn_32) || MATCH (opcode, beq_insn_32))
12442                                                 /* JALR, JALR.HB, BEQ, BNE  */
12443           && reg != OP32_SREG (opcode) && reg != OP32_TREG (opcode)))
12444     return TRUE;
12445
12446   return FALSE;
12447 }
12448
12449 /* If the instruction encoding at PTR and relocations [INTERNAL_RELOCS,
12450    IRELEND) at OFFSET indicate that there must be a compact branch there,
12451    then return TRUE, otherwise FALSE.  */
12452
12453 static bfd_boolean
12454 check_relocated_bzc (bfd *abfd, const bfd_byte *ptr, bfd_vma offset,
12455                      const Elf_Internal_Rela *internal_relocs,
12456                      const Elf_Internal_Rela *irelend)
12457 {
12458   const Elf_Internal_Rela *irel;
12459   unsigned long opcode;
12460
12461   opcode = bfd_get_micromips_32 (abfd, ptr);
12462   if (find_match (opcode, bzc_insns_32) < 0)
12463     return FALSE;
12464
12465   for (irel = internal_relocs; irel < irelend; irel++)
12466     if (irel->r_offset == offset
12467         && ELF32_R_TYPE (irel->r_info) == R_MICROMIPS_PC16_S1)
12468       return TRUE;
12469
12470   return FALSE;
12471 }
12472
12473 /* Bitsize checking.  */
12474 #define IS_BITSIZE(val, N)                                              \
12475   (((((val) & ((1ULL << (N)) - 1)) ^ (1ULL << ((N) - 1)))               \
12476     - (1ULL << ((N) - 1))) == (val))
12477
12478 \f
12479 bfd_boolean
12480 _bfd_mips_elf_relax_section (bfd *abfd, asection *sec,
12481                              struct bfd_link_info *link_info,
12482                              bfd_boolean *again)
12483 {
12484   Elf_Internal_Shdr *symtab_hdr;
12485   Elf_Internal_Rela *internal_relocs;
12486   Elf_Internal_Rela *irel, *irelend;
12487   bfd_byte *contents = NULL;
12488   Elf_Internal_Sym *isymbuf = NULL;
12489
12490   /* Assume nothing changes.  */
12491   *again = FALSE;
12492
12493   /* We don't have to do anything for a relocatable link, if
12494      this section does not have relocs, or if this is not a
12495      code section.  */
12496
12497   if (link_info->relocatable
12498       || (sec->flags & SEC_RELOC) == 0
12499       || sec->reloc_count == 0
12500       || (sec->flags & SEC_CODE) == 0)
12501     return TRUE;
12502
12503   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
12504
12505   /* Get a copy of the native relocations.  */
12506   internal_relocs = (_bfd_elf_link_read_relocs
12507                      (abfd, sec, NULL, (Elf_Internal_Rela *) NULL,
12508                       link_info->keep_memory));
12509   if (internal_relocs == NULL)
12510     goto error_return;
12511
12512   /* Walk through them looking for relaxing opportunities.  */
12513   irelend = internal_relocs + sec->reloc_count;
12514   for (irel = internal_relocs; irel < irelend; irel++)
12515     {
12516       unsigned long r_symndx = ELF32_R_SYM (irel->r_info);
12517       unsigned int r_type = ELF32_R_TYPE (irel->r_info);
12518       bfd_boolean target_is_micromips_code_p;
12519       unsigned long opcode;
12520       bfd_vma symval;
12521       bfd_vma pcrval;
12522       bfd_byte *ptr;
12523       int fndopc;
12524
12525       /* The number of bytes to delete for relaxation and from where
12526          to delete these bytes starting at irel->r_offset.  */
12527       int delcnt = 0;
12528       int deloff = 0;
12529
12530       /* If this isn't something that can be relaxed, then ignore
12531          this reloc.  */
12532       if (r_type != R_MICROMIPS_HI16
12533           && r_type != R_MICROMIPS_PC16_S1
12534           && r_type != R_MICROMIPS_26_S1)
12535         continue;
12536
12537       /* Get the section contents if we haven't done so already.  */
12538       if (contents == NULL)
12539         {
12540           /* Get cached copy if it exists.  */
12541           if (elf_section_data (sec)->this_hdr.contents != NULL)
12542             contents = elf_section_data (sec)->this_hdr.contents;
12543           /* Go get them off disk.  */
12544           else if (!bfd_malloc_and_get_section (abfd, sec, &contents))
12545             goto error_return;
12546         }
12547       ptr = contents + irel->r_offset;
12548
12549       /* Read this BFD's local symbols if we haven't done so already.  */
12550       if (isymbuf == NULL && symtab_hdr->sh_info != 0)
12551         {
12552           isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
12553           if (isymbuf == NULL)
12554             isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
12555                                             symtab_hdr->sh_info, 0,
12556                                             NULL, NULL, NULL);
12557           if (isymbuf == NULL)
12558             goto error_return;
12559         }
12560
12561       /* Get the value of the symbol referred to by the reloc.  */
12562       if (r_symndx < symtab_hdr->sh_info)
12563         {
12564           /* A local symbol.  */
12565           Elf_Internal_Sym *isym;
12566           asection *sym_sec;
12567
12568           isym = isymbuf + r_symndx;
12569           if (isym->st_shndx == SHN_UNDEF)
12570             sym_sec = bfd_und_section_ptr;
12571           else if (isym->st_shndx == SHN_ABS)
12572             sym_sec = bfd_abs_section_ptr;
12573           else if (isym->st_shndx == SHN_COMMON)
12574             sym_sec = bfd_com_section_ptr;
12575           else
12576             sym_sec = bfd_section_from_elf_index (abfd, isym->st_shndx);
12577           symval = (isym->st_value
12578                     + sym_sec->output_section->vma
12579                     + sym_sec->output_offset);
12580           target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (isym->st_other);
12581         }
12582       else
12583         {
12584           unsigned long indx;
12585           struct elf_link_hash_entry *h;
12586
12587           /* An external symbol.  */
12588           indx = r_symndx - symtab_hdr->sh_info;
12589           h = elf_sym_hashes (abfd)[indx];
12590           BFD_ASSERT (h != NULL);
12591
12592           if (h->root.type != bfd_link_hash_defined
12593               && h->root.type != bfd_link_hash_defweak)
12594             /* This appears to be a reference to an undefined
12595                symbol.  Just ignore it -- it will be caught by the
12596                regular reloc processing.  */
12597             continue;
12598
12599           symval = (h->root.u.def.value
12600                     + h->root.u.def.section->output_section->vma
12601                     + h->root.u.def.section->output_offset);
12602           target_is_micromips_code_p = (!h->needs_plt
12603                                         && ELF_ST_IS_MICROMIPS (h->other));
12604         }
12605
12606
12607       /* For simplicity of coding, we are going to modify the
12608          section contents, the section relocs, and the BFD symbol
12609          table.  We must tell the rest of the code not to free up this
12610          information.  It would be possible to instead create a table
12611          of changes which have to be made, as is done in coff-mips.c;
12612          that would be more work, but would require less memory when
12613          the linker is run.  */
12614
12615       /* Only 32-bit instructions relaxed.  */
12616       if (irel->r_offset + 4 > sec->size)
12617         continue;
12618
12619       opcode = bfd_get_micromips_32 (abfd, ptr);
12620
12621       /* This is the pc-relative distance from the instruction the
12622          relocation is applied to, to the symbol referred.  */
12623       pcrval = (symval
12624                 - (sec->output_section->vma + sec->output_offset)
12625                 - irel->r_offset);
12626
12627       /* R_MICROMIPS_HI16 / LUI relaxation to nil, performing relaxation
12628          of corresponding R_MICROMIPS_LO16 to R_MICROMIPS_HI0_LO16 or
12629          R_MICROMIPS_PC23_S2.  The R_MICROMIPS_PC23_S2 condition is
12630
12631            (symval % 4 == 0 && IS_BITSIZE (pcrval, 25))
12632
12633          where pcrval has first to be adjusted to apply against the LO16
12634          location (we make the adjustment later on, when we have figured
12635          out the offset).  */
12636       if (r_type == R_MICROMIPS_HI16 && MATCH (opcode, lui_insn))
12637         {
12638           bfd_boolean bzc = FALSE;
12639           unsigned long nextopc;
12640           unsigned long reg;
12641           bfd_vma offset;
12642
12643           /* Give up if the previous reloc was a HI16 against this symbol
12644              too.  */
12645           if (irel > internal_relocs
12646               && ELF32_R_TYPE (irel[-1].r_info) == R_MICROMIPS_HI16
12647               && ELF32_R_SYM (irel[-1].r_info) == r_symndx)
12648             continue;
12649
12650           /* Or if the next reloc is not a LO16 against this symbol.  */
12651           if (irel + 1 >= irelend
12652               || ELF32_R_TYPE (irel[1].r_info) != R_MICROMIPS_LO16
12653               || ELF32_R_SYM (irel[1].r_info) != r_symndx)
12654             continue;
12655
12656           /* Or if the second next reloc is a LO16 against this symbol too.  */
12657           if (irel + 2 >= irelend
12658               && ELF32_R_TYPE (irel[2].r_info) == R_MICROMIPS_LO16
12659               && ELF32_R_SYM (irel[2].r_info) == r_symndx)
12660             continue;
12661
12662           /* See if the LUI instruction *might* be in a branch delay slot.
12663              We check whether what looks like a 16-bit branch or jump is
12664              actually an immediate argument to a compact branch, and let
12665              it through if so.  */
12666           if (irel->r_offset >= 2
12667               && check_br16_dslot (abfd, ptr - 2)
12668               && !(irel->r_offset >= 4
12669                    && (bzc = check_relocated_bzc (abfd,
12670                                                   ptr - 4, irel->r_offset - 4,
12671                                                   internal_relocs, irelend))))
12672             continue;
12673           if (irel->r_offset >= 4
12674               && !bzc
12675               && check_br32_dslot (abfd, ptr - 4))
12676             continue;
12677
12678           reg = OP32_SREG (opcode);
12679
12680           /* We only relax adjacent instructions or ones separated with
12681              a branch or jump that has a delay slot.  The branch or jump
12682              must not fiddle with the register used to hold the address.
12683              Subtract 4 for the LUI itself.  */
12684           offset = irel[1].r_offset - irel[0].r_offset;
12685           switch (offset - 4)
12686             {
12687             case 0:
12688               break;
12689             case 2:
12690               if (check_br16 (abfd, ptr + 4, reg))
12691                 break;
12692               continue;
12693             case 4:
12694               if (check_br32 (abfd, ptr + 4, reg))
12695                 break;
12696               continue;
12697             default:
12698               continue;
12699             }
12700
12701           nextopc = bfd_get_micromips_32 (abfd, contents + irel[1].r_offset);
12702
12703           /* Give up unless the same register is used with both
12704              relocations.  */
12705           if (OP32_SREG (nextopc) != reg)
12706             continue;
12707
12708           /* Now adjust pcrval, subtracting the offset to the LO16 reloc
12709              and rounding up to take masking of the two LSBs into account.  */
12710           pcrval = ((pcrval - offset + 3) | 3) ^ 3;
12711
12712           /* R_MICROMIPS_LO16 relaxation to R_MICROMIPS_HI0_LO16.  */
12713           if (IS_BITSIZE (symval, 16))
12714             {
12715               /* Fix the relocation's type.  */
12716               irel[1].r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_HI0_LO16);
12717
12718               /* Instructions using R_MICROMIPS_LO16 have the base or
12719                  source register in bits 20:16.  This register becomes $0
12720                  (zero) as the result of the R_MICROMIPS_HI16 being 0.  */
12721               nextopc &= ~0x001f0000;
12722               bfd_put_16 (abfd, (nextopc >> 16) & 0xffff,
12723                           contents + irel[1].r_offset);
12724             }
12725
12726           /* R_MICROMIPS_LO16 / ADDIU relaxation to R_MICROMIPS_PC23_S2.
12727              We add 4 to take LUI deletion into account while checking
12728              the PC-relative distance.  */
12729           else if (symval % 4 == 0
12730                    && IS_BITSIZE (pcrval + 4, 25)
12731                    && MATCH (nextopc, addiu_insn)
12732                    && OP32_TREG (nextopc) == OP32_SREG (nextopc)
12733                    && OP16_VALID_REG (OP32_TREG (nextopc)))
12734             {
12735               /* Fix the relocation's type.  */
12736               irel[1].r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC23_S2);
12737
12738               /* Replace ADDIU with the ADDIUPC version.  */
12739               nextopc = (addiupc_insn.match
12740                          | ADDIUPC_REG_FIELD (OP32_TREG (nextopc)));
12741
12742               bfd_put_micromips_32 (abfd, nextopc,
12743                                     contents + irel[1].r_offset);
12744             }
12745
12746           /* Can't do anything, give up, sigh...  */
12747           else
12748             continue;
12749
12750           /* Fix the relocation's type.  */
12751           irel->r_info = ELF32_R_INFO (r_symndx, R_MIPS_NONE);
12752
12753           /* Delete the LUI instruction: 4 bytes at irel->r_offset.  */
12754           delcnt = 4;
12755           deloff = 0;
12756         }
12757
12758       /* Compact branch relaxation -- due to the multitude of macros
12759          employed by the compiler/assembler, compact branches are not
12760          always generated.  Obviously, this can/will be fixed elsewhere,
12761          but there is no drawback in double checking it here.  */
12762       else if (r_type == R_MICROMIPS_PC16_S1
12763                && irel->r_offset + 5 < sec->size
12764                && ((fndopc = find_match (opcode, bz_rs_insns_32)) >= 0
12765                    || (fndopc = find_match (opcode, bz_rt_insns_32)) >= 0)
12766                && MATCH (bfd_get_16 (abfd, ptr + 4), nop_insn_16))
12767         {
12768           unsigned long reg;
12769
12770           reg = OP32_SREG (opcode) ? OP32_SREG (opcode) : OP32_TREG (opcode);
12771
12772           /* Replace BEQZ/BNEZ with the compact version.  */
12773           opcode = (bzc_insns_32[fndopc].match
12774                     | BZC32_REG_FIELD (reg)
12775                     | (opcode & 0xffff));               /* Addend value.  */
12776
12777           bfd_put_micromips_32 (abfd, opcode, ptr);
12778
12779           /* Delete the 16-bit delay slot NOP: two bytes from
12780              irel->offset + 4.  */
12781           delcnt = 2;
12782           deloff = 4;
12783         }
12784
12785       /* R_MICROMIPS_PC16_S1 relaxation to R_MICROMIPS_PC10_S1.  We need
12786          to check the distance from the next instruction, so subtract 2.  */
12787       else if (r_type == R_MICROMIPS_PC16_S1
12788                && IS_BITSIZE (pcrval - 2, 11)
12789                && find_match (opcode, b_insns_32) >= 0)
12790         {
12791           /* Fix the relocation's type.  */
12792           irel->r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC10_S1);
12793
12794           /* Replace the 32-bit opcode with a 16-bit opcode.  */
12795           bfd_put_16 (abfd,
12796                       (b_insn_16.match
12797                        | (opcode & 0x3ff)),             /* Addend value.  */
12798                       ptr);
12799
12800           /* Delete 2 bytes from irel->r_offset + 2.  */
12801           delcnt = 2;
12802           deloff = 2;
12803         }
12804
12805       /* R_MICROMIPS_PC16_S1 relaxation to R_MICROMIPS_PC7_S1.  We need
12806          to check the distance from the next instruction, so subtract 2.  */
12807       else if (r_type == R_MICROMIPS_PC16_S1
12808                && IS_BITSIZE (pcrval - 2, 8)
12809                && (((fndopc = find_match (opcode, bz_rs_insns_32)) >= 0
12810                     && OP16_VALID_REG (OP32_SREG (opcode)))
12811                    || ((fndopc = find_match (opcode, bz_rt_insns_32)) >= 0
12812                        && OP16_VALID_REG (OP32_TREG (opcode)))))
12813         {
12814           unsigned long reg;
12815
12816           reg = OP32_SREG (opcode) ? OP32_SREG (opcode) : OP32_TREG (opcode);
12817
12818           /* Fix the relocation's type.  */
12819           irel->r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC7_S1);
12820
12821           /* Replace the 32-bit opcode with a 16-bit opcode.  */
12822           bfd_put_16 (abfd,
12823                       (bz_insns_16[fndopc].match
12824                        | BZ16_REG_FIELD (reg)
12825                        | (opcode & 0x7f)),              /* Addend value.  */
12826                       ptr);
12827
12828           /* Delete 2 bytes from irel->r_offset + 2.  */
12829           delcnt = 2;
12830           deloff = 2;
12831         }
12832
12833       /* R_MICROMIPS_26_S1 -- JAL to JALS relaxation for microMIPS targets.  */
12834       else if (r_type == R_MICROMIPS_26_S1
12835                && target_is_micromips_code_p
12836                && irel->r_offset + 7 < sec->size
12837                && MATCH (opcode, jal_insn_32_bd32))
12838         {
12839           unsigned long n32opc;
12840           bfd_boolean relaxed = FALSE;
12841
12842           n32opc = bfd_get_micromips_32 (abfd, ptr + 4);
12843
12844           if (MATCH (n32opc, nop_insn_32))
12845             {
12846               /* Replace delay slot 32-bit NOP with a 16-bit NOP.  */
12847               bfd_put_16 (abfd, nop_insn_16.match, ptr + 4);
12848
12849               relaxed = TRUE;
12850             }
12851           else if (find_match (n32opc, move_insns_32) >= 0)
12852             {
12853               /* Replace delay slot 32-bit MOVE with 16-bit MOVE.  */
12854               bfd_put_16 (abfd,
12855                           (move_insn_16.match
12856                            | MOVE16_RD_FIELD (MOVE32_RD (n32opc))
12857                            | MOVE16_RS_FIELD (MOVE32_RS (n32opc))),
12858                           ptr + 4);
12859
12860               relaxed = TRUE;
12861             }
12862           /* Other 32-bit instructions relaxable to 16-bit
12863              instructions will be handled here later.  */
12864
12865           if (relaxed)
12866             {
12867               /* JAL with 32-bit delay slot that is changed to a JALS
12868                  with 16-bit delay slot.  */
12869               bfd_put_micromips_32 (abfd, jal_insn_32_bd16.match, ptr);
12870
12871               /* Delete 2 bytes from irel->r_offset + 6.  */
12872               delcnt = 2;
12873               deloff = 6;
12874             }
12875         }
12876
12877       if (delcnt != 0)
12878         {
12879           /* Note that we've changed the relocs, section contents, etc.  */
12880           elf_section_data (sec)->relocs = internal_relocs;
12881           elf_section_data (sec)->this_hdr.contents = contents;
12882           symtab_hdr->contents = (unsigned char *) isymbuf;
12883
12884           /* Delete bytes depending on the delcnt and deloff.  */
12885           if (!mips_elf_relax_delete_bytes (abfd, sec,
12886                                             irel->r_offset + deloff, delcnt))
12887             goto error_return;
12888
12889           /* That will change things, so we should relax again.
12890              Note that this is not required, and it may be slow.  */
12891           *again = TRUE;
12892         }
12893     }
12894
12895   if (isymbuf != NULL
12896       && symtab_hdr->contents != (unsigned char *) isymbuf)
12897     {
12898       if (! link_info->keep_memory)
12899         free (isymbuf);
12900       else
12901         {
12902           /* Cache the symbols for elf_link_input_bfd.  */
12903           symtab_hdr->contents = (unsigned char *) isymbuf;
12904         }
12905     }
12906
12907   if (contents != NULL
12908       && elf_section_data (sec)->this_hdr.contents != contents)
12909     {
12910       if (! link_info->keep_memory)
12911         free (contents);
12912       else
12913         {
12914           /* Cache the section contents for elf_link_input_bfd.  */
12915           elf_section_data (sec)->this_hdr.contents = contents;
12916         }
12917     }
12918
12919   if (internal_relocs != NULL
12920       && elf_section_data (sec)->relocs != internal_relocs)
12921     free (internal_relocs);
12922
12923   return TRUE;
12924
12925  error_return:
12926   if (isymbuf != NULL
12927       && symtab_hdr->contents != (unsigned char *) isymbuf)
12928     free (isymbuf);
12929   if (contents != NULL
12930       && elf_section_data (sec)->this_hdr.contents != contents)
12931     free (contents);
12932   if (internal_relocs != NULL
12933       && elf_section_data (sec)->relocs != internal_relocs)
12934     free (internal_relocs);
12935
12936   return FALSE;
12937 }
12938 \f
12939 /* Create a MIPS ELF linker hash table.  */
12940
12941 struct bfd_link_hash_table *
12942 _bfd_mips_elf_link_hash_table_create (bfd *abfd)
12943 {
12944   struct mips_elf_link_hash_table *ret;
12945   bfd_size_type amt = sizeof (struct mips_elf_link_hash_table);
12946
12947   ret = bfd_zmalloc (amt);
12948   if (ret == NULL)
12949     return NULL;
12950
12951   if (!_bfd_elf_link_hash_table_init (&ret->root, abfd,
12952                                       mips_elf_link_hash_newfunc,
12953                                       sizeof (struct mips_elf_link_hash_entry),
12954                                       MIPS_ELF_DATA))
12955     {
12956       free (ret);
12957       return NULL;
12958     }
12959
12960   return &ret->root.root;
12961 }
12962
12963 /* Likewise, but indicate that the target is VxWorks.  */
12964
12965 struct bfd_link_hash_table *
12966 _bfd_mips_vxworks_link_hash_table_create (bfd *abfd)
12967 {
12968   struct bfd_link_hash_table *ret;
12969
12970   ret = _bfd_mips_elf_link_hash_table_create (abfd);
12971   if (ret)
12972     {
12973       struct mips_elf_link_hash_table *htab;
12974
12975       htab = (struct mips_elf_link_hash_table *) ret;
12976       htab->use_plts_and_copy_relocs = TRUE;
12977       htab->is_vxworks = TRUE;
12978     }
12979   return ret;
12980 }
12981
12982 /* A function that the linker calls if we are allowed to use PLTs
12983    and copy relocs.  */
12984
12985 void
12986 _bfd_mips_elf_use_plts_and_copy_relocs (struct bfd_link_info *info)
12987 {
12988   mips_elf_hash_table (info)->use_plts_and_copy_relocs = TRUE;
12989 }
12990 \f
12991 /* We need to use a special link routine to handle the .reginfo and
12992    the .mdebug sections.  We need to merge all instances of these
12993    sections together, not write them all out sequentially.  */
12994
12995 bfd_boolean
12996 _bfd_mips_elf_final_link (bfd *abfd, struct bfd_link_info *info)
12997 {
12998   asection *o;
12999   struct bfd_link_order *p;
13000   asection *reginfo_sec, *mdebug_sec, *gptab_data_sec, *gptab_bss_sec;
13001   asection *rtproc_sec;
13002   Elf32_RegInfo reginfo;
13003   struct ecoff_debug_info debug;
13004   struct mips_htab_traverse_info hti;
13005   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
13006   const struct ecoff_debug_swap *swap = bed->elf_backend_ecoff_debug_swap;
13007   HDRR *symhdr = &debug.symbolic_header;
13008   void *mdebug_handle = NULL;
13009   asection *s;
13010   EXTR esym;
13011   unsigned int i;
13012   bfd_size_type amt;
13013   struct mips_elf_link_hash_table *htab;
13014
13015   static const char * const secname[] =
13016   {
13017     ".text", ".init", ".fini", ".data",
13018     ".rodata", ".sdata", ".sbss", ".bss"
13019   };
13020   static const int sc[] =
13021   {
13022     scText, scInit, scFini, scData,
13023     scRData, scSData, scSBss, scBss
13024   };
13025
13026   /* Sort the dynamic symbols so that those with GOT entries come after
13027      those without.  */
13028   htab = mips_elf_hash_table (info);
13029   BFD_ASSERT (htab != NULL);
13030
13031   if (!mips_elf_sort_hash_table (abfd, info))
13032     return FALSE;
13033
13034   /* Create any scheduled LA25 stubs.  */
13035   hti.info = info;
13036   hti.output_bfd = abfd;
13037   hti.error = FALSE;
13038   htab_traverse (htab->la25_stubs, mips_elf_create_la25_stub, &hti);
13039   if (hti.error)
13040     return FALSE;
13041
13042   /* Get a value for the GP register.  */
13043   if (elf_gp (abfd) == 0)
13044     {
13045       struct bfd_link_hash_entry *h;
13046
13047       h = bfd_link_hash_lookup (info->hash, "_gp", FALSE, FALSE, TRUE);
13048       if (h != NULL && h->type == bfd_link_hash_defined)
13049         elf_gp (abfd) = (h->u.def.value
13050                          + h->u.def.section->output_section->vma
13051                          + h->u.def.section->output_offset);
13052       else if (htab->is_vxworks
13053                && (h = bfd_link_hash_lookup (info->hash,
13054                                              "_GLOBAL_OFFSET_TABLE_",
13055                                              FALSE, FALSE, TRUE))
13056                && h->type == bfd_link_hash_defined)
13057         elf_gp (abfd) = (h->u.def.section->output_section->vma
13058                          + h->u.def.section->output_offset
13059                          + h->u.def.value);
13060       else if (info->relocatable)
13061         {
13062           bfd_vma lo = MINUS_ONE;
13063
13064           /* Find the GP-relative section with the lowest offset.  */
13065           for (o = abfd->sections; o != NULL; o = o->next)
13066             if (o->vma < lo
13067                 && (elf_section_data (o)->this_hdr.sh_flags & SHF_MIPS_GPREL))
13068               lo = o->vma;
13069
13070           /* And calculate GP relative to that.  */
13071           elf_gp (abfd) = lo + ELF_MIPS_GP_OFFSET (info);
13072         }
13073       else
13074         {
13075           /* If the relocate_section function needs to do a reloc
13076              involving the GP value, it should make a reloc_dangerous
13077              callback to warn that GP is not defined.  */
13078         }
13079     }
13080
13081   /* Go through the sections and collect the .reginfo and .mdebug
13082      information.  */
13083   reginfo_sec = NULL;
13084   mdebug_sec = NULL;
13085   gptab_data_sec = NULL;
13086   gptab_bss_sec = NULL;
13087   for (o = abfd->sections; o != NULL; o = o->next)
13088     {
13089       if (strcmp (o->name, ".reginfo") == 0)
13090         {
13091           memset (&reginfo, 0, sizeof reginfo);
13092
13093           /* We have found the .reginfo section in the output file.
13094              Look through all the link_orders comprising it and merge
13095              the information together.  */
13096           for (p = o->map_head.link_order; p != NULL; p = p->next)
13097             {
13098               asection *input_section;
13099               bfd *input_bfd;
13100               Elf32_External_RegInfo ext;
13101               Elf32_RegInfo sub;
13102
13103               if (p->type != bfd_indirect_link_order)
13104                 {
13105                   if (p->type == bfd_data_link_order)
13106                     continue;
13107                   abort ();
13108                 }
13109
13110               input_section = p->u.indirect.section;
13111               input_bfd = input_section->owner;
13112
13113               if (! bfd_get_section_contents (input_bfd, input_section,
13114                                               &ext, 0, sizeof ext))
13115                 return FALSE;
13116
13117               bfd_mips_elf32_swap_reginfo_in (input_bfd, &ext, &sub);
13118
13119               reginfo.ri_gprmask |= sub.ri_gprmask;
13120               reginfo.ri_cprmask[0] |= sub.ri_cprmask[0];
13121               reginfo.ri_cprmask[1] |= sub.ri_cprmask[1];
13122               reginfo.ri_cprmask[2] |= sub.ri_cprmask[2];
13123               reginfo.ri_cprmask[3] |= sub.ri_cprmask[3];
13124
13125               /* ri_gp_value is set by the function
13126                  mips_elf32_section_processing when the section is
13127                  finally written out.  */
13128
13129               /* Hack: reset the SEC_HAS_CONTENTS flag so that
13130                  elf_link_input_bfd ignores this section.  */
13131               input_section->flags &= ~SEC_HAS_CONTENTS;
13132             }
13133
13134           /* Size has been set in _bfd_mips_elf_always_size_sections.  */
13135           BFD_ASSERT(o->size == sizeof (Elf32_External_RegInfo));
13136
13137           /* Skip this section later on (I don't think this currently
13138              matters, but someday it might).  */
13139           o->map_head.link_order = NULL;
13140
13141           reginfo_sec = o;
13142         }
13143
13144       if (strcmp (o->name, ".mdebug") == 0)
13145         {
13146           struct extsym_info einfo;
13147           bfd_vma last;
13148
13149           /* We have found the .mdebug section in the output file.
13150              Look through all the link_orders comprising it and merge
13151              the information together.  */
13152           symhdr->magic = swap->sym_magic;
13153           /* FIXME: What should the version stamp be?  */
13154           symhdr->vstamp = 0;
13155           symhdr->ilineMax = 0;
13156           symhdr->cbLine = 0;
13157           symhdr->idnMax = 0;
13158           symhdr->ipdMax = 0;
13159           symhdr->isymMax = 0;
13160           symhdr->ioptMax = 0;
13161           symhdr->iauxMax = 0;
13162           symhdr->issMax = 0;
13163           symhdr->issExtMax = 0;
13164           symhdr->ifdMax = 0;
13165           symhdr->crfd = 0;
13166           symhdr->iextMax = 0;
13167
13168           /* We accumulate the debugging information itself in the
13169              debug_info structure.  */
13170           debug.line = NULL;
13171           debug.external_dnr = NULL;
13172           debug.external_pdr = NULL;
13173           debug.external_sym = NULL;
13174           debug.external_opt = NULL;
13175           debug.external_aux = NULL;
13176           debug.ss = NULL;
13177           debug.ssext = debug.ssext_end = NULL;
13178           debug.external_fdr = NULL;
13179           debug.external_rfd = NULL;
13180           debug.external_ext = debug.external_ext_end = NULL;
13181
13182           mdebug_handle = bfd_ecoff_debug_init (abfd, &debug, swap, info);
13183           if (mdebug_handle == NULL)
13184             return FALSE;
13185
13186           esym.jmptbl = 0;
13187           esym.cobol_main = 0;
13188           esym.weakext = 0;
13189           esym.reserved = 0;
13190           esym.ifd = ifdNil;
13191           esym.asym.iss = issNil;
13192           esym.asym.st = stLocal;
13193           esym.asym.reserved = 0;
13194           esym.asym.index = indexNil;
13195           last = 0;
13196           for (i = 0; i < sizeof (secname) / sizeof (secname[0]); i++)
13197             {
13198               esym.asym.sc = sc[i];
13199               s = bfd_get_section_by_name (abfd, secname[i]);
13200               if (s != NULL)
13201                 {
13202                   esym.asym.value = s->vma;
13203                   last = s->vma + s->size;
13204                 }
13205               else
13206                 esym.asym.value = last;
13207               if (!bfd_ecoff_debug_one_external (abfd, &debug, swap,
13208                                                  secname[i], &esym))
13209                 return FALSE;
13210             }
13211
13212           for (p = o->map_head.link_order; p != NULL; p = p->next)
13213             {
13214               asection *input_section;
13215               bfd *input_bfd;
13216               const struct ecoff_debug_swap *input_swap;
13217               struct ecoff_debug_info input_debug;
13218               char *eraw_src;
13219               char *eraw_end;
13220
13221               if (p->type != bfd_indirect_link_order)
13222                 {
13223                   if (p->type == bfd_data_link_order)
13224                     continue;
13225                   abort ();
13226                 }
13227
13228               input_section = p->u.indirect.section;
13229               input_bfd = input_section->owner;
13230
13231               if (!is_mips_elf (input_bfd))
13232                 {
13233                   /* I don't know what a non MIPS ELF bfd would be
13234                      doing with a .mdebug section, but I don't really
13235                      want to deal with it.  */
13236                   continue;
13237                 }
13238
13239               input_swap = (get_elf_backend_data (input_bfd)
13240                             ->elf_backend_ecoff_debug_swap);
13241
13242               BFD_ASSERT (p->size == input_section->size);
13243
13244               /* The ECOFF linking code expects that we have already
13245                  read in the debugging information and set up an
13246                  ecoff_debug_info structure, so we do that now.  */
13247               if (! _bfd_mips_elf_read_ecoff_info (input_bfd, input_section,
13248                                                    &input_debug))
13249                 return FALSE;
13250
13251               if (! (bfd_ecoff_debug_accumulate
13252                      (mdebug_handle, abfd, &debug, swap, input_bfd,
13253                       &input_debug, input_swap, info)))
13254                 return FALSE;
13255
13256               /* Loop through the external symbols.  For each one with
13257                  interesting information, try to find the symbol in
13258                  the linker global hash table and save the information
13259                  for the output external symbols.  */
13260               eraw_src = input_debug.external_ext;
13261               eraw_end = (eraw_src
13262                           + (input_debug.symbolic_header.iextMax
13263                              * input_swap->external_ext_size));
13264               for (;
13265                    eraw_src < eraw_end;
13266                    eraw_src += input_swap->external_ext_size)
13267                 {
13268                   EXTR ext;
13269                   const char *name;
13270                   struct mips_elf_link_hash_entry *h;
13271
13272                   (*input_swap->swap_ext_in) (input_bfd, eraw_src, &ext);
13273                   if (ext.asym.sc == scNil
13274                       || ext.asym.sc == scUndefined
13275                       || ext.asym.sc == scSUndefined)
13276                     continue;
13277
13278                   name = input_debug.ssext + ext.asym.iss;
13279                   h = mips_elf_link_hash_lookup (mips_elf_hash_table (info),
13280                                                  name, FALSE, FALSE, TRUE);
13281                   if (h == NULL || h->esym.ifd != -2)
13282                     continue;
13283
13284                   if (ext.ifd != -1)
13285                     {
13286                       BFD_ASSERT (ext.ifd
13287                                   < input_debug.symbolic_header.ifdMax);
13288                       ext.ifd = input_debug.ifdmap[ext.ifd];
13289                     }
13290
13291                   h->esym = ext;
13292                 }
13293
13294               /* Free up the information we just read.  */
13295               free (input_debug.line);
13296               free (input_debug.external_dnr);
13297               free (input_debug.external_pdr);
13298               free (input_debug.external_sym);
13299               free (input_debug.external_opt);
13300               free (input_debug.external_aux);
13301               free (input_debug.ss);
13302               free (input_debug.ssext);
13303               free (input_debug.external_fdr);
13304               free (input_debug.external_rfd);
13305               free (input_debug.external_ext);
13306
13307               /* Hack: reset the SEC_HAS_CONTENTS flag so that
13308                  elf_link_input_bfd ignores this section.  */
13309               input_section->flags &= ~SEC_HAS_CONTENTS;
13310             }
13311
13312           if (SGI_COMPAT (abfd) && info->shared)
13313             {
13314               /* Create .rtproc section.  */
13315               rtproc_sec = bfd_get_linker_section (abfd, ".rtproc");
13316               if (rtproc_sec == NULL)
13317                 {
13318                   flagword flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY
13319                                     | SEC_LINKER_CREATED | SEC_READONLY);
13320
13321                   rtproc_sec = bfd_make_section_anyway_with_flags (abfd,
13322                                                                    ".rtproc",
13323                                                                    flags);
13324                   if (rtproc_sec == NULL
13325                       || ! bfd_set_section_alignment (abfd, rtproc_sec, 4))
13326                     return FALSE;
13327                 }
13328
13329               if (! mips_elf_create_procedure_table (mdebug_handle, abfd,
13330                                                      info, rtproc_sec,
13331                                                      &debug))
13332                 return FALSE;
13333             }
13334
13335           /* Build the external symbol information.  */
13336           einfo.abfd = abfd;
13337           einfo.info = info;
13338           einfo.debug = &debug;
13339           einfo.swap = swap;
13340           einfo.failed = FALSE;
13341           mips_elf_link_hash_traverse (mips_elf_hash_table (info),
13342                                        mips_elf_output_extsym, &einfo);
13343           if (einfo.failed)
13344             return FALSE;
13345
13346           /* Set the size of the .mdebug section.  */
13347           o->size = bfd_ecoff_debug_size (abfd, &debug, swap);
13348
13349           /* Skip this section later on (I don't think this currently
13350              matters, but someday it might).  */
13351           o->map_head.link_order = NULL;
13352
13353           mdebug_sec = o;
13354         }
13355
13356       if (CONST_STRNEQ (o->name, ".gptab."))
13357         {
13358           const char *subname;
13359           unsigned int c;
13360           Elf32_gptab *tab;
13361           Elf32_External_gptab *ext_tab;
13362           unsigned int j;
13363
13364           /* The .gptab.sdata and .gptab.sbss sections hold
13365              information describing how the small data area would
13366              change depending upon the -G switch.  These sections
13367              not used in executables files.  */
13368           if (! info->relocatable)
13369             {
13370               for (p = o->map_head.link_order; p != NULL; p = p->next)
13371                 {
13372                   asection *input_section;
13373
13374                   if (p->type != bfd_indirect_link_order)
13375                     {
13376                       if (p->type == bfd_data_link_order)
13377                         continue;
13378                       abort ();
13379                     }
13380
13381                   input_section = p->u.indirect.section;
13382
13383                   /* Hack: reset the SEC_HAS_CONTENTS flag so that
13384                      elf_link_input_bfd ignores this section.  */
13385                   input_section->flags &= ~SEC_HAS_CONTENTS;
13386                 }
13387
13388               /* Skip this section later on (I don't think this
13389                  currently matters, but someday it might).  */
13390               o->map_head.link_order = NULL;
13391
13392               /* Really remove the section.  */
13393               bfd_section_list_remove (abfd, o);
13394               --abfd->section_count;
13395
13396               continue;
13397             }
13398
13399           /* There is one gptab for initialized data, and one for
13400              uninitialized data.  */
13401           if (strcmp (o->name, ".gptab.sdata") == 0)
13402             gptab_data_sec = o;
13403           else if (strcmp (o->name, ".gptab.sbss") == 0)
13404             gptab_bss_sec = o;
13405           else
13406             {
13407               (*_bfd_error_handler)
13408                 (_("%s: illegal section name `%s'"),
13409                  bfd_get_filename (abfd), o->name);
13410               bfd_set_error (bfd_error_nonrepresentable_section);
13411               return FALSE;
13412             }
13413
13414           /* The linker script always combines .gptab.data and
13415              .gptab.sdata into .gptab.sdata, and likewise for
13416              .gptab.bss and .gptab.sbss.  It is possible that there is
13417              no .sdata or .sbss section in the output file, in which
13418              case we must change the name of the output section.  */
13419           subname = o->name + sizeof ".gptab" - 1;
13420           if (bfd_get_section_by_name (abfd, subname) == NULL)
13421             {
13422               if (o == gptab_data_sec)
13423                 o->name = ".gptab.data";
13424               else
13425                 o->name = ".gptab.bss";
13426               subname = o->name + sizeof ".gptab" - 1;
13427               BFD_ASSERT (bfd_get_section_by_name (abfd, subname) != NULL);
13428             }
13429
13430           /* Set up the first entry.  */
13431           c = 1;
13432           amt = c * sizeof (Elf32_gptab);
13433           tab = bfd_malloc (amt);
13434           if (tab == NULL)
13435             return FALSE;
13436           tab[0].gt_header.gt_current_g_value = elf_gp_size (abfd);
13437           tab[0].gt_header.gt_unused = 0;
13438
13439           /* Combine the input sections.  */
13440           for (p = o->map_head.link_order; p != NULL; p = p->next)
13441             {
13442               asection *input_section;
13443               bfd *input_bfd;
13444               bfd_size_type size;
13445               unsigned long last;
13446               bfd_size_type gpentry;
13447
13448               if (p->type != bfd_indirect_link_order)
13449                 {
13450                   if (p->type == bfd_data_link_order)
13451                     continue;
13452                   abort ();
13453                 }
13454
13455               input_section = p->u.indirect.section;
13456               input_bfd = input_section->owner;
13457
13458               /* Combine the gptab entries for this input section one
13459                  by one.  We know that the input gptab entries are
13460                  sorted by ascending -G value.  */
13461               size = input_section->size;
13462               last = 0;
13463               for (gpentry = sizeof (Elf32_External_gptab);
13464                    gpentry < size;
13465                    gpentry += sizeof (Elf32_External_gptab))
13466                 {
13467                   Elf32_External_gptab ext_gptab;
13468                   Elf32_gptab int_gptab;
13469                   unsigned long val;
13470                   unsigned long add;
13471                   bfd_boolean exact;
13472                   unsigned int look;
13473
13474                   if (! (bfd_get_section_contents
13475                          (input_bfd, input_section, &ext_gptab, gpentry,
13476                           sizeof (Elf32_External_gptab))))
13477                     {
13478                       free (tab);
13479                       return FALSE;
13480                     }
13481
13482                   bfd_mips_elf32_swap_gptab_in (input_bfd, &ext_gptab,
13483                                                 &int_gptab);
13484                   val = int_gptab.gt_entry.gt_g_value;
13485                   add = int_gptab.gt_entry.gt_bytes - last;
13486
13487                   exact = FALSE;
13488                   for (look = 1; look < c; look++)
13489                     {
13490                       if (tab[look].gt_entry.gt_g_value >= val)
13491                         tab[look].gt_entry.gt_bytes += add;
13492
13493                       if (tab[look].gt_entry.gt_g_value == val)
13494                         exact = TRUE;
13495                     }
13496
13497                   if (! exact)
13498                     {
13499                       Elf32_gptab *new_tab;
13500                       unsigned int max;
13501
13502                       /* We need a new table entry.  */
13503                       amt = (bfd_size_type) (c + 1) * sizeof (Elf32_gptab);
13504                       new_tab = bfd_realloc (tab, amt);
13505                       if (new_tab == NULL)
13506                         {
13507                           free (tab);
13508                           return FALSE;
13509                         }
13510                       tab = new_tab;
13511                       tab[c].gt_entry.gt_g_value = val;
13512                       tab[c].gt_entry.gt_bytes = add;
13513
13514                       /* Merge in the size for the next smallest -G
13515                          value, since that will be implied by this new
13516                          value.  */
13517                       max = 0;
13518                       for (look = 1; look < c; look++)
13519                         {
13520                           if (tab[look].gt_entry.gt_g_value < val
13521                               && (max == 0
13522                                   || (tab[look].gt_entry.gt_g_value
13523                                       > tab[max].gt_entry.gt_g_value)))
13524                             max = look;
13525                         }
13526                       if (max != 0)
13527                         tab[c].gt_entry.gt_bytes +=
13528                           tab[max].gt_entry.gt_bytes;
13529
13530                       ++c;
13531                     }
13532
13533                   last = int_gptab.gt_entry.gt_bytes;
13534                 }
13535
13536               /* Hack: reset the SEC_HAS_CONTENTS flag so that
13537                  elf_link_input_bfd ignores this section.  */
13538               input_section->flags &= ~SEC_HAS_CONTENTS;
13539             }
13540
13541           /* The table must be sorted by -G value.  */
13542           if (c > 2)
13543             qsort (tab + 1, c - 1, sizeof (tab[0]), gptab_compare);
13544
13545           /* Swap out the table.  */
13546           amt = (bfd_size_type) c * sizeof (Elf32_External_gptab);
13547           ext_tab = bfd_alloc (abfd, amt);
13548           if (ext_tab == NULL)
13549             {
13550               free (tab);
13551               return FALSE;
13552             }
13553
13554           for (j = 0; j < c; j++)
13555             bfd_mips_elf32_swap_gptab_out (abfd, tab + j, ext_tab + j);
13556           free (tab);
13557
13558           o->size = c * sizeof (Elf32_External_gptab);
13559           o->contents = (bfd_byte *) ext_tab;
13560
13561           /* Skip this section later on (I don't think this currently
13562              matters, but someday it might).  */
13563           o->map_head.link_order = NULL;
13564         }
13565     }
13566
13567   /* Invoke the regular ELF backend linker to do all the work.  */
13568   if (!bfd_elf_final_link (abfd, info))
13569     return FALSE;
13570
13571   /* Now write out the computed sections.  */
13572
13573   if (reginfo_sec != NULL)
13574     {
13575       Elf32_External_RegInfo ext;
13576
13577       bfd_mips_elf32_swap_reginfo_out (abfd, &reginfo, &ext);
13578       if (! bfd_set_section_contents (abfd, reginfo_sec, &ext, 0, sizeof ext))
13579         return FALSE;
13580     }
13581
13582   if (mdebug_sec != NULL)
13583     {
13584       BFD_ASSERT (abfd->output_has_begun);
13585       if (! bfd_ecoff_write_accumulated_debug (mdebug_handle, abfd, &debug,
13586                                                swap, info,
13587                                                mdebug_sec->filepos))
13588         return FALSE;
13589
13590       bfd_ecoff_debug_free (mdebug_handle, abfd, &debug, swap, info);
13591     }
13592
13593   if (gptab_data_sec != NULL)
13594     {
13595       if (! bfd_set_section_contents (abfd, gptab_data_sec,
13596                                       gptab_data_sec->contents,
13597                                       0, gptab_data_sec->size))
13598         return FALSE;
13599     }
13600
13601   if (gptab_bss_sec != NULL)
13602     {
13603       if (! bfd_set_section_contents (abfd, gptab_bss_sec,
13604                                       gptab_bss_sec->contents,
13605                                       0, gptab_bss_sec->size))
13606         return FALSE;
13607     }
13608
13609   if (SGI_COMPAT (abfd))
13610     {
13611       rtproc_sec = bfd_get_section_by_name (abfd, ".rtproc");
13612       if (rtproc_sec != NULL)
13613         {
13614           if (! bfd_set_section_contents (abfd, rtproc_sec,
13615                                           rtproc_sec->contents,
13616                                           0, rtproc_sec->size))
13617             return FALSE;
13618         }
13619     }
13620
13621   return TRUE;
13622 }
13623 \f
13624 /* Structure for saying that BFD machine EXTENSION extends BASE.  */
13625
13626 struct mips_mach_extension {
13627   unsigned long extension, base;
13628 };
13629
13630
13631 /* An array describing how BFD machines relate to one another.  The entries
13632    are ordered topologically with MIPS I extensions listed last.  */
13633
13634 static const struct mips_mach_extension mips_mach_extensions[] = {
13635   /* MIPS64r2 extensions.  */
13636   { bfd_mach_mips_octeon2, bfd_mach_mips_octeonp },
13637   { bfd_mach_mips_octeonp, bfd_mach_mips_octeon },
13638   { bfd_mach_mips_octeon, bfd_mach_mipsisa64r2 },
13639
13640   /* MIPS64 extensions.  */
13641   { bfd_mach_mipsisa64r2, bfd_mach_mipsisa64 },
13642   { bfd_mach_mips_sb1, bfd_mach_mipsisa64 },
13643   { bfd_mach_mips_xlr, bfd_mach_mipsisa64 },
13644   { bfd_mach_mips_loongson_3a, bfd_mach_mipsisa64 },
13645
13646   /* MIPS V extensions.  */
13647   { bfd_mach_mipsisa64, bfd_mach_mips5 },
13648
13649   /* R10000 extensions.  */
13650   { bfd_mach_mips12000, bfd_mach_mips10000 },
13651   { bfd_mach_mips14000, bfd_mach_mips10000 },
13652   { bfd_mach_mips16000, bfd_mach_mips10000 },
13653
13654   /* R5000 extensions.  Note: the vr5500 ISA is an extension of the core
13655      vr5400 ISA, but doesn't include the multimedia stuff.  It seems
13656      better to allow vr5400 and vr5500 code to be merged anyway, since
13657      many libraries will just use the core ISA.  Perhaps we could add
13658      some sort of ASE flag if this ever proves a problem.  */
13659   { bfd_mach_mips5500, bfd_mach_mips5400 },
13660   { bfd_mach_mips5400, bfd_mach_mips5000 },
13661
13662   /* MIPS IV extensions.  */
13663   { bfd_mach_mips5, bfd_mach_mips8000 },
13664   { bfd_mach_mips10000, bfd_mach_mips8000 },
13665   { bfd_mach_mips5000, bfd_mach_mips8000 },
13666   { bfd_mach_mips7000, bfd_mach_mips8000 },
13667   { bfd_mach_mips9000, bfd_mach_mips8000 },
13668
13669   /* VR4100 extensions.  */
13670   { bfd_mach_mips4120, bfd_mach_mips4100 },
13671   { bfd_mach_mips4111, bfd_mach_mips4100 },
13672
13673   /* MIPS III extensions.  */
13674   { bfd_mach_mips_loongson_2e, bfd_mach_mips4000 },
13675   { bfd_mach_mips_loongson_2f, bfd_mach_mips4000 },
13676   { bfd_mach_mips8000, bfd_mach_mips4000 },
13677   { bfd_mach_mips4650, bfd_mach_mips4000 },
13678   { bfd_mach_mips4600, bfd_mach_mips4000 },
13679   { bfd_mach_mips4400, bfd_mach_mips4000 },
13680   { bfd_mach_mips4300, bfd_mach_mips4000 },
13681   { bfd_mach_mips4100, bfd_mach_mips4000 },
13682   { bfd_mach_mips4010, bfd_mach_mips4000 },
13683   { bfd_mach_mips5900, bfd_mach_mips4000 },
13684
13685   /* MIPS32 extensions.  */
13686   { bfd_mach_mipsisa32r2, bfd_mach_mipsisa32 },
13687
13688   /* MIPS II extensions.  */
13689   { bfd_mach_mips4000, bfd_mach_mips6000 },
13690   { bfd_mach_mipsisa32, bfd_mach_mips6000 },
13691
13692   /* MIPS I extensions.  */
13693   { bfd_mach_mips6000, bfd_mach_mips3000 },
13694   { bfd_mach_mips3900, bfd_mach_mips3000 }
13695 };
13696
13697
13698 /* Return true if bfd machine EXTENSION is an extension of machine BASE.  */
13699
13700 static bfd_boolean
13701 mips_mach_extends_p (unsigned long base, unsigned long extension)
13702 {
13703   size_t i;
13704
13705   if (extension == base)
13706     return TRUE;
13707
13708   if (base == bfd_mach_mipsisa32
13709       && mips_mach_extends_p (bfd_mach_mipsisa64, extension))
13710     return TRUE;
13711
13712   if (base == bfd_mach_mipsisa32r2
13713       && mips_mach_extends_p (bfd_mach_mipsisa64r2, extension))
13714     return TRUE;
13715
13716   for (i = 0; i < ARRAY_SIZE (mips_mach_extensions); i++)
13717     if (extension == mips_mach_extensions[i].extension)
13718       {
13719         extension = mips_mach_extensions[i].base;
13720         if (extension == base)
13721           return TRUE;
13722       }
13723
13724   return FALSE;
13725 }
13726
13727
13728 /* Return true if the given ELF header flags describe a 32-bit binary.  */
13729
13730 static bfd_boolean
13731 mips_32bit_flags_p (flagword flags)
13732 {
13733   return ((flags & EF_MIPS_32BITMODE) != 0
13734           || (flags & EF_MIPS_ABI) == E_MIPS_ABI_O32
13735           || (flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32
13736           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1
13737           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2
13738           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32
13739           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2);
13740 }
13741
13742
13743 /* Merge object attributes from IBFD into OBFD.  Raise an error if
13744    there are conflicting attributes.  */
13745 static bfd_boolean
13746 mips_elf_merge_obj_attributes (bfd *ibfd, bfd *obfd)
13747 {
13748   obj_attribute *in_attr;
13749   obj_attribute *out_attr;
13750   bfd *abi_fp_bfd;
13751
13752   abi_fp_bfd = mips_elf_tdata (obfd)->abi_fp_bfd;
13753   in_attr = elf_known_obj_attributes (ibfd)[OBJ_ATTR_GNU];
13754   if (!abi_fp_bfd && in_attr[Tag_GNU_MIPS_ABI_FP].i != 0)
13755     mips_elf_tdata (obfd)->abi_fp_bfd = ibfd;
13756
13757   if (!elf_known_obj_attributes_proc (obfd)[0].i)
13758     {
13759       /* This is the first object.  Copy the attributes.  */
13760       _bfd_elf_copy_obj_attributes (ibfd, obfd);
13761
13762       /* Use the Tag_null value to indicate the attributes have been
13763          initialized.  */
13764       elf_known_obj_attributes_proc (obfd)[0].i = 1;
13765
13766       return TRUE;
13767     }
13768
13769   /* Check for conflicting Tag_GNU_MIPS_ABI_FP attributes and merge
13770      non-conflicting ones.  */
13771   out_attr = elf_known_obj_attributes (obfd)[OBJ_ATTR_GNU];
13772   if (in_attr[Tag_GNU_MIPS_ABI_FP].i != out_attr[Tag_GNU_MIPS_ABI_FP].i)
13773     {
13774       out_attr[Tag_GNU_MIPS_ABI_FP].type = 1;
13775       if (out_attr[Tag_GNU_MIPS_ABI_FP].i == 0)
13776         out_attr[Tag_GNU_MIPS_ABI_FP].i = in_attr[Tag_GNU_MIPS_ABI_FP].i;
13777       else if (in_attr[Tag_GNU_MIPS_ABI_FP].i != 0)
13778         switch (out_attr[Tag_GNU_MIPS_ABI_FP].i)
13779           {
13780           case 1:
13781             switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
13782               {
13783               case 2:
13784                 _bfd_error_handler
13785                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13786                    obfd, abi_fp_bfd, ibfd, "-mdouble-float", "-msingle-float");
13787                 break;
13788
13789               case 3:
13790                 _bfd_error_handler
13791                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13792                    obfd, abi_fp_bfd, ibfd, "-mhard-float", "-msoft-float");
13793                 break;
13794
13795               case 4:
13796                 _bfd_error_handler
13797                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13798                    obfd, abi_fp_bfd, ibfd,
13799                    "-mdouble-float", "-mips32r2 -mfp64");
13800                 break;
13801
13802               default:
13803                 _bfd_error_handler
13804                   (_("Warning: %B uses %s (set by %B), "
13805                      "%B uses unknown floating point ABI %d"),
13806                    obfd, abi_fp_bfd, ibfd,
13807                    "-mdouble-float", in_attr[Tag_GNU_MIPS_ABI_FP].i);
13808                 break;
13809               }
13810             break;
13811
13812           case 2:
13813             switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
13814               {
13815               case 1:
13816                 _bfd_error_handler
13817                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13818                    obfd, abi_fp_bfd, ibfd, "-msingle-float", "-mdouble-float");
13819                 break;
13820
13821               case 3:
13822                 _bfd_error_handler
13823                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13824                    obfd, abi_fp_bfd, ibfd, "-mhard-float", "-msoft-float");
13825                 break;
13826
13827               case 4:
13828                 _bfd_error_handler
13829                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13830                    obfd, abi_fp_bfd, ibfd,
13831                    "-msingle-float", "-mips32r2 -mfp64");
13832                 break;
13833
13834               default:
13835                 _bfd_error_handler
13836                   (_("Warning: %B uses %s (set by %B), "
13837                      "%B uses unknown floating point ABI %d"),
13838                    obfd, abi_fp_bfd, ibfd,
13839                    "-msingle-float", in_attr[Tag_GNU_MIPS_ABI_FP].i);
13840                 break;
13841               }
13842             break;
13843
13844           case 3:
13845             switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
13846               {
13847               case 1:
13848               case 2:
13849               case 4:
13850                 _bfd_error_handler
13851                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13852                    obfd, abi_fp_bfd, ibfd, "-msoft-float", "-mhard-float");
13853                 break;
13854
13855               default:
13856                 _bfd_error_handler
13857                   (_("Warning: %B uses %s (set by %B), "
13858                      "%B uses unknown floating point ABI %d"),
13859                    obfd, abi_fp_bfd, ibfd,
13860                    "-msoft-float", in_attr[Tag_GNU_MIPS_ABI_FP].i);
13861                 break;
13862               }
13863             break;
13864
13865           case 4:
13866             switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
13867               {
13868               case 1:
13869                 _bfd_error_handler
13870                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13871                    obfd, abi_fp_bfd, ibfd,
13872                    "-mips32r2 -mfp64", "-mdouble-float");
13873                 break;
13874
13875               case 2:
13876                 _bfd_error_handler
13877                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13878                    obfd, abi_fp_bfd, ibfd,
13879                    "-mips32r2 -mfp64", "-msingle-float");
13880                 break;
13881
13882               case 3:
13883                 _bfd_error_handler
13884                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13885                    obfd, abi_fp_bfd, ibfd, "-mhard-float", "-msoft-float");
13886                 break;
13887
13888               default:
13889                 _bfd_error_handler
13890                   (_("Warning: %B uses %s (set by %B), "
13891                      "%B uses unknown floating point ABI %d"),
13892                    obfd, abi_fp_bfd, ibfd,
13893                    "-mips32r2 -mfp64", in_attr[Tag_GNU_MIPS_ABI_FP].i);
13894                 break;
13895               }
13896             break;
13897
13898           default:
13899             switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
13900               {
13901               case 1:
13902                 _bfd_error_handler
13903                   (_("Warning: %B uses unknown floating point ABI %d "
13904                      "(set by %B), %B uses %s"),
13905                    obfd, abi_fp_bfd, ibfd,
13906                    out_attr[Tag_GNU_MIPS_ABI_FP].i, "-mdouble-float");
13907                 break;
13908
13909               case 2:
13910                 _bfd_error_handler
13911                   (_("Warning: %B uses unknown floating point ABI %d "
13912                      "(set by %B), %B uses %s"),
13913                    obfd, abi_fp_bfd, ibfd,
13914                    out_attr[Tag_GNU_MIPS_ABI_FP].i, "-msingle-float");
13915                 break;
13916
13917               case 3:
13918                 _bfd_error_handler
13919                   (_("Warning: %B uses unknown floating point ABI %d "
13920                      "(set by %B), %B uses %s"),
13921                    obfd, abi_fp_bfd, ibfd,
13922                    out_attr[Tag_GNU_MIPS_ABI_FP].i, "-msoft-float");
13923                 break;
13924
13925               case 4:
13926                 _bfd_error_handler
13927                   (_("Warning: %B uses unknown floating point ABI %d "
13928                      "(set by %B), %B uses %s"),
13929                    obfd, abi_fp_bfd, ibfd,
13930                    out_attr[Tag_GNU_MIPS_ABI_FP].i, "-mips32r2 -mfp64");
13931                 break;
13932
13933               default:
13934                 _bfd_error_handler
13935                   (_("Warning: %B uses unknown floating point ABI %d "
13936                      "(set by %B), %B uses unknown floating point ABI %d"),
13937                    obfd, abi_fp_bfd, ibfd,
13938                    out_attr[Tag_GNU_MIPS_ABI_FP].i,
13939                    in_attr[Tag_GNU_MIPS_ABI_FP].i);
13940                 break;
13941               }
13942             break;
13943           }
13944     }
13945
13946   /* Merge Tag_compatibility attributes and any common GNU ones.  */
13947   _bfd_elf_merge_object_attributes (ibfd, obfd);
13948
13949   return TRUE;
13950 }
13951
13952 /* Merge backend specific data from an object file to the output
13953    object file when linking.  */
13954
13955 bfd_boolean
13956 _bfd_mips_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
13957 {
13958   flagword old_flags;
13959   flagword new_flags;
13960   bfd_boolean ok;
13961   bfd_boolean null_input_bfd = TRUE;
13962   asection *sec;
13963
13964   /* Check if we have the same endianness.  */
13965   if (! _bfd_generic_verify_endian_match (ibfd, obfd))
13966     {
13967       (*_bfd_error_handler)
13968         (_("%B: endianness incompatible with that of the selected emulation"),
13969          ibfd);
13970       return FALSE;
13971     }
13972
13973   if (!is_mips_elf (ibfd) || !is_mips_elf (obfd))
13974     return TRUE;
13975
13976   if (strcmp (bfd_get_target (ibfd), bfd_get_target (obfd)) != 0)
13977     {
13978       (*_bfd_error_handler)
13979         (_("%B: ABI is incompatible with that of the selected emulation"),
13980          ibfd);
13981       return FALSE;
13982     }
13983
13984   if (!mips_elf_merge_obj_attributes (ibfd, obfd))
13985     return FALSE;
13986
13987   new_flags = elf_elfheader (ibfd)->e_flags;
13988   elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_NOREORDER;
13989   old_flags = elf_elfheader (obfd)->e_flags;
13990
13991   if (! elf_flags_init (obfd))
13992     {
13993       elf_flags_init (obfd) = TRUE;
13994       elf_elfheader (obfd)->e_flags = new_flags;
13995       elf_elfheader (obfd)->e_ident[EI_CLASS]
13996         = elf_elfheader (ibfd)->e_ident[EI_CLASS];
13997
13998       if (bfd_get_arch (obfd) == bfd_get_arch (ibfd)
13999           && (bfd_get_arch_info (obfd)->the_default
14000               || mips_mach_extends_p (bfd_get_mach (obfd),
14001                                       bfd_get_mach (ibfd))))
14002         {
14003           if (! bfd_set_arch_mach (obfd, bfd_get_arch (ibfd),
14004                                    bfd_get_mach (ibfd)))
14005             return FALSE;
14006         }
14007
14008       return TRUE;
14009     }
14010
14011   /* Check flag compatibility.  */
14012
14013   new_flags &= ~EF_MIPS_NOREORDER;
14014   old_flags &= ~EF_MIPS_NOREORDER;
14015
14016   /* Some IRIX 6 BSD-compatibility objects have this bit set.  It
14017      doesn't seem to matter.  */
14018   new_flags &= ~EF_MIPS_XGOT;
14019   old_flags &= ~EF_MIPS_XGOT;
14020
14021   /* MIPSpro generates ucode info in n64 objects.  Again, we should
14022      just be able to ignore this.  */
14023   new_flags &= ~EF_MIPS_UCODE;
14024   old_flags &= ~EF_MIPS_UCODE;
14025
14026   /* DSOs should only be linked with CPIC code.  */
14027   if ((ibfd->flags & DYNAMIC) != 0)
14028     new_flags |= EF_MIPS_PIC | EF_MIPS_CPIC;
14029
14030   if (new_flags == old_flags)
14031     return TRUE;
14032
14033   /* Check to see if the input BFD actually contains any sections.
14034      If not, its flags may not have been initialised either, but it cannot
14035      actually cause any incompatibility.  */
14036   for (sec = ibfd->sections; sec != NULL; sec = sec->next)
14037     {
14038       /* Ignore synthetic sections and empty .text, .data and .bss sections
14039          which are automatically generated by gas.  Also ignore fake
14040          (s)common sections, since merely defining a common symbol does
14041          not affect compatibility.  */
14042       if ((sec->flags & SEC_IS_COMMON) == 0
14043           && strcmp (sec->name, ".reginfo")
14044           && strcmp (sec->name, ".mdebug")
14045           && (sec->size != 0
14046               || (strcmp (sec->name, ".text")
14047                   && strcmp (sec->name, ".data")
14048                   && strcmp (sec->name, ".bss"))))
14049         {
14050           null_input_bfd = FALSE;
14051           break;
14052         }
14053     }
14054   if (null_input_bfd)
14055     return TRUE;
14056
14057   ok = TRUE;
14058
14059   if (((new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0)
14060       != ((old_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0))
14061     {
14062       (*_bfd_error_handler)
14063         (_("%B: warning: linking abicalls files with non-abicalls files"),
14064          ibfd);
14065       ok = TRUE;
14066     }
14067
14068   if (new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC))
14069     elf_elfheader (obfd)->e_flags |= EF_MIPS_CPIC;
14070   if (! (new_flags & EF_MIPS_PIC))
14071     elf_elfheader (obfd)->e_flags &= ~EF_MIPS_PIC;
14072
14073   new_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC);
14074   old_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC);
14075
14076   /* Compare the ISAs.  */
14077   if (mips_32bit_flags_p (old_flags) != mips_32bit_flags_p (new_flags))
14078     {
14079       (*_bfd_error_handler)
14080         (_("%B: linking 32-bit code with 64-bit code"),
14081          ibfd);
14082       ok = FALSE;
14083     }
14084   else if (!mips_mach_extends_p (bfd_get_mach (ibfd), bfd_get_mach (obfd)))
14085     {
14086       /* OBFD's ISA isn't the same as, or an extension of, IBFD's.  */
14087       if (mips_mach_extends_p (bfd_get_mach (obfd), bfd_get_mach (ibfd)))
14088         {
14089           /* Copy the architecture info from IBFD to OBFD.  Also copy
14090              the 32-bit flag (if set) so that we continue to recognise
14091              OBFD as a 32-bit binary.  */
14092           bfd_set_arch_info (obfd, bfd_get_arch_info (ibfd));
14093           elf_elfheader (obfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH);
14094           elf_elfheader (obfd)->e_flags
14095             |= new_flags & (EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
14096
14097           /* Copy across the ABI flags if OBFD doesn't use them
14098              and if that was what caused us to treat IBFD as 32-bit.  */
14099           if ((old_flags & EF_MIPS_ABI) == 0
14100               && mips_32bit_flags_p (new_flags)
14101               && !mips_32bit_flags_p (new_flags & ~EF_MIPS_ABI))
14102             elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ABI;
14103         }
14104       else
14105         {
14106           /* The ISAs aren't compatible.  */
14107           (*_bfd_error_handler)
14108             (_("%B: linking %s module with previous %s modules"),
14109              ibfd,
14110              bfd_printable_name (ibfd),
14111              bfd_printable_name (obfd));
14112           ok = FALSE;
14113         }
14114     }
14115
14116   new_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
14117   old_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
14118
14119   /* Compare ABIs.  The 64-bit ABI does not use EF_MIPS_ABI.  But, it
14120      does set EI_CLASS differently from any 32-bit ABI.  */
14121   if ((new_flags & EF_MIPS_ABI) != (old_flags & EF_MIPS_ABI)
14122       || (elf_elfheader (ibfd)->e_ident[EI_CLASS]
14123           != elf_elfheader (obfd)->e_ident[EI_CLASS]))
14124     {
14125       /* Only error if both are set (to different values).  */
14126       if (((new_flags & EF_MIPS_ABI) && (old_flags & EF_MIPS_ABI))
14127           || (elf_elfheader (ibfd)->e_ident[EI_CLASS]
14128               != elf_elfheader (obfd)->e_ident[EI_CLASS]))
14129         {
14130           (*_bfd_error_handler)
14131             (_("%B: ABI mismatch: linking %s module with previous %s modules"),
14132              ibfd,
14133              elf_mips_abi_name (ibfd),
14134              elf_mips_abi_name (obfd));
14135           ok = FALSE;
14136         }
14137       new_flags &= ~EF_MIPS_ABI;
14138       old_flags &= ~EF_MIPS_ABI;
14139     }
14140
14141   /* Compare ASEs.  Forbid linking MIPS16 and microMIPS ASE modules together
14142      and allow arbitrary mixing of the remaining ASEs (retain the union).  */
14143   if ((new_flags & EF_MIPS_ARCH_ASE) != (old_flags & EF_MIPS_ARCH_ASE))
14144     {
14145       int old_micro = old_flags & EF_MIPS_ARCH_ASE_MICROMIPS;
14146       int new_micro = new_flags & EF_MIPS_ARCH_ASE_MICROMIPS;
14147       int old_m16 = old_flags & EF_MIPS_ARCH_ASE_M16;
14148       int new_m16 = new_flags & EF_MIPS_ARCH_ASE_M16;
14149       int micro_mis = old_m16 && new_micro;
14150       int m16_mis = old_micro && new_m16;
14151
14152       if (m16_mis || micro_mis)
14153         {
14154           (*_bfd_error_handler)
14155             (_("%B: ASE mismatch: linking %s module with previous %s modules"),
14156              ibfd,
14157              m16_mis ? "MIPS16" : "microMIPS",
14158              m16_mis ? "microMIPS" : "MIPS16");
14159           ok = FALSE;
14160         }
14161
14162       elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ARCH_ASE;
14163
14164       new_flags &= ~ EF_MIPS_ARCH_ASE;
14165       old_flags &= ~ EF_MIPS_ARCH_ASE;
14166     }
14167
14168   /* Warn about any other mismatches */
14169   if (new_flags != old_flags)
14170     {
14171       (*_bfd_error_handler)
14172         (_("%B: uses different e_flags (0x%lx) fields than previous modules (0x%lx)"),
14173          ibfd, (unsigned long) new_flags,
14174          (unsigned long) old_flags);
14175       ok = FALSE;
14176     }
14177
14178   if (! ok)
14179     {
14180       bfd_set_error (bfd_error_bad_value);
14181       return FALSE;
14182     }
14183
14184   return TRUE;
14185 }
14186
14187 /* Function to keep MIPS specific file flags like as EF_MIPS_PIC.  */
14188
14189 bfd_boolean
14190 _bfd_mips_elf_set_private_flags (bfd *abfd, flagword flags)
14191 {
14192   BFD_ASSERT (!elf_flags_init (abfd)
14193               || elf_elfheader (abfd)->e_flags == flags);
14194
14195   elf_elfheader (abfd)->e_flags = flags;
14196   elf_flags_init (abfd) = TRUE;
14197   return TRUE;
14198 }
14199
14200 char *
14201 _bfd_mips_elf_get_target_dtag (bfd_vma dtag)
14202 {
14203   switch (dtag)
14204     {
14205     default: return "";
14206     case DT_MIPS_RLD_VERSION:
14207       return "MIPS_RLD_VERSION";
14208     case DT_MIPS_TIME_STAMP:
14209       return "MIPS_TIME_STAMP";
14210     case DT_MIPS_ICHECKSUM:
14211       return "MIPS_ICHECKSUM";
14212     case DT_MIPS_IVERSION:
14213       return "MIPS_IVERSION";
14214     case DT_MIPS_FLAGS:
14215       return "MIPS_FLAGS";
14216     case DT_MIPS_BASE_ADDRESS:
14217       return "MIPS_BASE_ADDRESS";
14218     case DT_MIPS_MSYM:
14219       return "MIPS_MSYM";
14220     case DT_MIPS_CONFLICT:
14221       return "MIPS_CONFLICT";
14222     case DT_MIPS_LIBLIST:
14223       return "MIPS_LIBLIST";
14224     case DT_MIPS_LOCAL_GOTNO:
14225       return "MIPS_LOCAL_GOTNO";
14226     case DT_MIPS_CONFLICTNO:
14227       return "MIPS_CONFLICTNO";
14228     case DT_MIPS_LIBLISTNO:
14229       return "MIPS_LIBLISTNO";
14230     case DT_MIPS_SYMTABNO:
14231       return "MIPS_SYMTABNO";
14232     case DT_MIPS_UNREFEXTNO:
14233       return "MIPS_UNREFEXTNO";
14234     case DT_MIPS_GOTSYM:
14235       return "MIPS_GOTSYM";
14236     case DT_MIPS_HIPAGENO:
14237       return "MIPS_HIPAGENO";
14238     case DT_MIPS_RLD_MAP:
14239       return "MIPS_RLD_MAP";
14240     case DT_MIPS_DELTA_CLASS:
14241       return "MIPS_DELTA_CLASS";
14242     case DT_MIPS_DELTA_CLASS_NO:
14243       return "MIPS_DELTA_CLASS_NO";
14244     case DT_MIPS_DELTA_INSTANCE:
14245       return "MIPS_DELTA_INSTANCE";
14246     case DT_MIPS_DELTA_INSTANCE_NO:
14247       return "MIPS_DELTA_INSTANCE_NO";
14248     case DT_MIPS_DELTA_RELOC:
14249       return "MIPS_DELTA_RELOC";
14250     case DT_MIPS_DELTA_RELOC_NO:
14251       return "MIPS_DELTA_RELOC_NO";
14252     case DT_MIPS_DELTA_SYM:
14253       return "MIPS_DELTA_SYM";
14254     case DT_MIPS_DELTA_SYM_NO:
14255       return "MIPS_DELTA_SYM_NO";
14256     case DT_MIPS_DELTA_CLASSSYM:
14257       return "MIPS_DELTA_CLASSSYM";
14258     case DT_MIPS_DELTA_CLASSSYM_NO:
14259       return "MIPS_DELTA_CLASSSYM_NO";
14260     case DT_MIPS_CXX_FLAGS:
14261       return "MIPS_CXX_FLAGS";
14262     case DT_MIPS_PIXIE_INIT:
14263       return "MIPS_PIXIE_INIT";
14264     case DT_MIPS_SYMBOL_LIB:
14265       return "MIPS_SYMBOL_LIB";
14266     case DT_MIPS_LOCALPAGE_GOTIDX:
14267       return "MIPS_LOCALPAGE_GOTIDX";
14268     case DT_MIPS_LOCAL_GOTIDX:
14269       return "MIPS_LOCAL_GOTIDX";
14270     case DT_MIPS_HIDDEN_GOTIDX:
14271       return "MIPS_HIDDEN_GOTIDX";
14272     case DT_MIPS_PROTECTED_GOTIDX:
14273       return "MIPS_PROTECTED_GOT_IDX";
14274     case DT_MIPS_OPTIONS:
14275       return "MIPS_OPTIONS";
14276     case DT_MIPS_INTERFACE:
14277       return "MIPS_INTERFACE";
14278     case DT_MIPS_DYNSTR_ALIGN:
14279       return "DT_MIPS_DYNSTR_ALIGN";
14280     case DT_MIPS_INTERFACE_SIZE:
14281       return "DT_MIPS_INTERFACE_SIZE";
14282     case DT_MIPS_RLD_TEXT_RESOLVE_ADDR:
14283       return "DT_MIPS_RLD_TEXT_RESOLVE_ADDR";
14284     case DT_MIPS_PERF_SUFFIX:
14285       return "DT_MIPS_PERF_SUFFIX";
14286     case DT_MIPS_COMPACT_SIZE:
14287       return "DT_MIPS_COMPACT_SIZE";
14288     case DT_MIPS_GP_VALUE:
14289       return "DT_MIPS_GP_VALUE";
14290     case DT_MIPS_AUX_DYNAMIC:
14291       return "DT_MIPS_AUX_DYNAMIC";
14292     case DT_MIPS_PLTGOT:
14293       return "DT_MIPS_PLTGOT";
14294     case DT_MIPS_RWPLT:
14295       return "DT_MIPS_RWPLT";
14296     }
14297 }
14298
14299 bfd_boolean
14300 _bfd_mips_elf_print_private_bfd_data (bfd *abfd, void *ptr)
14301 {
14302   FILE *file = ptr;
14303
14304   BFD_ASSERT (abfd != NULL && ptr != NULL);
14305
14306   /* Print normal ELF private data.  */
14307   _bfd_elf_print_private_bfd_data (abfd, ptr);
14308
14309   /* xgettext:c-format */
14310   fprintf (file, _("private flags = %lx:"), elf_elfheader (abfd)->e_flags);
14311
14312   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O32)
14313     fprintf (file, _(" [abi=O32]"));
14314   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O64)
14315     fprintf (file, _(" [abi=O64]"));
14316   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32)
14317     fprintf (file, _(" [abi=EABI32]"));
14318   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI64)
14319     fprintf (file, _(" [abi=EABI64]"));
14320   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI))
14321     fprintf (file, _(" [abi unknown]"));
14322   else if (ABI_N32_P (abfd))
14323     fprintf (file, _(" [abi=N32]"));
14324   else if (ABI_64_P (abfd))
14325     fprintf (file, _(" [abi=64]"));
14326   else
14327     fprintf (file, _(" [no abi set]"));
14328
14329   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1)
14330     fprintf (file, " [mips1]");
14331   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2)
14332     fprintf (file, " [mips2]");
14333   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_3)
14334     fprintf (file, " [mips3]");
14335   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_4)
14336     fprintf (file, " [mips4]");
14337   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_5)
14338     fprintf (file, " [mips5]");
14339   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32)
14340     fprintf (file, " [mips32]");
14341   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64)
14342     fprintf (file, " [mips64]");
14343   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2)
14344     fprintf (file, " [mips32r2]");
14345   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64R2)
14346     fprintf (file, " [mips64r2]");
14347   else
14348     fprintf (file, _(" [unknown ISA]"));
14349
14350   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MDMX)
14351     fprintf (file, " [mdmx]");
14352
14353   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_M16)
14354     fprintf (file, " [mips16]");
14355
14356   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MICROMIPS)
14357     fprintf (file, " [micromips]");
14358
14359   if (elf_elfheader (abfd)->e_flags & EF_MIPS_32BITMODE)
14360     fprintf (file, " [32bitmode]");
14361   else
14362     fprintf (file, _(" [not 32bitmode]"));
14363
14364   if (elf_elfheader (abfd)->e_flags & EF_MIPS_NOREORDER)
14365     fprintf (file, " [noreorder]");
14366
14367   if (elf_elfheader (abfd)->e_flags & EF_MIPS_PIC)
14368     fprintf (file, " [PIC]");
14369
14370   if (elf_elfheader (abfd)->e_flags & EF_MIPS_CPIC)
14371     fprintf (file, " [CPIC]");
14372
14373   if (elf_elfheader (abfd)->e_flags & EF_MIPS_XGOT)
14374     fprintf (file, " [XGOT]");
14375
14376   if (elf_elfheader (abfd)->e_flags & EF_MIPS_UCODE)
14377     fprintf (file, " [UCODE]");
14378
14379   fputc ('\n', file);
14380
14381   return TRUE;
14382 }
14383
14384 const struct bfd_elf_special_section _bfd_mips_elf_special_sections[] =
14385 {
14386   { STRING_COMMA_LEN (".lit4"),   0, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
14387   { STRING_COMMA_LEN (".lit8"),   0, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
14388   { STRING_COMMA_LEN (".mdebug"), 0, SHT_MIPS_DEBUG, 0 },
14389   { STRING_COMMA_LEN (".sbss"),  -2, SHT_NOBITS,     SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
14390   { STRING_COMMA_LEN (".sdata"), -2, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
14391   { STRING_COMMA_LEN (".ucode"),  0, SHT_MIPS_UCODE, 0 },
14392   { NULL,                     0,  0, 0,              0 }
14393 };
14394
14395 /* Merge non visibility st_other attributes.  Ensure that the
14396    STO_OPTIONAL flag is copied into h->other, even if this is not a
14397    definiton of the symbol.  */
14398 void
14399 _bfd_mips_elf_merge_symbol_attribute (struct elf_link_hash_entry *h,
14400                                       const Elf_Internal_Sym *isym,
14401                                       bfd_boolean definition,
14402                                       bfd_boolean dynamic ATTRIBUTE_UNUSED)
14403 {
14404   if ((isym->st_other & ~ELF_ST_VISIBILITY (-1)) != 0)
14405     {
14406       unsigned char other;
14407
14408       other = (definition ? isym->st_other : h->other);
14409       other &= ~ELF_ST_VISIBILITY (-1);
14410       h->other = other | ELF_ST_VISIBILITY (h->other);
14411     }
14412
14413   if (!definition
14414       && ELF_MIPS_IS_OPTIONAL (isym->st_other))
14415     h->other |= STO_OPTIONAL;
14416 }
14417
14418 /* Decide whether an undefined symbol is special and can be ignored.
14419    This is the case for OPTIONAL symbols on IRIX.  */
14420 bfd_boolean
14421 _bfd_mips_elf_ignore_undef_symbol (struct elf_link_hash_entry *h)
14422 {
14423   return ELF_MIPS_IS_OPTIONAL (h->other) ? TRUE : FALSE;
14424 }
14425
14426 bfd_boolean
14427 _bfd_mips_elf_common_definition (Elf_Internal_Sym *sym)
14428 {
14429   return (sym->st_shndx == SHN_COMMON
14430           || sym->st_shndx == SHN_MIPS_ACOMMON
14431           || sym->st_shndx == SHN_MIPS_SCOMMON);
14432 }
14433
14434 /* Return address for Ith PLT stub in section PLT, for relocation REL
14435    or (bfd_vma) -1 if it should not be included.  */
14436
14437 bfd_vma
14438 _bfd_mips_elf_plt_sym_val (bfd_vma i, const asection *plt,
14439                            const arelent *rel ATTRIBUTE_UNUSED)
14440 {
14441   return (plt->vma
14442           + 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry)
14443           + i * 4 * ARRAY_SIZE (mips_exec_plt_entry));
14444 }
14445
14446 void
14447 _bfd_mips_post_process_headers (bfd *abfd, struct bfd_link_info *link_info)
14448 {
14449   struct mips_elf_link_hash_table *htab;
14450   Elf_Internal_Ehdr *i_ehdrp;
14451
14452   i_ehdrp = elf_elfheader (abfd);
14453   if (link_info)
14454     {
14455       htab = mips_elf_hash_table (link_info);
14456       BFD_ASSERT (htab != NULL);
14457
14458       if (htab->use_plts_and_copy_relocs && !htab->is_vxworks)
14459         i_ehdrp->e_ident[EI_ABIVERSION] = 1;
14460     }
14461 }