bfd/
[platform/upstream/binutils.git] / bfd / elfxx-mips.c
1 /* MIPS-specific support for ELF
2    Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
3    2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
4    Free Software Foundation, Inc.
5
6    Most of the information added by Ian Lance Taylor, Cygnus Support,
7    <ian@cygnus.com>.
8    N32/64 ABI support added by Mark Mitchell, CodeSourcery, LLC.
9    <mark@codesourcery.com>
10    Traditional MIPS targets support added by Koundinya.K, Dansk Data
11    Elektronik & Operations Research Group. <kk@ddeorg.soft.net>
12
13    This file is part of BFD, the Binary File Descriptor library.
14
15    This program is free software; you can redistribute it and/or modify
16    it under the terms of the GNU General Public License as published by
17    the Free Software Foundation; either version 3 of the License, or
18    (at your option) any later version.
19
20    This program is distributed in the hope that it will be useful,
21    but WITHOUT ANY WARRANTY; without even the implied warranty of
22    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
23    GNU General Public License for more details.
24
25    You should have received a copy of the GNU General Public License
26    along with this program; if not, write to the Free Software
27    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
28    MA 02110-1301, USA.  */
29
30
31 /* This file handles functionality common to the different MIPS ABI's.  */
32
33 #include "sysdep.h"
34 #include "bfd.h"
35 #include "libbfd.h"
36 #include "libiberty.h"
37 #include "elf-bfd.h"
38 #include "elfxx-mips.h"
39 #include "elf/mips.h"
40 #include "elf-vxworks.h"
41
42 /* Get the ECOFF swapping routines.  */
43 #include "coff/sym.h"
44 #include "coff/symconst.h"
45 #include "coff/ecoff.h"
46 #include "coff/mips.h"
47
48 #include "hashtab.h"
49
50 /* This structure is used to hold information about one GOT entry.
51    There are three types of entry:
52
53       (1) absolute addresses
54             (abfd == NULL)
55       (2) SYMBOL + OFFSET addresses, where SYMBOL is local to an input bfd
56             (abfd != NULL, symndx >= 0)
57       (3) SYMBOL addresses, where SYMBOL is not local to an input bfd
58             (abfd != NULL, symndx == -1)
59
60    Type (3) entries are treated differently for different types of GOT.
61    In the "master" GOT -- i.e.  the one that describes every GOT
62    reference needed in the link -- the mips_got_entry is keyed on both
63    the symbol and the input bfd that references it.  If it turns out
64    that we need multiple GOTs, we can then use this information to
65    create separate GOTs for each input bfd.
66
67    However, we want each of these separate GOTs to have at most one
68    entry for a given symbol, so their type (3) entries are keyed only
69    on the symbol.  The input bfd given by the "abfd" field is somewhat
70    arbitrary in this case.
71
72    This means that when there are multiple GOTs, each GOT has a unique
73    mips_got_entry for every symbol within it.  We can therefore use the
74    mips_got_entry fields (tls_type and gotidx) to track the symbol's
75    GOT index.
76
77    However, if it turns out that we need only a single GOT, we continue
78    to use the master GOT to describe it.  There may therefore be several
79    mips_got_entries for the same symbol, each with a different input bfd.
80    We want to make sure that each symbol gets a unique GOT entry, so when
81    there's a single GOT, we use the symbol's hash entry, not the
82    mips_got_entry fields, to track a symbol's GOT index.  */
83 struct mips_got_entry
84 {
85   /* The input bfd in which the symbol is defined.  */
86   bfd *abfd;
87   /* The index of the symbol, as stored in the relocation r_info, if
88      we have a local symbol; -1 otherwise.  */
89   long symndx;
90   union
91   {
92     /* If abfd == NULL, an address that must be stored in the got.  */
93     bfd_vma address;
94     /* If abfd != NULL && symndx != -1, the addend of the relocation
95        that should be added to the symbol value.  */
96     bfd_vma addend;
97     /* If abfd != NULL && symndx == -1, the hash table entry
98        corresponding to symbol in the GOT.  The symbol's entry
99        is in the local area if h->global_got_area is GGA_NONE,
100        otherwise it is in the global area.  */
101     struct mips_elf_link_hash_entry *h;
102   } d;
103
104   /* The TLS types included in this GOT entry (specifically, GD and
105      IE).  The GD and IE flags can be added as we encounter new
106      relocations.  LDM can also be set; it will always be alone, not
107      combined with any GD or IE flags.  An LDM GOT entry will be
108      a local symbol entry with r_symndx == 0.  */
109   unsigned char tls_type;
110
111   /* The offset from the beginning of the .got section to the entry
112      corresponding to this symbol+addend.  If it's a global symbol
113      whose offset is yet to be decided, it's going to be -1.  */
114   long gotidx;
115 };
116
117 /* This structure describes a range of addends: [MIN_ADDEND, MAX_ADDEND].
118    The structures form a non-overlapping list that is sorted by increasing
119    MIN_ADDEND.  */
120 struct mips_got_page_range
121 {
122   struct mips_got_page_range *next;
123   bfd_signed_vma min_addend;
124   bfd_signed_vma max_addend;
125 };
126
127 /* This structure describes the range of addends that are applied to page
128    relocations against a given symbol.  */
129 struct mips_got_page_entry
130 {
131   /* The input bfd in which the symbol is defined.  */
132   bfd *abfd;
133   /* The index of the symbol, as stored in the relocation r_info.  */
134   long symndx;
135   /* The ranges for this page entry.  */
136   struct mips_got_page_range *ranges;
137   /* The maximum number of page entries needed for RANGES.  */
138   bfd_vma num_pages;
139 };
140
141 /* This structure is used to hold .got information when linking.  */
142
143 struct mips_got_info
144 {
145   /* The global symbol in the GOT with the lowest index in the dynamic
146      symbol table.  */
147   struct elf_link_hash_entry *global_gotsym;
148   /* The number of global .got entries.  */
149   unsigned int global_gotno;
150   /* The number of global .got entries that are in the GGA_RELOC_ONLY area.  */
151   unsigned int reloc_only_gotno;
152   /* The number of .got slots used for TLS.  */
153   unsigned int tls_gotno;
154   /* The first unused TLS .got entry.  Used only during
155      mips_elf_initialize_tls_index.  */
156   unsigned int tls_assigned_gotno;
157   /* The number of local .got entries, eventually including page entries.  */
158   unsigned int local_gotno;
159   /* The maximum number of page entries needed.  */
160   unsigned int page_gotno;
161   /* The number of local .got entries we have used.  */
162   unsigned int assigned_gotno;
163   /* A hash table holding members of the got.  */
164   struct htab *got_entries;
165   /* A hash table of mips_got_page_entry structures.  */
166   struct htab *got_page_entries;
167   /* A hash table mapping input bfds to other mips_got_info.  NULL
168      unless multi-got was necessary.  */
169   struct htab *bfd2got;
170   /* In multi-got links, a pointer to the next got (err, rather, most
171      of the time, it points to the previous got).  */
172   struct mips_got_info *next;
173   /* This is the GOT index of the TLS LDM entry for the GOT, MINUS_ONE
174      for none, or MINUS_TWO for not yet assigned.  This is needed
175      because a single-GOT link may have multiple hash table entries
176      for the LDM.  It does not get initialized in multi-GOT mode.  */
177   bfd_vma tls_ldm_offset;
178 };
179
180 /* Map an input bfd to a got in a multi-got link.  */
181
182 struct mips_elf_bfd2got_hash
183 {
184   bfd *bfd;
185   struct mips_got_info *g;
186 };
187
188 /* Structure passed when traversing the bfd2got hash table, used to
189    create and merge bfd's gots.  */
190
191 struct mips_elf_got_per_bfd_arg
192 {
193   /* A hashtable that maps bfds to gots.  */
194   htab_t bfd2got;
195   /* The output bfd.  */
196   bfd *obfd;
197   /* The link information.  */
198   struct bfd_link_info *info;
199   /* A pointer to the primary got, i.e., the one that's going to get
200      the implicit relocations from DT_MIPS_LOCAL_GOTNO and
201      DT_MIPS_GOTSYM.  */
202   struct mips_got_info *primary;
203   /* A non-primary got we're trying to merge with other input bfd's
204      gots.  */
205   struct mips_got_info *current;
206   /* The maximum number of got entries that can be addressed with a
207      16-bit offset.  */
208   unsigned int max_count;
209   /* The maximum number of page entries needed by each got.  */
210   unsigned int max_pages;
211   /* The total number of global entries which will live in the
212      primary got and be automatically relocated.  This includes
213      those not referenced by the primary GOT but included in
214      the "master" GOT.  */
215   unsigned int global_count;
216 };
217
218 /* Another structure used to pass arguments for got entries traversal.  */
219
220 struct mips_elf_set_global_got_offset_arg
221 {
222   struct mips_got_info *g;
223   int value;
224   unsigned int needed_relocs;
225   struct bfd_link_info *info;
226 };
227
228 /* A structure used to count TLS relocations or GOT entries, for GOT
229    entry or ELF symbol table traversal.  */
230
231 struct mips_elf_count_tls_arg
232 {
233   struct bfd_link_info *info;
234   unsigned int needed;
235 };
236
237 struct _mips_elf_section_data
238 {
239   struct bfd_elf_section_data elf;
240   union
241   {
242     bfd_byte *tdata;
243   } u;
244 };
245
246 #define mips_elf_section_data(sec) \
247   ((struct _mips_elf_section_data *) elf_section_data (sec))
248
249 #define is_mips_elf(bfd)                                \
250   (bfd_get_flavour (bfd) == bfd_target_elf_flavour      \
251    && elf_tdata (bfd) != NULL                           \
252    && elf_object_id (bfd) == MIPS_ELF_DATA)
253
254 /* The ABI says that every symbol used by dynamic relocations must have
255    a global GOT entry.  Among other things, this provides the dynamic
256    linker with a free, directly-indexed cache.  The GOT can therefore
257    contain symbols that are not referenced by GOT relocations themselves
258    (in other words, it may have symbols that are not referenced by things
259    like R_MIPS_GOT16 and R_MIPS_GOT_PAGE).
260
261    GOT relocations are less likely to overflow if we put the associated
262    GOT entries towards the beginning.  We therefore divide the global
263    GOT entries into two areas: "normal" and "reloc-only".  Entries in
264    the first area can be used for both dynamic relocations and GP-relative
265    accesses, while those in the "reloc-only" area are for dynamic
266    relocations only.
267
268    These GGA_* ("Global GOT Area") values are organised so that lower
269    values are more general than higher values.  Also, non-GGA_NONE
270    values are ordered by the position of the area in the GOT.  */
271 #define GGA_NORMAL 0
272 #define GGA_RELOC_ONLY 1
273 #define GGA_NONE 2
274
275 /* Information about a non-PIC interface to a PIC function.  There are
276    two ways of creating these interfaces.  The first is to add:
277
278         lui     $25,%hi(func)
279         addiu   $25,$25,%lo(func)
280
281    immediately before a PIC function "func".  The second is to add:
282
283         lui     $25,%hi(func)
284         j       func
285         addiu   $25,$25,%lo(func)
286
287    to a separate trampoline section.
288
289    Stubs of the first kind go in a new section immediately before the
290    target function.  Stubs of the second kind go in a single section
291    pointed to by the hash table's "strampoline" field.  */
292 struct mips_elf_la25_stub {
293   /* The generated section that contains this stub.  */
294   asection *stub_section;
295
296   /* The offset of the stub from the start of STUB_SECTION.  */
297   bfd_vma offset;
298
299   /* One symbol for the original function.  Its location is available
300      in H->root.root.u.def.  */
301   struct mips_elf_link_hash_entry *h;
302 };
303
304 /* Macros for populating a mips_elf_la25_stub.  */
305
306 #define LA25_LUI(VAL) (0x3c190000 | (VAL))      /* lui t9,VAL */
307 #define LA25_J(VAL) (0x08000000 | (((VAL) >> 2) & 0x3ffffff)) /* j VAL */
308 #define LA25_ADDIU(VAL) (0x27390000 | (VAL))    /* addiu t9,t9,VAL */
309 #define LA25_LUI_MICROMIPS(VAL)                                         \
310   (0x41b90000 | (VAL))                          /* lui t9,VAL */
311 #define LA25_J_MICROMIPS(VAL)                                           \
312   (0xd4000000 | (((VAL) >> 1) & 0x3ffffff))     /* j VAL */
313 #define LA25_ADDIU_MICROMIPS(VAL)                                       \
314   (0x33390000 | (VAL))                          /* addiu t9,t9,VAL */
315
316 /* This structure is passed to mips_elf_sort_hash_table_f when sorting
317    the dynamic symbols.  */
318
319 struct mips_elf_hash_sort_data
320 {
321   /* The symbol in the global GOT with the lowest dynamic symbol table
322      index.  */
323   struct elf_link_hash_entry *low;
324   /* The least dynamic symbol table index corresponding to a non-TLS
325      symbol with a GOT entry.  */
326   long min_got_dynindx;
327   /* The greatest dynamic symbol table index corresponding to a symbol
328      with a GOT entry that is not referenced (e.g., a dynamic symbol
329      with dynamic relocations pointing to it from non-primary GOTs).  */
330   long max_unref_got_dynindx;
331   /* The greatest dynamic symbol table index not corresponding to a
332      symbol without a GOT entry.  */
333   long max_non_got_dynindx;
334 };
335
336 /* The MIPS ELF linker needs additional information for each symbol in
337    the global hash table.  */
338
339 struct mips_elf_link_hash_entry
340 {
341   struct elf_link_hash_entry root;
342
343   /* External symbol information.  */
344   EXTR esym;
345
346   /* The la25 stub we have created for ths symbol, if any.  */
347   struct mips_elf_la25_stub *la25_stub;
348
349   /* Number of R_MIPS_32, R_MIPS_REL32, or R_MIPS_64 relocs against
350      this symbol.  */
351   unsigned int possibly_dynamic_relocs;
352
353   /* If there is a stub that 32 bit functions should use to call this
354      16 bit function, this points to the section containing the stub.  */
355   asection *fn_stub;
356
357   /* If there is a stub that 16 bit functions should use to call this
358      32 bit function, this points to the section containing the stub.  */
359   asection *call_stub;
360
361   /* This is like the call_stub field, but it is used if the function
362      being called returns a floating point value.  */
363   asection *call_fp_stub;
364
365 #define GOT_NORMAL      0
366 #define GOT_TLS_GD      1
367 #define GOT_TLS_LDM     2
368 #define GOT_TLS_IE      4
369 #define GOT_TLS_OFFSET_DONE    0x40
370 #define GOT_TLS_DONE    0x80
371   unsigned char tls_type;
372
373   /* This is only used in single-GOT mode; in multi-GOT mode there
374      is one mips_got_entry per GOT entry, so the offset is stored
375      there.  In single-GOT mode there may be many mips_got_entry
376      structures all referring to the same GOT slot.  It might be
377      possible to use root.got.offset instead, but that field is
378      overloaded already.  */
379   bfd_vma tls_got_offset;
380
381   /* The highest GGA_* value that satisfies all references to this symbol.  */
382   unsigned int global_got_area : 2;
383
384   /* True if all GOT relocations against this symbol are for calls.  This is
385      a looser condition than no_fn_stub below, because there may be other
386      non-call non-GOT relocations against the symbol.  */
387   unsigned int got_only_for_calls : 1;
388
389   /* True if one of the relocations described by possibly_dynamic_relocs
390      is against a readonly section.  */
391   unsigned int readonly_reloc : 1;
392
393   /* True if there is a relocation against this symbol that must be
394      resolved by the static linker (in other words, if the relocation
395      cannot possibly be made dynamic).  */
396   unsigned int has_static_relocs : 1;
397
398   /* True if we must not create a .MIPS.stubs entry for this symbol.
399      This is set, for example, if there are relocations related to
400      taking the function's address, i.e. any but R_MIPS_CALL*16 ones.
401      See "MIPS ABI Supplement, 3rd Edition", p. 4-20.  */
402   unsigned int no_fn_stub : 1;
403
404   /* Whether we need the fn_stub; this is true if this symbol appears
405      in any relocs other than a 16 bit call.  */
406   unsigned int need_fn_stub : 1;
407
408   /* True if this symbol is referenced by branch relocations from
409      any non-PIC input file.  This is used to determine whether an
410      la25 stub is required.  */
411   unsigned int has_nonpic_branches : 1;
412
413   /* Does this symbol need a traditional MIPS lazy-binding stub
414      (as opposed to a PLT entry)?  */
415   unsigned int needs_lazy_stub : 1;
416 };
417
418 /* MIPS ELF linker hash table.  */
419
420 struct mips_elf_link_hash_table
421 {
422   struct elf_link_hash_table root;
423
424   /* The number of .rtproc entries.  */
425   bfd_size_type procedure_count;
426
427   /* The size of the .compact_rel section (if SGI_COMPAT).  */
428   bfd_size_type compact_rel_size;
429
430   /* This flag indicates that the value of DT_MIPS_RLD_MAP dynamic entry
431      is set to the address of __rld_obj_head as in IRIX5 and IRIX6.  */
432   bfd_boolean use_rld_obj_head;
433
434   /* The  __rld_map or __rld_obj_head symbol. */
435   struct elf_link_hash_entry *rld_symbol;
436
437   /* This is set if we see any mips16 stub sections.  */
438   bfd_boolean mips16_stubs_seen;
439
440   /* True if we can generate copy relocs and PLTs.  */
441   bfd_boolean use_plts_and_copy_relocs;
442
443   /* True if we're generating code for VxWorks.  */
444   bfd_boolean is_vxworks;
445
446   /* True if we already reported the small-data section overflow.  */
447   bfd_boolean small_data_overflow_reported;
448
449   /* Shortcuts to some dynamic sections, or NULL if they are not
450      being used.  */
451   asection *srelbss;
452   asection *sdynbss;
453   asection *srelplt;
454   asection *srelplt2;
455   asection *sgotplt;
456   asection *splt;
457   asection *sstubs;
458   asection *sgot;
459
460   /* The master GOT information.  */
461   struct mips_got_info *got_info;
462
463   /* The size of the PLT header in bytes.  */
464   bfd_vma plt_header_size;
465
466   /* The size of a PLT entry in bytes.  */
467   bfd_vma plt_entry_size;
468
469   /* The number of functions that need a lazy-binding stub.  */
470   bfd_vma lazy_stub_count;
471
472   /* The size of a function stub entry in bytes.  */
473   bfd_vma function_stub_size;
474
475   /* The number of reserved entries at the beginning of the GOT.  */
476   unsigned int reserved_gotno;
477
478   /* The section used for mips_elf_la25_stub trampolines.
479      See the comment above that structure for details.  */
480   asection *strampoline;
481
482   /* A table of mips_elf_la25_stubs, indexed by (input_section, offset)
483      pairs.  */
484   htab_t la25_stubs;
485
486   /* A function FN (NAME, IS, OS) that creates a new input section
487      called NAME and links it to output section OS.  If IS is nonnull,
488      the new section should go immediately before it, otherwise it
489      should go at the (current) beginning of OS.
490
491      The function returns the new section on success, otherwise it
492      returns null.  */
493   asection *(*add_stub_section) (const char *, asection *, asection *);
494 };
495
496 /* Get the MIPS ELF linker hash table from a link_info structure.  */
497
498 #define mips_elf_hash_table(p) \
499   (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
500   == MIPS_ELF_DATA ? ((struct mips_elf_link_hash_table *) ((p)->hash)) : NULL)
501
502 /* A structure used to communicate with htab_traverse callbacks.  */
503 struct mips_htab_traverse_info
504 {
505   /* The usual link-wide information.  */
506   struct bfd_link_info *info;
507   bfd *output_bfd;
508
509   /* Starts off FALSE and is set to TRUE if the link should be aborted.  */
510   bfd_boolean error;
511 };
512
513 /* MIPS ELF private object data.  */
514
515 struct mips_elf_obj_tdata
516 {
517   /* Generic ELF private object data.  */
518   struct elf_obj_tdata root;
519
520   /* Input BFD providing Tag_GNU_MIPS_ABI_FP attribute for output.  */
521   bfd *abi_fp_bfd;
522 };
523
524 /* Get MIPS ELF private object data from BFD's tdata.  */
525
526 #define mips_elf_tdata(bfd) \
527   ((struct mips_elf_obj_tdata *) (bfd)->tdata.any)
528
529 #define TLS_RELOC_P(r_type) \
530   (r_type == R_MIPS_TLS_DTPMOD32                \
531    || r_type == R_MIPS_TLS_DTPMOD64             \
532    || r_type == R_MIPS_TLS_DTPREL32             \
533    || r_type == R_MIPS_TLS_DTPREL64             \
534    || r_type == R_MIPS_TLS_GD                   \
535    || r_type == R_MIPS_TLS_LDM                  \
536    || r_type == R_MIPS_TLS_DTPREL_HI16          \
537    || r_type == R_MIPS_TLS_DTPREL_LO16          \
538    || r_type == R_MIPS_TLS_GOTTPREL             \
539    || r_type == R_MIPS_TLS_TPREL32              \
540    || r_type == R_MIPS_TLS_TPREL64              \
541    || r_type == R_MIPS_TLS_TPREL_HI16           \
542    || r_type == R_MIPS_TLS_TPREL_LO16           \
543    || r_type == R_MIPS16_TLS_GD                 \
544    || r_type == R_MIPS16_TLS_LDM                \
545    || r_type == R_MIPS16_TLS_DTPREL_HI16        \
546    || r_type == R_MIPS16_TLS_DTPREL_LO16        \
547    || r_type == R_MIPS16_TLS_GOTTPREL           \
548    || r_type == R_MIPS16_TLS_TPREL_HI16         \
549    || r_type == R_MIPS16_TLS_TPREL_LO16         \
550    || r_type == R_MICROMIPS_TLS_GD              \
551    || r_type == R_MICROMIPS_TLS_LDM             \
552    || r_type == R_MICROMIPS_TLS_DTPREL_HI16     \
553    || r_type == R_MICROMIPS_TLS_DTPREL_LO16     \
554    || r_type == R_MICROMIPS_TLS_GOTTPREL        \
555    || r_type == R_MICROMIPS_TLS_TPREL_HI16      \
556    || r_type == R_MICROMIPS_TLS_TPREL_LO16)
557
558 /* Structure used to pass information to mips_elf_output_extsym.  */
559
560 struct extsym_info
561 {
562   bfd *abfd;
563   struct bfd_link_info *info;
564   struct ecoff_debug_info *debug;
565   const struct ecoff_debug_swap *swap;
566   bfd_boolean failed;
567 };
568
569 /* The names of the runtime procedure table symbols used on IRIX5.  */
570
571 static const char * const mips_elf_dynsym_rtproc_names[] =
572 {
573   "_procedure_table",
574   "_procedure_string_table",
575   "_procedure_table_size",
576   NULL
577 };
578
579 /* These structures are used to generate the .compact_rel section on
580    IRIX5.  */
581
582 typedef struct
583 {
584   unsigned long id1;            /* Always one?  */
585   unsigned long num;            /* Number of compact relocation entries.  */
586   unsigned long id2;            /* Always two?  */
587   unsigned long offset;         /* The file offset of the first relocation.  */
588   unsigned long reserved0;      /* Zero?  */
589   unsigned long reserved1;      /* Zero?  */
590 } Elf32_compact_rel;
591
592 typedef struct
593 {
594   bfd_byte id1[4];
595   bfd_byte num[4];
596   bfd_byte id2[4];
597   bfd_byte offset[4];
598   bfd_byte reserved0[4];
599   bfd_byte reserved1[4];
600 } Elf32_External_compact_rel;
601
602 typedef struct
603 {
604   unsigned int ctype : 1;       /* 1: long 0: short format. See below.  */
605   unsigned int rtype : 4;       /* Relocation types. See below.  */
606   unsigned int dist2to : 8;
607   unsigned int relvaddr : 19;   /* (VADDR - vaddr of the previous entry)/ 4 */
608   unsigned long konst;          /* KONST field. See below.  */
609   unsigned long vaddr;          /* VADDR to be relocated.  */
610 } Elf32_crinfo;
611
612 typedef struct
613 {
614   unsigned int ctype : 1;       /* 1: long 0: short format. See below.  */
615   unsigned int rtype : 4;       /* Relocation types. See below.  */
616   unsigned int dist2to : 8;
617   unsigned int relvaddr : 19;   /* (VADDR - vaddr of the previous entry)/ 4 */
618   unsigned long konst;          /* KONST field. See below.  */
619 } Elf32_crinfo2;
620
621 typedef struct
622 {
623   bfd_byte info[4];
624   bfd_byte konst[4];
625   bfd_byte vaddr[4];
626 } Elf32_External_crinfo;
627
628 typedef struct
629 {
630   bfd_byte info[4];
631   bfd_byte konst[4];
632 } Elf32_External_crinfo2;
633
634 /* These are the constants used to swap the bitfields in a crinfo.  */
635
636 #define CRINFO_CTYPE (0x1)
637 #define CRINFO_CTYPE_SH (31)
638 #define CRINFO_RTYPE (0xf)
639 #define CRINFO_RTYPE_SH (27)
640 #define CRINFO_DIST2TO (0xff)
641 #define CRINFO_DIST2TO_SH (19)
642 #define CRINFO_RELVADDR (0x7ffff)
643 #define CRINFO_RELVADDR_SH (0)
644
645 /* A compact relocation info has long (3 words) or short (2 words)
646    formats.  A short format doesn't have VADDR field and relvaddr
647    fields contains ((VADDR - vaddr of the previous entry) >> 2).  */
648 #define CRF_MIPS_LONG                   1
649 #define CRF_MIPS_SHORT                  0
650
651 /* There are 4 types of compact relocation at least. The value KONST
652    has different meaning for each type:
653
654    (type)               (konst)
655    CT_MIPS_REL32        Address in data
656    CT_MIPS_WORD         Address in word (XXX)
657    CT_MIPS_GPHI_LO      GP - vaddr
658    CT_MIPS_JMPAD        Address to jump
659    */
660
661 #define CRT_MIPS_REL32                  0xa
662 #define CRT_MIPS_WORD                   0xb
663 #define CRT_MIPS_GPHI_LO                0xc
664 #define CRT_MIPS_JMPAD                  0xd
665
666 #define mips_elf_set_cr_format(x,format)        ((x).ctype = (format))
667 #define mips_elf_set_cr_type(x,type)            ((x).rtype = (type))
668 #define mips_elf_set_cr_dist2to(x,v)            ((x).dist2to = (v))
669 #define mips_elf_set_cr_relvaddr(x,d)           ((x).relvaddr = (d)<<2)
670 \f
671 /* The structure of the runtime procedure descriptor created by the
672    loader for use by the static exception system.  */
673
674 typedef struct runtime_pdr {
675         bfd_vma adr;            /* Memory address of start of procedure.  */
676         long    regmask;        /* Save register mask.  */
677         long    regoffset;      /* Save register offset.  */
678         long    fregmask;       /* Save floating point register mask.  */
679         long    fregoffset;     /* Save floating point register offset.  */
680         long    frameoffset;    /* Frame size.  */
681         short   framereg;       /* Frame pointer register.  */
682         short   pcreg;          /* Offset or reg of return pc.  */
683         long    irpss;          /* Index into the runtime string table.  */
684         long    reserved;
685         struct exception_info *exception_info;/* Pointer to exception array.  */
686 } RPDR, *pRPDR;
687 #define cbRPDR sizeof (RPDR)
688 #define rpdNil ((pRPDR) 0)
689 \f
690 static struct mips_got_entry *mips_elf_create_local_got_entry
691   (bfd *, struct bfd_link_info *, bfd *, bfd_vma, unsigned long,
692    struct mips_elf_link_hash_entry *, int);
693 static bfd_boolean mips_elf_sort_hash_table_f
694   (struct mips_elf_link_hash_entry *, void *);
695 static bfd_vma mips_elf_high
696   (bfd_vma);
697 static bfd_boolean mips_elf_create_dynamic_relocation
698   (bfd *, struct bfd_link_info *, const Elf_Internal_Rela *,
699    struct mips_elf_link_hash_entry *, asection *, bfd_vma,
700    bfd_vma *, asection *);
701 static hashval_t mips_elf_got_entry_hash
702   (const void *);
703 static bfd_vma mips_elf_adjust_gp
704   (bfd *, struct mips_got_info *, bfd *);
705 static struct mips_got_info *mips_elf_got_for_ibfd
706   (struct mips_got_info *, bfd *);
707
708 /* This will be used when we sort the dynamic relocation records.  */
709 static bfd *reldyn_sorting_bfd;
710
711 /* True if ABFD is for CPUs with load interlocking that include
712    non-MIPS1 CPUs and R3900.  */
713 #define LOAD_INTERLOCKS_P(abfd) \
714   (   ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) != E_MIPS_ARCH_1) \
715    || ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == E_MIPS_MACH_3900))
716
717 /* True if ABFD is for CPUs that are faster if JAL is converted to BAL.
718    This should be safe for all architectures.  We enable this predicate
719    for RM9000 for now.  */
720 #define JAL_TO_BAL_P(abfd) \
721   ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == E_MIPS_MACH_9000)
722
723 /* True if ABFD is for CPUs that are faster if JALR is converted to BAL.
724    This should be safe for all architectures.  We enable this predicate for
725    all CPUs.  */
726 #define JALR_TO_BAL_P(abfd) 1
727
728 /* True if ABFD is for CPUs that are faster if JR is converted to B.
729    This should be safe for all architectures.  We enable this predicate for
730    all CPUs.  */
731 #define JR_TO_B_P(abfd) 1
732
733 /* True if ABFD is a PIC object.  */
734 #define PIC_OBJECT_P(abfd) \
735   ((elf_elfheader (abfd)->e_flags & EF_MIPS_PIC) != 0)
736
737 /* Nonzero if ABFD is using the N32 ABI.  */
738 #define ABI_N32_P(abfd) \
739   ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI2) != 0)
740
741 /* Nonzero if ABFD is using the N64 ABI.  */
742 #define ABI_64_P(abfd) \
743   (get_elf_backend_data (abfd)->s->elfclass == ELFCLASS64)
744
745 /* Nonzero if ABFD is using NewABI conventions.  */
746 #define NEWABI_P(abfd) (ABI_N32_P (abfd) || ABI_64_P (abfd))
747
748 /* The IRIX compatibility level we are striving for.  */
749 #define IRIX_COMPAT(abfd) \
750   (get_elf_backend_data (abfd)->elf_backend_mips_irix_compat (abfd))
751
752 /* Whether we are trying to be compatible with IRIX at all.  */
753 #define SGI_COMPAT(abfd) \
754   (IRIX_COMPAT (abfd) != ict_none)
755
756 /* The name of the options section.  */
757 #define MIPS_ELF_OPTIONS_SECTION_NAME(abfd) \
758   (NEWABI_P (abfd) ? ".MIPS.options" : ".options")
759
760 /* True if NAME is the recognized name of any SHT_MIPS_OPTIONS section.
761    Some IRIX system files do not use MIPS_ELF_OPTIONS_SECTION_NAME.  */
762 #define MIPS_ELF_OPTIONS_SECTION_NAME_P(NAME) \
763   (strcmp (NAME, ".MIPS.options") == 0 || strcmp (NAME, ".options") == 0)
764
765 /* Whether the section is readonly.  */
766 #define MIPS_ELF_READONLY_SECTION(sec) \
767   ((sec->flags & (SEC_ALLOC | SEC_LOAD | SEC_READONLY))         \
768    == (SEC_ALLOC | SEC_LOAD | SEC_READONLY))
769
770 /* The name of the stub section.  */
771 #define MIPS_ELF_STUB_SECTION_NAME(abfd) ".MIPS.stubs"
772
773 /* The size of an external REL relocation.  */
774 #define MIPS_ELF_REL_SIZE(abfd) \
775   (get_elf_backend_data (abfd)->s->sizeof_rel)
776
777 /* The size of an external RELA relocation.  */
778 #define MIPS_ELF_RELA_SIZE(abfd) \
779   (get_elf_backend_data (abfd)->s->sizeof_rela)
780
781 /* The size of an external dynamic table entry.  */
782 #define MIPS_ELF_DYN_SIZE(abfd) \
783   (get_elf_backend_data (abfd)->s->sizeof_dyn)
784
785 /* The size of a GOT entry.  */
786 #define MIPS_ELF_GOT_SIZE(abfd) \
787   (get_elf_backend_data (abfd)->s->arch_size / 8)
788
789 /* The size of the .rld_map section. */
790 #define MIPS_ELF_RLD_MAP_SIZE(abfd) \
791   (get_elf_backend_data (abfd)->s->arch_size / 8)
792
793 /* The size of a symbol-table entry.  */
794 #define MIPS_ELF_SYM_SIZE(abfd) \
795   (get_elf_backend_data (abfd)->s->sizeof_sym)
796
797 /* The default alignment for sections, as a power of two.  */
798 #define MIPS_ELF_LOG_FILE_ALIGN(abfd)                           \
799   (get_elf_backend_data (abfd)->s->log_file_align)
800
801 /* Get word-sized data.  */
802 #define MIPS_ELF_GET_WORD(abfd, ptr) \
803   (ABI_64_P (abfd) ? bfd_get_64 (abfd, ptr) : bfd_get_32 (abfd, ptr))
804
805 /* Put out word-sized data.  */
806 #define MIPS_ELF_PUT_WORD(abfd, val, ptr)       \
807   (ABI_64_P (abfd)                              \
808    ? bfd_put_64 (abfd, val, ptr)                \
809    : bfd_put_32 (abfd, val, ptr))
810
811 /* The opcode for word-sized loads (LW or LD).  */
812 #define MIPS_ELF_LOAD_WORD(abfd) \
813   (ABI_64_P (abfd) ? 0xdc000000 : 0x8c000000)
814
815 /* Add a dynamic symbol table-entry.  */
816 #define MIPS_ELF_ADD_DYNAMIC_ENTRY(info, tag, val)      \
817   _bfd_elf_add_dynamic_entry (info, tag, val)
818
819 #define MIPS_ELF_RTYPE_TO_HOWTO(abfd, rtype, rela)                      \
820   (get_elf_backend_data (abfd)->elf_backend_mips_rtype_to_howto (rtype, rela))
821
822 /* The name of the dynamic relocation section.  */
823 #define MIPS_ELF_REL_DYN_NAME(INFO) \
824   (mips_elf_hash_table (INFO)->is_vxworks ? ".rela.dyn" : ".rel.dyn")
825
826 /* In case we're on a 32-bit machine, construct a 64-bit "-1" value
827    from smaller values.  Start with zero, widen, *then* decrement.  */
828 #define MINUS_ONE       (((bfd_vma)0) - 1)
829 #define MINUS_TWO       (((bfd_vma)0) - 2)
830
831 /* The value to write into got[1] for SVR4 targets, to identify it is
832    a GNU object.  The dynamic linker can then use got[1] to store the
833    module pointer.  */
834 #define MIPS_ELF_GNU_GOT1_MASK(abfd) \
835   ((bfd_vma) 1 << (ABI_64_P (abfd) ? 63 : 31))
836
837 /* The offset of $gp from the beginning of the .got section.  */
838 #define ELF_MIPS_GP_OFFSET(INFO) \
839   (mips_elf_hash_table (INFO)->is_vxworks ? 0x0 : 0x7ff0)
840
841 /* The maximum size of the GOT for it to be addressable using 16-bit
842    offsets from $gp.  */
843 #define MIPS_ELF_GOT_MAX_SIZE(INFO) (ELF_MIPS_GP_OFFSET (INFO) + 0x7fff)
844
845 /* Instructions which appear in a stub.  */
846 #define STUB_LW(abfd)                                                   \
847   ((ABI_64_P (abfd)                                                     \
848     ? 0xdf998010                                /* ld t9,0x8010(gp) */  \
849     : 0x8f998010))                              /* lw t9,0x8010(gp) */
850 #define STUB_MOVE(abfd)                                                 \
851    ((ABI_64_P (abfd)                                                    \
852      ? 0x03e0782d                               /* daddu t7,ra */       \
853      : 0x03e07821))                             /* addu t7,ra */
854 #define STUB_LUI(VAL) (0x3c180000 + (VAL))      /* lui t8,VAL */
855 #define STUB_JALR 0x0320f809                    /* jalr t9,ra */
856 #define STUB_ORI(VAL) (0x37180000 + (VAL))      /* ori t8,t8,VAL */
857 #define STUB_LI16U(VAL) (0x34180000 + (VAL))    /* ori t8,zero,VAL unsigned */
858 #define STUB_LI16S(abfd, VAL)                                           \
859    ((ABI_64_P (abfd)                                                    \
860     ? (0x64180000 + (VAL))      /* daddiu t8,zero,VAL sign extended */  \
861     : (0x24180000 + (VAL))))    /* addiu t8,zero,VAL sign extended */
862
863 #define MIPS_FUNCTION_STUB_NORMAL_SIZE 16
864 #define MIPS_FUNCTION_STUB_BIG_SIZE 20
865
866 /* The name of the dynamic interpreter.  This is put in the .interp
867    section.  */
868
869 #define ELF_DYNAMIC_INTERPRETER(abfd)           \
870    (ABI_N32_P (abfd) ? "/usr/lib32/libc.so.1"   \
871     : ABI_64_P (abfd) ? "/usr/lib64/libc.so.1"  \
872     : "/usr/lib/libc.so.1")
873
874 #ifdef BFD64
875 #define MNAME(bfd,pre,pos) \
876   (ABI_64_P (bfd) ? CONCAT4 (pre,64,_,pos) : CONCAT4 (pre,32,_,pos))
877 #define ELF_R_SYM(bfd, i)                                       \
878   (ABI_64_P (bfd) ? ELF64_R_SYM (i) : ELF32_R_SYM (i))
879 #define ELF_R_TYPE(bfd, i)                                      \
880   (ABI_64_P (bfd) ? ELF64_MIPS_R_TYPE (i) : ELF32_R_TYPE (i))
881 #define ELF_R_INFO(bfd, s, t)                                   \
882   (ABI_64_P (bfd) ? ELF64_R_INFO (s, t) : ELF32_R_INFO (s, t))
883 #else
884 #define MNAME(bfd,pre,pos) CONCAT4 (pre,32,_,pos)
885 #define ELF_R_SYM(bfd, i)                                       \
886   (ELF32_R_SYM (i))
887 #define ELF_R_TYPE(bfd, i)                                      \
888   (ELF32_R_TYPE (i))
889 #define ELF_R_INFO(bfd, s, t)                                   \
890   (ELF32_R_INFO (s, t))
891 #endif
892 \f
893   /* The mips16 compiler uses a couple of special sections to handle
894      floating point arguments.
895
896      Section names that look like .mips16.fn.FNNAME contain stubs that
897      copy floating point arguments from the fp regs to the gp regs and
898      then jump to FNNAME.  If any 32 bit function calls FNNAME, the
899      call should be redirected to the stub instead.  If no 32 bit
900      function calls FNNAME, the stub should be discarded.  We need to
901      consider any reference to the function, not just a call, because
902      if the address of the function is taken we will need the stub,
903      since the address might be passed to a 32 bit function.
904
905      Section names that look like .mips16.call.FNNAME contain stubs
906      that copy floating point arguments from the gp regs to the fp
907      regs and then jump to FNNAME.  If FNNAME is a 32 bit function,
908      then any 16 bit function that calls FNNAME should be redirected
909      to the stub instead.  If FNNAME is not a 32 bit function, the
910      stub should be discarded.
911
912      .mips16.call.fp.FNNAME sections are similar, but contain stubs
913      which call FNNAME and then copy the return value from the fp regs
914      to the gp regs.  These stubs store the return value in $18 while
915      calling FNNAME; any function which might call one of these stubs
916      must arrange to save $18 around the call.  (This case is not
917      needed for 32 bit functions that call 16 bit functions, because
918      16 bit functions always return floating point values in both
919      $f0/$f1 and $2/$3.)
920
921      Note that in all cases FNNAME might be defined statically.
922      Therefore, FNNAME is not used literally.  Instead, the relocation
923      information will indicate which symbol the section is for.
924
925      We record any stubs that we find in the symbol table.  */
926
927 #define FN_STUB ".mips16.fn."
928 #define CALL_STUB ".mips16.call."
929 #define CALL_FP_STUB ".mips16.call.fp."
930
931 #define FN_STUB_P(name) CONST_STRNEQ (name, FN_STUB)
932 #define CALL_STUB_P(name) CONST_STRNEQ (name, CALL_STUB)
933 #define CALL_FP_STUB_P(name) CONST_STRNEQ (name, CALL_FP_STUB)
934 \f
935 /* The format of the first PLT entry in an O32 executable.  */
936 static const bfd_vma mips_o32_exec_plt0_entry[] =
937 {
938   0x3c1c0000,   /* lui $28, %hi(&GOTPLT[0])                             */
939   0x8f990000,   /* lw $25, %lo(&GOTPLT[0])($28)                         */
940   0x279c0000,   /* addiu $28, $28, %lo(&GOTPLT[0])                      */
941   0x031cc023,   /* subu $24, $24, $28                                   */
942   0x03e07821,   /* move $15, $31        # 32-bit move (addu)            */
943   0x0018c082,   /* srl $24, $24, 2                                      */
944   0x0320f809,   /* jalr $25                                             */
945   0x2718fffe    /* subu $24, $24, 2                                     */
946 };
947
948 /* The format of the first PLT entry in an N32 executable.  Different
949    because gp ($28) is not available; we use t2 ($14) instead.  */
950 static const bfd_vma mips_n32_exec_plt0_entry[] =
951 {
952   0x3c0e0000,   /* lui $14, %hi(&GOTPLT[0])                             */
953   0x8dd90000,   /* lw $25, %lo(&GOTPLT[0])($14)                         */
954   0x25ce0000,   /* addiu $14, $14, %lo(&GOTPLT[0])                      */
955   0x030ec023,   /* subu $24, $24, $14                                   */
956   0x03e07821,   /* move $15, $31        # 32-bit move (addu)            */
957   0x0018c082,   /* srl $24, $24, 2                                      */
958   0x0320f809,   /* jalr $25                                             */
959   0x2718fffe    /* subu $24, $24, 2                                     */
960 };
961
962 /* The format of the first PLT entry in an N64 executable.  Different
963    from N32 because of the increased size of GOT entries.  */
964 static const bfd_vma mips_n64_exec_plt0_entry[] =
965 {
966   0x3c0e0000,   /* lui $14, %hi(&GOTPLT[0])                             */
967   0xddd90000,   /* ld $25, %lo(&GOTPLT[0])($14)                         */
968   0x25ce0000,   /* addiu $14, $14, %lo(&GOTPLT[0])                      */
969   0x030ec023,   /* subu $24, $24, $14                                   */
970   0x03e0782d,   /* move $15, $31        # 64-bit move (daddu)           */
971   0x0018c0c2,   /* srl $24, $24, 3                                      */
972   0x0320f809,   /* jalr $25                                             */
973   0x2718fffe    /* subu $24, $24, 2                                     */
974 };
975
976 /* The format of subsequent PLT entries.  */
977 static const bfd_vma mips_exec_plt_entry[] =
978 {
979   0x3c0f0000,   /* lui $15, %hi(.got.plt entry)                 */
980   0x01f90000,   /* l[wd] $25, %lo(.got.plt entry)($15)          */
981   0x25f80000,   /* addiu $24, $15, %lo(.got.plt entry)          */
982   0x03200008    /* jr $25                                       */
983 };
984
985 /* The format of the first PLT entry in a VxWorks executable.  */
986 static const bfd_vma mips_vxworks_exec_plt0_entry[] =
987 {
988   0x3c190000,   /* lui t9, %hi(_GLOBAL_OFFSET_TABLE_)           */
989   0x27390000,   /* addiu t9, t9, %lo(_GLOBAL_OFFSET_TABLE_)     */
990   0x8f390008,   /* lw t9, 8(t9)                                 */
991   0x00000000,   /* nop                                          */
992   0x03200008,   /* jr t9                                        */
993   0x00000000    /* nop                                          */
994 };
995
996 /* The format of subsequent PLT entries.  */
997 static const bfd_vma mips_vxworks_exec_plt_entry[] =
998 {
999   0x10000000,   /* b .PLT_resolver                      */
1000   0x24180000,   /* li t8, <pltindex>                    */
1001   0x3c190000,   /* lui t9, %hi(<.got.plt slot>)         */
1002   0x27390000,   /* addiu t9, t9, %lo(<.got.plt slot>)   */
1003   0x8f390000,   /* lw t9, 0(t9)                         */
1004   0x00000000,   /* nop                                  */
1005   0x03200008,   /* jr t9                                */
1006   0x00000000    /* nop                                  */
1007 };
1008
1009 /* The format of the first PLT entry in a VxWorks shared object.  */
1010 static const bfd_vma mips_vxworks_shared_plt0_entry[] =
1011 {
1012   0x8f990008,   /* lw t9, 8(gp)         */
1013   0x00000000,   /* nop                  */
1014   0x03200008,   /* jr t9                */
1015   0x00000000,   /* nop                  */
1016   0x00000000,   /* nop                  */
1017   0x00000000    /* nop                  */
1018 };
1019
1020 /* The format of subsequent PLT entries.  */
1021 static const bfd_vma mips_vxworks_shared_plt_entry[] =
1022 {
1023   0x10000000,   /* b .PLT_resolver      */
1024   0x24180000    /* li t8, <pltindex>    */
1025 };
1026 \f
1027 /* microMIPS 32-bit opcode helper installer.  */
1028
1029 static void
1030 bfd_put_micromips_32 (const bfd *abfd, bfd_vma opcode, bfd_byte *ptr)
1031 {
1032   bfd_put_16 (abfd, (opcode >> 16) & 0xffff, ptr);
1033   bfd_put_16 (abfd,  opcode        & 0xffff, ptr + 2);
1034 }
1035
1036 /* microMIPS 32-bit opcode helper retriever.  */
1037
1038 static bfd_vma
1039 bfd_get_micromips_32 (const bfd *abfd, const bfd_byte *ptr)
1040 {
1041   return (bfd_get_16 (abfd, ptr) << 16) | bfd_get_16 (abfd, ptr + 2);
1042 }
1043 \f
1044 /* Look up an entry in a MIPS ELF linker hash table.  */
1045
1046 #define mips_elf_link_hash_lookup(table, string, create, copy, follow)  \
1047   ((struct mips_elf_link_hash_entry *)                                  \
1048    elf_link_hash_lookup (&(table)->root, (string), (create),            \
1049                          (copy), (follow)))
1050
1051 /* Traverse a MIPS ELF linker hash table.  */
1052
1053 #define mips_elf_link_hash_traverse(table, func, info)                  \
1054   (elf_link_hash_traverse                                               \
1055    (&(table)->root,                                                     \
1056     (bfd_boolean (*) (struct elf_link_hash_entry *, void *)) (func),    \
1057     (info)))
1058
1059 /* Find the base offsets for thread-local storage in this object,
1060    for GD/LD and IE/LE respectively.  */
1061
1062 #define TP_OFFSET 0x7000
1063 #define DTP_OFFSET 0x8000
1064
1065 static bfd_vma
1066 dtprel_base (struct bfd_link_info *info)
1067 {
1068   /* If tls_sec is NULL, we should have signalled an error already.  */
1069   if (elf_hash_table (info)->tls_sec == NULL)
1070     return 0;
1071   return elf_hash_table (info)->tls_sec->vma + DTP_OFFSET;
1072 }
1073
1074 static bfd_vma
1075 tprel_base (struct bfd_link_info *info)
1076 {
1077   /* If tls_sec is NULL, we should have signalled an error already.  */
1078   if (elf_hash_table (info)->tls_sec == NULL)
1079     return 0;
1080   return elf_hash_table (info)->tls_sec->vma + TP_OFFSET;
1081 }
1082
1083 /* Create an entry in a MIPS ELF linker hash table.  */
1084
1085 static struct bfd_hash_entry *
1086 mips_elf_link_hash_newfunc (struct bfd_hash_entry *entry,
1087                             struct bfd_hash_table *table, const char *string)
1088 {
1089   struct mips_elf_link_hash_entry *ret =
1090     (struct mips_elf_link_hash_entry *) entry;
1091
1092   /* Allocate the structure if it has not already been allocated by a
1093      subclass.  */
1094   if (ret == NULL)
1095     ret = bfd_hash_allocate (table, sizeof (struct mips_elf_link_hash_entry));
1096   if (ret == NULL)
1097     return (struct bfd_hash_entry *) ret;
1098
1099   /* Call the allocation method of the superclass.  */
1100   ret = ((struct mips_elf_link_hash_entry *)
1101          _bfd_elf_link_hash_newfunc ((struct bfd_hash_entry *) ret,
1102                                      table, string));
1103   if (ret != NULL)
1104     {
1105       /* Set local fields.  */
1106       memset (&ret->esym, 0, sizeof (EXTR));
1107       /* We use -2 as a marker to indicate that the information has
1108          not been set.  -1 means there is no associated ifd.  */
1109       ret->esym.ifd = -2;
1110       ret->la25_stub = 0;
1111       ret->possibly_dynamic_relocs = 0;
1112       ret->fn_stub = NULL;
1113       ret->call_stub = NULL;
1114       ret->call_fp_stub = NULL;
1115       ret->tls_type = GOT_NORMAL;
1116       ret->global_got_area = GGA_NONE;
1117       ret->got_only_for_calls = TRUE;
1118       ret->readonly_reloc = FALSE;
1119       ret->has_static_relocs = FALSE;
1120       ret->no_fn_stub = FALSE;
1121       ret->need_fn_stub = FALSE;
1122       ret->has_nonpic_branches = FALSE;
1123       ret->needs_lazy_stub = FALSE;
1124     }
1125
1126   return (struct bfd_hash_entry *) ret;
1127 }
1128
1129 /* Allocate MIPS ELF private object data.  */
1130
1131 bfd_boolean
1132 _bfd_mips_elf_mkobject (bfd *abfd)
1133 {
1134   return bfd_elf_allocate_object (abfd, sizeof (struct mips_elf_obj_tdata),
1135                                   MIPS_ELF_DATA);
1136 }
1137
1138 bfd_boolean
1139 _bfd_mips_elf_new_section_hook (bfd *abfd, asection *sec)
1140 {
1141   if (!sec->used_by_bfd)
1142     {
1143       struct _mips_elf_section_data *sdata;
1144       bfd_size_type amt = sizeof (*sdata);
1145
1146       sdata = bfd_zalloc (abfd, amt);
1147       if (sdata == NULL)
1148         return FALSE;
1149       sec->used_by_bfd = sdata;
1150     }
1151
1152   return _bfd_elf_new_section_hook (abfd, sec);
1153 }
1154 \f
1155 /* Read ECOFF debugging information from a .mdebug section into a
1156    ecoff_debug_info structure.  */
1157
1158 bfd_boolean
1159 _bfd_mips_elf_read_ecoff_info (bfd *abfd, asection *section,
1160                                struct ecoff_debug_info *debug)
1161 {
1162   HDRR *symhdr;
1163   const struct ecoff_debug_swap *swap;
1164   char *ext_hdr;
1165
1166   swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
1167   memset (debug, 0, sizeof (*debug));
1168
1169   ext_hdr = bfd_malloc (swap->external_hdr_size);
1170   if (ext_hdr == NULL && swap->external_hdr_size != 0)
1171     goto error_return;
1172
1173   if (! bfd_get_section_contents (abfd, section, ext_hdr, 0,
1174                                   swap->external_hdr_size))
1175     goto error_return;
1176
1177   symhdr = &debug->symbolic_header;
1178   (*swap->swap_hdr_in) (abfd, ext_hdr, symhdr);
1179
1180   /* The symbolic header contains absolute file offsets and sizes to
1181      read.  */
1182 #define READ(ptr, offset, count, size, type)                            \
1183   if (symhdr->count == 0)                                               \
1184     debug->ptr = NULL;                                                  \
1185   else                                                                  \
1186     {                                                                   \
1187       bfd_size_type amt = (bfd_size_type) size * symhdr->count;         \
1188       debug->ptr = bfd_malloc (amt);                                    \
1189       if (debug->ptr == NULL)                                           \
1190         goto error_return;                                              \
1191       if (bfd_seek (abfd, symhdr->offset, SEEK_SET) != 0                \
1192           || bfd_bread (debug->ptr, amt, abfd) != amt)                  \
1193         goto error_return;                                              \
1194     }
1195
1196   READ (line, cbLineOffset, cbLine, sizeof (unsigned char), unsigned char *);
1197   READ (external_dnr, cbDnOffset, idnMax, swap->external_dnr_size, void *);
1198   READ (external_pdr, cbPdOffset, ipdMax, swap->external_pdr_size, void *);
1199   READ (external_sym, cbSymOffset, isymMax, swap->external_sym_size, void *);
1200   READ (external_opt, cbOptOffset, ioptMax, swap->external_opt_size, void *);
1201   READ (external_aux, cbAuxOffset, iauxMax, sizeof (union aux_ext),
1202         union aux_ext *);
1203   READ (ss, cbSsOffset, issMax, sizeof (char), char *);
1204   READ (ssext, cbSsExtOffset, issExtMax, sizeof (char), char *);
1205   READ (external_fdr, cbFdOffset, ifdMax, swap->external_fdr_size, void *);
1206   READ (external_rfd, cbRfdOffset, crfd, swap->external_rfd_size, void *);
1207   READ (external_ext, cbExtOffset, iextMax, swap->external_ext_size, void *);
1208 #undef READ
1209
1210   debug->fdr = NULL;
1211
1212   return TRUE;
1213
1214  error_return:
1215   if (ext_hdr != NULL)
1216     free (ext_hdr);
1217   if (debug->line != NULL)
1218     free (debug->line);
1219   if (debug->external_dnr != NULL)
1220     free (debug->external_dnr);
1221   if (debug->external_pdr != NULL)
1222     free (debug->external_pdr);
1223   if (debug->external_sym != NULL)
1224     free (debug->external_sym);
1225   if (debug->external_opt != NULL)
1226     free (debug->external_opt);
1227   if (debug->external_aux != NULL)
1228     free (debug->external_aux);
1229   if (debug->ss != NULL)
1230     free (debug->ss);
1231   if (debug->ssext != NULL)
1232     free (debug->ssext);
1233   if (debug->external_fdr != NULL)
1234     free (debug->external_fdr);
1235   if (debug->external_rfd != NULL)
1236     free (debug->external_rfd);
1237   if (debug->external_ext != NULL)
1238     free (debug->external_ext);
1239   return FALSE;
1240 }
1241 \f
1242 /* Swap RPDR (runtime procedure table entry) for output.  */
1243
1244 static void
1245 ecoff_swap_rpdr_out (bfd *abfd, const RPDR *in, struct rpdr_ext *ex)
1246 {
1247   H_PUT_S32 (abfd, in->adr, ex->p_adr);
1248   H_PUT_32 (abfd, in->regmask, ex->p_regmask);
1249   H_PUT_32 (abfd, in->regoffset, ex->p_regoffset);
1250   H_PUT_32 (abfd, in->fregmask, ex->p_fregmask);
1251   H_PUT_32 (abfd, in->fregoffset, ex->p_fregoffset);
1252   H_PUT_32 (abfd, in->frameoffset, ex->p_frameoffset);
1253
1254   H_PUT_16 (abfd, in->framereg, ex->p_framereg);
1255   H_PUT_16 (abfd, in->pcreg, ex->p_pcreg);
1256
1257   H_PUT_32 (abfd, in->irpss, ex->p_irpss);
1258 }
1259
1260 /* Create a runtime procedure table from the .mdebug section.  */
1261
1262 static bfd_boolean
1263 mips_elf_create_procedure_table (void *handle, bfd *abfd,
1264                                  struct bfd_link_info *info, asection *s,
1265                                  struct ecoff_debug_info *debug)
1266 {
1267   const struct ecoff_debug_swap *swap;
1268   HDRR *hdr = &debug->symbolic_header;
1269   RPDR *rpdr, *rp;
1270   struct rpdr_ext *erp;
1271   void *rtproc;
1272   struct pdr_ext *epdr;
1273   struct sym_ext *esym;
1274   char *ss, **sv;
1275   char *str;
1276   bfd_size_type size;
1277   bfd_size_type count;
1278   unsigned long sindex;
1279   unsigned long i;
1280   PDR pdr;
1281   SYMR sym;
1282   const char *no_name_func = _("static procedure (no name)");
1283
1284   epdr = NULL;
1285   rpdr = NULL;
1286   esym = NULL;
1287   ss = NULL;
1288   sv = NULL;
1289
1290   swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
1291
1292   sindex = strlen (no_name_func) + 1;
1293   count = hdr->ipdMax;
1294   if (count > 0)
1295     {
1296       size = swap->external_pdr_size;
1297
1298       epdr = bfd_malloc (size * count);
1299       if (epdr == NULL)
1300         goto error_return;
1301
1302       if (! _bfd_ecoff_get_accumulated_pdr (handle, (bfd_byte *) epdr))
1303         goto error_return;
1304
1305       size = sizeof (RPDR);
1306       rp = rpdr = bfd_malloc (size * count);
1307       if (rpdr == NULL)
1308         goto error_return;
1309
1310       size = sizeof (char *);
1311       sv = bfd_malloc (size * count);
1312       if (sv == NULL)
1313         goto error_return;
1314
1315       count = hdr->isymMax;
1316       size = swap->external_sym_size;
1317       esym = bfd_malloc (size * count);
1318       if (esym == NULL)
1319         goto error_return;
1320
1321       if (! _bfd_ecoff_get_accumulated_sym (handle, (bfd_byte *) esym))
1322         goto error_return;
1323
1324       count = hdr->issMax;
1325       ss = bfd_malloc (count);
1326       if (ss == NULL)
1327         goto error_return;
1328       if (! _bfd_ecoff_get_accumulated_ss (handle, (bfd_byte *) ss))
1329         goto error_return;
1330
1331       count = hdr->ipdMax;
1332       for (i = 0; i < (unsigned long) count; i++, rp++)
1333         {
1334           (*swap->swap_pdr_in) (abfd, epdr + i, &pdr);
1335           (*swap->swap_sym_in) (abfd, &esym[pdr.isym], &sym);
1336           rp->adr = sym.value;
1337           rp->regmask = pdr.regmask;
1338           rp->regoffset = pdr.regoffset;
1339           rp->fregmask = pdr.fregmask;
1340           rp->fregoffset = pdr.fregoffset;
1341           rp->frameoffset = pdr.frameoffset;
1342           rp->framereg = pdr.framereg;
1343           rp->pcreg = pdr.pcreg;
1344           rp->irpss = sindex;
1345           sv[i] = ss + sym.iss;
1346           sindex += strlen (sv[i]) + 1;
1347         }
1348     }
1349
1350   size = sizeof (struct rpdr_ext) * (count + 2) + sindex;
1351   size = BFD_ALIGN (size, 16);
1352   rtproc = bfd_alloc (abfd, size);
1353   if (rtproc == NULL)
1354     {
1355       mips_elf_hash_table (info)->procedure_count = 0;
1356       goto error_return;
1357     }
1358
1359   mips_elf_hash_table (info)->procedure_count = count + 2;
1360
1361   erp = rtproc;
1362   memset (erp, 0, sizeof (struct rpdr_ext));
1363   erp++;
1364   str = (char *) rtproc + sizeof (struct rpdr_ext) * (count + 2);
1365   strcpy (str, no_name_func);
1366   str += strlen (no_name_func) + 1;
1367   for (i = 0; i < count; i++)
1368     {
1369       ecoff_swap_rpdr_out (abfd, rpdr + i, erp + i);
1370       strcpy (str, sv[i]);
1371       str += strlen (sv[i]) + 1;
1372     }
1373   H_PUT_S32 (abfd, -1, (erp + count)->p_adr);
1374
1375   /* Set the size and contents of .rtproc section.  */
1376   s->size = size;
1377   s->contents = rtproc;
1378
1379   /* Skip this section later on (I don't think this currently
1380      matters, but someday it might).  */
1381   s->map_head.link_order = NULL;
1382
1383   if (epdr != NULL)
1384     free (epdr);
1385   if (rpdr != NULL)
1386     free (rpdr);
1387   if (esym != NULL)
1388     free (esym);
1389   if (ss != NULL)
1390     free (ss);
1391   if (sv != NULL)
1392     free (sv);
1393
1394   return TRUE;
1395
1396  error_return:
1397   if (epdr != NULL)
1398     free (epdr);
1399   if (rpdr != NULL)
1400     free (rpdr);
1401   if (esym != NULL)
1402     free (esym);
1403   if (ss != NULL)
1404     free (ss);
1405   if (sv != NULL)
1406     free (sv);
1407   return FALSE;
1408 }
1409 \f
1410 /* We're going to create a stub for H.  Create a symbol for the stub's
1411    value and size, to help make the disassembly easier to read.  */
1412
1413 static bfd_boolean
1414 mips_elf_create_stub_symbol (struct bfd_link_info *info,
1415                              struct mips_elf_link_hash_entry *h,
1416                              const char *prefix, asection *s, bfd_vma value,
1417                              bfd_vma size)
1418 {
1419   struct bfd_link_hash_entry *bh;
1420   struct elf_link_hash_entry *elfh;
1421   const char *name;
1422
1423   if (ELF_ST_IS_MICROMIPS (h->root.other))
1424     value |= 1;
1425
1426   /* Create a new symbol.  */
1427   name = ACONCAT ((prefix, h->root.root.root.string, NULL));
1428   bh = NULL;
1429   if (!_bfd_generic_link_add_one_symbol (info, s->owner, name,
1430                                          BSF_LOCAL, s, value, NULL,
1431                                          TRUE, FALSE, &bh))
1432     return FALSE;
1433
1434   /* Make it a local function.  */
1435   elfh = (struct elf_link_hash_entry *) bh;
1436   elfh->type = ELF_ST_INFO (STB_LOCAL, STT_FUNC);
1437   elfh->size = size;
1438   elfh->forced_local = 1;
1439   return TRUE;
1440 }
1441
1442 /* We're about to redefine H.  Create a symbol to represent H's
1443    current value and size, to help make the disassembly easier
1444    to read.  */
1445
1446 static bfd_boolean
1447 mips_elf_create_shadow_symbol (struct bfd_link_info *info,
1448                                struct mips_elf_link_hash_entry *h,
1449                                const char *prefix)
1450 {
1451   struct bfd_link_hash_entry *bh;
1452   struct elf_link_hash_entry *elfh;
1453   const char *name;
1454   asection *s;
1455   bfd_vma value;
1456
1457   /* Read the symbol's value.  */
1458   BFD_ASSERT (h->root.root.type == bfd_link_hash_defined
1459               || h->root.root.type == bfd_link_hash_defweak);
1460   s = h->root.root.u.def.section;
1461   value = h->root.root.u.def.value;
1462
1463   /* Create a new symbol.  */
1464   name = ACONCAT ((prefix, h->root.root.root.string, NULL));
1465   bh = NULL;
1466   if (!_bfd_generic_link_add_one_symbol (info, s->owner, name,
1467                                          BSF_LOCAL, s, value, NULL,
1468                                          TRUE, FALSE, &bh))
1469     return FALSE;
1470
1471   /* Make it local and copy the other attributes from H.  */
1472   elfh = (struct elf_link_hash_entry *) bh;
1473   elfh->type = ELF_ST_INFO (STB_LOCAL, ELF_ST_TYPE (h->root.type));
1474   elfh->other = h->root.other;
1475   elfh->size = h->root.size;
1476   elfh->forced_local = 1;
1477   return TRUE;
1478 }
1479
1480 /* Return TRUE if relocations in SECTION can refer directly to a MIPS16
1481    function rather than to a hard-float stub.  */
1482
1483 static bfd_boolean
1484 section_allows_mips16_refs_p (asection *section)
1485 {
1486   const char *name;
1487
1488   name = bfd_get_section_name (section->owner, section);
1489   return (FN_STUB_P (name)
1490           || CALL_STUB_P (name)
1491           || CALL_FP_STUB_P (name)
1492           || strcmp (name, ".pdr") == 0);
1493 }
1494
1495 /* [RELOCS, RELEND) are the relocations against SEC, which is a MIPS16
1496    stub section of some kind.  Return the R_SYMNDX of the target
1497    function, or 0 if we can't decide which function that is.  */
1498
1499 static unsigned long
1500 mips16_stub_symndx (const struct elf_backend_data *bed,
1501                     asection *sec ATTRIBUTE_UNUSED,
1502                     const Elf_Internal_Rela *relocs,
1503                     const Elf_Internal_Rela *relend)
1504 {
1505   int int_rels_per_ext_rel = bed->s->int_rels_per_ext_rel;
1506   const Elf_Internal_Rela *rel;
1507
1508   /* Trust the first R_MIPS_NONE relocation, if any, but not a subsequent
1509      one in a compound relocation.  */
1510   for (rel = relocs; rel < relend; rel += int_rels_per_ext_rel)
1511     if (ELF_R_TYPE (sec->owner, rel->r_info) == R_MIPS_NONE)
1512       return ELF_R_SYM (sec->owner, rel->r_info);
1513
1514   /* Otherwise trust the first relocation, whatever its kind.  This is
1515      the traditional behavior.  */
1516   if (relocs < relend)
1517     return ELF_R_SYM (sec->owner, relocs->r_info);
1518
1519   return 0;
1520 }
1521
1522 /* Check the mips16 stubs for a particular symbol, and see if we can
1523    discard them.  */
1524
1525 static void
1526 mips_elf_check_mips16_stubs (struct bfd_link_info *info,
1527                              struct mips_elf_link_hash_entry *h)
1528 {
1529   /* Dynamic symbols must use the standard call interface, in case other
1530      objects try to call them.  */
1531   if (h->fn_stub != NULL
1532       && h->root.dynindx != -1)
1533     {
1534       mips_elf_create_shadow_symbol (info, h, ".mips16.");
1535       h->need_fn_stub = TRUE;
1536     }
1537
1538   if (h->fn_stub != NULL
1539       && ! h->need_fn_stub)
1540     {
1541       /* We don't need the fn_stub; the only references to this symbol
1542          are 16 bit calls.  Clobber the size to 0 to prevent it from
1543          being included in the link.  */
1544       h->fn_stub->size = 0;
1545       h->fn_stub->flags &= ~SEC_RELOC;
1546       h->fn_stub->reloc_count = 0;
1547       h->fn_stub->flags |= SEC_EXCLUDE;
1548     }
1549
1550   if (h->call_stub != NULL
1551       && ELF_ST_IS_MIPS16 (h->root.other))
1552     {
1553       /* We don't need the call_stub; this is a 16 bit function, so
1554          calls from other 16 bit functions are OK.  Clobber the size
1555          to 0 to prevent it from being included in the link.  */
1556       h->call_stub->size = 0;
1557       h->call_stub->flags &= ~SEC_RELOC;
1558       h->call_stub->reloc_count = 0;
1559       h->call_stub->flags |= SEC_EXCLUDE;
1560     }
1561
1562   if (h->call_fp_stub != NULL
1563       && ELF_ST_IS_MIPS16 (h->root.other))
1564     {
1565       /* We don't need the call_stub; this is a 16 bit function, so
1566          calls from other 16 bit functions are OK.  Clobber the size
1567          to 0 to prevent it from being included in the link.  */
1568       h->call_fp_stub->size = 0;
1569       h->call_fp_stub->flags &= ~SEC_RELOC;
1570       h->call_fp_stub->reloc_count = 0;
1571       h->call_fp_stub->flags |= SEC_EXCLUDE;
1572     }
1573 }
1574
1575 /* Hashtable callbacks for mips_elf_la25_stubs.  */
1576
1577 static hashval_t
1578 mips_elf_la25_stub_hash (const void *entry_)
1579 {
1580   const struct mips_elf_la25_stub *entry;
1581
1582   entry = (struct mips_elf_la25_stub *) entry_;
1583   return entry->h->root.root.u.def.section->id
1584     + entry->h->root.root.u.def.value;
1585 }
1586
1587 static int
1588 mips_elf_la25_stub_eq (const void *entry1_, const void *entry2_)
1589 {
1590   const struct mips_elf_la25_stub *entry1, *entry2;
1591
1592   entry1 = (struct mips_elf_la25_stub *) entry1_;
1593   entry2 = (struct mips_elf_la25_stub *) entry2_;
1594   return ((entry1->h->root.root.u.def.section
1595            == entry2->h->root.root.u.def.section)
1596           && (entry1->h->root.root.u.def.value
1597               == entry2->h->root.root.u.def.value));
1598 }
1599
1600 /* Called by the linker to set up the la25 stub-creation code.  FN is
1601    the linker's implementation of add_stub_function.  Return true on
1602    success.  */
1603
1604 bfd_boolean
1605 _bfd_mips_elf_init_stubs (struct bfd_link_info *info,
1606                           asection *(*fn) (const char *, asection *,
1607                                            asection *))
1608 {
1609   struct mips_elf_link_hash_table *htab;
1610
1611   htab = mips_elf_hash_table (info);
1612   if (htab == NULL)
1613     return FALSE;
1614
1615   htab->add_stub_section = fn;
1616   htab->la25_stubs = htab_try_create (1, mips_elf_la25_stub_hash,
1617                                       mips_elf_la25_stub_eq, NULL);
1618   if (htab->la25_stubs == NULL)
1619     return FALSE;
1620
1621   return TRUE;
1622 }
1623
1624 /* Return true if H is a locally-defined PIC function, in the sense
1625    that it or its fn_stub might need $25 to be valid on entry.
1626    Note that MIPS16 functions set up $gp using PC-relative instructions,
1627    so they themselves never need $25 to be valid.  Only non-MIPS16
1628    entry points are of interest here.  */
1629
1630 static bfd_boolean
1631 mips_elf_local_pic_function_p (struct mips_elf_link_hash_entry *h)
1632 {
1633   return ((h->root.root.type == bfd_link_hash_defined
1634            || h->root.root.type == bfd_link_hash_defweak)
1635           && h->root.def_regular
1636           && !bfd_is_abs_section (h->root.root.u.def.section)
1637           && (!ELF_ST_IS_MIPS16 (h->root.other)
1638               || (h->fn_stub && h->need_fn_stub))
1639           && (PIC_OBJECT_P (h->root.root.u.def.section->owner)
1640               || ELF_ST_IS_MIPS_PIC (h->root.other)));
1641 }
1642
1643 /* Set *SEC to the input section that contains the target of STUB.
1644    Return the offset of the target from the start of that section.  */
1645
1646 static bfd_vma
1647 mips_elf_get_la25_target (struct mips_elf_la25_stub *stub,
1648                           asection **sec)
1649 {
1650   if (ELF_ST_IS_MIPS16 (stub->h->root.other))
1651     {
1652       BFD_ASSERT (stub->h->need_fn_stub);
1653       *sec = stub->h->fn_stub;
1654       return 0;
1655     }
1656   else
1657     {
1658       *sec = stub->h->root.root.u.def.section;
1659       return stub->h->root.root.u.def.value;
1660     }
1661 }
1662
1663 /* STUB describes an la25 stub that we have decided to implement
1664    by inserting an LUI/ADDIU pair before the target function.
1665    Create the section and redirect the function symbol to it.  */
1666
1667 static bfd_boolean
1668 mips_elf_add_la25_intro (struct mips_elf_la25_stub *stub,
1669                          struct bfd_link_info *info)
1670 {
1671   struct mips_elf_link_hash_table *htab;
1672   char *name;
1673   asection *s, *input_section;
1674   unsigned int align;
1675
1676   htab = mips_elf_hash_table (info);
1677   if (htab == NULL)
1678     return FALSE;
1679
1680   /* Create a unique name for the new section.  */
1681   name = bfd_malloc (11 + sizeof (".text.stub."));
1682   if (name == NULL)
1683     return FALSE;
1684   sprintf (name, ".text.stub.%d", (int) htab_elements (htab->la25_stubs));
1685
1686   /* Create the section.  */
1687   mips_elf_get_la25_target (stub, &input_section);
1688   s = htab->add_stub_section (name, input_section,
1689                               input_section->output_section);
1690   if (s == NULL)
1691     return FALSE;
1692
1693   /* Make sure that any padding goes before the stub.  */
1694   align = input_section->alignment_power;
1695   if (!bfd_set_section_alignment (s->owner, s, align))
1696     return FALSE;
1697   if (align > 3)
1698     s->size = (1 << align) - 8;
1699
1700   /* Create a symbol for the stub.  */
1701   mips_elf_create_stub_symbol (info, stub->h, ".pic.", s, s->size, 8);
1702   stub->stub_section = s;
1703   stub->offset = s->size;
1704
1705   /* Allocate room for it.  */
1706   s->size += 8;
1707   return TRUE;
1708 }
1709
1710 /* STUB describes an la25 stub that we have decided to implement
1711    with a separate trampoline.  Allocate room for it and redirect
1712    the function symbol to it.  */
1713
1714 static bfd_boolean
1715 mips_elf_add_la25_trampoline (struct mips_elf_la25_stub *stub,
1716                               struct bfd_link_info *info)
1717 {
1718   struct mips_elf_link_hash_table *htab;
1719   asection *s;
1720
1721   htab = mips_elf_hash_table (info);
1722   if (htab == NULL)
1723     return FALSE;
1724
1725   /* Create a trampoline section, if we haven't already.  */
1726   s = htab->strampoline;
1727   if (s == NULL)
1728     {
1729       asection *input_section = stub->h->root.root.u.def.section;
1730       s = htab->add_stub_section (".text", NULL,
1731                                   input_section->output_section);
1732       if (s == NULL || !bfd_set_section_alignment (s->owner, s, 4))
1733         return FALSE;
1734       htab->strampoline = s;
1735     }
1736
1737   /* Create a symbol for the stub.  */
1738   mips_elf_create_stub_symbol (info, stub->h, ".pic.", s, s->size, 16);
1739   stub->stub_section = s;
1740   stub->offset = s->size;
1741
1742   /* Allocate room for it.  */
1743   s->size += 16;
1744   return TRUE;
1745 }
1746
1747 /* H describes a symbol that needs an la25 stub.  Make sure that an
1748    appropriate stub exists and point H at it.  */
1749
1750 static bfd_boolean
1751 mips_elf_add_la25_stub (struct bfd_link_info *info,
1752                         struct mips_elf_link_hash_entry *h)
1753 {
1754   struct mips_elf_link_hash_table *htab;
1755   struct mips_elf_la25_stub search, *stub;
1756   bfd_boolean use_trampoline_p;
1757   asection *s;
1758   bfd_vma value;
1759   void **slot;
1760
1761   /* Describe the stub we want.  */
1762   search.stub_section = NULL;
1763   search.offset = 0;
1764   search.h = h;
1765
1766   /* See if we've already created an equivalent stub.  */
1767   htab = mips_elf_hash_table (info);
1768   if (htab == NULL)
1769     return FALSE;
1770
1771   slot = htab_find_slot (htab->la25_stubs, &search, INSERT);
1772   if (slot == NULL)
1773     return FALSE;
1774
1775   stub = (struct mips_elf_la25_stub *) *slot;
1776   if (stub != NULL)
1777     {
1778       /* We can reuse the existing stub.  */
1779       h->la25_stub = stub;
1780       return TRUE;
1781     }
1782
1783   /* Create a permanent copy of ENTRY and add it to the hash table.  */
1784   stub = bfd_malloc (sizeof (search));
1785   if (stub == NULL)
1786     return FALSE;
1787   *stub = search;
1788   *slot = stub;
1789
1790   /* Prefer to use LUI/ADDIU stubs if the function is at the beginning
1791      of the section and if we would need no more than 2 nops.  */
1792   value = mips_elf_get_la25_target (stub, &s);
1793   use_trampoline_p = (value != 0 || s->alignment_power > 4);
1794
1795   h->la25_stub = stub;
1796   return (use_trampoline_p
1797           ? mips_elf_add_la25_trampoline (stub, info)
1798           : mips_elf_add_la25_intro (stub, info));
1799 }
1800
1801 /* A mips_elf_link_hash_traverse callback that is called before sizing
1802    sections.  DATA points to a mips_htab_traverse_info structure.  */
1803
1804 static bfd_boolean
1805 mips_elf_check_symbols (struct mips_elf_link_hash_entry *h, void *data)
1806 {
1807   struct mips_htab_traverse_info *hti;
1808
1809   hti = (struct mips_htab_traverse_info *) data;
1810   if (!hti->info->relocatable)
1811     mips_elf_check_mips16_stubs (hti->info, h);
1812
1813   if (mips_elf_local_pic_function_p (h))
1814     {
1815       /* PR 12845: If H is in a section that has been garbage
1816          collected it will have its output section set to *ABS*.  */
1817       if (bfd_is_abs_section (h->root.root.u.def.section->output_section))
1818         return TRUE;
1819
1820       /* H is a function that might need $25 to be valid on entry.
1821          If we're creating a non-PIC relocatable object, mark H as
1822          being PIC.  If we're creating a non-relocatable object with
1823          non-PIC branches and jumps to H, make sure that H has an la25
1824          stub.  */
1825       if (hti->info->relocatable)
1826         {
1827           if (!PIC_OBJECT_P (hti->output_bfd))
1828             h->root.other = ELF_ST_SET_MIPS_PIC (h->root.other);
1829         }
1830       else if (h->has_nonpic_branches && !mips_elf_add_la25_stub (hti->info, h))
1831         {
1832           hti->error = TRUE;
1833           return FALSE;
1834         }
1835     }
1836   return TRUE;
1837 }
1838 \f
1839 /* R_MIPS16_26 is used for the mips16 jal and jalx instructions.
1840    Most mips16 instructions are 16 bits, but these instructions
1841    are 32 bits.
1842
1843    The format of these instructions is:
1844
1845    +--------------+--------------------------------+
1846    |     JALX     | X|   Imm 20:16  |   Imm 25:21  |
1847    +--------------+--------------------------------+
1848    |                Immediate  15:0                |
1849    +-----------------------------------------------+
1850
1851    JALX is the 5-bit value 00011.  X is 0 for jal, 1 for jalx.
1852    Note that the immediate value in the first word is swapped.
1853
1854    When producing a relocatable object file, R_MIPS16_26 is
1855    handled mostly like R_MIPS_26.  In particular, the addend is
1856    stored as a straight 26-bit value in a 32-bit instruction.
1857    (gas makes life simpler for itself by never adjusting a
1858    R_MIPS16_26 reloc to be against a section, so the addend is
1859    always zero).  However, the 32 bit instruction is stored as 2
1860    16-bit values, rather than a single 32-bit value.  In a
1861    big-endian file, the result is the same; in a little-endian
1862    file, the two 16-bit halves of the 32 bit value are swapped.
1863    This is so that a disassembler can recognize the jal
1864    instruction.
1865
1866    When doing a final link, R_MIPS16_26 is treated as a 32 bit
1867    instruction stored as two 16-bit values.  The addend A is the
1868    contents of the targ26 field.  The calculation is the same as
1869    R_MIPS_26.  When storing the calculated value, reorder the
1870    immediate value as shown above, and don't forget to store the
1871    value as two 16-bit values.
1872
1873    To put it in MIPS ABI terms, the relocation field is T-targ26-16,
1874    defined as
1875
1876    big-endian:
1877    +--------+----------------------+
1878    |        |                      |
1879    |        |    targ26-16         |
1880    |31    26|25                   0|
1881    +--------+----------------------+
1882
1883    little-endian:
1884    +----------+------+-------------+
1885    |          |      |             |
1886    |  sub1    |      |     sub2    |
1887    |0        9|10  15|16         31|
1888    +----------+--------------------+
1889    where targ26-16 is sub1 followed by sub2 (i.e., the addend field A is
1890    ((sub1 << 16) | sub2)).
1891
1892    When producing a relocatable object file, the calculation is
1893    (((A < 2) | ((P + 4) & 0xf0000000) + S) >> 2)
1894    When producing a fully linked file, the calculation is
1895    let R = (((A < 2) | ((P + 4) & 0xf0000000) + S) >> 2)
1896    ((R & 0x1f0000) << 5) | ((R & 0x3e00000) >> 5) | (R & 0xffff)
1897
1898    The table below lists the other MIPS16 instruction relocations.
1899    Each one is calculated in the same way as the non-MIPS16 relocation
1900    given on the right, but using the extended MIPS16 layout of 16-bit
1901    immediate fields:
1902
1903         R_MIPS16_GPREL          R_MIPS_GPREL16
1904         R_MIPS16_GOT16          R_MIPS_GOT16
1905         R_MIPS16_CALL16         R_MIPS_CALL16
1906         R_MIPS16_HI16           R_MIPS_HI16
1907         R_MIPS16_LO16           R_MIPS_LO16
1908
1909    A typical instruction will have a format like this:
1910
1911    +--------------+--------------------------------+
1912    |    EXTEND    |     Imm 10:5    |   Imm 15:11  |
1913    +--------------+--------------------------------+
1914    |    Major     |   rx   |   ry   |   Imm  4:0   |
1915    +--------------+--------------------------------+
1916
1917    EXTEND is the five bit value 11110.  Major is the instruction
1918    opcode.
1919
1920    All we need to do here is shuffle the bits appropriately.
1921    As above, the two 16-bit halves must be swapped on a
1922    little-endian system.  */
1923
1924 static inline bfd_boolean
1925 mips16_reloc_p (int r_type)
1926 {
1927   switch (r_type)
1928     {
1929     case R_MIPS16_26:
1930     case R_MIPS16_GPREL:
1931     case R_MIPS16_GOT16:
1932     case R_MIPS16_CALL16:
1933     case R_MIPS16_HI16:
1934     case R_MIPS16_LO16:
1935     case R_MIPS16_TLS_GD:
1936     case R_MIPS16_TLS_LDM:
1937     case R_MIPS16_TLS_DTPREL_HI16:
1938     case R_MIPS16_TLS_DTPREL_LO16:
1939     case R_MIPS16_TLS_GOTTPREL:
1940     case R_MIPS16_TLS_TPREL_HI16:
1941     case R_MIPS16_TLS_TPREL_LO16:
1942       return TRUE;
1943
1944     default:
1945       return FALSE;
1946     }
1947 }
1948
1949 /* Check if a microMIPS reloc.  */
1950
1951 static inline bfd_boolean
1952 micromips_reloc_p (unsigned int r_type)
1953 {
1954   return r_type >= R_MICROMIPS_min && r_type < R_MICROMIPS_max;
1955 }
1956
1957 /* Similar to MIPS16, the two 16-bit halves in microMIPS must be swapped
1958    on a little-endian system.  This does not apply to R_MICROMIPS_PC7_S1
1959    and R_MICROMIPS_PC10_S1 relocs that apply to 16-bit instructions.  */
1960
1961 static inline bfd_boolean
1962 micromips_reloc_shuffle_p (unsigned int r_type)
1963 {
1964   return (micromips_reloc_p (r_type)
1965           && r_type != R_MICROMIPS_PC7_S1
1966           && r_type != R_MICROMIPS_PC10_S1);
1967 }
1968
1969 static inline bfd_boolean
1970 got16_reloc_p (int r_type)
1971 {
1972   return (r_type == R_MIPS_GOT16
1973           || r_type == R_MIPS16_GOT16
1974           || r_type == R_MICROMIPS_GOT16);
1975 }
1976
1977 static inline bfd_boolean
1978 call16_reloc_p (int r_type)
1979 {
1980   return (r_type == R_MIPS_CALL16
1981           || r_type == R_MIPS16_CALL16
1982           || r_type == R_MICROMIPS_CALL16);
1983 }
1984
1985 static inline bfd_boolean
1986 got_disp_reloc_p (unsigned int r_type)
1987 {
1988   return r_type == R_MIPS_GOT_DISP || r_type == R_MICROMIPS_GOT_DISP;
1989 }
1990
1991 static inline bfd_boolean
1992 got_page_reloc_p (unsigned int r_type)
1993 {
1994   return r_type == R_MIPS_GOT_PAGE || r_type == R_MICROMIPS_GOT_PAGE;
1995 }
1996
1997 static inline bfd_boolean
1998 got_ofst_reloc_p (unsigned int r_type)
1999 {
2000   return r_type == R_MIPS_GOT_OFST || r_type == R_MICROMIPS_GOT_OFST;
2001 }
2002
2003 static inline bfd_boolean
2004 got_hi16_reloc_p (unsigned int r_type)
2005 {
2006   return r_type == R_MIPS_GOT_HI16 || r_type == R_MICROMIPS_GOT_HI16;
2007 }
2008
2009 static inline bfd_boolean
2010 got_lo16_reloc_p (unsigned int r_type)
2011 {
2012   return r_type == R_MIPS_GOT_LO16 || r_type == R_MICROMIPS_GOT_LO16;
2013 }
2014
2015 static inline bfd_boolean
2016 call_hi16_reloc_p (unsigned int r_type)
2017 {
2018   return r_type == R_MIPS_CALL_HI16 || r_type == R_MICROMIPS_CALL_HI16;
2019 }
2020
2021 static inline bfd_boolean
2022 call_lo16_reloc_p (unsigned int r_type)
2023 {
2024   return r_type == R_MIPS_CALL_LO16 || r_type == R_MICROMIPS_CALL_LO16;
2025 }
2026
2027 static inline bfd_boolean
2028 hi16_reloc_p (int r_type)
2029 {
2030   return (r_type == R_MIPS_HI16
2031           || r_type == R_MIPS16_HI16
2032           || r_type == R_MICROMIPS_HI16);
2033 }
2034
2035 static inline bfd_boolean
2036 lo16_reloc_p (int r_type)
2037 {
2038   return (r_type == R_MIPS_LO16
2039           || r_type == R_MIPS16_LO16
2040           || r_type == R_MICROMIPS_LO16);
2041 }
2042
2043 static inline bfd_boolean
2044 mips16_call_reloc_p (int r_type)
2045 {
2046   return r_type == R_MIPS16_26 || r_type == R_MIPS16_CALL16;
2047 }
2048
2049 static inline bfd_boolean
2050 jal_reloc_p (int r_type)
2051 {
2052   return (r_type == R_MIPS_26
2053           || r_type == R_MIPS16_26
2054           || r_type == R_MICROMIPS_26_S1);
2055 }
2056
2057 static inline bfd_boolean
2058 micromips_branch_reloc_p (int r_type)
2059 {
2060   return (r_type == R_MICROMIPS_26_S1
2061           || r_type == R_MICROMIPS_PC16_S1
2062           || r_type == R_MICROMIPS_PC10_S1
2063           || r_type == R_MICROMIPS_PC7_S1);
2064 }
2065
2066 static inline bfd_boolean
2067 tls_gd_reloc_p (unsigned int r_type)
2068 {
2069   return (r_type == R_MIPS_TLS_GD
2070           || r_type == R_MIPS16_TLS_GD
2071           || r_type == R_MICROMIPS_TLS_GD);
2072 }
2073
2074 static inline bfd_boolean
2075 tls_ldm_reloc_p (unsigned int r_type)
2076 {
2077   return (r_type == R_MIPS_TLS_LDM
2078           || r_type == R_MIPS16_TLS_LDM
2079           || r_type == R_MICROMIPS_TLS_LDM);
2080 }
2081
2082 static inline bfd_boolean
2083 tls_gottprel_reloc_p (unsigned int r_type)
2084 {
2085   return (r_type == R_MIPS_TLS_GOTTPREL
2086           || r_type == R_MIPS16_TLS_GOTTPREL
2087           || r_type == R_MICROMIPS_TLS_GOTTPREL);
2088 }
2089
2090 void
2091 _bfd_mips_elf_reloc_unshuffle (bfd *abfd, int r_type,
2092                                bfd_boolean jal_shuffle, bfd_byte *data)
2093 {
2094   bfd_vma first, second, val;
2095
2096   if (!mips16_reloc_p (r_type) && !micromips_reloc_shuffle_p (r_type))
2097     return;
2098
2099   /* Pick up the first and second halfwords of the instruction.  */
2100   first = bfd_get_16 (abfd, data);
2101   second = bfd_get_16 (abfd, data + 2);
2102   if (micromips_reloc_p (r_type) || (r_type == R_MIPS16_26 && !jal_shuffle))
2103     val = first << 16 | second;
2104   else if (r_type != R_MIPS16_26)
2105     val = (((first & 0xf800) << 16) | ((second & 0xffe0) << 11)
2106            | ((first & 0x1f) << 11) | (first & 0x7e0) | (second & 0x1f));
2107   else
2108     val = (((first & 0xfc00) << 16) | ((first & 0x3e0) << 11)
2109            | ((first & 0x1f) << 21) | second);
2110   bfd_put_32 (abfd, val, data);
2111 }
2112
2113 void
2114 _bfd_mips_elf_reloc_shuffle (bfd *abfd, int r_type,
2115                              bfd_boolean jal_shuffle, bfd_byte *data)
2116 {
2117   bfd_vma first, second, val;
2118
2119   if (!mips16_reloc_p (r_type) && !micromips_reloc_shuffle_p (r_type))
2120     return;
2121
2122   val = bfd_get_32 (abfd, data);
2123   if (micromips_reloc_p (r_type) || (r_type == R_MIPS16_26 && !jal_shuffle))
2124     {
2125       second = val & 0xffff;
2126       first = val >> 16;
2127     }
2128   else if (r_type != R_MIPS16_26)
2129     {
2130       second = ((val >> 11) & 0xffe0) | (val & 0x1f);
2131       first = ((val >> 16) & 0xf800) | ((val >> 11) & 0x1f) | (val & 0x7e0);
2132     }
2133   else
2134     {
2135       second = val & 0xffff;
2136       first = ((val >> 16) & 0xfc00) | ((val >> 11) & 0x3e0)
2137                | ((val >> 21) & 0x1f);
2138     }
2139   bfd_put_16 (abfd, second, data + 2);
2140   bfd_put_16 (abfd, first, data);
2141 }
2142
2143 bfd_reloc_status_type
2144 _bfd_mips_elf_gprel16_with_gp (bfd *abfd, asymbol *symbol,
2145                                arelent *reloc_entry, asection *input_section,
2146                                bfd_boolean relocatable, void *data, bfd_vma gp)
2147 {
2148   bfd_vma relocation;
2149   bfd_signed_vma val;
2150   bfd_reloc_status_type status;
2151
2152   if (bfd_is_com_section (symbol->section))
2153     relocation = 0;
2154   else
2155     relocation = symbol->value;
2156
2157   relocation += symbol->section->output_section->vma;
2158   relocation += symbol->section->output_offset;
2159
2160   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2161     return bfd_reloc_outofrange;
2162
2163   /* Set val to the offset into the section or symbol.  */
2164   val = reloc_entry->addend;
2165
2166   _bfd_mips_elf_sign_extend (val, 16);
2167
2168   /* Adjust val for the final section location and GP value.  If we
2169      are producing relocatable output, we don't want to do this for
2170      an external symbol.  */
2171   if (! relocatable
2172       || (symbol->flags & BSF_SECTION_SYM) != 0)
2173     val += relocation - gp;
2174
2175   if (reloc_entry->howto->partial_inplace)
2176     {
2177       status = _bfd_relocate_contents (reloc_entry->howto, abfd, val,
2178                                        (bfd_byte *) data
2179                                        + reloc_entry->address);
2180       if (status != bfd_reloc_ok)
2181         return status;
2182     }
2183   else
2184     reloc_entry->addend = val;
2185
2186   if (relocatable)
2187     reloc_entry->address += input_section->output_offset;
2188
2189   return bfd_reloc_ok;
2190 }
2191
2192 /* Used to store a REL high-part relocation such as R_MIPS_HI16 or
2193    R_MIPS_GOT16.  REL is the relocation, INPUT_SECTION is the section
2194    that contains the relocation field and DATA points to the start of
2195    INPUT_SECTION.  */
2196
2197 struct mips_hi16
2198 {
2199   struct mips_hi16 *next;
2200   bfd_byte *data;
2201   asection *input_section;
2202   arelent rel;
2203 };
2204
2205 /* FIXME: This should not be a static variable.  */
2206
2207 static struct mips_hi16 *mips_hi16_list;
2208
2209 /* A howto special_function for REL *HI16 relocations.  We can only
2210    calculate the correct value once we've seen the partnering
2211    *LO16 relocation, so just save the information for later.
2212
2213    The ABI requires that the *LO16 immediately follow the *HI16.
2214    However, as a GNU extension, we permit an arbitrary number of
2215    *HI16s to be associated with a single *LO16.  This significantly
2216    simplies the relocation handling in gcc.  */
2217
2218 bfd_reloc_status_type
2219 _bfd_mips_elf_hi16_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry,
2220                           asymbol *symbol ATTRIBUTE_UNUSED, void *data,
2221                           asection *input_section, bfd *output_bfd,
2222                           char **error_message ATTRIBUTE_UNUSED)
2223 {
2224   struct mips_hi16 *n;
2225
2226   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2227     return bfd_reloc_outofrange;
2228
2229   n = bfd_malloc (sizeof *n);
2230   if (n == NULL)
2231     return bfd_reloc_outofrange;
2232
2233   n->next = mips_hi16_list;
2234   n->data = data;
2235   n->input_section = input_section;
2236   n->rel = *reloc_entry;
2237   mips_hi16_list = n;
2238
2239   if (output_bfd != NULL)
2240     reloc_entry->address += input_section->output_offset;
2241
2242   return bfd_reloc_ok;
2243 }
2244
2245 /* A howto special_function for REL R_MIPS*_GOT16 relocations.  This is just
2246    like any other 16-bit relocation when applied to global symbols, but is
2247    treated in the same as R_MIPS_HI16 when applied to local symbols.  */
2248
2249 bfd_reloc_status_type
2250 _bfd_mips_elf_got16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2251                            void *data, asection *input_section,
2252                            bfd *output_bfd, char **error_message)
2253 {
2254   if ((symbol->flags & (BSF_GLOBAL | BSF_WEAK)) != 0
2255       || bfd_is_und_section (bfd_get_section (symbol))
2256       || bfd_is_com_section (bfd_get_section (symbol)))
2257     /* The relocation is against a global symbol.  */
2258     return _bfd_mips_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2259                                         input_section, output_bfd,
2260                                         error_message);
2261
2262   return _bfd_mips_elf_hi16_reloc (abfd, reloc_entry, symbol, data,
2263                                    input_section, output_bfd, error_message);
2264 }
2265
2266 /* A howto special_function for REL *LO16 relocations.  The *LO16 itself
2267    is a straightforward 16 bit inplace relocation, but we must deal with
2268    any partnering high-part relocations as well.  */
2269
2270 bfd_reloc_status_type
2271 _bfd_mips_elf_lo16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2272                           void *data, asection *input_section,
2273                           bfd *output_bfd, char **error_message)
2274 {
2275   bfd_vma vallo;
2276   bfd_byte *location = (bfd_byte *) data + reloc_entry->address;
2277
2278   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2279     return bfd_reloc_outofrange;
2280
2281   _bfd_mips_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, FALSE,
2282                                  location);
2283   vallo = bfd_get_32 (abfd, location);
2284   _bfd_mips_elf_reloc_shuffle (abfd, reloc_entry->howto->type, FALSE,
2285                                location);
2286
2287   while (mips_hi16_list != NULL)
2288     {
2289       bfd_reloc_status_type ret;
2290       struct mips_hi16 *hi;
2291
2292       hi = mips_hi16_list;
2293
2294       /* R_MIPS*_GOT16 relocations are something of a special case.  We
2295          want to install the addend in the same way as for a R_MIPS*_HI16
2296          relocation (with a rightshift of 16).  However, since GOT16
2297          relocations can also be used with global symbols, their howto
2298          has a rightshift of 0.  */
2299       if (hi->rel.howto->type == R_MIPS_GOT16)
2300         hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MIPS_HI16, FALSE);
2301       else if (hi->rel.howto->type == R_MIPS16_GOT16)
2302         hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MIPS16_HI16, FALSE);
2303       else if (hi->rel.howto->type == R_MICROMIPS_GOT16)
2304         hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MICROMIPS_HI16, FALSE);
2305
2306       /* VALLO is a signed 16-bit number.  Bias it by 0x8000 so that any
2307          carry or borrow will induce a change of +1 or -1 in the high part.  */
2308       hi->rel.addend += (vallo + 0x8000) & 0xffff;
2309
2310       ret = _bfd_mips_elf_generic_reloc (abfd, &hi->rel, symbol, hi->data,
2311                                          hi->input_section, output_bfd,
2312                                          error_message);
2313       if (ret != bfd_reloc_ok)
2314         return ret;
2315
2316       mips_hi16_list = hi->next;
2317       free (hi);
2318     }
2319
2320   return _bfd_mips_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2321                                       input_section, output_bfd,
2322                                       error_message);
2323 }
2324
2325 /* A generic howto special_function.  This calculates and installs the
2326    relocation itself, thus avoiding the oft-discussed problems in
2327    bfd_perform_relocation and bfd_install_relocation.  */
2328
2329 bfd_reloc_status_type
2330 _bfd_mips_elf_generic_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry,
2331                              asymbol *symbol, void *data ATTRIBUTE_UNUSED,
2332                              asection *input_section, bfd *output_bfd,
2333                              char **error_message ATTRIBUTE_UNUSED)
2334 {
2335   bfd_signed_vma val;
2336   bfd_reloc_status_type status;
2337   bfd_boolean relocatable;
2338
2339   relocatable = (output_bfd != NULL);
2340
2341   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2342     return bfd_reloc_outofrange;
2343
2344   /* Build up the field adjustment in VAL.  */
2345   val = 0;
2346   if (!relocatable || (symbol->flags & BSF_SECTION_SYM) != 0)
2347     {
2348       /* Either we're calculating the final field value or we have a
2349          relocation against a section symbol.  Add in the section's
2350          offset or address.  */
2351       val += symbol->section->output_section->vma;
2352       val += symbol->section->output_offset;
2353     }
2354
2355   if (!relocatable)
2356     {
2357       /* We're calculating the final field value.  Add in the symbol's value
2358          and, if pc-relative, subtract the address of the field itself.  */
2359       val += symbol->value;
2360       if (reloc_entry->howto->pc_relative)
2361         {
2362           val -= input_section->output_section->vma;
2363           val -= input_section->output_offset;
2364           val -= reloc_entry->address;
2365         }
2366     }
2367
2368   /* VAL is now the final adjustment.  If we're keeping this relocation
2369      in the output file, and if the relocation uses a separate addend,
2370      we just need to add VAL to that addend.  Otherwise we need to add
2371      VAL to the relocation field itself.  */
2372   if (relocatable && !reloc_entry->howto->partial_inplace)
2373     reloc_entry->addend += val;
2374   else
2375     {
2376       bfd_byte *location = (bfd_byte *) data + reloc_entry->address;
2377
2378       /* Add in the separate addend, if any.  */
2379       val += reloc_entry->addend;
2380
2381       /* Add VAL to the relocation field.  */
2382       _bfd_mips_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, FALSE,
2383                                      location);
2384       status = _bfd_relocate_contents (reloc_entry->howto, abfd, val,
2385                                        location);
2386       _bfd_mips_elf_reloc_shuffle (abfd, reloc_entry->howto->type, FALSE,
2387                                    location);
2388
2389       if (status != bfd_reloc_ok)
2390         return status;
2391     }
2392
2393   if (relocatable)
2394     reloc_entry->address += input_section->output_offset;
2395
2396   return bfd_reloc_ok;
2397 }
2398 \f
2399 /* Swap an entry in a .gptab section.  Note that these routines rely
2400    on the equivalence of the two elements of the union.  */
2401
2402 static void
2403 bfd_mips_elf32_swap_gptab_in (bfd *abfd, const Elf32_External_gptab *ex,
2404                               Elf32_gptab *in)
2405 {
2406   in->gt_entry.gt_g_value = H_GET_32 (abfd, ex->gt_entry.gt_g_value);
2407   in->gt_entry.gt_bytes = H_GET_32 (abfd, ex->gt_entry.gt_bytes);
2408 }
2409
2410 static void
2411 bfd_mips_elf32_swap_gptab_out (bfd *abfd, const Elf32_gptab *in,
2412                                Elf32_External_gptab *ex)
2413 {
2414   H_PUT_32 (abfd, in->gt_entry.gt_g_value, ex->gt_entry.gt_g_value);
2415   H_PUT_32 (abfd, in->gt_entry.gt_bytes, ex->gt_entry.gt_bytes);
2416 }
2417
2418 static void
2419 bfd_elf32_swap_compact_rel_out (bfd *abfd, const Elf32_compact_rel *in,
2420                                 Elf32_External_compact_rel *ex)
2421 {
2422   H_PUT_32 (abfd, in->id1, ex->id1);
2423   H_PUT_32 (abfd, in->num, ex->num);
2424   H_PUT_32 (abfd, in->id2, ex->id2);
2425   H_PUT_32 (abfd, in->offset, ex->offset);
2426   H_PUT_32 (abfd, in->reserved0, ex->reserved0);
2427   H_PUT_32 (abfd, in->reserved1, ex->reserved1);
2428 }
2429
2430 static void
2431 bfd_elf32_swap_crinfo_out (bfd *abfd, const Elf32_crinfo *in,
2432                            Elf32_External_crinfo *ex)
2433 {
2434   unsigned long l;
2435
2436   l = (((in->ctype & CRINFO_CTYPE) << CRINFO_CTYPE_SH)
2437        | ((in->rtype & CRINFO_RTYPE) << CRINFO_RTYPE_SH)
2438        | ((in->dist2to & CRINFO_DIST2TO) << CRINFO_DIST2TO_SH)
2439        | ((in->relvaddr & CRINFO_RELVADDR) << CRINFO_RELVADDR_SH));
2440   H_PUT_32 (abfd, l, ex->info);
2441   H_PUT_32 (abfd, in->konst, ex->konst);
2442   H_PUT_32 (abfd, in->vaddr, ex->vaddr);
2443 }
2444 \f
2445 /* A .reginfo section holds a single Elf32_RegInfo structure.  These
2446    routines swap this structure in and out.  They are used outside of
2447    BFD, so they are globally visible.  */
2448
2449 void
2450 bfd_mips_elf32_swap_reginfo_in (bfd *abfd, const Elf32_External_RegInfo *ex,
2451                                 Elf32_RegInfo *in)
2452 {
2453   in->ri_gprmask = H_GET_32 (abfd, ex->ri_gprmask);
2454   in->ri_cprmask[0] = H_GET_32 (abfd, ex->ri_cprmask[0]);
2455   in->ri_cprmask[1] = H_GET_32 (abfd, ex->ri_cprmask[1]);
2456   in->ri_cprmask[2] = H_GET_32 (abfd, ex->ri_cprmask[2]);
2457   in->ri_cprmask[3] = H_GET_32 (abfd, ex->ri_cprmask[3]);
2458   in->ri_gp_value = H_GET_32 (abfd, ex->ri_gp_value);
2459 }
2460
2461 void
2462 bfd_mips_elf32_swap_reginfo_out (bfd *abfd, const Elf32_RegInfo *in,
2463                                  Elf32_External_RegInfo *ex)
2464 {
2465   H_PUT_32 (abfd, in->ri_gprmask, ex->ri_gprmask);
2466   H_PUT_32 (abfd, in->ri_cprmask[0], ex->ri_cprmask[0]);
2467   H_PUT_32 (abfd, in->ri_cprmask[1], ex->ri_cprmask[1]);
2468   H_PUT_32 (abfd, in->ri_cprmask[2], ex->ri_cprmask[2]);
2469   H_PUT_32 (abfd, in->ri_cprmask[3], ex->ri_cprmask[3]);
2470   H_PUT_32 (abfd, in->ri_gp_value, ex->ri_gp_value);
2471 }
2472
2473 /* In the 64 bit ABI, the .MIPS.options section holds register
2474    information in an Elf64_Reginfo structure.  These routines swap
2475    them in and out.  They are globally visible because they are used
2476    outside of BFD.  These routines are here so that gas can call them
2477    without worrying about whether the 64 bit ABI has been included.  */
2478
2479 void
2480 bfd_mips_elf64_swap_reginfo_in (bfd *abfd, const Elf64_External_RegInfo *ex,
2481                                 Elf64_Internal_RegInfo *in)
2482 {
2483   in->ri_gprmask = H_GET_32 (abfd, ex->ri_gprmask);
2484   in->ri_pad = H_GET_32 (abfd, ex->ri_pad);
2485   in->ri_cprmask[0] = H_GET_32 (abfd, ex->ri_cprmask[0]);
2486   in->ri_cprmask[1] = H_GET_32 (abfd, ex->ri_cprmask[1]);
2487   in->ri_cprmask[2] = H_GET_32 (abfd, ex->ri_cprmask[2]);
2488   in->ri_cprmask[3] = H_GET_32 (abfd, ex->ri_cprmask[3]);
2489   in->ri_gp_value = H_GET_64 (abfd, ex->ri_gp_value);
2490 }
2491
2492 void
2493 bfd_mips_elf64_swap_reginfo_out (bfd *abfd, const Elf64_Internal_RegInfo *in,
2494                                  Elf64_External_RegInfo *ex)
2495 {
2496   H_PUT_32 (abfd, in->ri_gprmask, ex->ri_gprmask);
2497   H_PUT_32 (abfd, in->ri_pad, ex->ri_pad);
2498   H_PUT_32 (abfd, in->ri_cprmask[0], ex->ri_cprmask[0]);
2499   H_PUT_32 (abfd, in->ri_cprmask[1], ex->ri_cprmask[1]);
2500   H_PUT_32 (abfd, in->ri_cprmask[2], ex->ri_cprmask[2]);
2501   H_PUT_32 (abfd, in->ri_cprmask[3], ex->ri_cprmask[3]);
2502   H_PUT_64 (abfd, in->ri_gp_value, ex->ri_gp_value);
2503 }
2504
2505 /* Swap in an options header.  */
2506
2507 void
2508 bfd_mips_elf_swap_options_in (bfd *abfd, const Elf_External_Options *ex,
2509                               Elf_Internal_Options *in)
2510 {
2511   in->kind = H_GET_8 (abfd, ex->kind);
2512   in->size = H_GET_8 (abfd, ex->size);
2513   in->section = H_GET_16 (abfd, ex->section);
2514   in->info = H_GET_32 (abfd, ex->info);
2515 }
2516
2517 /* Swap out an options header.  */
2518
2519 void
2520 bfd_mips_elf_swap_options_out (bfd *abfd, const Elf_Internal_Options *in,
2521                                Elf_External_Options *ex)
2522 {
2523   H_PUT_8 (abfd, in->kind, ex->kind);
2524   H_PUT_8 (abfd, in->size, ex->size);
2525   H_PUT_16 (abfd, in->section, ex->section);
2526   H_PUT_32 (abfd, in->info, ex->info);
2527 }
2528 \f
2529 /* This function is called via qsort() to sort the dynamic relocation
2530    entries by increasing r_symndx value.  */
2531
2532 static int
2533 sort_dynamic_relocs (const void *arg1, const void *arg2)
2534 {
2535   Elf_Internal_Rela int_reloc1;
2536   Elf_Internal_Rela int_reloc2;
2537   int diff;
2538
2539   bfd_elf32_swap_reloc_in (reldyn_sorting_bfd, arg1, &int_reloc1);
2540   bfd_elf32_swap_reloc_in (reldyn_sorting_bfd, arg2, &int_reloc2);
2541
2542   diff = ELF32_R_SYM (int_reloc1.r_info) - ELF32_R_SYM (int_reloc2.r_info);
2543   if (diff != 0)
2544     return diff;
2545
2546   if (int_reloc1.r_offset < int_reloc2.r_offset)
2547     return -1;
2548   if (int_reloc1.r_offset > int_reloc2.r_offset)
2549     return 1;
2550   return 0;
2551 }
2552
2553 /* Like sort_dynamic_relocs, but used for elf64 relocations.  */
2554
2555 static int
2556 sort_dynamic_relocs_64 (const void *arg1 ATTRIBUTE_UNUSED,
2557                         const void *arg2 ATTRIBUTE_UNUSED)
2558 {
2559 #ifdef BFD64
2560   Elf_Internal_Rela int_reloc1[3];
2561   Elf_Internal_Rela int_reloc2[3];
2562
2563   (*get_elf_backend_data (reldyn_sorting_bfd)->s->swap_reloc_in)
2564     (reldyn_sorting_bfd, arg1, int_reloc1);
2565   (*get_elf_backend_data (reldyn_sorting_bfd)->s->swap_reloc_in)
2566     (reldyn_sorting_bfd, arg2, int_reloc2);
2567
2568   if (ELF64_R_SYM (int_reloc1[0].r_info) < ELF64_R_SYM (int_reloc2[0].r_info))
2569     return -1;
2570   if (ELF64_R_SYM (int_reloc1[0].r_info) > ELF64_R_SYM (int_reloc2[0].r_info))
2571     return 1;
2572
2573   if (int_reloc1[0].r_offset < int_reloc2[0].r_offset)
2574     return -1;
2575   if (int_reloc1[0].r_offset > int_reloc2[0].r_offset)
2576     return 1;
2577   return 0;
2578 #else
2579   abort ();
2580 #endif
2581 }
2582
2583
2584 /* This routine is used to write out ECOFF debugging external symbol
2585    information.  It is called via mips_elf_link_hash_traverse.  The
2586    ECOFF external symbol information must match the ELF external
2587    symbol information.  Unfortunately, at this point we don't know
2588    whether a symbol is required by reloc information, so the two
2589    tables may wind up being different.  We must sort out the external
2590    symbol information before we can set the final size of the .mdebug
2591    section, and we must set the size of the .mdebug section before we
2592    can relocate any sections, and we can't know which symbols are
2593    required by relocation until we relocate the sections.
2594    Fortunately, it is relatively unlikely that any symbol will be
2595    stripped but required by a reloc.  In particular, it can not happen
2596    when generating a final executable.  */
2597
2598 static bfd_boolean
2599 mips_elf_output_extsym (struct mips_elf_link_hash_entry *h, void *data)
2600 {
2601   struct extsym_info *einfo = data;
2602   bfd_boolean strip;
2603   asection *sec, *output_section;
2604
2605   if (h->root.indx == -2)
2606     strip = FALSE;
2607   else if ((h->root.def_dynamic
2608             || h->root.ref_dynamic
2609             || h->root.type == bfd_link_hash_new)
2610            && !h->root.def_regular
2611            && !h->root.ref_regular)
2612     strip = TRUE;
2613   else if (einfo->info->strip == strip_all
2614            || (einfo->info->strip == strip_some
2615                && bfd_hash_lookup (einfo->info->keep_hash,
2616                                    h->root.root.root.string,
2617                                    FALSE, FALSE) == NULL))
2618     strip = TRUE;
2619   else
2620     strip = FALSE;
2621
2622   if (strip)
2623     return TRUE;
2624
2625   if (h->esym.ifd == -2)
2626     {
2627       h->esym.jmptbl = 0;
2628       h->esym.cobol_main = 0;
2629       h->esym.weakext = 0;
2630       h->esym.reserved = 0;
2631       h->esym.ifd = ifdNil;
2632       h->esym.asym.value = 0;
2633       h->esym.asym.st = stGlobal;
2634
2635       if (h->root.root.type == bfd_link_hash_undefined
2636           || h->root.root.type == bfd_link_hash_undefweak)
2637         {
2638           const char *name;
2639
2640           /* Use undefined class.  Also, set class and type for some
2641              special symbols.  */
2642           name = h->root.root.root.string;
2643           if (strcmp (name, mips_elf_dynsym_rtproc_names[0]) == 0
2644               || strcmp (name, mips_elf_dynsym_rtproc_names[1]) == 0)
2645             {
2646               h->esym.asym.sc = scData;
2647               h->esym.asym.st = stLabel;
2648               h->esym.asym.value = 0;
2649             }
2650           else if (strcmp (name, mips_elf_dynsym_rtproc_names[2]) == 0)
2651             {
2652               h->esym.asym.sc = scAbs;
2653               h->esym.asym.st = stLabel;
2654               h->esym.asym.value =
2655                 mips_elf_hash_table (einfo->info)->procedure_count;
2656             }
2657           else if (strcmp (name, "_gp_disp") == 0 && ! NEWABI_P (einfo->abfd))
2658             {
2659               h->esym.asym.sc = scAbs;
2660               h->esym.asym.st = stLabel;
2661               h->esym.asym.value = elf_gp (einfo->abfd);
2662             }
2663           else
2664             h->esym.asym.sc = scUndefined;
2665         }
2666       else if (h->root.root.type != bfd_link_hash_defined
2667           && h->root.root.type != bfd_link_hash_defweak)
2668         h->esym.asym.sc = scAbs;
2669       else
2670         {
2671           const char *name;
2672
2673           sec = h->root.root.u.def.section;
2674           output_section = sec->output_section;
2675
2676           /* When making a shared library and symbol h is the one from
2677              the another shared library, OUTPUT_SECTION may be null.  */
2678           if (output_section == NULL)
2679             h->esym.asym.sc = scUndefined;
2680           else
2681             {
2682               name = bfd_section_name (output_section->owner, output_section);
2683
2684               if (strcmp (name, ".text") == 0)
2685                 h->esym.asym.sc = scText;
2686               else if (strcmp (name, ".data") == 0)
2687                 h->esym.asym.sc = scData;
2688               else if (strcmp (name, ".sdata") == 0)
2689                 h->esym.asym.sc = scSData;
2690               else if (strcmp (name, ".rodata") == 0
2691                        || strcmp (name, ".rdata") == 0)
2692                 h->esym.asym.sc = scRData;
2693               else if (strcmp (name, ".bss") == 0)
2694                 h->esym.asym.sc = scBss;
2695               else if (strcmp (name, ".sbss") == 0)
2696                 h->esym.asym.sc = scSBss;
2697               else if (strcmp (name, ".init") == 0)
2698                 h->esym.asym.sc = scInit;
2699               else if (strcmp (name, ".fini") == 0)
2700                 h->esym.asym.sc = scFini;
2701               else
2702                 h->esym.asym.sc = scAbs;
2703             }
2704         }
2705
2706       h->esym.asym.reserved = 0;
2707       h->esym.asym.index = indexNil;
2708     }
2709
2710   if (h->root.root.type == bfd_link_hash_common)
2711     h->esym.asym.value = h->root.root.u.c.size;
2712   else if (h->root.root.type == bfd_link_hash_defined
2713            || h->root.root.type == bfd_link_hash_defweak)
2714     {
2715       if (h->esym.asym.sc == scCommon)
2716         h->esym.asym.sc = scBss;
2717       else if (h->esym.asym.sc == scSCommon)
2718         h->esym.asym.sc = scSBss;
2719
2720       sec = h->root.root.u.def.section;
2721       output_section = sec->output_section;
2722       if (output_section != NULL)
2723         h->esym.asym.value = (h->root.root.u.def.value
2724                               + sec->output_offset
2725                               + output_section->vma);
2726       else
2727         h->esym.asym.value = 0;
2728     }
2729   else
2730     {
2731       struct mips_elf_link_hash_entry *hd = h;
2732
2733       while (hd->root.root.type == bfd_link_hash_indirect)
2734         hd = (struct mips_elf_link_hash_entry *)h->root.root.u.i.link;
2735
2736       if (hd->needs_lazy_stub)
2737         {
2738           /* Set type and value for a symbol with a function stub.  */
2739           h->esym.asym.st = stProc;
2740           sec = hd->root.root.u.def.section;
2741           if (sec == NULL)
2742             h->esym.asym.value = 0;
2743           else
2744             {
2745               output_section = sec->output_section;
2746               if (output_section != NULL)
2747                 h->esym.asym.value = (hd->root.plt.offset
2748                                       + sec->output_offset
2749                                       + output_section->vma);
2750               else
2751                 h->esym.asym.value = 0;
2752             }
2753         }
2754     }
2755
2756   if (! bfd_ecoff_debug_one_external (einfo->abfd, einfo->debug, einfo->swap,
2757                                       h->root.root.root.string,
2758                                       &h->esym))
2759     {
2760       einfo->failed = TRUE;
2761       return FALSE;
2762     }
2763
2764   return TRUE;
2765 }
2766
2767 /* A comparison routine used to sort .gptab entries.  */
2768
2769 static int
2770 gptab_compare (const void *p1, const void *p2)
2771 {
2772   const Elf32_gptab *a1 = p1;
2773   const Elf32_gptab *a2 = p2;
2774
2775   return a1->gt_entry.gt_g_value - a2->gt_entry.gt_g_value;
2776 }
2777 \f
2778 /* Functions to manage the got entry hash table.  */
2779
2780 /* Use all 64 bits of a bfd_vma for the computation of a 32-bit
2781    hash number.  */
2782
2783 static INLINE hashval_t
2784 mips_elf_hash_bfd_vma (bfd_vma addr)
2785 {
2786 #ifdef BFD64
2787   return addr + (addr >> 32);
2788 #else
2789   return addr;
2790 #endif
2791 }
2792
2793 /* got_entries only match if they're identical, except for gotidx, so
2794    use all fields to compute the hash, and compare the appropriate
2795    union members.  */
2796
2797 static hashval_t
2798 mips_elf_got_entry_hash (const void *entry_)
2799 {
2800   const struct mips_got_entry *entry = (struct mips_got_entry *)entry_;
2801
2802   return entry->symndx
2803     + ((entry->tls_type & GOT_TLS_LDM) << 17)
2804     + (! entry->abfd ? mips_elf_hash_bfd_vma (entry->d.address)
2805        : entry->abfd->id
2806          + (entry->symndx >= 0 ? mips_elf_hash_bfd_vma (entry->d.addend)
2807             : entry->d.h->root.root.root.hash));
2808 }
2809
2810 static int
2811 mips_elf_got_entry_eq (const void *entry1, const void *entry2)
2812 {
2813   const struct mips_got_entry *e1 = (struct mips_got_entry *)entry1;
2814   const struct mips_got_entry *e2 = (struct mips_got_entry *)entry2;
2815
2816   /* An LDM entry can only match another LDM entry.  */
2817   if ((e1->tls_type ^ e2->tls_type) & GOT_TLS_LDM)
2818     return 0;
2819
2820   return e1->abfd == e2->abfd && e1->symndx == e2->symndx
2821     && (! e1->abfd ? e1->d.address == e2->d.address
2822         : e1->symndx >= 0 ? e1->d.addend == e2->d.addend
2823         : e1->d.h == e2->d.h);
2824 }
2825
2826 /* multi_got_entries are still a match in the case of global objects,
2827    even if the input bfd in which they're referenced differs, so the
2828    hash computation and compare functions are adjusted
2829    accordingly.  */
2830
2831 static hashval_t
2832 mips_elf_multi_got_entry_hash (const void *entry_)
2833 {
2834   const struct mips_got_entry *entry = (struct mips_got_entry *)entry_;
2835
2836   return entry->symndx
2837     + (! entry->abfd
2838        ? mips_elf_hash_bfd_vma (entry->d.address)
2839        : entry->symndx >= 0
2840        ? ((entry->tls_type & GOT_TLS_LDM)
2841           ? (GOT_TLS_LDM << 17)
2842           : (entry->abfd->id
2843              + mips_elf_hash_bfd_vma (entry->d.addend)))
2844        : entry->d.h->root.root.root.hash);
2845 }
2846
2847 static int
2848 mips_elf_multi_got_entry_eq (const void *entry1, const void *entry2)
2849 {
2850   const struct mips_got_entry *e1 = (struct mips_got_entry *)entry1;
2851   const struct mips_got_entry *e2 = (struct mips_got_entry *)entry2;
2852
2853   /* Any two LDM entries match.  */
2854   if (e1->tls_type & e2->tls_type & GOT_TLS_LDM)
2855     return 1;
2856
2857   /* Nothing else matches an LDM entry.  */
2858   if ((e1->tls_type ^ e2->tls_type) & GOT_TLS_LDM)
2859     return 0;
2860
2861   return e1->symndx == e2->symndx
2862     && (e1->symndx >= 0 ? e1->abfd == e2->abfd && e1->d.addend == e2->d.addend
2863         : e1->abfd == NULL || e2->abfd == NULL
2864         ? e1->abfd == e2->abfd && e1->d.address == e2->d.address
2865         : e1->d.h == e2->d.h);
2866 }
2867
2868 static hashval_t
2869 mips_got_page_entry_hash (const void *entry_)
2870 {
2871   const struct mips_got_page_entry *entry;
2872
2873   entry = (const struct mips_got_page_entry *) entry_;
2874   return entry->abfd->id + entry->symndx;
2875 }
2876
2877 static int
2878 mips_got_page_entry_eq (const void *entry1_, const void *entry2_)
2879 {
2880   const struct mips_got_page_entry *entry1, *entry2;
2881
2882   entry1 = (const struct mips_got_page_entry *) entry1_;
2883   entry2 = (const struct mips_got_page_entry *) entry2_;
2884   return entry1->abfd == entry2->abfd && entry1->symndx == entry2->symndx;
2885 }
2886 \f
2887 /* Return the dynamic relocation section.  If it doesn't exist, try to
2888    create a new it if CREATE_P, otherwise return NULL.  Also return NULL
2889    if creation fails.  */
2890
2891 static asection *
2892 mips_elf_rel_dyn_section (struct bfd_link_info *info, bfd_boolean create_p)
2893 {
2894   const char *dname;
2895   asection *sreloc;
2896   bfd *dynobj;
2897
2898   dname = MIPS_ELF_REL_DYN_NAME (info);
2899   dynobj = elf_hash_table (info)->dynobj;
2900   sreloc = bfd_get_linker_section (dynobj, dname);
2901   if (sreloc == NULL && create_p)
2902     {
2903       sreloc = bfd_make_section_anyway_with_flags (dynobj, dname,
2904                                                    (SEC_ALLOC
2905                                                     | SEC_LOAD
2906                                                     | SEC_HAS_CONTENTS
2907                                                     | SEC_IN_MEMORY
2908                                                     | SEC_LINKER_CREATED
2909                                                     | SEC_READONLY));
2910       if (sreloc == NULL
2911           || ! bfd_set_section_alignment (dynobj, sreloc,
2912                                           MIPS_ELF_LOG_FILE_ALIGN (dynobj)))
2913         return NULL;
2914     }
2915   return sreloc;
2916 }
2917
2918 /* Count the number of relocations needed for a TLS GOT entry, with
2919    access types from TLS_TYPE, and symbol H (or a local symbol if H
2920    is NULL).  */
2921
2922 static int
2923 mips_tls_got_relocs (struct bfd_link_info *info, unsigned char tls_type,
2924                      struct elf_link_hash_entry *h)
2925 {
2926   int indx = 0;
2927   int ret = 0;
2928   bfd_boolean need_relocs = FALSE;
2929   bfd_boolean dyn = elf_hash_table (info)->dynamic_sections_created;
2930
2931   if (h && WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h)
2932       && (!info->shared || !SYMBOL_REFERENCES_LOCAL (info, h)))
2933     indx = h->dynindx;
2934
2935   if ((info->shared || indx != 0)
2936       && (h == NULL
2937           || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
2938           || h->root.type != bfd_link_hash_undefweak))
2939     need_relocs = TRUE;
2940
2941   if (!need_relocs)
2942     return FALSE;
2943
2944   if (tls_type & GOT_TLS_GD)
2945     {
2946       ret++;
2947       if (indx != 0)
2948         ret++;
2949     }
2950
2951   if (tls_type & GOT_TLS_IE)
2952     ret++;
2953
2954   if ((tls_type & GOT_TLS_LDM) && info->shared)
2955     ret++;
2956
2957   return ret;
2958 }
2959
2960 /* Count the number of TLS relocations required for the GOT entry in
2961    ARG1, if it describes a local symbol.  */
2962
2963 static int
2964 mips_elf_count_local_tls_relocs (void **arg1, void *arg2)
2965 {
2966   struct mips_got_entry *entry = * (struct mips_got_entry **) arg1;
2967   struct mips_elf_count_tls_arg *arg = arg2;
2968
2969   if (entry->abfd != NULL && entry->symndx != -1)
2970     arg->needed += mips_tls_got_relocs (arg->info, entry->tls_type, NULL);
2971
2972   return 1;
2973 }
2974
2975 /* Count the number of TLS GOT entries required for the global (or
2976    forced-local) symbol in ARG1.  */
2977
2978 static int
2979 mips_elf_count_global_tls_entries (void *arg1, void *arg2)
2980 {
2981   struct mips_elf_link_hash_entry *hm
2982     = (struct mips_elf_link_hash_entry *) arg1;
2983   struct mips_elf_count_tls_arg *arg = arg2;
2984
2985   if (hm->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   return 1;
4006 }
4007
4008 /* If any entries in G->got_entries are for indirect or warning symbols,
4009    replace them with entries for the target symbol.  */
4010
4011 static bfd_boolean
4012 mips_elf_resolve_final_got_entries (struct mips_got_info *g)
4013 {
4014   bfd_boolean must_recreate;
4015   htab_t new_got;
4016
4017   must_recreate = FALSE;
4018   htab_traverse (g->got_entries, mips_elf_check_recreate_got, &must_recreate);
4019   if (must_recreate)
4020     {
4021       new_got = htab_create (htab_size (g->got_entries),
4022                              mips_elf_got_entry_hash,
4023                              mips_elf_got_entry_eq, NULL);
4024       htab_traverse (g->got_entries, mips_elf_recreate_got, &new_got);
4025       if (new_got == NULL)
4026         return FALSE;
4027
4028       htab_delete (g->got_entries);
4029       g->got_entries = new_got;
4030     }
4031   return TRUE;
4032 }
4033
4034 /* A mips_elf_link_hash_traverse callback for which DATA points
4035    to the link_info structure.  Count the number of type (3) entries
4036    in the master GOT.  */
4037
4038 static int
4039 mips_elf_count_got_symbols (struct mips_elf_link_hash_entry *h, void *data)
4040 {
4041   struct bfd_link_info *info;
4042   struct mips_elf_link_hash_table *htab;
4043   struct mips_got_info *g;
4044
4045   info = (struct bfd_link_info *) data;
4046   htab = mips_elf_hash_table (info);
4047   g = htab->got_info;
4048   if (h->global_got_area != GGA_NONE)
4049     {
4050       /* Make a final decision about whether the symbol belongs in the
4051          local or global GOT.  Symbols that bind locally can (and in the
4052          case of forced-local symbols, must) live in the local GOT.
4053          Those that are aren't in the dynamic symbol table must also
4054          live in the local GOT.
4055
4056          Note that the former condition does not always imply the
4057          latter: symbols do not bind locally if they are completely
4058          undefined.  We'll report undefined symbols later if appropriate.  */
4059       if (h->root.dynindx == -1
4060           || (h->got_only_for_calls
4061               ? SYMBOL_CALLS_LOCAL (info, &h->root)
4062               : SYMBOL_REFERENCES_LOCAL (info, &h->root)))
4063         {
4064           /* The symbol belongs in the local GOT.  We no longer need this
4065              entry if it was only used for relocations; those relocations
4066              will be against the null or section symbol instead of H.  */
4067           if (h->global_got_area != GGA_RELOC_ONLY)
4068             g->local_gotno++;
4069           h->global_got_area = GGA_NONE;
4070         }
4071       else if (htab->is_vxworks
4072                && h->got_only_for_calls
4073                && h->root.plt.offset != MINUS_ONE)
4074         /* On VxWorks, calls can refer directly to the .got.plt entry;
4075            they don't need entries in the regular GOT.  .got.plt entries
4076            will be allocated by _bfd_mips_elf_adjust_dynamic_symbol.  */
4077         h->global_got_area = GGA_NONE;
4078       else
4079         {
4080           g->global_gotno++;
4081           if (h->global_got_area == GGA_RELOC_ONLY)
4082             g->reloc_only_gotno++;
4083         }
4084     }
4085   return 1;
4086 }
4087 \f
4088 /* Compute the hash value of the bfd in a bfd2got hash entry.  */
4089
4090 static hashval_t
4091 mips_elf_bfd2got_entry_hash (const void *entry_)
4092 {
4093   const struct mips_elf_bfd2got_hash *entry
4094     = (struct mips_elf_bfd2got_hash *)entry_;
4095
4096   return entry->bfd->id;
4097 }
4098
4099 /* Check whether two hash entries have the same bfd.  */
4100
4101 static int
4102 mips_elf_bfd2got_entry_eq (const void *entry1, const void *entry2)
4103 {
4104   const struct mips_elf_bfd2got_hash *e1
4105     = (const struct mips_elf_bfd2got_hash *)entry1;
4106   const struct mips_elf_bfd2got_hash *e2
4107     = (const struct mips_elf_bfd2got_hash *)entry2;
4108
4109   return e1->bfd == e2->bfd;
4110 }
4111
4112 /* In a multi-got link, determine the GOT to be used for IBFD.  G must
4113    be the master GOT data.  */
4114
4115 static struct mips_got_info *
4116 mips_elf_got_for_ibfd (struct mips_got_info *g, bfd *ibfd)
4117 {
4118   struct mips_elf_bfd2got_hash e, *p;
4119
4120   if (! g->bfd2got)
4121     return g;
4122
4123   e.bfd = ibfd;
4124   p = htab_find (g->bfd2got, &e);
4125   return p ? p->g : NULL;
4126 }
4127
4128 /* Use BFD2GOT to find ABFD's got entry, creating one if none exists.
4129    Return NULL if an error occured.  */
4130
4131 static struct mips_got_info *
4132 mips_elf_get_got_for_bfd (struct htab *bfd2got, bfd *output_bfd,
4133                           bfd *input_bfd)
4134 {
4135   struct mips_elf_bfd2got_hash bfdgot_entry, *bfdgot;
4136   struct mips_got_info *g;
4137   void **bfdgotp;
4138
4139   bfdgot_entry.bfd = input_bfd;
4140   bfdgotp = htab_find_slot (bfd2got, &bfdgot_entry, INSERT);
4141   bfdgot = (struct mips_elf_bfd2got_hash *) *bfdgotp;
4142
4143   if (bfdgot == NULL)
4144     {
4145       bfdgot = ((struct mips_elf_bfd2got_hash *)
4146                 bfd_alloc (output_bfd, sizeof (struct mips_elf_bfd2got_hash)));
4147       if (bfdgot == NULL)
4148         return NULL;
4149
4150       *bfdgotp = bfdgot;
4151
4152       g = ((struct mips_got_info *)
4153            bfd_alloc (output_bfd, sizeof (struct mips_got_info)));
4154       if (g == NULL)
4155         return NULL;
4156
4157       bfdgot->bfd = input_bfd;
4158       bfdgot->g = g;
4159
4160       g->global_gotsym = NULL;
4161       g->global_gotno = 0;
4162       g->reloc_only_gotno = 0;
4163       g->local_gotno = 0;
4164       g->page_gotno = 0;
4165       g->assigned_gotno = -1;
4166       g->tls_gotno = 0;
4167       g->tls_assigned_gotno = 0;
4168       g->tls_ldm_offset = MINUS_ONE;
4169       g->got_entries = htab_try_create (1, mips_elf_multi_got_entry_hash,
4170                                         mips_elf_multi_got_entry_eq, NULL);
4171       if (g->got_entries == NULL)
4172         return NULL;
4173
4174       g->got_page_entries = htab_try_create (1, mips_got_page_entry_hash,
4175                                              mips_got_page_entry_eq, NULL);
4176       if (g->got_page_entries == NULL)
4177         return NULL;
4178
4179       g->bfd2got = NULL;
4180       g->next = NULL;
4181     }
4182
4183   return bfdgot->g;
4184 }
4185
4186 /* A htab_traverse callback for the entries in the master got.
4187    Create one separate got for each bfd that has entries in the global
4188    got, such that we can tell how many local and global entries each
4189    bfd requires.  */
4190
4191 static int
4192 mips_elf_make_got_per_bfd (void **entryp, void *p)
4193 {
4194   struct mips_got_entry *entry = (struct mips_got_entry *)*entryp;
4195   struct mips_elf_got_per_bfd_arg *arg = (struct mips_elf_got_per_bfd_arg *)p;
4196   struct mips_got_info *g;
4197
4198   g = mips_elf_get_got_for_bfd (arg->bfd2got, arg->obfd, entry->abfd);
4199   if (g == NULL)
4200     {
4201       arg->obfd = NULL;
4202       return 0;
4203     }
4204
4205   /* Insert the GOT entry in the bfd's got entry hash table.  */
4206   entryp = htab_find_slot (g->got_entries, entry, INSERT);
4207   if (*entryp != NULL)
4208     return 1;
4209
4210   *entryp = entry;
4211
4212   if (entry->tls_type)
4213     {
4214       if (entry->tls_type & (GOT_TLS_GD | GOT_TLS_LDM))
4215         g->tls_gotno += 2;
4216       if (entry->tls_type & GOT_TLS_IE)
4217         g->tls_gotno += 1;
4218     }
4219   else if (entry->symndx >= 0 || entry->d.h->global_got_area == GGA_NONE)
4220     ++g->local_gotno;
4221   else
4222     ++g->global_gotno;
4223
4224   return 1;
4225 }
4226
4227 /* A htab_traverse callback for the page entries in the master got.
4228    Associate each page entry with the bfd's got.  */
4229
4230 static int
4231 mips_elf_make_got_pages_per_bfd (void **entryp, void *p)
4232 {
4233   struct mips_got_page_entry *entry = (struct mips_got_page_entry *) *entryp;
4234   struct mips_elf_got_per_bfd_arg *arg = (struct mips_elf_got_per_bfd_arg *) p;
4235   struct mips_got_info *g;
4236
4237   g = mips_elf_get_got_for_bfd (arg->bfd2got, arg->obfd, entry->abfd);
4238   if (g == NULL)
4239     {
4240       arg->obfd = NULL;
4241       return 0;
4242     }
4243
4244   /* Insert the GOT entry in the bfd's got entry hash table.  */
4245   entryp = htab_find_slot (g->got_page_entries, entry, INSERT);
4246   if (*entryp != NULL)
4247     return 1;
4248
4249   *entryp = entry;
4250   g->page_gotno += entry->num_pages;
4251   return 1;
4252 }
4253
4254 /* Consider merging the got described by BFD2GOT with TO, using the
4255    information given by ARG.  Return -1 if this would lead to overflow,
4256    1 if they were merged successfully, and 0 if a merge failed due to
4257    lack of memory.  (These values are chosen so that nonnegative return
4258    values can be returned by a htab_traverse callback.)  */
4259
4260 static int
4261 mips_elf_merge_got_with (struct mips_elf_bfd2got_hash *bfd2got,
4262                          struct mips_got_info *to,
4263                          struct mips_elf_got_per_bfd_arg *arg)
4264 {
4265   struct mips_got_info *from = bfd2got->g;
4266   unsigned int estimate;
4267
4268   /* Work out how many page entries we would need for the combined GOT.  */
4269   estimate = arg->max_pages;
4270   if (estimate >= from->page_gotno + to->page_gotno)
4271     estimate = from->page_gotno + to->page_gotno;
4272
4273   /* And conservatively estimate how many local and TLS entries
4274      would be needed.  */
4275   estimate += from->local_gotno + to->local_gotno;
4276   estimate += from->tls_gotno + to->tls_gotno;
4277
4278   /* If we're merging with the primary got, any TLS relocations will
4279      come after the full set of global entries.  Otherwise estimate those
4280      conservatively as well.  */
4281   if (to == arg->primary && from->tls_gotno + to->tls_gotno)
4282     estimate += arg->global_count;
4283   else
4284     estimate += from->global_gotno + to->global_gotno;
4285
4286   /* Bail out if the combined GOT might be too big.  */
4287   if (estimate > arg->max_count)
4288     return -1;
4289
4290   /* Commit to the merge.  Record that TO is now the bfd for this got.  */
4291   bfd2got->g = to;
4292
4293   /* Transfer the bfd's got information from FROM to TO.  */
4294   htab_traverse (from->got_entries, mips_elf_make_got_per_bfd, arg);
4295   if (arg->obfd == NULL)
4296     return 0;
4297
4298   htab_traverse (from->got_page_entries, mips_elf_make_got_pages_per_bfd, arg);
4299   if (arg->obfd == NULL)
4300     return 0;
4301
4302   /* We don't have to worry about releasing memory of the actual
4303      got entries, since they're all in the master got_entries hash
4304      table anyway.  */
4305   htab_delete (from->got_entries);
4306   htab_delete (from->got_page_entries);
4307   return 1;
4308 }
4309
4310 /* Attempt to merge gots of different input bfds.  Try to use as much
4311    as possible of the primary got, since it doesn't require explicit
4312    dynamic relocations, but don't use bfds that would reference global
4313    symbols out of the addressable range.  Failing the primary got,
4314    attempt to merge with the current got, or finish the current got
4315    and then make make the new got current.  */
4316
4317 static int
4318 mips_elf_merge_gots (void **bfd2got_, void *p)
4319 {
4320   struct mips_elf_bfd2got_hash *bfd2got
4321     = (struct mips_elf_bfd2got_hash *)*bfd2got_;
4322   struct mips_elf_got_per_bfd_arg *arg = (struct mips_elf_got_per_bfd_arg *)p;
4323   struct mips_got_info *g;
4324   unsigned int estimate;
4325   int result;
4326
4327   g = bfd2got->g;
4328
4329   /* Work out the number of page, local and TLS entries.  */
4330   estimate = arg->max_pages;
4331   if (estimate > g->page_gotno)
4332     estimate = g->page_gotno;
4333   estimate += g->local_gotno + g->tls_gotno;
4334
4335   /* We place TLS GOT entries after both locals and globals.  The globals
4336      for the primary GOT may overflow the normal GOT size limit, so be
4337      sure not to merge a GOT which requires TLS with the primary GOT in that
4338      case.  This doesn't affect non-primary GOTs.  */
4339   estimate += (g->tls_gotno > 0 ? arg->global_count : g->global_gotno);
4340
4341   if (estimate <= arg->max_count)
4342     {
4343       /* If we don't have a primary GOT, use it as
4344          a starting point for the primary GOT.  */
4345       if (!arg->primary)
4346         {
4347           arg->primary = bfd2got->g;
4348           return 1;
4349         }
4350
4351       /* Try merging with the primary GOT.  */
4352       result = mips_elf_merge_got_with (bfd2got, arg->primary, arg);
4353       if (result >= 0)
4354         return result;
4355     }
4356
4357   /* If we can merge with the last-created got, do it.  */
4358   if (arg->current)
4359     {
4360       result = mips_elf_merge_got_with (bfd2got, arg->current, arg);
4361       if (result >= 0)
4362         return result;
4363     }
4364
4365   /* Well, we couldn't merge, so create a new GOT.  Don't check if it
4366      fits; if it turns out that it doesn't, we'll get relocation
4367      overflows anyway.  */
4368   g->next = arg->current;
4369   arg->current = g;
4370
4371   return 1;
4372 }
4373
4374 /* Set the TLS GOT index for the GOT entry in ENTRYP.  ENTRYP's NEXT field
4375    is null iff there is just a single GOT.  */
4376
4377 static int
4378 mips_elf_initialize_tls_index (void **entryp, void *p)
4379 {
4380   struct mips_got_entry *entry = (struct mips_got_entry *)*entryp;
4381   struct mips_got_info *g = p;
4382   bfd_vma next_index;
4383   unsigned char tls_type;
4384
4385   /* We're only interested in TLS symbols.  */
4386   if (entry->tls_type == 0)
4387     return 1;
4388
4389   next_index = MIPS_ELF_GOT_SIZE (entry->abfd) * (long) g->tls_assigned_gotno;
4390
4391   if (entry->symndx == -1 && g->next == NULL)
4392     {
4393       /* A type (3) got entry in the single-GOT case.  We use the symbol's
4394          hash table entry to track its index.  */
4395       if (entry->d.h->tls_type & GOT_TLS_OFFSET_DONE)
4396         return 1;
4397       entry->d.h->tls_type |= GOT_TLS_OFFSET_DONE;
4398       entry->d.h->tls_got_offset = next_index;
4399       tls_type = entry->d.h->tls_type;
4400     }
4401   else
4402     {
4403       if (entry->tls_type & GOT_TLS_LDM)
4404         {
4405           /* There are separate mips_got_entry objects for each input bfd
4406              that requires an LDM entry.  Make sure that all LDM entries in
4407              a GOT resolve to the same index.  */
4408           if (g->tls_ldm_offset != MINUS_TWO && g->tls_ldm_offset != MINUS_ONE)
4409             {
4410               entry->gotidx = g->tls_ldm_offset;
4411               return 1;
4412             }
4413           g->tls_ldm_offset = next_index;
4414         }
4415       entry->gotidx = next_index;
4416       tls_type = entry->tls_type;
4417     }
4418
4419   /* Account for the entries we've just allocated.  */
4420   if (tls_type & (GOT_TLS_GD | GOT_TLS_LDM))
4421     g->tls_assigned_gotno += 2;
4422   if (tls_type & GOT_TLS_IE)
4423     g->tls_assigned_gotno += 1;
4424
4425   return 1;
4426 }
4427
4428 /* If passed a NULL mips_got_info in the argument, set the marker used
4429    to tell whether a global symbol needs a got entry (in the primary
4430    got) to the given VALUE.
4431
4432    If passed a pointer G to a mips_got_info in the argument (it must
4433    not be the primary GOT), compute the offset from the beginning of
4434    the (primary) GOT section to the entry in G corresponding to the
4435    global symbol.  G's assigned_gotno must contain the index of the
4436    first available global GOT entry in G.  VALUE must contain the size
4437    of a GOT entry in bytes.  For each global GOT entry that requires a
4438    dynamic relocation, NEEDED_RELOCS is incremented, and the symbol is
4439    marked as not eligible for lazy resolution through a function
4440    stub.  */
4441 static int
4442 mips_elf_set_global_got_offset (void **entryp, void *p)
4443 {
4444   struct mips_got_entry *entry = (struct mips_got_entry *)*entryp;
4445   struct mips_elf_set_global_got_offset_arg *arg
4446     = (struct mips_elf_set_global_got_offset_arg *)p;
4447   struct mips_got_info *g = arg->g;
4448
4449   if (g && entry->tls_type != GOT_NORMAL)
4450     arg->needed_relocs +=
4451       mips_tls_got_relocs (arg->info, entry->tls_type,
4452                            entry->symndx == -1 ? &entry->d.h->root : NULL);
4453
4454   if (entry->abfd != NULL
4455       && entry->symndx == -1
4456       && entry->d.h->global_got_area != GGA_NONE)
4457     {
4458       if (g)
4459         {
4460           BFD_ASSERT (g->global_gotsym == NULL);
4461
4462           entry->gotidx = arg->value * (long) g->assigned_gotno++;
4463           if (arg->info->shared
4464               || (elf_hash_table (arg->info)->dynamic_sections_created
4465                   && entry->d.h->root.def_dynamic
4466                   && !entry->d.h->root.def_regular))
4467             ++arg->needed_relocs;
4468         }
4469       else
4470         entry->d.h->global_got_area = arg->value;
4471     }
4472
4473   return 1;
4474 }
4475
4476 /* A htab_traverse callback for GOT entries for which DATA is the
4477    bfd_link_info.  Forbid any global symbols from having traditional
4478    lazy-binding stubs.  */
4479
4480 static int
4481 mips_elf_forbid_lazy_stubs (void **entryp, void *data)
4482 {
4483   struct bfd_link_info *info;
4484   struct mips_elf_link_hash_table *htab;
4485   struct mips_got_entry *entry;
4486
4487   entry = (struct mips_got_entry *) *entryp;
4488   info = (struct bfd_link_info *) data;
4489   htab = mips_elf_hash_table (info);
4490   BFD_ASSERT (htab != NULL);
4491
4492   if (entry->abfd != NULL
4493       && entry->symndx == -1
4494       && entry->d.h->needs_lazy_stub)
4495     {
4496       entry->d.h->needs_lazy_stub = FALSE;
4497       htab->lazy_stub_count--;
4498     }
4499
4500   return 1;
4501 }
4502
4503 /* Return the offset of an input bfd IBFD's GOT from the beginning of
4504    the primary GOT.  */
4505 static bfd_vma
4506 mips_elf_adjust_gp (bfd *abfd, struct mips_got_info *g, bfd *ibfd)
4507 {
4508   if (g->bfd2got == NULL)
4509     return 0;
4510
4511   g = mips_elf_got_for_ibfd (g, ibfd);
4512   if (! g)
4513     return 0;
4514
4515   BFD_ASSERT (g->next);
4516
4517   g = g->next;
4518
4519   return (g->local_gotno + g->global_gotno + g->tls_gotno)
4520     * MIPS_ELF_GOT_SIZE (abfd);
4521 }
4522
4523 /* Turn a single GOT that is too big for 16-bit addressing into
4524    a sequence of GOTs, each one 16-bit addressable.  */
4525
4526 static bfd_boolean
4527 mips_elf_multi_got (bfd *abfd, struct bfd_link_info *info,
4528                     asection *got, bfd_size_type pages)
4529 {
4530   struct mips_elf_link_hash_table *htab;
4531   struct mips_elf_got_per_bfd_arg got_per_bfd_arg;
4532   struct mips_elf_set_global_got_offset_arg set_got_offset_arg;
4533   struct mips_got_info *g, *gg;
4534   unsigned int assign, needed_relocs;
4535   bfd *dynobj;
4536
4537   dynobj = elf_hash_table (info)->dynobj;
4538   htab = mips_elf_hash_table (info);
4539   BFD_ASSERT (htab != NULL);
4540
4541   g = htab->got_info;
4542   g->bfd2got = htab_try_create (1, mips_elf_bfd2got_entry_hash,
4543                                 mips_elf_bfd2got_entry_eq, NULL);
4544   if (g->bfd2got == NULL)
4545     return FALSE;
4546
4547   got_per_bfd_arg.bfd2got = g->bfd2got;
4548   got_per_bfd_arg.obfd = abfd;
4549   got_per_bfd_arg.info = info;
4550
4551   /* Count how many GOT entries each input bfd requires, creating a
4552      map from bfd to got info while at that.  */
4553   htab_traverse (g->got_entries, mips_elf_make_got_per_bfd, &got_per_bfd_arg);
4554   if (got_per_bfd_arg.obfd == NULL)
4555     return FALSE;
4556
4557   /* Also count how many page entries each input bfd requires.  */
4558   htab_traverse (g->got_page_entries, mips_elf_make_got_pages_per_bfd,
4559                  &got_per_bfd_arg);
4560   if (got_per_bfd_arg.obfd == NULL)
4561     return FALSE;
4562
4563   got_per_bfd_arg.current = NULL;
4564   got_per_bfd_arg.primary = NULL;
4565   got_per_bfd_arg.max_count = ((MIPS_ELF_GOT_MAX_SIZE (info)
4566                                 / MIPS_ELF_GOT_SIZE (abfd))
4567                                - htab->reserved_gotno);
4568   got_per_bfd_arg.max_pages = pages;
4569   /* The number of globals that will be included in the primary GOT.
4570      See the calls to mips_elf_set_global_got_offset below for more
4571      information.  */
4572   got_per_bfd_arg.global_count = g->global_gotno;
4573
4574   /* Try to merge the GOTs of input bfds together, as long as they
4575      don't seem to exceed the maximum GOT size, choosing one of them
4576      to be the primary GOT.  */
4577   htab_traverse (g->bfd2got, mips_elf_merge_gots, &got_per_bfd_arg);
4578   if (got_per_bfd_arg.obfd == NULL)
4579     return FALSE;
4580
4581   /* If we do not find any suitable primary GOT, create an empty one.  */
4582   if (got_per_bfd_arg.primary == NULL)
4583     {
4584       g->next = (struct mips_got_info *)
4585         bfd_alloc (abfd, sizeof (struct mips_got_info));
4586       if (g->next == NULL)
4587         return FALSE;
4588
4589       g->next->global_gotsym = NULL;
4590       g->next->global_gotno = 0;
4591       g->next->reloc_only_gotno = 0;
4592       g->next->local_gotno = 0;
4593       g->next->page_gotno = 0;
4594       g->next->tls_gotno = 0;
4595       g->next->assigned_gotno = 0;
4596       g->next->tls_assigned_gotno = 0;
4597       g->next->tls_ldm_offset = MINUS_ONE;
4598       g->next->got_entries = htab_try_create (1, mips_elf_multi_got_entry_hash,
4599                                               mips_elf_multi_got_entry_eq,
4600                                               NULL);
4601       if (g->next->got_entries == NULL)
4602         return FALSE;
4603       g->next->got_page_entries = htab_try_create (1, mips_got_page_entry_hash,
4604                                                    mips_got_page_entry_eq,
4605                                                    NULL);
4606       if (g->next->got_page_entries == NULL)
4607         return FALSE;
4608       g->next->bfd2got = NULL;
4609     }
4610   else
4611     g->next = got_per_bfd_arg.primary;
4612   g->next->next = got_per_bfd_arg.current;
4613
4614   /* GG is now the master GOT, and G is the primary GOT.  */
4615   gg = g;
4616   g = g->next;
4617
4618   /* Map the output bfd to the primary got.  That's what we're going
4619      to use for bfds that use GOT16 or GOT_PAGE relocations that we
4620      didn't mark in check_relocs, and we want a quick way to find it.
4621      We can't just use gg->next because we're going to reverse the
4622      list.  */
4623   {
4624     struct mips_elf_bfd2got_hash *bfdgot;
4625     void **bfdgotp;
4626
4627     bfdgot = (struct mips_elf_bfd2got_hash *)bfd_alloc
4628       (abfd, sizeof (struct mips_elf_bfd2got_hash));
4629
4630     if (bfdgot == NULL)
4631       return FALSE;
4632
4633     bfdgot->bfd = abfd;
4634     bfdgot->g = g;
4635     bfdgotp = htab_find_slot (gg->bfd2got, bfdgot, INSERT);
4636
4637     BFD_ASSERT (*bfdgotp == NULL);
4638     *bfdgotp = bfdgot;
4639   }
4640
4641   /* Every symbol that is referenced in a dynamic relocation must be
4642      present in the primary GOT, so arrange for them to appear after
4643      those that are actually referenced.  */
4644   gg->reloc_only_gotno = gg->global_gotno - g->global_gotno;
4645   g->global_gotno = gg->global_gotno;
4646
4647   set_got_offset_arg.g = NULL;
4648   set_got_offset_arg.value = GGA_RELOC_ONLY;
4649   htab_traverse (gg->got_entries, mips_elf_set_global_got_offset,
4650                  &set_got_offset_arg);
4651   set_got_offset_arg.value = GGA_NORMAL;
4652   htab_traverse (g->got_entries, mips_elf_set_global_got_offset,
4653                  &set_got_offset_arg);
4654
4655   /* Now go through the GOTs assigning them offset ranges.
4656      [assigned_gotno, local_gotno[ will be set to the range of local
4657      entries in each GOT.  We can then compute the end of a GOT by
4658      adding local_gotno to global_gotno.  We reverse the list and make
4659      it circular since then we'll be able to quickly compute the
4660      beginning of a GOT, by computing the end of its predecessor.  To
4661      avoid special cases for the primary GOT, while still preserving
4662      assertions that are valid for both single- and multi-got links,
4663      we arrange for the main got struct to have the right number of
4664      global entries, but set its local_gotno such that the initial
4665      offset of the primary GOT is zero.  Remember that the primary GOT
4666      will become the last item in the circular linked list, so it
4667      points back to the master GOT.  */
4668   gg->local_gotno = -g->global_gotno;
4669   gg->global_gotno = g->global_gotno;
4670   gg->tls_gotno = 0;
4671   assign = 0;
4672   gg->next = gg;
4673
4674   do
4675     {
4676       struct mips_got_info *gn;
4677
4678       assign += htab->reserved_gotno;
4679       g->assigned_gotno = assign;
4680       g->local_gotno += assign;
4681       g->local_gotno += (pages < g->page_gotno ? pages : g->page_gotno);
4682       assign = g->local_gotno + g->global_gotno + g->tls_gotno;
4683
4684       /* Take g out of the direct list, and push it onto the reversed
4685          list that gg points to.  g->next is guaranteed to be nonnull after
4686          this operation, as required by mips_elf_initialize_tls_index. */
4687       gn = g->next;
4688       g->next = gg->next;
4689       gg->next = g;
4690
4691       /* Set up any TLS entries.  We always place the TLS entries after
4692          all non-TLS entries.  */
4693       g->tls_assigned_gotno = g->local_gotno + g->global_gotno;
4694       htab_traverse (g->got_entries, mips_elf_initialize_tls_index, g);
4695
4696       /* Move onto the next GOT.  It will be a secondary GOT if nonull.  */
4697       g = gn;
4698
4699       /* Forbid global symbols in every non-primary GOT from having
4700          lazy-binding stubs.  */
4701       if (g)
4702         htab_traverse (g->got_entries, mips_elf_forbid_lazy_stubs, info);
4703     }
4704   while (g);
4705
4706   got->size = (gg->next->local_gotno
4707                + gg->next->global_gotno
4708                + gg->next->tls_gotno) * MIPS_ELF_GOT_SIZE (abfd);
4709
4710   needed_relocs = 0;
4711   set_got_offset_arg.value = MIPS_ELF_GOT_SIZE (abfd);
4712   set_got_offset_arg.info = info;
4713   for (g = gg->next; g && g->next != gg; g = g->next)
4714     {
4715       unsigned int save_assign;
4716
4717       /* Assign offsets to global GOT entries.  */
4718       save_assign = g->assigned_gotno;
4719       g->assigned_gotno = g->local_gotno;
4720       set_got_offset_arg.g = g;
4721       set_got_offset_arg.needed_relocs = 0;
4722       htab_traverse (g->got_entries,
4723                      mips_elf_set_global_got_offset,
4724                      &set_got_offset_arg);
4725       needed_relocs += set_got_offset_arg.needed_relocs;
4726       BFD_ASSERT (g->assigned_gotno - g->local_gotno <= g->global_gotno);
4727
4728       g->assigned_gotno = save_assign;
4729       if (info->shared)
4730         {
4731           needed_relocs += g->local_gotno - g->assigned_gotno;
4732           BFD_ASSERT (g->assigned_gotno == g->next->local_gotno
4733                       + g->next->global_gotno
4734                       + g->next->tls_gotno
4735                       + htab->reserved_gotno);
4736         }
4737     }
4738
4739   if (needed_relocs)
4740     mips_elf_allocate_dynamic_relocations (dynobj, info,
4741                                            needed_relocs);
4742
4743   return TRUE;
4744 }
4745
4746 \f
4747 /* Returns the first relocation of type r_type found, beginning with
4748    RELOCATION.  RELEND is one-past-the-end of the relocation table.  */
4749
4750 static const Elf_Internal_Rela *
4751 mips_elf_next_relocation (bfd *abfd ATTRIBUTE_UNUSED, unsigned int r_type,
4752                           const Elf_Internal_Rela *relocation,
4753                           const Elf_Internal_Rela *relend)
4754 {
4755   unsigned long r_symndx = ELF_R_SYM (abfd, relocation->r_info);
4756
4757   while (relocation < relend)
4758     {
4759       if (ELF_R_TYPE (abfd, relocation->r_info) == r_type
4760           && ELF_R_SYM (abfd, relocation->r_info) == r_symndx)
4761         return relocation;
4762
4763       ++relocation;
4764     }
4765
4766   /* We didn't find it.  */
4767   return NULL;
4768 }
4769
4770 /* Return whether an input relocation is against a local symbol.  */
4771
4772 static bfd_boolean
4773 mips_elf_local_relocation_p (bfd *input_bfd,
4774                              const Elf_Internal_Rela *relocation,
4775                              asection **local_sections)
4776 {
4777   unsigned long r_symndx;
4778   Elf_Internal_Shdr *symtab_hdr;
4779   size_t extsymoff;
4780
4781   r_symndx = ELF_R_SYM (input_bfd, relocation->r_info);
4782   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
4783   extsymoff = (elf_bad_symtab (input_bfd)) ? 0 : symtab_hdr->sh_info;
4784
4785   if (r_symndx < extsymoff)
4786     return TRUE;
4787   if (elf_bad_symtab (input_bfd) && local_sections[r_symndx] != NULL)
4788     return TRUE;
4789
4790   return FALSE;
4791 }
4792 \f
4793 /* Sign-extend VALUE, which has the indicated number of BITS.  */
4794
4795 bfd_vma
4796 _bfd_mips_elf_sign_extend (bfd_vma value, int bits)
4797 {
4798   if (value & ((bfd_vma) 1 << (bits - 1)))
4799     /* VALUE is negative.  */
4800     value |= ((bfd_vma) - 1) << bits;
4801
4802   return value;
4803 }
4804
4805 /* Return non-zero if the indicated VALUE has overflowed the maximum
4806    range expressible by a signed number with the indicated number of
4807    BITS.  */
4808
4809 static bfd_boolean
4810 mips_elf_overflow_p (bfd_vma value, int bits)
4811 {
4812   bfd_signed_vma svalue = (bfd_signed_vma) value;
4813
4814   if (svalue > (1 << (bits - 1)) - 1)
4815     /* The value is too big.  */
4816     return TRUE;
4817   else if (svalue < -(1 << (bits - 1)))
4818     /* The value is too small.  */
4819     return TRUE;
4820
4821   /* All is well.  */
4822   return FALSE;
4823 }
4824
4825 /* Calculate the %high function.  */
4826
4827 static bfd_vma
4828 mips_elf_high (bfd_vma value)
4829 {
4830   return ((value + (bfd_vma) 0x8000) >> 16) & 0xffff;
4831 }
4832
4833 /* Calculate the %higher function.  */
4834
4835 static bfd_vma
4836 mips_elf_higher (bfd_vma value ATTRIBUTE_UNUSED)
4837 {
4838 #ifdef BFD64
4839   return ((value + (bfd_vma) 0x80008000) >> 32) & 0xffff;
4840 #else
4841   abort ();
4842   return MINUS_ONE;
4843 #endif
4844 }
4845
4846 /* Calculate the %highest function.  */
4847
4848 static bfd_vma
4849 mips_elf_highest (bfd_vma value ATTRIBUTE_UNUSED)
4850 {
4851 #ifdef BFD64
4852   return ((value + (((bfd_vma) 0x8000 << 32) | 0x80008000)) >> 48) & 0xffff;
4853 #else
4854   abort ();
4855   return MINUS_ONE;
4856 #endif
4857 }
4858 \f
4859 /* Create the .compact_rel section.  */
4860
4861 static bfd_boolean
4862 mips_elf_create_compact_rel_section
4863   (bfd *abfd, struct bfd_link_info *info ATTRIBUTE_UNUSED)
4864 {
4865   flagword flags;
4866   register asection *s;
4867
4868   if (bfd_get_linker_section (abfd, ".compact_rel") == NULL)
4869     {
4870       flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED
4871                | SEC_READONLY);
4872
4873       s = bfd_make_section_anyway_with_flags (abfd, ".compact_rel", flags);
4874       if (s == NULL
4875           || ! bfd_set_section_alignment (abfd, s,
4876                                           MIPS_ELF_LOG_FILE_ALIGN (abfd)))
4877         return FALSE;
4878
4879       s->size = sizeof (Elf32_External_compact_rel);
4880     }
4881
4882   return TRUE;
4883 }
4884
4885 /* Create the .got section to hold the global offset table.  */
4886
4887 static bfd_boolean
4888 mips_elf_create_got_section (bfd *abfd, struct bfd_link_info *info)
4889 {
4890   flagword flags;
4891   register asection *s;
4892   struct elf_link_hash_entry *h;
4893   struct bfd_link_hash_entry *bh;
4894   struct mips_got_info *g;
4895   bfd_size_type amt;
4896   struct mips_elf_link_hash_table *htab;
4897
4898   htab = mips_elf_hash_table (info);
4899   BFD_ASSERT (htab != NULL);
4900
4901   /* This function may be called more than once.  */
4902   if (htab->sgot)
4903     return TRUE;
4904
4905   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
4906            | SEC_LINKER_CREATED);
4907
4908   /* We have to use an alignment of 2**4 here because this is hardcoded
4909      in the function stub generation and in the linker script.  */
4910   s = bfd_make_section_anyway_with_flags (abfd, ".got", flags);
4911   if (s == NULL
4912       || ! bfd_set_section_alignment (abfd, s, 4))
4913     return FALSE;
4914   htab->sgot = s;
4915
4916   /* Define the symbol _GLOBAL_OFFSET_TABLE_.  We don't do this in the
4917      linker script because we don't want to define the symbol if we
4918      are not creating a global offset table.  */
4919   bh = NULL;
4920   if (! (_bfd_generic_link_add_one_symbol
4921          (info, abfd, "_GLOBAL_OFFSET_TABLE_", BSF_GLOBAL, s,
4922           0, NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
4923     return FALSE;
4924
4925   h = (struct elf_link_hash_entry *) bh;
4926   h->non_elf = 0;
4927   h->def_regular = 1;
4928   h->type = STT_OBJECT;
4929   elf_hash_table (info)->hgot = h;
4930
4931   if (info->shared
4932       && ! bfd_elf_link_record_dynamic_symbol (info, h))
4933     return FALSE;
4934
4935   amt = sizeof (struct mips_got_info);
4936   g = bfd_alloc (abfd, amt);
4937   if (g == NULL)
4938     return FALSE;
4939   g->global_gotsym = NULL;
4940   g->global_gotno = 0;
4941   g->reloc_only_gotno = 0;
4942   g->tls_gotno = 0;
4943   g->local_gotno = 0;
4944   g->page_gotno = 0;
4945   g->assigned_gotno = 0;
4946   g->bfd2got = NULL;
4947   g->next = NULL;
4948   g->tls_ldm_offset = MINUS_ONE;
4949   g->got_entries = htab_try_create (1, mips_elf_got_entry_hash,
4950                                     mips_elf_got_entry_eq, NULL);
4951   if (g->got_entries == NULL)
4952     return FALSE;
4953   g->got_page_entries = htab_try_create (1, mips_got_page_entry_hash,
4954                                          mips_got_page_entry_eq, NULL);
4955   if (g->got_page_entries == NULL)
4956     return FALSE;
4957   htab->got_info = g;
4958   mips_elf_section_data (s)->elf.this_hdr.sh_flags
4959     |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL;
4960
4961   /* We also need a .got.plt section when generating PLTs.  */
4962   s = bfd_make_section_anyway_with_flags (abfd, ".got.plt",
4963                                           SEC_ALLOC | SEC_LOAD
4964                                           | SEC_HAS_CONTENTS
4965                                           | SEC_IN_MEMORY
4966                                           | SEC_LINKER_CREATED);
4967   if (s == NULL)
4968     return FALSE;
4969   htab->sgotplt = s;
4970
4971   return TRUE;
4972 }
4973 \f
4974 /* Return true if H refers to the special VxWorks __GOTT_BASE__ or
4975    __GOTT_INDEX__ symbols.  These symbols are only special for
4976    shared objects; they are not used in executables.  */
4977
4978 static bfd_boolean
4979 is_gott_symbol (struct bfd_link_info *info, struct elf_link_hash_entry *h)
4980 {
4981   return (mips_elf_hash_table (info)->is_vxworks
4982           && info->shared
4983           && (strcmp (h->root.root.string, "__GOTT_BASE__") == 0
4984               || strcmp (h->root.root.string, "__GOTT_INDEX__") == 0));
4985 }
4986
4987 /* Return TRUE if a relocation of type R_TYPE from INPUT_BFD might
4988    require an la25 stub.  See also mips_elf_local_pic_function_p,
4989    which determines whether the destination function ever requires a
4990    stub.  */
4991
4992 static bfd_boolean
4993 mips_elf_relocation_needs_la25_stub (bfd *input_bfd, int r_type,
4994                                      bfd_boolean target_is_16_bit_code_p)
4995 {
4996   /* We specifically ignore branches and jumps from EF_PIC objects,
4997      where the onus is on the compiler or programmer to perform any
4998      necessary initialization of $25.  Sometimes such initialization
4999      is unnecessary; for example, -mno-shared functions do not use
5000      the incoming value of $25, and may therefore be called directly.  */
5001   if (PIC_OBJECT_P (input_bfd))
5002     return FALSE;
5003
5004   switch (r_type)
5005     {
5006     case R_MIPS_26:
5007     case R_MIPS_PC16:
5008     case R_MICROMIPS_26_S1:
5009     case R_MICROMIPS_PC7_S1:
5010     case R_MICROMIPS_PC10_S1:
5011     case R_MICROMIPS_PC16_S1:
5012     case R_MICROMIPS_PC23_S2:
5013       return TRUE;
5014
5015     case R_MIPS16_26:
5016       return !target_is_16_bit_code_p;
5017
5018     default:
5019       return FALSE;
5020     }
5021 }
5022 \f
5023 /* Calculate the value produced by the RELOCATION (which comes from
5024    the INPUT_BFD).  The ADDEND is the addend to use for this
5025    RELOCATION; RELOCATION->R_ADDEND is ignored.
5026
5027    The result of the relocation calculation is stored in VALUEP.
5028    On exit, set *CROSS_MODE_JUMP_P to true if the relocation field
5029    is a MIPS16 or microMIPS jump to standard MIPS code, or vice versa.
5030
5031    This function returns bfd_reloc_continue if the caller need take no
5032    further action regarding this relocation, bfd_reloc_notsupported if
5033    something goes dramatically wrong, bfd_reloc_overflow if an
5034    overflow occurs, and bfd_reloc_ok to indicate success.  */
5035
5036 static bfd_reloc_status_type
5037 mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
5038                                asection *input_section,
5039                                struct bfd_link_info *info,
5040                                const Elf_Internal_Rela *relocation,
5041                                bfd_vma addend, reloc_howto_type *howto,
5042                                Elf_Internal_Sym *local_syms,
5043                                asection **local_sections, bfd_vma *valuep,
5044                                const char **namep,
5045                                bfd_boolean *cross_mode_jump_p,
5046                                bfd_boolean save_addend)
5047 {
5048   /* The eventual value we will return.  */
5049   bfd_vma value;
5050   /* The address of the symbol against which the relocation is
5051      occurring.  */
5052   bfd_vma symbol = 0;
5053   /* The final GP value to be used for the relocatable, executable, or
5054      shared object file being produced.  */
5055   bfd_vma gp;
5056   /* The place (section offset or address) of the storage unit being
5057      relocated.  */
5058   bfd_vma p;
5059   /* The value of GP used to create the relocatable object.  */
5060   bfd_vma gp0;
5061   /* The offset into the global offset table at which the address of
5062      the relocation entry symbol, adjusted by the addend, resides
5063      during execution.  */
5064   bfd_vma g = MINUS_ONE;
5065   /* The section in which the symbol referenced by the relocation is
5066      located.  */
5067   asection *sec = NULL;
5068   struct mips_elf_link_hash_entry *h = NULL;
5069   /* TRUE if the symbol referred to by this relocation is a local
5070      symbol.  */
5071   bfd_boolean local_p, was_local_p;
5072   /* TRUE if the symbol referred to by this relocation is "_gp_disp".  */
5073   bfd_boolean gp_disp_p = FALSE;
5074   /* TRUE if the symbol referred to by this relocation is
5075      "__gnu_local_gp".  */
5076   bfd_boolean gnu_local_gp_p = FALSE;
5077   Elf_Internal_Shdr *symtab_hdr;
5078   size_t extsymoff;
5079   unsigned long r_symndx;
5080   int r_type;
5081   /* TRUE if overflow occurred during the calculation of the
5082      relocation value.  */
5083   bfd_boolean overflowed_p;
5084   /* TRUE if this relocation refers to a MIPS16 function.  */
5085   bfd_boolean target_is_16_bit_code_p = FALSE;
5086   bfd_boolean target_is_micromips_code_p = FALSE;
5087   struct mips_elf_link_hash_table *htab;
5088   bfd *dynobj;
5089
5090   dynobj = elf_hash_table (info)->dynobj;
5091   htab = mips_elf_hash_table (info);
5092   BFD_ASSERT (htab != NULL);
5093
5094   /* Parse the relocation.  */
5095   r_symndx = ELF_R_SYM (input_bfd, relocation->r_info);
5096   r_type = ELF_R_TYPE (input_bfd, relocation->r_info);
5097   p = (input_section->output_section->vma
5098        + input_section->output_offset
5099        + relocation->r_offset);
5100
5101   /* Assume that there will be no overflow.  */
5102   overflowed_p = FALSE;
5103
5104   /* Figure out whether or not the symbol is local, and get the offset
5105      used in the array of hash table entries.  */
5106   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
5107   local_p = mips_elf_local_relocation_p (input_bfd, relocation,
5108                                          local_sections);
5109   was_local_p = local_p;
5110   if (! elf_bad_symtab (input_bfd))
5111     extsymoff = symtab_hdr->sh_info;
5112   else
5113     {
5114       /* The symbol table does not follow the rule that local symbols
5115          must come before globals.  */
5116       extsymoff = 0;
5117     }
5118
5119   /* Figure out the value of the symbol.  */
5120   if (local_p)
5121     {
5122       Elf_Internal_Sym *sym;
5123
5124       sym = local_syms + r_symndx;
5125       sec = local_sections[r_symndx];
5126
5127       symbol = sec->output_section->vma + sec->output_offset;
5128       if (ELF_ST_TYPE (sym->st_info) != STT_SECTION
5129           || (sec->flags & SEC_MERGE))
5130         symbol += sym->st_value;
5131       if ((sec->flags & SEC_MERGE)
5132           && ELF_ST_TYPE (sym->st_info) == STT_SECTION)
5133         {
5134           addend = _bfd_elf_rel_local_sym (abfd, sym, &sec, addend);
5135           addend -= symbol;
5136           addend += sec->output_section->vma + sec->output_offset;
5137         }
5138
5139       /* MIPS16/microMIPS text labels should be treated as odd.  */
5140       if (ELF_ST_IS_COMPRESSED (sym->st_other))
5141         ++symbol;
5142
5143       /* Record the name of this symbol, for our caller.  */
5144       *namep = bfd_elf_string_from_elf_section (input_bfd,
5145                                                 symtab_hdr->sh_link,
5146                                                 sym->st_name);
5147       if (*namep == '\0')
5148         *namep = bfd_section_name (input_bfd, sec);
5149
5150       target_is_16_bit_code_p = ELF_ST_IS_MIPS16 (sym->st_other);
5151       target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (sym->st_other);
5152     }
5153   else
5154     {
5155       /* ??? Could we use RELOC_FOR_GLOBAL_SYMBOL here ?  */
5156
5157       /* For global symbols we look up the symbol in the hash-table.  */
5158       h = ((struct mips_elf_link_hash_entry *)
5159            elf_sym_hashes (input_bfd) [r_symndx - extsymoff]);
5160       /* Find the real hash-table entry for this symbol.  */
5161       while (h->root.root.type == bfd_link_hash_indirect
5162              || h->root.root.type == bfd_link_hash_warning)
5163         h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
5164
5165       /* Record the name of this symbol, for our caller.  */
5166       *namep = h->root.root.root.string;
5167
5168       /* See if this is the special _gp_disp symbol.  Note that such a
5169          symbol must always be a global symbol.  */
5170       if (strcmp (*namep, "_gp_disp") == 0
5171           && ! NEWABI_P (input_bfd))
5172         {
5173           /* Relocations against _gp_disp are permitted only with
5174              R_MIPS_HI16 and R_MIPS_LO16 relocations.  */
5175           if (!hi16_reloc_p (r_type) && !lo16_reloc_p (r_type))
5176             return bfd_reloc_notsupported;
5177
5178           gp_disp_p = TRUE;
5179         }
5180       /* See if this is the special _gp symbol.  Note that such a
5181          symbol must always be a global symbol.  */
5182       else if (strcmp (*namep, "__gnu_local_gp") == 0)
5183         gnu_local_gp_p = TRUE;
5184
5185
5186       /* If this symbol is defined, calculate its address.  Note that
5187          _gp_disp is a magic symbol, always implicitly defined by the
5188          linker, so it's inappropriate to check to see whether or not
5189          its defined.  */
5190       else if ((h->root.root.type == bfd_link_hash_defined
5191                 || h->root.root.type == bfd_link_hash_defweak)
5192                && h->root.root.u.def.section)
5193         {
5194           sec = h->root.root.u.def.section;
5195           if (sec->output_section)
5196             symbol = (h->root.root.u.def.value
5197                       + sec->output_section->vma
5198                       + sec->output_offset);
5199           else
5200             symbol = h->root.root.u.def.value;
5201         }
5202       else if (h->root.root.type == bfd_link_hash_undefweak)
5203         /* We allow relocations against undefined weak symbols, giving
5204            it the value zero, so that you can undefined weak functions
5205            and check to see if they exist by looking at their
5206            addresses.  */
5207         symbol = 0;
5208       else if (info->unresolved_syms_in_objects == RM_IGNORE
5209                && ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT)
5210         symbol = 0;
5211       else if (strcmp (*namep, SGI_COMPAT (input_bfd)
5212                        ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING") == 0)
5213         {
5214           /* If this is a dynamic link, we should have created a
5215              _DYNAMIC_LINK symbol or _DYNAMIC_LINKING(for normal mips) symbol
5216              in in _bfd_mips_elf_create_dynamic_sections.
5217              Otherwise, we should define the symbol with a value of 0.
5218              FIXME: It should probably get into the symbol table
5219              somehow as well.  */
5220           BFD_ASSERT (! info->shared);
5221           BFD_ASSERT (bfd_get_section_by_name (abfd, ".dynamic") == NULL);
5222           symbol = 0;
5223         }
5224       else if (ELF_MIPS_IS_OPTIONAL (h->root.other))
5225         {
5226           /* This is an optional symbol - an Irix specific extension to the
5227              ELF spec.  Ignore it for now.
5228              XXX - FIXME - there is more to the spec for OPTIONAL symbols
5229              than simply ignoring them, but we do not handle this for now.
5230              For information see the "64-bit ELF Object File Specification"
5231              which is available from here:
5232              http://techpubs.sgi.com/library/manuals/4000/007-4658-001/pdf/007-4658-001.pdf  */
5233           symbol = 0;
5234         }
5235       else if ((*info->callbacks->undefined_symbol)
5236                (info, h->root.root.root.string, input_bfd,
5237                 input_section, relocation->r_offset,
5238                 (info->unresolved_syms_in_objects == RM_GENERATE_ERROR)
5239                  || ELF_ST_VISIBILITY (h->root.other)))
5240         {
5241           return bfd_reloc_undefined;
5242         }
5243       else
5244         {
5245           return bfd_reloc_notsupported;
5246         }
5247
5248       target_is_16_bit_code_p = ELF_ST_IS_MIPS16 (h->root.other);
5249       /* If the output section is the PLT section,
5250          then the target is not microMIPS.  */
5251       target_is_micromips_code_p = (htab->splt != sec
5252                                     && ELF_ST_IS_MICROMIPS (h->root.other));
5253     }
5254
5255   /* If this is a reference to a 16-bit function with a stub, we need
5256      to redirect the relocation to the stub unless:
5257
5258      (a) the relocation is for a MIPS16 JAL;
5259
5260      (b) the relocation is for a MIPS16 PIC call, and there are no
5261          non-MIPS16 uses of the GOT slot; or
5262
5263      (c) the section allows direct references to MIPS16 functions.  */
5264   if (r_type != R_MIPS16_26
5265       && !info->relocatable
5266       && ((h != NULL
5267            && h->fn_stub != NULL
5268            && (r_type != R_MIPS16_CALL16 || h->need_fn_stub))
5269           || (local_p
5270               && elf_tdata (input_bfd)->local_stubs != NULL
5271               && elf_tdata (input_bfd)->local_stubs[r_symndx] != NULL))
5272       && !section_allows_mips16_refs_p (input_section))
5273     {
5274       /* This is a 32- or 64-bit call to a 16-bit function.  We should
5275          have already noticed that we were going to need the
5276          stub.  */
5277       if (local_p)
5278         {
5279           sec = elf_tdata (input_bfd)->local_stubs[r_symndx];
5280           value = 0;
5281         }
5282       else
5283         {
5284           BFD_ASSERT (h->need_fn_stub);
5285           if (h->la25_stub)
5286             {
5287               /* If a LA25 header for the stub itself exists, point to the
5288                  prepended LUI/ADDIU sequence.  */
5289               sec = h->la25_stub->stub_section;
5290               value = h->la25_stub->offset;
5291             }
5292           else
5293             {
5294               sec = h->fn_stub;
5295               value = 0;
5296             }
5297         }
5298
5299       symbol = sec->output_section->vma + sec->output_offset + value;
5300       /* The target is 16-bit, but the stub isn't.  */
5301       target_is_16_bit_code_p = FALSE;
5302     }
5303   /* If this is a 16-bit call to a 32- or 64-bit function with a stub, we
5304      need to redirect the call to the stub.  Note that we specifically
5305      exclude R_MIPS16_CALL16 from this behavior; indirect calls should
5306      use an indirect stub instead.  */
5307   else if (r_type == R_MIPS16_26 && !info->relocatable
5308            && ((h != NULL && (h->call_stub != NULL || h->call_fp_stub != NULL))
5309                || (local_p
5310                    && elf_tdata (input_bfd)->local_call_stubs != NULL
5311                    && elf_tdata (input_bfd)->local_call_stubs[r_symndx] != NULL))
5312            && !target_is_16_bit_code_p)
5313     {
5314       if (local_p)
5315         sec = elf_tdata (input_bfd)->local_call_stubs[r_symndx];
5316       else
5317         {
5318           /* If both call_stub and call_fp_stub are defined, we can figure
5319              out which one to use by checking which one appears in the input
5320              file.  */
5321           if (h->call_stub != NULL && h->call_fp_stub != NULL)
5322             {
5323               asection *o;
5324
5325               sec = NULL;
5326               for (o = input_bfd->sections; o != NULL; o = o->next)
5327                 {
5328                   if (CALL_FP_STUB_P (bfd_get_section_name (input_bfd, o)))
5329                     {
5330                       sec = h->call_fp_stub;
5331                       break;
5332                     }
5333                 }
5334               if (sec == NULL)
5335                 sec = h->call_stub;
5336             }
5337           else if (h->call_stub != NULL)
5338             sec = h->call_stub;
5339           else
5340             sec = h->call_fp_stub;
5341         }
5342
5343       BFD_ASSERT (sec->size > 0);
5344       symbol = sec->output_section->vma + sec->output_offset;
5345     }
5346   /* If this is a direct call to a PIC function, redirect to the
5347      non-PIC stub.  */
5348   else if (h != NULL && h->la25_stub
5349            && mips_elf_relocation_needs_la25_stub (input_bfd, r_type,
5350                                                    target_is_16_bit_code_p))
5351     symbol = (h->la25_stub->stub_section->output_section->vma
5352               + h->la25_stub->stub_section->output_offset
5353               + h->la25_stub->offset);
5354
5355   /* Make sure MIPS16 and microMIPS are not used together.  */
5356   if ((r_type == R_MIPS16_26 && target_is_micromips_code_p)
5357       || (micromips_branch_reloc_p (r_type) && target_is_16_bit_code_p))
5358    {
5359       (*_bfd_error_handler)
5360         (_("MIPS16 and microMIPS functions cannot call each other"));
5361       return bfd_reloc_notsupported;
5362    }
5363
5364   /* Calls from 16-bit code to 32-bit code and vice versa require the
5365      mode change.  However, we can ignore calls to undefined weak symbols,
5366      which should never be executed at runtime.  This exception is important
5367      because the assembly writer may have "known" that any definition of the
5368      symbol would be 16-bit code, and that direct jumps were therefore
5369      acceptable.  */
5370   *cross_mode_jump_p = (!info->relocatable
5371                         && !(h && h->root.root.type == bfd_link_hash_undefweak)
5372                         && ((r_type == R_MIPS16_26 && !target_is_16_bit_code_p)
5373                             || (r_type == R_MICROMIPS_26_S1
5374                                 && !target_is_micromips_code_p)
5375                             || ((r_type == R_MIPS_26 || r_type == R_MIPS_JALR)
5376                                 && (target_is_16_bit_code_p
5377                                     || target_is_micromips_code_p))));
5378
5379   local_p = (h == NULL
5380              || (h->got_only_for_calls
5381                  ? SYMBOL_CALLS_LOCAL (info, &h->root)
5382                  : SYMBOL_REFERENCES_LOCAL (info, &h->root)));
5383
5384   gp0 = _bfd_get_gp_value (input_bfd);
5385   gp = _bfd_get_gp_value (abfd);
5386   if (htab->got_info)
5387     gp += mips_elf_adjust_gp (abfd, htab->got_info, input_bfd);
5388
5389   if (gnu_local_gp_p)
5390     symbol = gp;
5391
5392   /* Global R_MIPS_GOT_PAGE/R_MICROMIPS_GOT_PAGE relocations are equivalent
5393      to R_MIPS_GOT_DISP/R_MICROMIPS_GOT_DISP.  The addend is applied by the
5394      corresponding R_MIPS_GOT_OFST/R_MICROMIPS_GOT_OFST.  */
5395   if (got_page_reloc_p (r_type) && !local_p)
5396     {
5397       r_type = (micromips_reloc_p (r_type)
5398                 ? R_MICROMIPS_GOT_DISP : R_MIPS_GOT_DISP);
5399       addend = 0;
5400     }
5401
5402   /* If we haven't already determined the GOT offset, and we're going
5403      to need it, get it now.  */
5404   switch (r_type)
5405     {
5406     case R_MIPS16_CALL16:
5407     case R_MIPS16_GOT16:
5408     case R_MIPS_CALL16:
5409     case R_MIPS_GOT16:
5410     case R_MIPS_GOT_DISP:
5411     case R_MIPS_GOT_HI16:
5412     case R_MIPS_CALL_HI16:
5413     case R_MIPS_GOT_LO16:
5414     case R_MIPS_CALL_LO16:
5415     case R_MICROMIPS_CALL16:
5416     case R_MICROMIPS_GOT16:
5417     case R_MICROMIPS_GOT_DISP:
5418     case R_MICROMIPS_GOT_HI16:
5419     case R_MICROMIPS_CALL_HI16:
5420     case R_MICROMIPS_GOT_LO16:
5421     case R_MICROMIPS_CALL_LO16:
5422     case R_MIPS_TLS_GD:
5423     case R_MIPS_TLS_GOTTPREL:
5424     case R_MIPS_TLS_LDM:
5425     case R_MIPS16_TLS_GD:
5426     case R_MIPS16_TLS_GOTTPREL:
5427     case R_MIPS16_TLS_LDM:
5428     case R_MICROMIPS_TLS_GD:
5429     case R_MICROMIPS_TLS_GOTTPREL:
5430     case R_MICROMIPS_TLS_LDM:
5431       /* Find the index into the GOT where this value is located.  */
5432       if (tls_ldm_reloc_p (r_type))
5433         {
5434           g = mips_elf_local_got_index (abfd, input_bfd, info,
5435                                         0, 0, NULL, r_type);
5436           if (g == MINUS_ONE)
5437             return bfd_reloc_outofrange;
5438         }
5439       else if (!local_p)
5440         {
5441           /* On VxWorks, CALL relocations should refer to the .got.plt
5442              entry, which is initialized to point at the PLT stub.  */
5443           if (htab->is_vxworks
5444               && (call_hi16_reloc_p (r_type)
5445                   || call_lo16_reloc_p (r_type)
5446                   || call16_reloc_p (r_type)))
5447             {
5448               BFD_ASSERT (addend == 0);
5449               BFD_ASSERT (h->root.needs_plt);
5450               g = mips_elf_gotplt_index (info, &h->root);
5451             }
5452           else
5453             {
5454               BFD_ASSERT (addend == 0);
5455               g = mips_elf_global_got_index (dynobj, input_bfd,
5456                                              &h->root, r_type, info);
5457               if (h->tls_type == GOT_NORMAL
5458                   && !elf_hash_table (info)->dynamic_sections_created)
5459                 /* This is a static link.  We must initialize the GOT entry.  */
5460                 MIPS_ELF_PUT_WORD (dynobj, symbol, htab->sgot->contents + g);
5461             }
5462         }
5463       else if (!htab->is_vxworks
5464                && (call16_reloc_p (r_type) || got16_reloc_p (r_type)))
5465         /* The calculation below does not involve "g".  */
5466         break;
5467       else
5468         {
5469           g = mips_elf_local_got_index (abfd, input_bfd, info,
5470                                         symbol + addend, r_symndx, h, r_type);
5471           if (g == MINUS_ONE)
5472             return bfd_reloc_outofrange;
5473         }
5474
5475       /* Convert GOT indices to actual offsets.  */
5476       g = mips_elf_got_offset_from_index (info, abfd, input_bfd, g);
5477       break;
5478     }
5479
5480   /* Relocations against the VxWorks __GOTT_BASE__ and __GOTT_INDEX__
5481      symbols are resolved by the loader.  Add them to .rela.dyn.  */
5482   if (h != NULL && is_gott_symbol (info, &h->root))
5483     {
5484       Elf_Internal_Rela outrel;
5485       bfd_byte *loc;
5486       asection *s;
5487
5488       s = mips_elf_rel_dyn_section (info, FALSE);
5489       loc = s->contents + s->reloc_count++ * sizeof (Elf32_External_Rela);
5490
5491       outrel.r_offset = (input_section->output_section->vma
5492                          + input_section->output_offset
5493                          + relocation->r_offset);
5494       outrel.r_info = ELF32_R_INFO (h->root.dynindx, r_type);
5495       outrel.r_addend = addend;
5496       bfd_elf32_swap_reloca_out (abfd, &outrel, loc);
5497
5498       /* If we've written this relocation for a readonly section,
5499          we need to set DF_TEXTREL again, so that we do not delete the
5500          DT_TEXTREL tag.  */
5501       if (MIPS_ELF_READONLY_SECTION (input_section))
5502         info->flags |= DF_TEXTREL;
5503
5504       *valuep = 0;
5505       return bfd_reloc_ok;
5506     }
5507
5508   /* Figure out what kind of relocation is being performed.  */
5509   switch (r_type)
5510     {
5511     case R_MIPS_NONE:
5512       return bfd_reloc_continue;
5513
5514     case R_MIPS_16:
5515       value = symbol + _bfd_mips_elf_sign_extend (addend, 16);
5516       overflowed_p = mips_elf_overflow_p (value, 16);
5517       break;
5518
5519     case R_MIPS_32:
5520     case R_MIPS_REL32:
5521     case R_MIPS_64:
5522       if ((info->shared
5523            || (htab->root.dynamic_sections_created
5524                && h != NULL
5525                && h->root.def_dynamic
5526                && !h->root.def_regular
5527                && !h->has_static_relocs))
5528           && r_symndx != STN_UNDEF
5529           && (h == NULL
5530               || h->root.root.type != bfd_link_hash_undefweak
5531               || ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT)
5532           && (input_section->flags & SEC_ALLOC) != 0)
5533         {
5534           /* If we're creating a shared library, then we can't know
5535              where the symbol will end up.  So, we create a relocation
5536              record in the output, and leave the job up to the dynamic
5537              linker.  We must do the same for executable references to
5538              shared library symbols, unless we've decided to use copy
5539              relocs or PLTs instead.  */
5540           value = addend;
5541           if (!mips_elf_create_dynamic_relocation (abfd,
5542                                                    info,
5543                                                    relocation,
5544                                                    h,
5545                                                    sec,
5546                                                    symbol,
5547                                                    &value,
5548                                                    input_section))
5549             return bfd_reloc_undefined;
5550         }
5551       else
5552         {
5553           if (r_type != R_MIPS_REL32)
5554             value = symbol + addend;
5555           else
5556             value = addend;
5557         }
5558       value &= howto->dst_mask;
5559       break;
5560
5561     case R_MIPS_PC32:
5562       value = symbol + addend - p;
5563       value &= howto->dst_mask;
5564       break;
5565
5566     case R_MIPS16_26:
5567       /* The calculation for R_MIPS16_26 is just the same as for an
5568          R_MIPS_26.  It's only the storage of the relocated field into
5569          the output file that's different.  That's handled in
5570          mips_elf_perform_relocation.  So, we just fall through to the
5571          R_MIPS_26 case here.  */
5572     case R_MIPS_26:
5573     case R_MICROMIPS_26_S1:
5574       {
5575         unsigned int shift;
5576
5577         /* Make sure the target of JALX is word-aligned.  Bit 0 must be
5578            the correct ISA mode selector and bit 1 must be 0.  */
5579         if (*cross_mode_jump_p && (symbol & 3) != (r_type == R_MIPS_26))
5580           return bfd_reloc_outofrange;
5581
5582         /* Shift is 2, unusually, for microMIPS JALX.  */
5583         shift = (!*cross_mode_jump_p && r_type == R_MICROMIPS_26_S1) ? 1 : 2;
5584
5585         if (was_local_p)
5586           value = addend | ((p + 4) & (0xfc000000 << shift));
5587         else
5588           value = _bfd_mips_elf_sign_extend (addend, 26 + shift);
5589         value = (value + symbol) >> shift;
5590         if (!was_local_p && h->root.root.type != bfd_link_hash_undefweak)
5591           overflowed_p = (value >> 26) != ((p + 4) >> (26 + shift));
5592         value &= howto->dst_mask;
5593       }
5594       break;
5595
5596     case R_MIPS_TLS_DTPREL_HI16:
5597     case R_MIPS16_TLS_DTPREL_HI16:
5598     case R_MICROMIPS_TLS_DTPREL_HI16:
5599       value = (mips_elf_high (addend + symbol - dtprel_base (info))
5600                & howto->dst_mask);
5601       break;
5602
5603     case R_MIPS_TLS_DTPREL_LO16:
5604     case R_MIPS_TLS_DTPREL32:
5605     case R_MIPS_TLS_DTPREL64:
5606     case R_MIPS16_TLS_DTPREL_LO16:
5607     case R_MICROMIPS_TLS_DTPREL_LO16:
5608       value = (symbol + addend - dtprel_base (info)) & howto->dst_mask;
5609       break;
5610
5611     case R_MIPS_TLS_TPREL_HI16:
5612     case R_MIPS16_TLS_TPREL_HI16:
5613     case R_MICROMIPS_TLS_TPREL_HI16:
5614       value = (mips_elf_high (addend + symbol - tprel_base (info))
5615                & howto->dst_mask);
5616       break;
5617
5618     case R_MIPS_TLS_TPREL_LO16:
5619     case R_MIPS_TLS_TPREL32:
5620     case R_MIPS_TLS_TPREL64:
5621     case R_MIPS16_TLS_TPREL_LO16:
5622     case R_MICROMIPS_TLS_TPREL_LO16:
5623       value = (symbol + addend - tprel_base (info)) & howto->dst_mask;
5624       break;
5625
5626     case R_MIPS_HI16:
5627     case R_MIPS16_HI16:
5628     case R_MICROMIPS_HI16:
5629       if (!gp_disp_p)
5630         {
5631           value = mips_elf_high (addend + symbol);
5632           value &= howto->dst_mask;
5633         }
5634       else
5635         {
5636           /* For MIPS16 ABI code we generate this sequence
5637                 0: li      $v0,%hi(_gp_disp)
5638                 4: addiupc $v1,%lo(_gp_disp)
5639                 8: sll     $v0,16
5640                12: addu    $v0,$v1
5641                14: move    $gp,$v0
5642              So the offsets of hi and lo relocs are the same, but the
5643              base $pc is that used by the ADDIUPC instruction at $t9 + 4.
5644              ADDIUPC clears the low two bits of the instruction address,
5645              so the base is ($t9 + 4) & ~3.  */
5646           if (r_type == R_MIPS16_HI16)
5647             value = mips_elf_high (addend + gp - ((p + 4) & ~(bfd_vma) 0x3));
5648           /* The microMIPS .cpload sequence uses the same assembly
5649              instructions as the traditional psABI version, but the
5650              incoming $t9 has the low bit set.  */
5651           else if (r_type == R_MICROMIPS_HI16)
5652             value = mips_elf_high (addend + gp - p - 1);
5653           else
5654             value = mips_elf_high (addend + gp - p);
5655           overflowed_p = mips_elf_overflow_p (value, 16);
5656         }
5657       break;
5658
5659     case R_MIPS_LO16:
5660     case R_MIPS16_LO16:
5661     case R_MICROMIPS_LO16:
5662     case R_MICROMIPS_HI0_LO16:
5663       if (!gp_disp_p)
5664         value = (symbol + addend) & howto->dst_mask;
5665       else
5666         {
5667           /* See the comment for R_MIPS16_HI16 above for the reason
5668              for this conditional.  */
5669           if (r_type == R_MIPS16_LO16)
5670             value = addend + gp - (p & ~(bfd_vma) 0x3);
5671           else if (r_type == R_MICROMIPS_LO16
5672                    || r_type == R_MICROMIPS_HI0_LO16)
5673             value = addend + gp - p + 3;
5674           else
5675             value = addend + gp - p + 4;
5676           /* The MIPS ABI requires checking the R_MIPS_LO16 relocation
5677              for overflow.  But, on, say, IRIX5, relocations against
5678              _gp_disp are normally generated from the .cpload
5679              pseudo-op.  It generates code that normally looks like
5680              this:
5681
5682                lui    $gp,%hi(_gp_disp)
5683                addiu  $gp,$gp,%lo(_gp_disp)
5684                addu   $gp,$gp,$t9
5685
5686              Here $t9 holds the address of the function being called,
5687              as required by the MIPS ELF ABI.  The R_MIPS_LO16
5688              relocation can easily overflow in this situation, but the
5689              R_MIPS_HI16 relocation will handle the overflow.
5690              Therefore, we consider this a bug in the MIPS ABI, and do
5691              not check for overflow here.  */
5692         }
5693       break;
5694
5695     case R_MIPS_LITERAL:
5696     case R_MICROMIPS_LITERAL:
5697       /* Because we don't merge literal sections, we can handle this
5698          just like R_MIPS_GPREL16.  In the long run, we should merge
5699          shared literals, and then we will need to additional work
5700          here.  */
5701
5702       /* Fall through.  */
5703
5704     case R_MIPS16_GPREL:
5705       /* The R_MIPS16_GPREL performs the same calculation as
5706          R_MIPS_GPREL16, but stores the relocated bits in a different
5707          order.  We don't need to do anything special here; the
5708          differences are handled in mips_elf_perform_relocation.  */
5709     case R_MIPS_GPREL16:
5710     case R_MICROMIPS_GPREL7_S2:
5711     case R_MICROMIPS_GPREL16:
5712       /* Only sign-extend the addend if it was extracted from the
5713          instruction.  If the addend was separate, leave it alone,
5714          otherwise we may lose significant bits.  */
5715       if (howto->partial_inplace)
5716         addend = _bfd_mips_elf_sign_extend (addend, 16);
5717       value = symbol + addend - gp;
5718       /* If the symbol was local, any earlier relocatable links will
5719          have adjusted its addend with the gp offset, so compensate
5720          for that now.  Don't do it for symbols forced local in this
5721          link, though, since they won't have had the gp offset applied
5722          to them before.  */
5723       if (was_local_p)
5724         value += gp0;
5725       overflowed_p = mips_elf_overflow_p (value, 16);
5726       break;
5727
5728     case R_MIPS16_GOT16:
5729     case R_MIPS16_CALL16:
5730     case R_MIPS_GOT16:
5731     case R_MIPS_CALL16:
5732     case R_MICROMIPS_GOT16:
5733     case R_MICROMIPS_CALL16:
5734       /* VxWorks does not have separate local and global semantics for
5735          R_MIPS*_GOT16; every relocation evaluates to "G".  */
5736       if (!htab->is_vxworks && local_p)
5737         {
5738           value = mips_elf_got16_entry (abfd, input_bfd, info,
5739                                         symbol + addend, !was_local_p);
5740           if (value == MINUS_ONE)
5741             return bfd_reloc_outofrange;
5742           value
5743             = mips_elf_got_offset_from_index (info, abfd, input_bfd, value);
5744           overflowed_p = mips_elf_overflow_p (value, 16);
5745           break;
5746         }
5747
5748       /* Fall through.  */
5749
5750     case R_MIPS_TLS_GD:
5751     case R_MIPS_TLS_GOTTPREL:
5752     case R_MIPS_TLS_LDM:
5753     case R_MIPS_GOT_DISP:
5754     case R_MIPS16_TLS_GD:
5755     case R_MIPS16_TLS_GOTTPREL:
5756     case R_MIPS16_TLS_LDM:
5757     case R_MICROMIPS_TLS_GD:
5758     case R_MICROMIPS_TLS_GOTTPREL:
5759     case R_MICROMIPS_TLS_LDM:
5760     case R_MICROMIPS_GOT_DISP:
5761       value = g;
5762       overflowed_p = mips_elf_overflow_p (value, 16);
5763       break;
5764
5765     case R_MIPS_GPREL32:
5766       value = (addend + symbol + gp0 - gp);
5767       if (!save_addend)
5768         value &= howto->dst_mask;
5769       break;
5770
5771     case R_MIPS_PC16:
5772     case R_MIPS_GNU_REL16_S2:
5773       value = symbol + _bfd_mips_elf_sign_extend (addend, 18) - p;
5774       overflowed_p = mips_elf_overflow_p (value, 18);
5775       value >>= howto->rightshift;
5776       value &= howto->dst_mask;
5777       break;
5778
5779     case R_MICROMIPS_PC7_S1:
5780       value = symbol + _bfd_mips_elf_sign_extend (addend, 8) - p;
5781       overflowed_p = mips_elf_overflow_p (value, 8);
5782       value >>= howto->rightshift;
5783       value &= howto->dst_mask;
5784       break;
5785
5786     case R_MICROMIPS_PC10_S1:
5787       value = symbol + _bfd_mips_elf_sign_extend (addend, 11) - p;
5788       overflowed_p = mips_elf_overflow_p (value, 11);
5789       value >>= howto->rightshift;
5790       value &= howto->dst_mask;
5791       break;
5792
5793     case R_MICROMIPS_PC16_S1:
5794       value = symbol + _bfd_mips_elf_sign_extend (addend, 17) - p;
5795       overflowed_p = mips_elf_overflow_p (value, 17);
5796       value >>= howto->rightshift;
5797       value &= howto->dst_mask;
5798       break;
5799
5800     case R_MICROMIPS_PC23_S2:
5801       value = symbol + _bfd_mips_elf_sign_extend (addend, 25) - ((p | 3) ^ 3);
5802       overflowed_p = mips_elf_overflow_p (value, 25);
5803       value >>= howto->rightshift;
5804       value &= howto->dst_mask;
5805       break;
5806
5807     case R_MIPS_GOT_HI16:
5808     case R_MIPS_CALL_HI16:
5809     case R_MICROMIPS_GOT_HI16:
5810     case R_MICROMIPS_CALL_HI16:
5811       /* We're allowed to handle these two relocations identically.
5812          The dynamic linker is allowed to handle the CALL relocations
5813          differently by creating a lazy evaluation stub.  */
5814       value = g;
5815       value = mips_elf_high (value);
5816       value &= howto->dst_mask;
5817       break;
5818
5819     case R_MIPS_GOT_LO16:
5820     case R_MIPS_CALL_LO16:
5821     case R_MICROMIPS_GOT_LO16:
5822     case R_MICROMIPS_CALL_LO16:
5823       value = g & howto->dst_mask;
5824       break;
5825
5826     case R_MIPS_GOT_PAGE:
5827     case R_MICROMIPS_GOT_PAGE:
5828       value = mips_elf_got_page (abfd, input_bfd, info, symbol + addend, NULL);
5829       if (value == MINUS_ONE)
5830         return bfd_reloc_outofrange;
5831       value = mips_elf_got_offset_from_index (info, abfd, input_bfd, value);
5832       overflowed_p = mips_elf_overflow_p (value, 16);
5833       break;
5834
5835     case R_MIPS_GOT_OFST:
5836     case R_MICROMIPS_GOT_OFST:
5837       if (local_p)
5838         mips_elf_got_page (abfd, input_bfd, info, symbol + addend, &value);
5839       else
5840         value = addend;
5841       overflowed_p = mips_elf_overflow_p (value, 16);
5842       break;
5843
5844     case R_MIPS_SUB:
5845     case R_MICROMIPS_SUB:
5846       value = symbol - addend;
5847       value &= howto->dst_mask;
5848       break;
5849
5850     case R_MIPS_HIGHER:
5851     case R_MICROMIPS_HIGHER:
5852       value = mips_elf_higher (addend + symbol);
5853       value &= howto->dst_mask;
5854       break;
5855
5856     case R_MIPS_HIGHEST:
5857     case R_MICROMIPS_HIGHEST:
5858       value = mips_elf_highest (addend + symbol);
5859       value &= howto->dst_mask;
5860       break;
5861
5862     case R_MIPS_SCN_DISP:
5863     case R_MICROMIPS_SCN_DISP:
5864       value = symbol + addend - sec->output_offset;
5865       value &= howto->dst_mask;
5866       break;
5867
5868     case R_MIPS_JALR:
5869     case R_MICROMIPS_JALR:
5870       /* This relocation is only a hint.  In some cases, we optimize
5871          it into a bal instruction.  But we don't try to optimize
5872          when the symbol does not resolve locally.  */
5873       if (h != NULL && !SYMBOL_CALLS_LOCAL (info, &h->root))
5874         return bfd_reloc_continue;
5875       value = symbol + addend;
5876       break;
5877
5878     case R_MIPS_PJUMP:
5879     case R_MIPS_GNU_VTINHERIT:
5880     case R_MIPS_GNU_VTENTRY:
5881       /* We don't do anything with these at present.  */
5882       return bfd_reloc_continue;
5883
5884     default:
5885       /* An unrecognized relocation type.  */
5886       return bfd_reloc_notsupported;
5887     }
5888
5889   /* Store the VALUE for our caller.  */
5890   *valuep = value;
5891   return overflowed_p ? bfd_reloc_overflow : bfd_reloc_ok;
5892 }
5893
5894 /* Obtain the field relocated by RELOCATION.  */
5895
5896 static bfd_vma
5897 mips_elf_obtain_contents (reloc_howto_type *howto,
5898                           const Elf_Internal_Rela *relocation,
5899                           bfd *input_bfd, bfd_byte *contents)
5900 {
5901   bfd_vma x;
5902   bfd_byte *location = contents + relocation->r_offset;
5903
5904   /* Obtain the bytes.  */
5905   x = bfd_get ((8 * bfd_get_reloc_size (howto)), input_bfd, location);
5906
5907   return x;
5908 }
5909
5910 /* It has been determined that the result of the RELOCATION is the
5911    VALUE.  Use HOWTO to place VALUE into the output file at the
5912    appropriate position.  The SECTION is the section to which the
5913    relocation applies.
5914    CROSS_MODE_JUMP_P is true if the relocation field
5915    is a MIPS16 or microMIPS jump to standard MIPS code, or vice versa.
5916
5917    Returns FALSE if anything goes wrong.  */
5918
5919 static bfd_boolean
5920 mips_elf_perform_relocation (struct bfd_link_info *info,
5921                              reloc_howto_type *howto,
5922                              const Elf_Internal_Rela *relocation,
5923                              bfd_vma value, bfd *input_bfd,
5924                              asection *input_section, bfd_byte *contents,
5925                              bfd_boolean cross_mode_jump_p)
5926 {
5927   bfd_vma x;
5928   bfd_byte *location;
5929   int r_type = ELF_R_TYPE (input_bfd, relocation->r_info);
5930
5931   /* Figure out where the relocation is occurring.  */
5932   location = contents + relocation->r_offset;
5933
5934   _bfd_mips_elf_reloc_unshuffle (input_bfd, r_type, FALSE, location);
5935
5936   /* Obtain the current value.  */
5937   x = mips_elf_obtain_contents (howto, relocation, input_bfd, contents);
5938
5939   /* Clear the field we are setting.  */
5940   x &= ~howto->dst_mask;
5941
5942   /* Set the field.  */
5943   x |= (value & howto->dst_mask);
5944
5945   /* If required, turn JAL into JALX.  */
5946   if (cross_mode_jump_p && jal_reloc_p (r_type))
5947     {
5948       bfd_boolean ok;
5949       bfd_vma opcode = x >> 26;
5950       bfd_vma jalx_opcode;
5951
5952       /* Check to see if the opcode is already JAL or JALX.  */
5953       if (r_type == R_MIPS16_26)
5954         {
5955           ok = ((opcode == 0x6) || (opcode == 0x7));
5956           jalx_opcode = 0x7;
5957         }
5958       else if (r_type == R_MICROMIPS_26_S1)
5959         {
5960           ok = ((opcode == 0x3d) || (opcode == 0x3c));
5961           jalx_opcode = 0x3c;
5962         }
5963       else
5964         {
5965           ok = ((opcode == 0x3) || (opcode == 0x1d));
5966           jalx_opcode = 0x1d;
5967         }
5968
5969       /* If the opcode is not JAL or JALX, there's a problem.  We cannot
5970          convert J or JALS to JALX.  */
5971       if (!ok)
5972         {
5973           (*_bfd_error_handler)
5974             (_("%B: %A+0x%lx: Unsupported jump between ISA modes; consider recompiling with interlinking enabled."),
5975              input_bfd,
5976              input_section,
5977              (unsigned long) relocation->r_offset);
5978           bfd_set_error (bfd_error_bad_value);
5979           return FALSE;
5980         }
5981
5982       /* Make this the JALX opcode.  */
5983       x = (x & ~(0x3f << 26)) | (jalx_opcode << 26);
5984     }
5985
5986   /* Try converting JAL to BAL and J(AL)R to B(AL), if the target is in
5987      range.  */
5988   if (!info->relocatable
5989       && !cross_mode_jump_p
5990       && ((JAL_TO_BAL_P (input_bfd)
5991            && r_type == R_MIPS_26
5992            && (x >> 26) == 0x3)         /* jal addr */
5993           || (JALR_TO_BAL_P (input_bfd)
5994               && r_type == R_MIPS_JALR
5995               && x == 0x0320f809)       /* jalr t9 */
5996           || (JR_TO_B_P (input_bfd)
5997               && r_type == R_MIPS_JALR
5998               && x == 0x03200008)))     /* jr t9 */
5999     {
6000       bfd_vma addr;
6001       bfd_vma dest;
6002       bfd_signed_vma off;
6003
6004       addr = (input_section->output_section->vma
6005               + input_section->output_offset
6006               + relocation->r_offset
6007               + 4);
6008       if (r_type == R_MIPS_26)
6009         dest = (value << 2) | ((addr >> 28) << 28);
6010       else
6011         dest = value;
6012       off = dest - addr;
6013       if (off <= 0x1ffff && off >= -0x20000)
6014         {
6015           if (x == 0x03200008)  /* jr t9 */
6016             x = 0x10000000 | (((bfd_vma) off >> 2) & 0xffff);   /* b addr */
6017           else
6018             x = 0x04110000 | (((bfd_vma) off >> 2) & 0xffff);   /* bal addr */
6019         }
6020     }
6021
6022   /* Put the value into the output.  */
6023   bfd_put (8 * bfd_get_reloc_size (howto), input_bfd, x, location);
6024
6025   _bfd_mips_elf_reloc_shuffle (input_bfd, r_type, !info->relocatable,
6026                                location);
6027
6028   return TRUE;
6029 }
6030 \f
6031 /* Create a rel.dyn relocation for the dynamic linker to resolve.  REL
6032    is the original relocation, which is now being transformed into a
6033    dynamic relocation.  The ADDENDP is adjusted if necessary; the
6034    caller should store the result in place of the original addend.  */
6035
6036 static bfd_boolean
6037 mips_elf_create_dynamic_relocation (bfd *output_bfd,
6038                                     struct bfd_link_info *info,
6039                                     const Elf_Internal_Rela *rel,
6040                                     struct mips_elf_link_hash_entry *h,
6041                                     asection *sec, bfd_vma symbol,
6042                                     bfd_vma *addendp, asection *input_section)
6043 {
6044   Elf_Internal_Rela outrel[3];
6045   asection *sreloc;
6046   bfd *dynobj;
6047   int r_type;
6048   long indx;
6049   bfd_boolean defined_p;
6050   struct mips_elf_link_hash_table *htab;
6051
6052   htab = mips_elf_hash_table (info);
6053   BFD_ASSERT (htab != NULL);
6054
6055   r_type = ELF_R_TYPE (output_bfd, rel->r_info);
6056   dynobj = elf_hash_table (info)->dynobj;
6057   sreloc = mips_elf_rel_dyn_section (info, FALSE);
6058   BFD_ASSERT (sreloc != NULL);
6059   BFD_ASSERT (sreloc->contents != NULL);
6060   BFD_ASSERT (sreloc->reloc_count * MIPS_ELF_REL_SIZE (output_bfd)
6061               < sreloc->size);
6062
6063   outrel[0].r_offset =
6064     _bfd_elf_section_offset (output_bfd, info, input_section, rel[0].r_offset);
6065   if (ABI_64_P (output_bfd))
6066     {
6067       outrel[1].r_offset =
6068         _bfd_elf_section_offset (output_bfd, info, input_section, rel[1].r_offset);
6069       outrel[2].r_offset =
6070         _bfd_elf_section_offset (output_bfd, info, input_section, rel[2].r_offset);
6071     }
6072
6073   if (outrel[0].r_offset == MINUS_ONE)
6074     /* The relocation field has been deleted.  */
6075     return TRUE;
6076
6077   if (outrel[0].r_offset == MINUS_TWO)
6078     {
6079       /* The relocation field has been converted into a relative value of
6080          some sort.  Functions like _bfd_elf_write_section_eh_frame expect
6081          the field to be fully relocated, so add in the symbol's value.  */
6082       *addendp += symbol;
6083       return TRUE;
6084     }
6085
6086   /* We must now calculate the dynamic symbol table index to use
6087      in the relocation.  */
6088   if (h != NULL && ! SYMBOL_REFERENCES_LOCAL (info, &h->root))
6089     {
6090       BFD_ASSERT (htab->is_vxworks || h->global_got_area != GGA_NONE);
6091       indx = h->root.dynindx;
6092       if (SGI_COMPAT (output_bfd))
6093         defined_p = h->root.def_regular;
6094       else
6095         /* ??? glibc's ld.so just adds the final GOT entry to the
6096            relocation field.  It therefore treats relocs against
6097            defined symbols in the same way as relocs against
6098            undefined symbols.  */
6099         defined_p = FALSE;
6100     }
6101   else
6102     {
6103       if (sec != NULL && bfd_is_abs_section (sec))
6104         indx = 0;
6105       else if (sec == NULL || sec->owner == NULL)
6106         {
6107           bfd_set_error (bfd_error_bad_value);
6108           return FALSE;
6109         }
6110       else
6111         {
6112           indx = elf_section_data (sec->output_section)->dynindx;
6113           if (indx == 0)
6114             {
6115               asection *osec = htab->root.text_index_section;
6116               indx = elf_section_data (osec)->dynindx;
6117             }
6118           if (indx == 0)
6119             abort ();
6120         }
6121
6122       /* Instead of generating a relocation using the section
6123          symbol, we may as well make it a fully relative
6124          relocation.  We want to avoid generating relocations to
6125          local symbols because we used to generate them
6126          incorrectly, without adding the original symbol value,
6127          which is mandated by the ABI for section symbols.  In
6128          order to give dynamic loaders and applications time to
6129          phase out the incorrect use, we refrain from emitting
6130          section-relative relocations.  It's not like they're
6131          useful, after all.  This should be a bit more efficient
6132          as well.  */
6133       /* ??? Although this behavior is compatible with glibc's ld.so,
6134          the ABI says that relocations against STN_UNDEF should have
6135          a symbol value of 0.  Irix rld honors this, so relocations
6136          against STN_UNDEF have no effect.  */
6137       if (!SGI_COMPAT (output_bfd))
6138         indx = 0;
6139       defined_p = TRUE;
6140     }
6141
6142   /* If the relocation was previously an absolute relocation and
6143      this symbol will not be referred to by the relocation, we must
6144      adjust it by the value we give it in the dynamic symbol table.
6145      Otherwise leave the job up to the dynamic linker.  */
6146   if (defined_p && r_type != R_MIPS_REL32)
6147     *addendp += symbol;
6148
6149   if (htab->is_vxworks)
6150     /* VxWorks uses non-relative relocations for this.  */
6151     outrel[0].r_info = ELF32_R_INFO (indx, R_MIPS_32);
6152   else
6153     /* The relocation is always an REL32 relocation because we don't
6154        know where the shared library will wind up at load-time.  */
6155     outrel[0].r_info = ELF_R_INFO (output_bfd, (unsigned long) indx,
6156                                    R_MIPS_REL32);
6157
6158   /* For strict adherence to the ABI specification, we should
6159      generate a R_MIPS_64 relocation record by itself before the
6160      _REL32/_64 record as well, such that the addend is read in as
6161      a 64-bit value (REL32 is a 32-bit relocation, after all).
6162      However, since none of the existing ELF64 MIPS dynamic
6163      loaders seems to care, we don't waste space with these
6164      artificial relocations.  If this turns out to not be true,
6165      mips_elf_allocate_dynamic_relocation() should be tweaked so
6166      as to make room for a pair of dynamic relocations per
6167      invocation if ABI_64_P, and here we should generate an
6168      additional relocation record with R_MIPS_64 by itself for a
6169      NULL symbol before this relocation record.  */
6170   outrel[1].r_info = ELF_R_INFO (output_bfd, 0,
6171                                  ABI_64_P (output_bfd)
6172                                  ? R_MIPS_64
6173                                  : R_MIPS_NONE);
6174   outrel[2].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_NONE);
6175
6176   /* Adjust the output offset of the relocation to reference the
6177      correct location in the output file.  */
6178   outrel[0].r_offset += (input_section->output_section->vma
6179                          + input_section->output_offset);
6180   outrel[1].r_offset += (input_section->output_section->vma
6181                          + input_section->output_offset);
6182   outrel[2].r_offset += (input_section->output_section->vma
6183                          + input_section->output_offset);
6184
6185   /* Put the relocation back out.  We have to use the special
6186      relocation outputter in the 64-bit case since the 64-bit
6187      relocation format is non-standard.  */
6188   if (ABI_64_P (output_bfd))
6189     {
6190       (*get_elf_backend_data (output_bfd)->s->swap_reloc_out)
6191         (output_bfd, &outrel[0],
6192          (sreloc->contents
6193           + sreloc->reloc_count * sizeof (Elf64_Mips_External_Rel)));
6194     }
6195   else if (htab->is_vxworks)
6196     {
6197       /* VxWorks uses RELA rather than REL dynamic relocations.  */
6198       outrel[0].r_addend = *addendp;
6199       bfd_elf32_swap_reloca_out
6200         (output_bfd, &outrel[0],
6201          (sreloc->contents
6202           + sreloc->reloc_count * sizeof (Elf32_External_Rela)));
6203     }
6204   else
6205     bfd_elf32_swap_reloc_out
6206       (output_bfd, &outrel[0],
6207        (sreloc->contents + sreloc->reloc_count * sizeof (Elf32_External_Rel)));
6208
6209   /* We've now added another relocation.  */
6210   ++sreloc->reloc_count;
6211
6212   /* Make sure the output section is writable.  The dynamic linker
6213      will be writing to it.  */
6214   elf_section_data (input_section->output_section)->this_hdr.sh_flags
6215     |= SHF_WRITE;
6216
6217   /* On IRIX5, make an entry of compact relocation info.  */
6218   if (IRIX_COMPAT (output_bfd) == ict_irix5)
6219     {
6220       asection *scpt = bfd_get_linker_section (dynobj, ".compact_rel");
6221       bfd_byte *cr;
6222
6223       if (scpt)
6224         {
6225           Elf32_crinfo cptrel;
6226
6227           mips_elf_set_cr_format (cptrel, CRF_MIPS_LONG);
6228           cptrel.vaddr = (rel->r_offset
6229                           + input_section->output_section->vma
6230                           + input_section->output_offset);
6231           if (r_type == R_MIPS_REL32)
6232             mips_elf_set_cr_type (cptrel, CRT_MIPS_REL32);
6233           else
6234             mips_elf_set_cr_type (cptrel, CRT_MIPS_WORD);
6235           mips_elf_set_cr_dist2to (cptrel, 0);
6236           cptrel.konst = *addendp;
6237
6238           cr = (scpt->contents
6239                 + sizeof (Elf32_External_compact_rel));
6240           mips_elf_set_cr_relvaddr (cptrel, 0);
6241           bfd_elf32_swap_crinfo_out (output_bfd, &cptrel,
6242                                      ((Elf32_External_crinfo *) cr
6243                                       + scpt->reloc_count));
6244           ++scpt->reloc_count;
6245         }
6246     }
6247
6248   /* If we've written this relocation for a readonly section,
6249      we need to set DF_TEXTREL again, so that we do not delete the
6250      DT_TEXTREL tag.  */
6251   if (MIPS_ELF_READONLY_SECTION (input_section))
6252     info->flags |= DF_TEXTREL;
6253
6254   return TRUE;
6255 }
6256 \f
6257 /* Return the MACH for a MIPS e_flags value.  */
6258
6259 unsigned long
6260 _bfd_elf_mips_mach (flagword flags)
6261 {
6262   switch (flags & EF_MIPS_MACH)
6263     {
6264     case E_MIPS_MACH_3900:
6265       return bfd_mach_mips3900;
6266
6267     case E_MIPS_MACH_4010:
6268       return bfd_mach_mips4010;
6269
6270     case E_MIPS_MACH_4100:
6271       return bfd_mach_mips4100;
6272
6273     case E_MIPS_MACH_4111:
6274       return bfd_mach_mips4111;
6275
6276     case E_MIPS_MACH_4120:
6277       return bfd_mach_mips4120;
6278
6279     case E_MIPS_MACH_4650:
6280       return bfd_mach_mips4650;
6281
6282     case E_MIPS_MACH_5400:
6283       return bfd_mach_mips5400;
6284
6285     case E_MIPS_MACH_5500:
6286       return bfd_mach_mips5500;
6287
6288     case E_MIPS_MACH_5900:
6289       return bfd_mach_mips5900;
6290
6291     case E_MIPS_MACH_9000:
6292       return bfd_mach_mips9000;
6293
6294     case E_MIPS_MACH_SB1:
6295       return bfd_mach_mips_sb1;
6296
6297     case E_MIPS_MACH_LS2E:
6298       return bfd_mach_mips_loongson_2e;
6299
6300     case E_MIPS_MACH_LS2F:
6301       return bfd_mach_mips_loongson_2f;
6302
6303     case E_MIPS_MACH_LS3A:
6304       return bfd_mach_mips_loongson_3a;
6305
6306     case E_MIPS_MACH_OCTEON2:
6307       return bfd_mach_mips_octeon2;
6308
6309     case E_MIPS_MACH_OCTEON:
6310       return bfd_mach_mips_octeon;
6311
6312     case E_MIPS_MACH_XLR:
6313       return bfd_mach_mips_xlr;
6314
6315     default:
6316       switch (flags & EF_MIPS_ARCH)
6317         {
6318         default:
6319         case E_MIPS_ARCH_1:
6320           return bfd_mach_mips3000;
6321
6322         case E_MIPS_ARCH_2:
6323           return bfd_mach_mips6000;
6324
6325         case E_MIPS_ARCH_3:
6326           return bfd_mach_mips4000;
6327
6328         case E_MIPS_ARCH_4:
6329           return bfd_mach_mips8000;
6330
6331         case E_MIPS_ARCH_5:
6332           return bfd_mach_mips5;
6333
6334         case E_MIPS_ARCH_32:
6335           return bfd_mach_mipsisa32;
6336
6337         case E_MIPS_ARCH_64:
6338           return bfd_mach_mipsisa64;
6339
6340         case E_MIPS_ARCH_32R2:
6341           return bfd_mach_mipsisa32r2;
6342
6343         case E_MIPS_ARCH_64R2:
6344           return bfd_mach_mipsisa64r2;
6345         }
6346     }
6347
6348   return 0;
6349 }
6350
6351 /* Return printable name for ABI.  */
6352
6353 static INLINE char *
6354 elf_mips_abi_name (bfd *abfd)
6355 {
6356   flagword flags;
6357
6358   flags = elf_elfheader (abfd)->e_flags;
6359   switch (flags & EF_MIPS_ABI)
6360     {
6361     case 0:
6362       if (ABI_N32_P (abfd))
6363         return "N32";
6364       else if (ABI_64_P (abfd))
6365         return "64";
6366       else
6367         return "none";
6368     case E_MIPS_ABI_O32:
6369       return "O32";
6370     case E_MIPS_ABI_O64:
6371       return "O64";
6372     case E_MIPS_ABI_EABI32:
6373       return "EABI32";
6374     case E_MIPS_ABI_EABI64:
6375       return "EABI64";
6376     default:
6377       return "unknown abi";
6378     }
6379 }
6380 \f
6381 /* MIPS ELF uses two common sections.  One is the usual one, and the
6382    other is for small objects.  All the small objects are kept
6383    together, and then referenced via the gp pointer, which yields
6384    faster assembler code.  This is what we use for the small common
6385    section.  This approach is copied from ecoff.c.  */
6386 static asection mips_elf_scom_section;
6387 static asymbol mips_elf_scom_symbol;
6388 static asymbol *mips_elf_scom_symbol_ptr;
6389
6390 /* MIPS ELF also uses an acommon section, which represents an
6391    allocated common symbol which may be overridden by a
6392    definition in a shared library.  */
6393 static asection mips_elf_acom_section;
6394 static asymbol mips_elf_acom_symbol;
6395 static asymbol *mips_elf_acom_symbol_ptr;
6396
6397 /* This is used for both the 32-bit and the 64-bit ABI.  */
6398
6399 void
6400 _bfd_mips_elf_symbol_processing (bfd *abfd, asymbol *asym)
6401 {
6402   elf_symbol_type *elfsym;
6403
6404   /* Handle the special MIPS section numbers that a symbol may use.  */
6405   elfsym = (elf_symbol_type *) asym;
6406   switch (elfsym->internal_elf_sym.st_shndx)
6407     {
6408     case SHN_MIPS_ACOMMON:
6409       /* This section is used in a dynamically linked executable file.
6410          It is an allocated common section.  The dynamic linker can
6411          either resolve these symbols to something in a shared
6412          library, or it can just leave them here.  For our purposes,
6413          we can consider these symbols to be in a new section.  */
6414       if (mips_elf_acom_section.name == NULL)
6415         {
6416           /* Initialize the acommon section.  */
6417           mips_elf_acom_section.name = ".acommon";
6418           mips_elf_acom_section.flags = SEC_ALLOC;
6419           mips_elf_acom_section.output_section = &mips_elf_acom_section;
6420           mips_elf_acom_section.symbol = &mips_elf_acom_symbol;
6421           mips_elf_acom_section.symbol_ptr_ptr = &mips_elf_acom_symbol_ptr;
6422           mips_elf_acom_symbol.name = ".acommon";
6423           mips_elf_acom_symbol.flags = BSF_SECTION_SYM;
6424           mips_elf_acom_symbol.section = &mips_elf_acom_section;
6425           mips_elf_acom_symbol_ptr = &mips_elf_acom_symbol;
6426         }
6427       asym->section = &mips_elf_acom_section;
6428       break;
6429
6430     case SHN_COMMON:
6431       /* Common symbols less than the GP size are automatically
6432          treated as SHN_MIPS_SCOMMON symbols on IRIX5.  */
6433       if (asym->value > elf_gp_size (abfd)
6434           || ELF_ST_TYPE (elfsym->internal_elf_sym.st_info) == STT_TLS
6435           || IRIX_COMPAT (abfd) == ict_irix6)
6436         break;
6437       /* Fall through.  */
6438     case SHN_MIPS_SCOMMON:
6439       if (mips_elf_scom_section.name == NULL)
6440         {
6441           /* Initialize the small common section.  */
6442           mips_elf_scom_section.name = ".scommon";
6443           mips_elf_scom_section.flags = SEC_IS_COMMON;
6444           mips_elf_scom_section.output_section = &mips_elf_scom_section;
6445           mips_elf_scom_section.symbol = &mips_elf_scom_symbol;
6446           mips_elf_scom_section.symbol_ptr_ptr = &mips_elf_scom_symbol_ptr;
6447           mips_elf_scom_symbol.name = ".scommon";
6448           mips_elf_scom_symbol.flags = BSF_SECTION_SYM;
6449           mips_elf_scom_symbol.section = &mips_elf_scom_section;
6450           mips_elf_scom_symbol_ptr = &mips_elf_scom_symbol;
6451         }
6452       asym->section = &mips_elf_scom_section;
6453       asym->value = elfsym->internal_elf_sym.st_size;
6454       break;
6455
6456     case SHN_MIPS_SUNDEFINED:
6457       asym->section = bfd_und_section_ptr;
6458       break;
6459
6460     case SHN_MIPS_TEXT:
6461       {
6462         asection *section = bfd_get_section_by_name (abfd, ".text");
6463
6464         if (section != NULL)
6465           {
6466             asym->section = section;
6467             /* MIPS_TEXT is a bit special, the address is not an offset
6468                to the base of the .text section.  So substract the section
6469                base address to make it an offset.  */
6470             asym->value -= section->vma;
6471           }
6472       }
6473       break;
6474
6475     case SHN_MIPS_DATA:
6476       {
6477         asection *section = bfd_get_section_by_name (abfd, ".data");
6478
6479         if (section != NULL)
6480           {
6481             asym->section = section;
6482             /* MIPS_DATA is a bit special, the address is not an offset
6483                to the base of the .data section.  So substract the section
6484                base address to make it an offset.  */
6485             asym->value -= section->vma;
6486           }
6487       }
6488       break;
6489     }
6490
6491   /* If this is an odd-valued function symbol, assume it's a MIPS16
6492      or microMIPS one.  */
6493   if (ELF_ST_TYPE (elfsym->internal_elf_sym.st_info) == STT_FUNC
6494       && (asym->value & 1) != 0)
6495     {
6496       asym->value--;
6497       if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MICROMIPS)
6498         elfsym->internal_elf_sym.st_other
6499           = ELF_ST_SET_MICROMIPS (elfsym->internal_elf_sym.st_other);
6500       else
6501         elfsym->internal_elf_sym.st_other
6502           = ELF_ST_SET_MIPS16 (elfsym->internal_elf_sym.st_other);
6503     }
6504 }
6505 \f
6506 /* Implement elf_backend_eh_frame_address_size.  This differs from
6507    the default in the way it handles EABI64.
6508
6509    EABI64 was originally specified as an LP64 ABI, and that is what
6510    -mabi=eabi normally gives on a 64-bit target.  However, gcc has
6511    historically accepted the combination of -mabi=eabi and -mlong32,
6512    and this ILP32 variation has become semi-official over time.
6513    Both forms use elf32 and have pointer-sized FDE addresses.
6514
6515    If an EABI object was generated by GCC 4.0 or above, it will have
6516    an empty .gcc_compiled_longXX section, where XX is the size of longs
6517    in bits.  Unfortunately, ILP32 objects generated by earlier compilers
6518    have no special marking to distinguish them from LP64 objects.
6519
6520    We don't want users of the official LP64 ABI to be punished for the
6521    existence of the ILP32 variant, but at the same time, we don't want
6522    to mistakenly interpret pre-4.0 ILP32 objects as being LP64 objects.
6523    We therefore take the following approach:
6524
6525       - If ABFD contains a .gcc_compiled_longXX section, use it to
6526         determine the pointer size.
6527
6528       - Otherwise check the type of the first relocation.  Assume that
6529         the LP64 ABI is being used if the relocation is of type R_MIPS_64.
6530
6531       - Otherwise punt.
6532
6533    The second check is enough to detect LP64 objects generated by pre-4.0
6534    compilers because, in the kind of output generated by those compilers,
6535    the first relocation will be associated with either a CIE personality
6536    routine or an FDE start address.  Furthermore, the compilers never
6537    used a special (non-pointer) encoding for this ABI.
6538
6539    Checking the relocation type should also be safe because there is no
6540    reason to use R_MIPS_64 in an ILP32 object.  Pre-4.0 compilers never
6541    did so.  */
6542
6543 unsigned int
6544 _bfd_mips_elf_eh_frame_address_size (bfd *abfd, asection *sec)
6545 {
6546   if (elf_elfheader (abfd)->e_ident[EI_CLASS] == ELFCLASS64)
6547     return 8;
6548   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI64)
6549     {
6550       bfd_boolean long32_p, long64_p;
6551
6552       long32_p = bfd_get_section_by_name (abfd, ".gcc_compiled_long32") != 0;
6553       long64_p = bfd_get_section_by_name (abfd, ".gcc_compiled_long64") != 0;
6554       if (long32_p && long64_p)
6555         return 0;
6556       if (long32_p)
6557         return 4;
6558       if (long64_p)
6559         return 8;
6560
6561       if (sec->reloc_count > 0
6562           && elf_section_data (sec)->relocs != NULL
6563           && (ELF32_R_TYPE (elf_section_data (sec)->relocs[0].r_info)
6564               == R_MIPS_64))
6565         return 8;
6566
6567       return 0;
6568     }
6569   return 4;
6570 }
6571 \f
6572 /* There appears to be a bug in the MIPSpro linker that causes GOT_DISP
6573    relocations against two unnamed section symbols to resolve to the
6574    same address.  For example, if we have code like:
6575
6576         lw      $4,%got_disp(.data)($gp)
6577         lw      $25,%got_disp(.text)($gp)
6578         jalr    $25
6579
6580    then the linker will resolve both relocations to .data and the program
6581    will jump there rather than to .text.
6582
6583    We can work around this problem by giving names to local section symbols.
6584    This is also what the MIPSpro tools do.  */
6585
6586 bfd_boolean
6587 _bfd_mips_elf_name_local_section_symbols (bfd *abfd)
6588 {
6589   return SGI_COMPAT (abfd);
6590 }
6591 \f
6592 /* Work over a section just before writing it out.  This routine is
6593    used by both the 32-bit and the 64-bit ABI.  FIXME: We recognize
6594    sections that need the SHF_MIPS_GPREL flag by name; there has to be
6595    a better way.  */
6596
6597 bfd_boolean
6598 _bfd_mips_elf_section_processing (bfd *abfd, Elf_Internal_Shdr *hdr)
6599 {
6600   if (hdr->sh_type == SHT_MIPS_REGINFO
6601       && hdr->sh_size > 0)
6602     {
6603       bfd_byte buf[4];
6604
6605       BFD_ASSERT (hdr->sh_size == sizeof (Elf32_External_RegInfo));
6606       BFD_ASSERT (hdr->contents == NULL);
6607
6608       if (bfd_seek (abfd,
6609                     hdr->sh_offset + sizeof (Elf32_External_RegInfo) - 4,
6610                     SEEK_SET) != 0)
6611         return FALSE;
6612       H_PUT_32 (abfd, elf_gp (abfd), buf);
6613       if (bfd_bwrite (buf, 4, abfd) != 4)
6614         return FALSE;
6615     }
6616
6617   if (hdr->sh_type == SHT_MIPS_OPTIONS
6618       && hdr->bfd_section != NULL
6619       && mips_elf_section_data (hdr->bfd_section) != NULL
6620       && mips_elf_section_data (hdr->bfd_section)->u.tdata != NULL)
6621     {
6622       bfd_byte *contents, *l, *lend;
6623
6624       /* We stored the section contents in the tdata field in the
6625          set_section_contents routine.  We save the section contents
6626          so that we don't have to read them again.
6627          At this point we know that elf_gp is set, so we can look
6628          through the section contents to see if there is an
6629          ODK_REGINFO structure.  */
6630
6631       contents = mips_elf_section_data (hdr->bfd_section)->u.tdata;
6632       l = contents;
6633       lend = contents + hdr->sh_size;
6634       while (l + sizeof (Elf_External_Options) <= lend)
6635         {
6636           Elf_Internal_Options intopt;
6637
6638           bfd_mips_elf_swap_options_in (abfd, (Elf_External_Options *) l,
6639                                         &intopt);
6640           if (intopt.size < sizeof (Elf_External_Options))
6641             {
6642               (*_bfd_error_handler)
6643                 (_("%B: Warning: bad `%s' option size %u smaller than its header"),
6644                 abfd, MIPS_ELF_OPTIONS_SECTION_NAME (abfd), intopt.size);
6645               break;
6646             }
6647           if (ABI_64_P (abfd) && intopt.kind == ODK_REGINFO)
6648             {
6649               bfd_byte buf[8];
6650
6651               if (bfd_seek (abfd,
6652                             (hdr->sh_offset
6653                              + (l - contents)
6654                              + sizeof (Elf_External_Options)
6655                              + (sizeof (Elf64_External_RegInfo) - 8)),
6656                              SEEK_SET) != 0)
6657                 return FALSE;
6658               H_PUT_64 (abfd, elf_gp (abfd), buf);
6659               if (bfd_bwrite (buf, 8, abfd) != 8)
6660                 return FALSE;
6661             }
6662           else if (intopt.kind == ODK_REGINFO)
6663             {
6664               bfd_byte buf[4];
6665
6666               if (bfd_seek (abfd,
6667                             (hdr->sh_offset
6668                              + (l - contents)
6669                              + sizeof (Elf_External_Options)
6670                              + (sizeof (Elf32_External_RegInfo) - 4)),
6671                             SEEK_SET) != 0)
6672                 return FALSE;
6673               H_PUT_32 (abfd, elf_gp (abfd), buf);
6674               if (bfd_bwrite (buf, 4, abfd) != 4)
6675                 return FALSE;
6676             }
6677           l += intopt.size;
6678         }
6679     }
6680
6681   if (hdr->bfd_section != NULL)
6682     {
6683       const char *name = bfd_get_section_name (abfd, hdr->bfd_section);
6684
6685       /* .sbss is not handled specially here because the GNU/Linux
6686          prelinker can convert .sbss from NOBITS to PROGBITS and
6687          changing it back to NOBITS breaks the binary.  The entry in
6688          _bfd_mips_elf_special_sections will ensure the correct flags
6689          are set on .sbss if BFD creates it without reading it from an
6690          input file, and without special handling here the flags set
6691          on it in an input file will be followed.  */
6692       if (strcmp (name, ".sdata") == 0
6693           || strcmp (name, ".lit8") == 0
6694           || strcmp (name, ".lit4") == 0)
6695         {
6696           hdr->sh_flags |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL;
6697           hdr->sh_type = SHT_PROGBITS;
6698         }
6699       else if (strcmp (name, ".srdata") == 0)
6700         {
6701           hdr->sh_flags |= SHF_ALLOC | SHF_MIPS_GPREL;
6702           hdr->sh_type = SHT_PROGBITS;
6703         }
6704       else if (strcmp (name, ".compact_rel") == 0)
6705         {
6706           hdr->sh_flags = 0;
6707           hdr->sh_type = SHT_PROGBITS;
6708         }
6709       else if (strcmp (name, ".rtproc") == 0)
6710         {
6711           if (hdr->sh_addralign != 0 && hdr->sh_entsize == 0)
6712             {
6713               unsigned int adjust;
6714
6715               adjust = hdr->sh_size % hdr->sh_addralign;
6716               if (adjust != 0)
6717                 hdr->sh_size += hdr->sh_addralign - adjust;
6718             }
6719         }
6720     }
6721
6722   return TRUE;
6723 }
6724
6725 /* Handle a MIPS specific section when reading an object file.  This
6726    is called when elfcode.h finds a section with an unknown type.
6727    This routine supports both the 32-bit and 64-bit ELF ABI.
6728
6729    FIXME: We need to handle the SHF_MIPS_GPREL flag, but I'm not sure
6730    how to.  */
6731
6732 bfd_boolean
6733 _bfd_mips_elf_section_from_shdr (bfd *abfd,
6734                                  Elf_Internal_Shdr *hdr,
6735                                  const char *name,
6736                                  int shindex)
6737 {
6738   flagword flags = 0;
6739
6740   /* There ought to be a place to keep ELF backend specific flags, but
6741      at the moment there isn't one.  We just keep track of the
6742      sections by their name, instead.  Fortunately, the ABI gives
6743      suggested names for all the MIPS specific sections, so we will
6744      probably get away with this.  */
6745   switch (hdr->sh_type)
6746     {
6747     case SHT_MIPS_LIBLIST:
6748       if (strcmp (name, ".liblist") != 0)
6749         return FALSE;
6750       break;
6751     case SHT_MIPS_MSYM:
6752       if (strcmp (name, ".msym") != 0)
6753         return FALSE;
6754       break;
6755     case SHT_MIPS_CONFLICT:
6756       if (strcmp (name, ".conflict") != 0)
6757         return FALSE;
6758       break;
6759     case SHT_MIPS_GPTAB:
6760       if (! CONST_STRNEQ (name, ".gptab."))
6761         return FALSE;
6762       break;
6763     case SHT_MIPS_UCODE:
6764       if (strcmp (name, ".ucode") != 0)
6765         return FALSE;
6766       break;
6767     case SHT_MIPS_DEBUG:
6768       if (strcmp (name, ".mdebug") != 0)
6769         return FALSE;
6770       flags = SEC_DEBUGGING;
6771       break;
6772     case SHT_MIPS_REGINFO:
6773       if (strcmp (name, ".reginfo") != 0
6774           || hdr->sh_size != sizeof (Elf32_External_RegInfo))
6775         return FALSE;
6776       flags = (SEC_LINK_ONCE | SEC_LINK_DUPLICATES_SAME_SIZE);
6777       break;
6778     case SHT_MIPS_IFACE:
6779       if (strcmp (name, ".MIPS.interfaces") != 0)
6780         return FALSE;
6781       break;
6782     case SHT_MIPS_CONTENT:
6783       if (! CONST_STRNEQ (name, ".MIPS.content"))
6784         return FALSE;
6785       break;
6786     case SHT_MIPS_OPTIONS:
6787       if (!MIPS_ELF_OPTIONS_SECTION_NAME_P (name))
6788         return FALSE;
6789       break;
6790     case SHT_MIPS_DWARF:
6791       if (! CONST_STRNEQ (name, ".debug_")
6792           && ! CONST_STRNEQ (name, ".zdebug_"))
6793         return FALSE;
6794       break;
6795     case SHT_MIPS_SYMBOL_LIB:
6796       if (strcmp (name, ".MIPS.symlib") != 0)
6797         return FALSE;
6798       break;
6799     case SHT_MIPS_EVENTS:
6800       if (! CONST_STRNEQ (name, ".MIPS.events")
6801           && ! CONST_STRNEQ (name, ".MIPS.post_rel"))
6802         return FALSE;
6803       break;
6804     default:
6805       break;
6806     }
6807
6808   if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
6809     return FALSE;
6810
6811   if (flags)
6812     {
6813       if (! bfd_set_section_flags (abfd, hdr->bfd_section,
6814                                    (bfd_get_section_flags (abfd,
6815                                                            hdr->bfd_section)
6816                                     | flags)))
6817         return FALSE;
6818     }
6819
6820   /* FIXME: We should record sh_info for a .gptab section.  */
6821
6822   /* For a .reginfo section, set the gp value in the tdata information
6823      from the contents of this section.  We need the gp value while
6824      processing relocs, so we just get it now.  The .reginfo section
6825      is not used in the 64-bit MIPS ELF ABI.  */
6826   if (hdr->sh_type == SHT_MIPS_REGINFO)
6827     {
6828       Elf32_External_RegInfo ext;
6829       Elf32_RegInfo s;
6830
6831       if (! bfd_get_section_contents (abfd, hdr->bfd_section,
6832                                       &ext, 0, sizeof ext))
6833         return FALSE;
6834       bfd_mips_elf32_swap_reginfo_in (abfd, &ext, &s);
6835       elf_gp (abfd) = s.ri_gp_value;
6836     }
6837
6838   /* For a SHT_MIPS_OPTIONS section, look for a ODK_REGINFO entry, and
6839      set the gp value based on what we find.  We may see both
6840      SHT_MIPS_REGINFO and SHT_MIPS_OPTIONS/ODK_REGINFO; in that case,
6841      they should agree.  */
6842   if (hdr->sh_type == SHT_MIPS_OPTIONS)
6843     {
6844       bfd_byte *contents, *l, *lend;
6845
6846       contents = bfd_malloc (hdr->sh_size);
6847       if (contents == NULL)
6848         return FALSE;
6849       if (! bfd_get_section_contents (abfd, hdr->bfd_section, contents,
6850                                       0, hdr->sh_size))
6851         {
6852           free (contents);
6853           return FALSE;
6854         }
6855       l = contents;
6856       lend = contents + hdr->sh_size;
6857       while (l + sizeof (Elf_External_Options) <= lend)
6858         {
6859           Elf_Internal_Options intopt;
6860
6861           bfd_mips_elf_swap_options_in (abfd, (Elf_External_Options *) l,
6862                                         &intopt);
6863           if (intopt.size < sizeof (Elf_External_Options))
6864             {
6865               (*_bfd_error_handler)
6866                 (_("%B: Warning: bad `%s' option size %u smaller than its header"),
6867                 abfd, MIPS_ELF_OPTIONS_SECTION_NAME (abfd), intopt.size);
6868               break;
6869             }
6870           if (ABI_64_P (abfd) && intopt.kind == ODK_REGINFO)
6871             {
6872               Elf64_Internal_RegInfo intreg;
6873
6874               bfd_mips_elf64_swap_reginfo_in
6875                 (abfd,
6876                  ((Elf64_External_RegInfo *)
6877                   (l + sizeof (Elf_External_Options))),
6878                  &intreg);
6879               elf_gp (abfd) = intreg.ri_gp_value;
6880             }
6881           else if (intopt.kind == ODK_REGINFO)
6882             {
6883               Elf32_RegInfo intreg;
6884
6885               bfd_mips_elf32_swap_reginfo_in
6886                 (abfd,
6887                  ((Elf32_External_RegInfo *)
6888                   (l + sizeof (Elf_External_Options))),
6889                  &intreg);
6890               elf_gp (abfd) = intreg.ri_gp_value;
6891             }
6892           l += intopt.size;
6893         }
6894       free (contents);
6895     }
6896
6897   return TRUE;
6898 }
6899
6900 /* Set the correct type for a MIPS ELF section.  We do this by the
6901    section name, which is a hack, but ought to work.  This routine is
6902    used by both the 32-bit and the 64-bit ABI.  */
6903
6904 bfd_boolean
6905 _bfd_mips_elf_fake_sections (bfd *abfd, Elf_Internal_Shdr *hdr, asection *sec)
6906 {
6907   const char *name = bfd_get_section_name (abfd, sec);
6908
6909   if (strcmp (name, ".liblist") == 0)
6910     {
6911       hdr->sh_type = SHT_MIPS_LIBLIST;
6912       hdr->sh_info = sec->size / sizeof (Elf32_Lib);
6913       /* The sh_link field is set in final_write_processing.  */
6914     }
6915   else if (strcmp (name, ".conflict") == 0)
6916     hdr->sh_type = SHT_MIPS_CONFLICT;
6917   else if (CONST_STRNEQ (name, ".gptab."))
6918     {
6919       hdr->sh_type = SHT_MIPS_GPTAB;
6920       hdr->sh_entsize = sizeof (Elf32_External_gptab);
6921       /* The sh_info field is set in final_write_processing.  */
6922     }
6923   else if (strcmp (name, ".ucode") == 0)
6924     hdr->sh_type = SHT_MIPS_UCODE;
6925   else if (strcmp (name, ".mdebug") == 0)
6926     {
6927       hdr->sh_type = SHT_MIPS_DEBUG;
6928       /* In a shared object on IRIX 5.3, the .mdebug section has an
6929          entsize of 0.  FIXME: Does this matter?  */
6930       if (SGI_COMPAT (abfd) && (abfd->flags & DYNAMIC) != 0)
6931         hdr->sh_entsize = 0;
6932       else
6933         hdr->sh_entsize = 1;
6934     }
6935   else if (strcmp (name, ".reginfo") == 0)
6936     {
6937       hdr->sh_type = SHT_MIPS_REGINFO;
6938       /* In a shared object on IRIX 5.3, the .reginfo section has an
6939          entsize of 0x18.  FIXME: Does this matter?  */
6940       if (SGI_COMPAT (abfd))
6941         {
6942           if ((abfd->flags & DYNAMIC) != 0)
6943             hdr->sh_entsize = sizeof (Elf32_External_RegInfo);
6944           else
6945             hdr->sh_entsize = 1;
6946         }
6947       else
6948         hdr->sh_entsize = sizeof (Elf32_External_RegInfo);
6949     }
6950   else if (SGI_COMPAT (abfd)
6951            && (strcmp (name, ".hash") == 0
6952                || strcmp (name, ".dynamic") == 0
6953                || strcmp (name, ".dynstr") == 0))
6954     {
6955       if (SGI_COMPAT (abfd))
6956         hdr->sh_entsize = 0;
6957 #if 0
6958       /* This isn't how the IRIX6 linker behaves.  */
6959       hdr->sh_info = SIZEOF_MIPS_DYNSYM_SECNAMES;
6960 #endif
6961     }
6962   else if (strcmp (name, ".got") == 0
6963            || strcmp (name, ".srdata") == 0
6964            || strcmp (name, ".sdata") == 0
6965            || strcmp (name, ".sbss") == 0
6966            || strcmp (name, ".lit4") == 0
6967            || strcmp (name, ".lit8") == 0)
6968     hdr->sh_flags |= SHF_MIPS_GPREL;
6969   else if (strcmp (name, ".MIPS.interfaces") == 0)
6970     {
6971       hdr->sh_type = SHT_MIPS_IFACE;
6972       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
6973     }
6974   else if (CONST_STRNEQ (name, ".MIPS.content"))
6975     {
6976       hdr->sh_type = SHT_MIPS_CONTENT;
6977       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
6978       /* The sh_info field is set in final_write_processing.  */
6979     }
6980   else if (MIPS_ELF_OPTIONS_SECTION_NAME_P (name))
6981     {
6982       hdr->sh_type = SHT_MIPS_OPTIONS;
6983       hdr->sh_entsize = 1;
6984       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
6985     }
6986   else if (CONST_STRNEQ (name, ".debug_")
6987            || CONST_STRNEQ (name, ".zdebug_"))
6988     {
6989       hdr->sh_type = SHT_MIPS_DWARF;
6990
6991       /* Irix facilities such as libexc expect a single .debug_frame
6992          per executable, the system ones have NOSTRIP set and the linker
6993          doesn't merge sections with different flags so ...  */
6994       if (SGI_COMPAT (abfd) && CONST_STRNEQ (name, ".debug_frame"))
6995         hdr->sh_flags |= SHF_MIPS_NOSTRIP;
6996     }
6997   else if (strcmp (name, ".MIPS.symlib") == 0)
6998     {
6999       hdr->sh_type = SHT_MIPS_SYMBOL_LIB;
7000       /* The sh_link and sh_info fields are set in
7001          final_write_processing.  */
7002     }
7003   else if (CONST_STRNEQ (name, ".MIPS.events")
7004            || CONST_STRNEQ (name, ".MIPS.post_rel"))
7005     {
7006       hdr->sh_type = SHT_MIPS_EVENTS;
7007       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7008       /* The sh_link field is set in final_write_processing.  */
7009     }
7010   else if (strcmp (name, ".msym") == 0)
7011     {
7012       hdr->sh_type = SHT_MIPS_MSYM;
7013       hdr->sh_flags |= SHF_ALLOC;
7014       hdr->sh_entsize = 8;
7015     }
7016
7017   /* The generic elf_fake_sections will set up REL_HDR using the default
7018    kind of relocations.  We used to set up a second header for the
7019    non-default kind of relocations here, but only NewABI would use
7020    these, and the IRIX ld doesn't like resulting empty RELA sections.
7021    Thus we create those header only on demand now.  */
7022
7023   return TRUE;
7024 }
7025
7026 /* Given a BFD section, try to locate the corresponding ELF section
7027    index.  This is used by both the 32-bit and the 64-bit ABI.
7028    Actually, it's not clear to me that the 64-bit ABI supports these,
7029    but for non-PIC objects we will certainly want support for at least
7030    the .scommon section.  */
7031
7032 bfd_boolean
7033 _bfd_mips_elf_section_from_bfd_section (bfd *abfd ATTRIBUTE_UNUSED,
7034                                         asection *sec, int *retval)
7035 {
7036   if (strcmp (bfd_get_section_name (abfd, sec), ".scommon") == 0)
7037     {
7038       *retval = SHN_MIPS_SCOMMON;
7039       return TRUE;
7040     }
7041   if (strcmp (bfd_get_section_name (abfd, sec), ".acommon") == 0)
7042     {
7043       *retval = SHN_MIPS_ACOMMON;
7044       return TRUE;
7045     }
7046   return FALSE;
7047 }
7048 \f
7049 /* Hook called by the linker routine which adds symbols from an object
7050    file.  We must handle the special MIPS section numbers here.  */
7051
7052 bfd_boolean
7053 _bfd_mips_elf_add_symbol_hook (bfd *abfd, struct bfd_link_info *info,
7054                                Elf_Internal_Sym *sym, const char **namep,
7055                                flagword *flagsp ATTRIBUTE_UNUSED,
7056                                asection **secp, bfd_vma *valp)
7057 {
7058   if (SGI_COMPAT (abfd)
7059       && (abfd->flags & DYNAMIC) != 0
7060       && strcmp (*namep, "_rld_new_interface") == 0)
7061     {
7062       /* Skip IRIX5 rld entry name.  */
7063       *namep = NULL;
7064       return TRUE;
7065     }
7066
7067   /* Shared objects may have a dynamic symbol '_gp_disp' defined as
7068      a SECTION *ABS*.  This causes ld to think it can resolve _gp_disp
7069      by setting a DT_NEEDED for the shared object.  Since _gp_disp is
7070      a magic symbol resolved by the linker, we ignore this bogus definition
7071      of _gp_disp.  New ABI objects do not suffer from this problem so this
7072      is not done for them. */
7073   if (!NEWABI_P(abfd)
7074       && (sym->st_shndx == SHN_ABS)
7075       && (strcmp (*namep, "_gp_disp") == 0))
7076     {
7077       *namep = NULL;
7078       return TRUE;
7079     }
7080
7081   switch (sym->st_shndx)
7082     {
7083     case SHN_COMMON:
7084       /* Common symbols less than the GP size are automatically
7085          treated as SHN_MIPS_SCOMMON symbols.  */
7086       if (sym->st_size > elf_gp_size (abfd)
7087           || ELF_ST_TYPE (sym->st_info) == STT_TLS
7088           || IRIX_COMPAT (abfd) == ict_irix6)
7089         break;
7090       /* Fall through.  */
7091     case SHN_MIPS_SCOMMON:
7092       *secp = bfd_make_section_old_way (abfd, ".scommon");
7093       (*secp)->flags |= SEC_IS_COMMON;
7094       *valp = sym->st_size;
7095       break;
7096
7097     case SHN_MIPS_TEXT:
7098       /* This section is used in a shared object.  */
7099       if (elf_tdata (abfd)->elf_text_section == NULL)
7100         {
7101           asymbol *elf_text_symbol;
7102           asection *elf_text_section;
7103           bfd_size_type amt = sizeof (asection);
7104
7105           elf_text_section = bfd_zalloc (abfd, amt);
7106           if (elf_text_section == NULL)
7107             return FALSE;
7108
7109           amt = sizeof (asymbol);
7110           elf_text_symbol = bfd_zalloc (abfd, amt);
7111           if (elf_text_symbol == NULL)
7112             return FALSE;
7113
7114           /* Initialize the section.  */
7115
7116           elf_tdata (abfd)->elf_text_section = elf_text_section;
7117           elf_tdata (abfd)->elf_text_symbol = elf_text_symbol;
7118
7119           elf_text_section->symbol = elf_text_symbol;
7120           elf_text_section->symbol_ptr_ptr = &elf_tdata (abfd)->elf_text_symbol;
7121
7122           elf_text_section->name = ".text";
7123           elf_text_section->flags = SEC_NO_FLAGS;
7124           elf_text_section->output_section = NULL;
7125           elf_text_section->owner = abfd;
7126           elf_text_symbol->name = ".text";
7127           elf_text_symbol->flags = BSF_SECTION_SYM | BSF_DYNAMIC;
7128           elf_text_symbol->section = elf_text_section;
7129         }
7130       /* This code used to do *secp = bfd_und_section_ptr if
7131          info->shared.  I don't know why, and that doesn't make sense,
7132          so I took it out.  */
7133       *secp = elf_tdata (abfd)->elf_text_section;
7134       break;
7135
7136     case SHN_MIPS_ACOMMON:
7137       /* Fall through. XXX Can we treat this as allocated data?  */
7138     case SHN_MIPS_DATA:
7139       /* This section is used in a shared object.  */
7140       if (elf_tdata (abfd)->elf_data_section == NULL)
7141         {
7142           asymbol *elf_data_symbol;
7143           asection *elf_data_section;
7144           bfd_size_type amt = sizeof (asection);
7145
7146           elf_data_section = bfd_zalloc (abfd, amt);
7147           if (elf_data_section == NULL)
7148             return FALSE;
7149
7150           amt = sizeof (asymbol);
7151           elf_data_symbol = bfd_zalloc (abfd, amt);
7152           if (elf_data_symbol == NULL)
7153             return FALSE;
7154
7155           /* Initialize the section.  */
7156
7157           elf_tdata (abfd)->elf_data_section = elf_data_section;
7158           elf_tdata (abfd)->elf_data_symbol = elf_data_symbol;
7159
7160           elf_data_section->symbol = elf_data_symbol;
7161           elf_data_section->symbol_ptr_ptr = &elf_tdata (abfd)->elf_data_symbol;
7162
7163           elf_data_section->name = ".data";
7164           elf_data_section->flags = SEC_NO_FLAGS;
7165           elf_data_section->output_section = NULL;
7166           elf_data_section->owner = abfd;
7167           elf_data_symbol->name = ".data";
7168           elf_data_symbol->flags = BSF_SECTION_SYM | BSF_DYNAMIC;
7169           elf_data_symbol->section = elf_data_section;
7170         }
7171       /* This code used to do *secp = bfd_und_section_ptr if
7172          info->shared.  I don't know why, and that doesn't make sense,
7173          so I took it out.  */
7174       *secp = elf_tdata (abfd)->elf_data_section;
7175       break;
7176
7177     case SHN_MIPS_SUNDEFINED:
7178       *secp = bfd_und_section_ptr;
7179       break;
7180     }
7181
7182   if (SGI_COMPAT (abfd)
7183       && ! info->shared
7184       && info->output_bfd->xvec == abfd->xvec
7185       && strcmp (*namep, "__rld_obj_head") == 0)
7186     {
7187       struct elf_link_hash_entry *h;
7188       struct bfd_link_hash_entry *bh;
7189
7190       /* Mark __rld_obj_head as dynamic.  */
7191       bh = NULL;
7192       if (! (_bfd_generic_link_add_one_symbol
7193              (info, abfd, *namep, BSF_GLOBAL, *secp, *valp, NULL, FALSE,
7194               get_elf_backend_data (abfd)->collect, &bh)))
7195         return FALSE;
7196
7197       h = (struct elf_link_hash_entry *) bh;
7198       h->non_elf = 0;
7199       h->def_regular = 1;
7200       h->type = STT_OBJECT;
7201
7202       if (! bfd_elf_link_record_dynamic_symbol (info, h))
7203         return FALSE;
7204
7205       mips_elf_hash_table (info)->use_rld_obj_head = TRUE;
7206       mips_elf_hash_table (info)->rld_symbol = h;
7207     }
7208
7209   /* If this is a mips16 text symbol, add 1 to the value to make it
7210      odd.  This will cause something like .word SYM to come up with
7211      the right value when it is loaded into the PC.  */
7212   if (ELF_ST_IS_COMPRESSED (sym->st_other))
7213     ++*valp;
7214
7215   return TRUE;
7216 }
7217
7218 /* This hook function is called before the linker writes out a global
7219    symbol.  We mark symbols as small common if appropriate.  This is
7220    also where we undo the increment of the value for a mips16 symbol.  */
7221
7222 int
7223 _bfd_mips_elf_link_output_symbol_hook
7224   (struct bfd_link_info *info ATTRIBUTE_UNUSED,
7225    const char *name ATTRIBUTE_UNUSED, Elf_Internal_Sym *sym,
7226    asection *input_sec, struct elf_link_hash_entry *h ATTRIBUTE_UNUSED)
7227 {
7228   /* If we see a common symbol, which implies a relocatable link, then
7229      if a symbol was small common in an input file, mark it as small
7230      common in the output file.  */
7231   if (sym->st_shndx == SHN_COMMON
7232       && strcmp (input_sec->name, ".scommon") == 0)
7233     sym->st_shndx = SHN_MIPS_SCOMMON;
7234
7235   if (ELF_ST_IS_COMPRESSED (sym->st_other))
7236     sym->st_value &= ~1;
7237
7238   return 1;
7239 }
7240 \f
7241 /* Functions for the dynamic linker.  */
7242
7243 /* Create dynamic sections when linking against a dynamic object.  */
7244
7245 bfd_boolean
7246 _bfd_mips_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
7247 {
7248   struct elf_link_hash_entry *h;
7249   struct bfd_link_hash_entry *bh;
7250   flagword flags;
7251   register asection *s;
7252   const char * const *namep;
7253   struct mips_elf_link_hash_table *htab;
7254
7255   htab = mips_elf_hash_table (info);
7256   BFD_ASSERT (htab != NULL);
7257
7258   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
7259            | SEC_LINKER_CREATED | SEC_READONLY);
7260
7261   /* The psABI requires a read-only .dynamic section, but the VxWorks
7262      EABI doesn't.  */
7263   if (!htab->is_vxworks)
7264     {
7265       s = bfd_get_linker_section (abfd, ".dynamic");
7266       if (s != NULL)
7267         {
7268           if (! bfd_set_section_flags (abfd, s, flags))
7269             return FALSE;
7270         }
7271     }
7272
7273   /* We need to create .got section.  */
7274   if (!mips_elf_create_got_section (abfd, info))
7275     return FALSE;
7276
7277   if (! mips_elf_rel_dyn_section (info, TRUE))
7278     return FALSE;
7279
7280   /* Create .stub section.  */
7281   s = bfd_make_section_anyway_with_flags (abfd,
7282                                           MIPS_ELF_STUB_SECTION_NAME (abfd),
7283                                           flags | SEC_CODE);
7284   if (s == NULL
7285       || ! bfd_set_section_alignment (abfd, s,
7286                                       MIPS_ELF_LOG_FILE_ALIGN (abfd)))
7287     return FALSE;
7288   htab->sstubs = s;
7289
7290   if (!mips_elf_hash_table (info)->use_rld_obj_head
7291       && !info->shared
7292       && bfd_get_linker_section (abfd, ".rld_map") == NULL)
7293     {
7294       s = bfd_make_section_anyway_with_flags (abfd, ".rld_map",
7295                                               flags &~ (flagword) SEC_READONLY);
7296       if (s == NULL
7297           || ! bfd_set_section_alignment (abfd, s,
7298                                           MIPS_ELF_LOG_FILE_ALIGN (abfd)))
7299         return FALSE;
7300     }
7301
7302   /* On IRIX5, we adjust add some additional symbols and change the
7303      alignments of several sections.  There is no ABI documentation
7304      indicating that this is necessary on IRIX6, nor any evidence that
7305      the linker takes such action.  */
7306   if (IRIX_COMPAT (abfd) == ict_irix5)
7307     {
7308       for (namep = mips_elf_dynsym_rtproc_names; *namep != NULL; namep++)
7309         {
7310           bh = NULL;
7311           if (! (_bfd_generic_link_add_one_symbol
7312                  (info, abfd, *namep, BSF_GLOBAL, bfd_und_section_ptr, 0,
7313                   NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
7314             return FALSE;
7315
7316           h = (struct elf_link_hash_entry *) bh;
7317           h->non_elf = 0;
7318           h->def_regular = 1;
7319           h->type = STT_SECTION;
7320
7321           if (! bfd_elf_link_record_dynamic_symbol (info, h))
7322             return FALSE;
7323         }
7324
7325       /* We need to create a .compact_rel section.  */
7326       if (SGI_COMPAT (abfd))
7327         {
7328           if (!mips_elf_create_compact_rel_section (abfd, info))
7329             return FALSE;
7330         }
7331
7332       /* Change alignments of some sections.  */
7333       s = bfd_get_linker_section (abfd, ".hash");
7334       if (s != NULL)
7335         bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7336       s = bfd_get_linker_section (abfd, ".dynsym");
7337       if (s != NULL)
7338         bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7339       s = bfd_get_linker_section (abfd, ".dynstr");
7340       if (s != NULL)
7341         bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7342       /* ??? */
7343       s = bfd_get_section_by_name (abfd, ".reginfo");
7344       if (s != NULL)
7345         bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7346       s = bfd_get_linker_section (abfd, ".dynamic");
7347       if (s != NULL)
7348         bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7349     }
7350
7351   if (!info->shared)
7352     {
7353       const char *name;
7354
7355       name = SGI_COMPAT (abfd) ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING";
7356       bh = NULL;
7357       if (!(_bfd_generic_link_add_one_symbol
7358             (info, abfd, name, BSF_GLOBAL, bfd_abs_section_ptr, 0,
7359              NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
7360         return FALSE;
7361
7362       h = (struct elf_link_hash_entry *) bh;
7363       h->non_elf = 0;
7364       h->def_regular = 1;
7365       h->type = STT_SECTION;
7366
7367       if (! bfd_elf_link_record_dynamic_symbol (info, h))
7368         return FALSE;
7369
7370       if (! mips_elf_hash_table (info)->use_rld_obj_head)
7371         {
7372           /* __rld_map is a four byte word located in the .data section
7373              and is filled in by the rtld to contain a pointer to
7374              the _r_debug structure. Its symbol value will be set in
7375              _bfd_mips_elf_finish_dynamic_symbol.  */
7376           s = bfd_get_linker_section (abfd, ".rld_map");
7377           BFD_ASSERT (s != NULL);
7378
7379           name = SGI_COMPAT (abfd) ? "__rld_map" : "__RLD_MAP";
7380           bh = NULL;
7381           if (!(_bfd_generic_link_add_one_symbol
7382                 (info, abfd, name, BSF_GLOBAL, s, 0, NULL, FALSE,
7383                  get_elf_backend_data (abfd)->collect, &bh)))
7384             return FALSE;
7385
7386           h = (struct elf_link_hash_entry *) bh;
7387           h->non_elf = 0;
7388           h->def_regular = 1;
7389           h->type = STT_OBJECT;
7390
7391           if (! bfd_elf_link_record_dynamic_symbol (info, h))
7392             return FALSE;
7393           mips_elf_hash_table (info)->rld_symbol = h;
7394         }
7395     }
7396
7397   /* Create the .plt, .rel(a).plt, .dynbss and .rel(a).bss sections.
7398      Also create the _PROCEDURE_LINKAGE_TABLE symbol.  */
7399   if (!_bfd_elf_create_dynamic_sections (abfd, info))
7400     return FALSE;
7401
7402   /* Cache the sections created above.  */
7403   htab->splt = bfd_get_linker_section (abfd, ".plt");
7404   htab->sdynbss = bfd_get_linker_section (abfd, ".dynbss");
7405   if (htab->is_vxworks)
7406     {
7407       htab->srelbss = bfd_get_linker_section (abfd, ".rela.bss");
7408       htab->srelplt = bfd_get_linker_section (abfd, ".rela.plt");
7409     }
7410   else
7411     htab->srelplt = bfd_get_linker_section (abfd, ".rel.plt");
7412   if (!htab->sdynbss
7413       || (htab->is_vxworks && !htab->srelbss && !info->shared)
7414       || !htab->srelplt
7415       || !htab->splt)
7416     abort ();
7417
7418   if (htab->is_vxworks)
7419     {
7420       /* Do the usual VxWorks handling.  */
7421       if (!elf_vxworks_create_dynamic_sections (abfd, info, &htab->srelplt2))
7422         return FALSE;
7423
7424       /* Work out the PLT sizes.  */
7425       if (info->shared)
7426         {
7427           htab->plt_header_size
7428             = 4 * ARRAY_SIZE (mips_vxworks_shared_plt0_entry);
7429           htab->plt_entry_size
7430             = 4 * ARRAY_SIZE (mips_vxworks_shared_plt_entry);
7431         }
7432       else
7433         {
7434           htab->plt_header_size
7435             = 4 * ARRAY_SIZE (mips_vxworks_exec_plt0_entry);
7436           htab->plt_entry_size
7437             = 4 * ARRAY_SIZE (mips_vxworks_exec_plt_entry);
7438         }
7439     }
7440   else if (!info->shared)
7441     {
7442       /* All variants of the plt0 entry are the same size.  */
7443       htab->plt_header_size = 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry);
7444       htab->plt_entry_size = 4 * ARRAY_SIZE (mips_exec_plt_entry);
7445     }
7446
7447   return TRUE;
7448 }
7449 \f
7450 /* Return true if relocation REL against section SEC is a REL rather than
7451    RELA relocation.  RELOCS is the first relocation in the section and
7452    ABFD is the bfd that contains SEC.  */
7453
7454 static bfd_boolean
7455 mips_elf_rel_relocation_p (bfd *abfd, asection *sec,
7456                            const Elf_Internal_Rela *relocs,
7457                            const Elf_Internal_Rela *rel)
7458 {
7459   Elf_Internal_Shdr *rel_hdr;
7460   const struct elf_backend_data *bed;
7461
7462   /* To determine which flavor of relocation this is, we depend on the
7463      fact that the INPUT_SECTION's REL_HDR is read before RELA_HDR.  */
7464   rel_hdr = elf_section_data (sec)->rel.hdr;
7465   if (rel_hdr == NULL)
7466     return FALSE;
7467   bed = get_elf_backend_data (abfd);
7468   return ((size_t) (rel - relocs)
7469           < NUM_SHDR_ENTRIES (rel_hdr) * bed->s->int_rels_per_ext_rel);
7470 }
7471
7472 /* Read the addend for REL relocation REL, which belongs to bfd ABFD.
7473    HOWTO is the relocation's howto and CONTENTS points to the contents
7474    of the section that REL is against.  */
7475
7476 static bfd_vma
7477 mips_elf_read_rel_addend (bfd *abfd, const Elf_Internal_Rela *rel,
7478                           reloc_howto_type *howto, bfd_byte *contents)
7479 {
7480   bfd_byte *location;
7481   unsigned int r_type;
7482   bfd_vma addend;
7483
7484   r_type = ELF_R_TYPE (abfd, rel->r_info);
7485   location = contents + rel->r_offset;
7486
7487   /* Get the addend, which is stored in the input file.  */
7488   _bfd_mips_elf_reloc_unshuffle (abfd, r_type, FALSE, location);
7489   addend = mips_elf_obtain_contents (howto, rel, abfd, contents);
7490   _bfd_mips_elf_reloc_shuffle (abfd, r_type, FALSE, location);
7491
7492   return addend & howto->src_mask;
7493 }
7494
7495 /* REL is a relocation in ABFD that needs a partnering LO16 relocation
7496    and *ADDEND is the addend for REL itself.  Look for the LO16 relocation
7497    and update *ADDEND with the final addend.  Return true on success
7498    or false if the LO16 could not be found.  RELEND is the exclusive
7499    upper bound on the relocations for REL's section.  */
7500
7501 static bfd_boolean
7502 mips_elf_add_lo16_rel_addend (bfd *abfd,
7503                               const Elf_Internal_Rela *rel,
7504                               const Elf_Internal_Rela *relend,
7505                               bfd_byte *contents, bfd_vma *addend)
7506 {
7507   unsigned int r_type, lo16_type;
7508   const Elf_Internal_Rela *lo16_relocation;
7509   reloc_howto_type *lo16_howto;
7510   bfd_vma l;
7511
7512   r_type = ELF_R_TYPE (abfd, rel->r_info);
7513   if (mips16_reloc_p (r_type))
7514     lo16_type = R_MIPS16_LO16;
7515   else if (micromips_reloc_p (r_type))
7516     lo16_type = R_MICROMIPS_LO16;
7517   else
7518     lo16_type = R_MIPS_LO16;
7519
7520   /* The combined value is the sum of the HI16 addend, left-shifted by
7521      sixteen bits, and the LO16 addend, sign extended.  (Usually, the
7522      code does a `lui' of the HI16 value, and then an `addiu' of the
7523      LO16 value.)
7524
7525      Scan ahead to find a matching LO16 relocation.
7526
7527      According to the MIPS ELF ABI, the R_MIPS_LO16 relocation must
7528      be immediately following.  However, for the IRIX6 ABI, the next
7529      relocation may be a composed relocation consisting of several
7530      relocations for the same address.  In that case, the R_MIPS_LO16
7531      relocation may occur as one of these.  We permit a similar
7532      extension in general, as that is useful for GCC.
7533
7534      In some cases GCC dead code elimination removes the LO16 but keeps
7535      the corresponding HI16.  This is strictly speaking a violation of
7536      the ABI but not immediately harmful.  */
7537   lo16_relocation = mips_elf_next_relocation (abfd, lo16_type, rel, relend);
7538   if (lo16_relocation == NULL)
7539     return FALSE;
7540
7541   /* Obtain the addend kept there.  */
7542   lo16_howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, lo16_type, FALSE);
7543   l = mips_elf_read_rel_addend (abfd, lo16_relocation, lo16_howto, contents);
7544
7545   l <<= lo16_howto->rightshift;
7546   l = _bfd_mips_elf_sign_extend (l, 16);
7547
7548   *addend <<= 16;
7549   *addend += l;
7550   return TRUE;
7551 }
7552
7553 /* Try to read the contents of section SEC in bfd ABFD.  Return true and
7554    store the contents in *CONTENTS on success.  Assume that *CONTENTS
7555    already holds the contents if it is nonull on entry.  */
7556
7557 static bfd_boolean
7558 mips_elf_get_section_contents (bfd *abfd, asection *sec, bfd_byte **contents)
7559 {
7560   if (*contents)
7561     return TRUE;
7562
7563   /* Get cached copy if it exists.  */
7564   if (elf_section_data (sec)->this_hdr.contents != NULL)
7565     {
7566       *contents = elf_section_data (sec)->this_hdr.contents;
7567       return TRUE;
7568     }
7569
7570   return bfd_malloc_and_get_section (abfd, sec, contents);
7571 }
7572
7573 /* Look through the relocs for a section during the first phase, and
7574    allocate space in the global offset table.  */
7575
7576 bfd_boolean
7577 _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
7578                             asection *sec, const Elf_Internal_Rela *relocs)
7579 {
7580   const char *name;
7581   bfd *dynobj;
7582   Elf_Internal_Shdr *symtab_hdr;
7583   struct elf_link_hash_entry **sym_hashes;
7584   size_t extsymoff;
7585   const Elf_Internal_Rela *rel;
7586   const Elf_Internal_Rela *rel_end;
7587   asection *sreloc;
7588   const struct elf_backend_data *bed;
7589   struct mips_elf_link_hash_table *htab;
7590   bfd_byte *contents;
7591   bfd_vma addend;
7592   reloc_howto_type *howto;
7593
7594   if (info->relocatable)
7595     return TRUE;
7596
7597   htab = mips_elf_hash_table (info);
7598   BFD_ASSERT (htab != NULL);
7599
7600   dynobj = elf_hash_table (info)->dynobj;
7601   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
7602   sym_hashes = elf_sym_hashes (abfd);
7603   extsymoff = (elf_bad_symtab (abfd)) ? 0 : symtab_hdr->sh_info;
7604
7605   bed = get_elf_backend_data (abfd);
7606   rel_end = relocs + sec->reloc_count * bed->s->int_rels_per_ext_rel;
7607
7608   /* Check for the mips16 stub sections.  */
7609
7610   name = bfd_get_section_name (abfd, sec);
7611   if (FN_STUB_P (name))
7612     {
7613       unsigned long r_symndx;
7614
7615       /* Look at the relocation information to figure out which symbol
7616          this is for.  */
7617
7618       r_symndx = mips16_stub_symndx (bed, sec, relocs, rel_end);
7619       if (r_symndx == 0)
7620         {
7621           (*_bfd_error_handler)
7622             (_("%B: Warning: cannot determine the target function for"
7623                " stub section `%s'"),
7624              abfd, name);
7625           bfd_set_error (bfd_error_bad_value);
7626           return FALSE;
7627         }
7628
7629       if (r_symndx < extsymoff
7630           || sym_hashes[r_symndx - extsymoff] == NULL)
7631         {
7632           asection *o;
7633
7634           /* This stub is for a local symbol.  This stub will only be
7635              needed if there is some relocation in this BFD, other
7636              than a 16 bit function call, which refers to this symbol.  */
7637           for (o = abfd->sections; o != NULL; o = o->next)
7638             {
7639               Elf_Internal_Rela *sec_relocs;
7640               const Elf_Internal_Rela *r, *rend;
7641
7642               /* We can ignore stub sections when looking for relocs.  */
7643               if ((o->flags & SEC_RELOC) == 0
7644                   || o->reloc_count == 0
7645                   || section_allows_mips16_refs_p (o))
7646                 continue;
7647
7648               sec_relocs
7649                 = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
7650                                              info->keep_memory);
7651               if (sec_relocs == NULL)
7652                 return FALSE;
7653
7654               rend = sec_relocs + o->reloc_count;
7655               for (r = sec_relocs; r < rend; r++)
7656                 if (ELF_R_SYM (abfd, r->r_info) == r_symndx
7657                     && !mips16_call_reloc_p (ELF_R_TYPE (abfd, r->r_info)))
7658                   break;
7659
7660               if (elf_section_data (o)->relocs != sec_relocs)
7661                 free (sec_relocs);
7662
7663               if (r < rend)
7664                 break;
7665             }
7666
7667           if (o == NULL)
7668             {
7669               /* There is no non-call reloc for this stub, so we do
7670                  not need it.  Since this function is called before
7671                  the linker maps input sections to output sections, we
7672                  can easily discard it by setting the SEC_EXCLUDE
7673                  flag.  */
7674               sec->flags |= SEC_EXCLUDE;
7675               return TRUE;
7676             }
7677
7678           /* Record this stub in an array of local symbol stubs for
7679              this BFD.  */
7680           if (elf_tdata (abfd)->local_stubs == NULL)
7681             {
7682               unsigned long symcount;
7683               asection **n;
7684               bfd_size_type amt;
7685
7686               if (elf_bad_symtab (abfd))
7687                 symcount = NUM_SHDR_ENTRIES (symtab_hdr);
7688               else
7689                 symcount = symtab_hdr->sh_info;
7690               amt = symcount * sizeof (asection *);
7691               n = bfd_zalloc (abfd, amt);
7692               if (n == NULL)
7693                 return FALSE;
7694               elf_tdata (abfd)->local_stubs = n;
7695             }
7696
7697           sec->flags |= SEC_KEEP;
7698           elf_tdata (abfd)->local_stubs[r_symndx] = sec;
7699
7700           /* We don't need to set mips16_stubs_seen in this case.
7701              That flag is used to see whether we need to look through
7702              the global symbol table for stubs.  We don't need to set
7703              it here, because we just have a local stub.  */
7704         }
7705       else
7706         {
7707           struct mips_elf_link_hash_entry *h;
7708
7709           h = ((struct mips_elf_link_hash_entry *)
7710                sym_hashes[r_symndx - extsymoff]);
7711
7712           while (h->root.root.type == bfd_link_hash_indirect
7713                  || h->root.root.type == bfd_link_hash_warning)
7714             h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
7715
7716           /* H is the symbol this stub is for.  */
7717
7718           /* If we already have an appropriate stub for this function, we
7719              don't need another one, so we can discard this one.  Since
7720              this function is called before the linker maps input sections
7721              to output sections, we can easily discard it by setting the
7722              SEC_EXCLUDE flag.  */
7723           if (h->fn_stub != NULL)
7724             {
7725               sec->flags |= SEC_EXCLUDE;
7726               return TRUE;
7727             }
7728
7729           sec->flags |= SEC_KEEP;
7730           h->fn_stub = sec;
7731           mips_elf_hash_table (info)->mips16_stubs_seen = TRUE;
7732         }
7733     }
7734   else if (CALL_STUB_P (name) || CALL_FP_STUB_P (name))
7735     {
7736       unsigned long r_symndx;
7737       struct mips_elf_link_hash_entry *h;
7738       asection **loc;
7739
7740       /* Look at the relocation information to figure out which symbol
7741          this is for.  */
7742
7743       r_symndx = mips16_stub_symndx (bed, sec, relocs, rel_end);
7744       if (r_symndx == 0)
7745         {
7746           (*_bfd_error_handler)
7747             (_("%B: Warning: cannot determine the target function for"
7748                " stub section `%s'"),
7749              abfd, name);
7750           bfd_set_error (bfd_error_bad_value);
7751           return FALSE;
7752         }
7753
7754       if (r_symndx < extsymoff
7755           || sym_hashes[r_symndx - extsymoff] == NULL)
7756         {
7757           asection *o;
7758
7759           /* This stub is for a local symbol.  This stub will only be
7760              needed if there is some relocation (R_MIPS16_26) in this BFD
7761              that refers to this symbol.  */
7762           for (o = abfd->sections; o != NULL; o = o->next)
7763             {
7764               Elf_Internal_Rela *sec_relocs;
7765               const Elf_Internal_Rela *r, *rend;
7766
7767               /* We can ignore stub sections when looking for relocs.  */
7768               if ((o->flags & SEC_RELOC) == 0
7769                   || o->reloc_count == 0
7770                   || section_allows_mips16_refs_p (o))
7771                 continue;
7772
7773               sec_relocs
7774                 = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
7775                                              info->keep_memory);
7776               if (sec_relocs == NULL)
7777                 return FALSE;
7778
7779               rend = sec_relocs + o->reloc_count;
7780               for (r = sec_relocs; r < rend; r++)
7781                 if (ELF_R_SYM (abfd, r->r_info) == r_symndx
7782                     && ELF_R_TYPE (abfd, r->r_info) == R_MIPS16_26)
7783                     break;
7784
7785               if (elf_section_data (o)->relocs != sec_relocs)
7786                 free (sec_relocs);
7787
7788               if (r < rend)
7789                 break;
7790             }
7791
7792           if (o == NULL)
7793             {
7794               /* There is no non-call reloc for this stub, so we do
7795                  not need it.  Since this function is called before
7796                  the linker maps input sections to output sections, we
7797                  can easily discard it by setting the SEC_EXCLUDE
7798                  flag.  */
7799               sec->flags |= SEC_EXCLUDE;
7800               return TRUE;
7801             }
7802
7803           /* Record this stub in an array of local symbol call_stubs for
7804              this BFD.  */
7805           if (elf_tdata (abfd)->local_call_stubs == NULL)
7806             {
7807               unsigned long symcount;
7808               asection **n;
7809               bfd_size_type amt;
7810
7811               if (elf_bad_symtab (abfd))
7812                 symcount = NUM_SHDR_ENTRIES (symtab_hdr);
7813               else
7814                 symcount = symtab_hdr->sh_info;
7815               amt = symcount * sizeof (asection *);
7816               n = bfd_zalloc (abfd, amt);
7817               if (n == NULL)
7818                 return FALSE;
7819               elf_tdata (abfd)->local_call_stubs = n;
7820             }
7821
7822           sec->flags |= SEC_KEEP;
7823           elf_tdata (abfd)->local_call_stubs[r_symndx] = sec;
7824
7825           /* We don't need to set mips16_stubs_seen in this case.
7826              That flag is used to see whether we need to look through
7827              the global symbol table for stubs.  We don't need to set
7828              it here, because we just have a local stub.  */
7829         }
7830       else
7831         {
7832           h = ((struct mips_elf_link_hash_entry *)
7833                sym_hashes[r_symndx - extsymoff]);
7834
7835           /* H is the symbol this stub is for.  */
7836
7837           if (CALL_FP_STUB_P (name))
7838             loc = &h->call_fp_stub;
7839           else
7840             loc = &h->call_stub;
7841
7842           /* If we already have an appropriate stub for this function, we
7843              don't need another one, so we can discard this one.  Since
7844              this function is called before the linker maps input sections
7845              to output sections, we can easily discard it by setting the
7846              SEC_EXCLUDE flag.  */
7847           if (*loc != NULL)
7848             {
7849               sec->flags |= SEC_EXCLUDE;
7850               return TRUE;
7851             }
7852
7853           sec->flags |= SEC_KEEP;
7854           *loc = sec;
7855           mips_elf_hash_table (info)->mips16_stubs_seen = TRUE;
7856         }
7857     }
7858
7859   sreloc = NULL;
7860   contents = NULL;
7861   for (rel = relocs; rel < rel_end; ++rel)
7862     {
7863       unsigned long r_symndx;
7864       unsigned int r_type;
7865       struct elf_link_hash_entry *h;
7866       bfd_boolean can_make_dynamic_p;
7867
7868       r_symndx = ELF_R_SYM (abfd, rel->r_info);
7869       r_type = ELF_R_TYPE (abfd, rel->r_info);
7870
7871       if (r_symndx < extsymoff)
7872         h = NULL;
7873       else if (r_symndx >= extsymoff + NUM_SHDR_ENTRIES (symtab_hdr))
7874         {
7875           (*_bfd_error_handler)
7876             (_("%B: Malformed reloc detected for section %s"),
7877              abfd, name);
7878           bfd_set_error (bfd_error_bad_value);
7879           return FALSE;
7880         }
7881       else
7882         {
7883           h = sym_hashes[r_symndx - extsymoff];
7884           while (h != NULL
7885                  && (h->root.type == bfd_link_hash_indirect
7886                      || h->root.type == bfd_link_hash_warning))
7887             h = (struct elf_link_hash_entry *) h->root.u.i.link;
7888         }
7889
7890       /* Set CAN_MAKE_DYNAMIC_P to true if we can convert this
7891          relocation into a dynamic one.  */
7892       can_make_dynamic_p = FALSE;
7893       switch (r_type)
7894         {
7895         case R_MIPS_GOT16:
7896         case R_MIPS_CALL16:
7897         case R_MIPS_CALL_HI16:
7898         case R_MIPS_CALL_LO16:
7899         case R_MIPS_GOT_HI16:
7900         case R_MIPS_GOT_LO16:
7901         case R_MIPS_GOT_PAGE:
7902         case R_MIPS_GOT_OFST:
7903         case R_MIPS_GOT_DISP:
7904         case R_MIPS_TLS_GOTTPREL:
7905         case R_MIPS_TLS_GD:
7906         case R_MIPS_TLS_LDM:
7907         case R_MIPS16_GOT16:
7908         case R_MIPS16_CALL16:
7909         case R_MIPS16_TLS_GOTTPREL:
7910         case R_MIPS16_TLS_GD:
7911         case R_MIPS16_TLS_LDM:
7912         case R_MICROMIPS_GOT16:
7913         case R_MICROMIPS_CALL16:
7914         case R_MICROMIPS_CALL_HI16:
7915         case R_MICROMIPS_CALL_LO16:
7916         case R_MICROMIPS_GOT_HI16:
7917         case R_MICROMIPS_GOT_LO16:
7918         case R_MICROMIPS_GOT_PAGE:
7919         case R_MICROMIPS_GOT_OFST:
7920         case R_MICROMIPS_GOT_DISP:
7921         case R_MICROMIPS_TLS_GOTTPREL:
7922         case R_MICROMIPS_TLS_GD:
7923         case R_MICROMIPS_TLS_LDM:
7924           if (dynobj == NULL)
7925             elf_hash_table (info)->dynobj = dynobj = abfd;
7926           if (!mips_elf_create_got_section (dynobj, info))
7927             return FALSE;
7928           if (htab->is_vxworks && !info->shared)
7929             {
7930               (*_bfd_error_handler)
7931                 (_("%B: GOT reloc at 0x%lx not expected in executables"),
7932                  abfd, (unsigned long) rel->r_offset);
7933               bfd_set_error (bfd_error_bad_value);
7934               return FALSE;
7935             }
7936           break;
7937
7938           /* This is just a hint; it can safely be ignored.  Don't set
7939              has_static_relocs for the corresponding symbol.  */
7940         case R_MIPS_JALR:
7941         case R_MICROMIPS_JALR:
7942           break;
7943
7944         case R_MIPS_32:
7945         case R_MIPS_REL32:
7946         case R_MIPS_64:
7947           /* In VxWorks executables, references to external symbols
7948              must be handled using copy relocs or PLT entries; it is not
7949              possible to convert this relocation into a dynamic one.
7950
7951              For executables that use PLTs and copy-relocs, we have a
7952              choice between converting the relocation into a dynamic
7953              one or using copy relocations or PLT entries.  It is
7954              usually better to do the former, unless the relocation is
7955              against a read-only section.  */
7956           if ((info->shared
7957                || (h != NULL
7958                    && !htab->is_vxworks
7959                    && strcmp (h->root.root.string, "__gnu_local_gp") != 0
7960                    && !(!info->nocopyreloc
7961                         && !PIC_OBJECT_P (abfd)
7962                         && MIPS_ELF_READONLY_SECTION (sec))))
7963               && (sec->flags & SEC_ALLOC) != 0)
7964             {
7965               can_make_dynamic_p = TRUE;
7966               if (dynobj == NULL)
7967                 elf_hash_table (info)->dynobj = dynobj = abfd;
7968               break;
7969             }
7970           /* For sections that are not SEC_ALLOC a copy reloc would be
7971              output if possible (implying questionable semantics for
7972              read-only data objects) or otherwise the final link would
7973              fail as ld.so will not process them and could not therefore
7974              handle any outstanding dynamic relocations.
7975
7976              For such sections that are also SEC_DEBUGGING, we can avoid
7977              these problems by simply ignoring any relocs as these
7978              sections have a predefined use and we know it is safe to do
7979              so.
7980
7981              This is needed in cases such as a global symbol definition
7982              in a shared library causing a common symbol from an object
7983              file to be converted to an undefined reference.  If that
7984              happens, then all the relocations against this symbol from
7985              SEC_DEBUGGING sections in the object file will resolve to
7986              nil.  */
7987           if ((sec->flags & SEC_DEBUGGING) != 0)
7988             break;
7989           /* Fall through.  */
7990
7991         default:
7992           /* Most static relocations require pointer equality, except
7993              for branches.  */
7994           if (h)
7995             h->pointer_equality_needed = TRUE;
7996           /* Fall through.  */
7997
7998         case R_MIPS_26:
7999         case R_MIPS_PC16:
8000         case R_MIPS16_26:
8001         case R_MICROMIPS_26_S1:
8002         case R_MICROMIPS_PC7_S1:
8003         case R_MICROMIPS_PC10_S1:
8004         case R_MICROMIPS_PC16_S1:
8005         case R_MICROMIPS_PC23_S2:
8006           if (h)
8007             ((struct mips_elf_link_hash_entry *) h)->has_static_relocs = TRUE;
8008           break;
8009         }
8010
8011       if (h)
8012         {
8013           /* Relocations against the special VxWorks __GOTT_BASE__ and
8014              __GOTT_INDEX__ symbols must be left to the loader.  Allocate
8015              room for them in .rela.dyn.  */
8016           if (is_gott_symbol (info, h))
8017             {
8018               if (sreloc == NULL)
8019                 {
8020                   sreloc = mips_elf_rel_dyn_section (info, TRUE);
8021                   if (sreloc == NULL)
8022                     return FALSE;
8023                 }
8024               mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
8025               if (MIPS_ELF_READONLY_SECTION (sec))
8026                 /* We tell the dynamic linker that there are
8027                    relocations against the text segment.  */
8028                 info->flags |= DF_TEXTREL;
8029             }
8030         }
8031       else if (call_lo16_reloc_p (r_type)
8032                || got_lo16_reloc_p (r_type)
8033                || got_disp_reloc_p (r_type)
8034                || (got16_reloc_p (r_type) && htab->is_vxworks))
8035         {
8036           /* We may need a local GOT entry for this relocation.  We
8037              don't count R_MIPS_GOT_PAGE because we can estimate the
8038              maximum number of pages needed by looking at the size of
8039              the segment.  Similar comments apply to R_MIPS*_GOT16 and
8040              R_MIPS*_CALL16, except on VxWorks, where GOT relocations
8041              always evaluate to "G".  We don't count R_MIPS_GOT_HI16, or
8042              R_MIPS_CALL_HI16 because these are always followed by an
8043              R_MIPS_GOT_LO16 or R_MIPS_CALL_LO16.  */
8044           if (!mips_elf_record_local_got_symbol (abfd, r_symndx,
8045                                                  rel->r_addend, info, 0))
8046             return FALSE;
8047         }
8048
8049       if (h != NULL
8050           && mips_elf_relocation_needs_la25_stub (abfd, r_type,
8051                                                   ELF_ST_IS_MIPS16 (h->other)))
8052         ((struct mips_elf_link_hash_entry *) h)->has_nonpic_branches = TRUE;
8053
8054       switch (r_type)
8055         {
8056         case R_MIPS_CALL16:
8057         case R_MIPS16_CALL16:
8058         case R_MICROMIPS_CALL16:
8059           if (h == NULL)
8060             {
8061               (*_bfd_error_handler)
8062                 (_("%B: CALL16 reloc at 0x%lx not against global symbol"),
8063                  abfd, (unsigned long) rel->r_offset);
8064               bfd_set_error (bfd_error_bad_value);
8065               return FALSE;
8066             }
8067           /* Fall through.  */
8068
8069         case R_MIPS_CALL_HI16:
8070         case R_MIPS_CALL_LO16:
8071         case R_MICROMIPS_CALL_HI16:
8072         case R_MICROMIPS_CALL_LO16:
8073           if (h != NULL)
8074             {
8075               /* Make sure there is room in the regular GOT to hold the
8076                  function's address.  We may eliminate it in favour of
8077                  a .got.plt entry later; see mips_elf_count_got_symbols.  */
8078               if (!mips_elf_record_global_got_symbol (h, abfd, info, TRUE, 0))
8079                 return FALSE;
8080
8081               /* We need a stub, not a plt entry for the undefined
8082                  function.  But we record it as if it needs plt.  See
8083                  _bfd_elf_adjust_dynamic_symbol.  */
8084               h->needs_plt = 1;
8085               h->type = STT_FUNC;
8086             }
8087           break;
8088
8089         case R_MIPS_GOT_PAGE:
8090         case R_MICROMIPS_GOT_PAGE:
8091           /* If this is a global, overridable symbol, GOT_PAGE will
8092              decay to GOT_DISP, so we'll need a GOT entry for it.  */
8093           if (h)
8094             {
8095               struct mips_elf_link_hash_entry *hmips =
8096                 (struct mips_elf_link_hash_entry *) h;
8097
8098               /* This symbol is definitely not overridable.  */
8099               if (hmips->root.def_regular
8100                   && ! (info->shared && ! info->symbolic
8101                         && ! hmips->root.forced_local))
8102                 h = NULL;
8103             }
8104           /* Fall through.  */
8105
8106         case R_MIPS16_GOT16:
8107         case R_MIPS_GOT16:
8108         case R_MIPS_GOT_HI16:
8109         case R_MIPS_GOT_LO16:
8110         case R_MICROMIPS_GOT16:
8111         case R_MICROMIPS_GOT_HI16:
8112         case R_MICROMIPS_GOT_LO16:
8113           if (!h || got_page_reloc_p (r_type))
8114             {
8115               /* This relocation needs (or may need, if h != NULL) a
8116                  page entry in the GOT.  For R_MIPS_GOT_PAGE we do not
8117                  know for sure until we know whether the symbol is
8118                  preemptible.  */
8119               if (mips_elf_rel_relocation_p (abfd, sec, relocs, rel))
8120                 {
8121                   if (!mips_elf_get_section_contents (abfd, sec, &contents))
8122                     return FALSE;
8123                   howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, FALSE);
8124                   addend = mips_elf_read_rel_addend (abfd, rel,
8125                                                      howto, contents);
8126                   if (got16_reloc_p (r_type))
8127                     mips_elf_add_lo16_rel_addend (abfd, rel, rel_end,
8128                                                   contents, &addend);
8129                   else
8130                     addend <<= howto->rightshift;
8131                 }
8132               else
8133                 addend = rel->r_addend;
8134               if (!mips_elf_record_got_page_entry (info, abfd, r_symndx,
8135                                                    addend))
8136                 return FALSE;
8137             }
8138           /* Fall through.  */
8139
8140         case R_MIPS_GOT_DISP:
8141         case R_MICROMIPS_GOT_DISP:
8142           if (h && !mips_elf_record_global_got_symbol (h, abfd, info,
8143                                                        FALSE, 0))
8144             return FALSE;
8145           break;
8146
8147         case R_MIPS_TLS_GOTTPREL:
8148         case R_MIPS16_TLS_GOTTPREL:
8149         case R_MICROMIPS_TLS_GOTTPREL:
8150           if (info->shared)
8151             info->flags |= DF_STATIC_TLS;
8152           /* Fall through */
8153
8154         case R_MIPS_TLS_LDM:
8155         case R_MIPS16_TLS_LDM:
8156         case R_MICROMIPS_TLS_LDM:
8157           if (tls_ldm_reloc_p (r_type))
8158             {
8159               r_symndx = STN_UNDEF;
8160               h = NULL;
8161             }
8162           /* Fall through */
8163
8164         case R_MIPS_TLS_GD:
8165         case R_MIPS16_TLS_GD:
8166         case R_MICROMIPS_TLS_GD:
8167           /* This symbol requires a global offset table entry, or two
8168              for TLS GD relocations.  */
8169           {
8170             unsigned char flag;
8171
8172             flag = (tls_gd_reloc_p (r_type)
8173                     ? GOT_TLS_GD
8174                     : tls_ldm_reloc_p (r_type) ? GOT_TLS_LDM : GOT_TLS_IE);
8175             if (h != NULL)
8176               {
8177                 struct mips_elf_link_hash_entry *hmips =
8178                   (struct mips_elf_link_hash_entry *) h;
8179                 hmips->tls_type |= flag;
8180
8181                 if (h && !mips_elf_record_global_got_symbol (h, abfd, info,
8182                                                              FALSE, flag))
8183                   return FALSE;
8184               }
8185             else
8186               {
8187                 BFD_ASSERT (flag == GOT_TLS_LDM || r_symndx != STN_UNDEF);
8188
8189                 if (!mips_elf_record_local_got_symbol (abfd, r_symndx,
8190                                                        rel->r_addend,
8191                                                        info, flag))
8192                   return FALSE;
8193               }
8194           }
8195           break;
8196
8197         case R_MIPS_32:
8198         case R_MIPS_REL32:
8199         case R_MIPS_64:
8200           /* In VxWorks executables, references to external symbols
8201              are handled using copy relocs or PLT stubs, so there's
8202              no need to add a .rela.dyn entry for this relocation.  */
8203           if (can_make_dynamic_p)
8204             {
8205               if (sreloc == NULL)
8206                 {
8207                   sreloc = mips_elf_rel_dyn_section (info, TRUE);
8208                   if (sreloc == NULL)
8209                     return FALSE;
8210                 }
8211               if (info->shared && h == NULL)
8212                 {
8213                   /* When creating a shared object, we must copy these
8214                      reloc types into the output file as R_MIPS_REL32
8215                      relocs.  Make room for this reloc in .rel(a).dyn.  */
8216                   mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
8217                   if (MIPS_ELF_READONLY_SECTION (sec))
8218                     /* We tell the dynamic linker that there are
8219                        relocations against the text segment.  */
8220                     info->flags |= DF_TEXTREL;
8221                 }
8222               else
8223                 {
8224                   struct mips_elf_link_hash_entry *hmips;
8225
8226                   /* For a shared object, we must copy this relocation
8227                      unless the symbol turns out to be undefined and
8228                      weak with non-default visibility, in which case
8229                      it will be left as zero.
8230
8231                      We could elide R_MIPS_REL32 for locally binding symbols
8232                      in shared libraries, but do not yet do so.
8233
8234                      For an executable, we only need to copy this
8235                      reloc if the symbol is defined in a dynamic
8236                      object.  */
8237                   hmips = (struct mips_elf_link_hash_entry *) h;
8238                   ++hmips->possibly_dynamic_relocs;
8239                   if (MIPS_ELF_READONLY_SECTION (sec))
8240                     /* We need it to tell the dynamic linker if there
8241                        are relocations against the text segment.  */
8242                     hmips->readonly_reloc = TRUE;
8243                 }
8244             }
8245
8246           if (SGI_COMPAT (abfd))
8247             mips_elf_hash_table (info)->compact_rel_size +=
8248               sizeof (Elf32_External_crinfo);
8249           break;
8250
8251         case R_MIPS_26:
8252         case R_MIPS_GPREL16:
8253         case R_MIPS_LITERAL:
8254         case R_MIPS_GPREL32:
8255         case R_MICROMIPS_26_S1:
8256         case R_MICROMIPS_GPREL16:
8257         case R_MICROMIPS_LITERAL:
8258         case R_MICROMIPS_GPREL7_S2:
8259           if (SGI_COMPAT (abfd))
8260             mips_elf_hash_table (info)->compact_rel_size +=
8261               sizeof (Elf32_External_crinfo);
8262           break;
8263
8264           /* This relocation describes the C++ object vtable hierarchy.
8265              Reconstruct it for later use during GC.  */
8266         case R_MIPS_GNU_VTINHERIT:
8267           if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
8268             return FALSE;
8269           break;
8270
8271           /* This relocation describes which C++ vtable entries are actually
8272              used.  Record for later use during GC.  */
8273         case R_MIPS_GNU_VTENTRY:
8274           BFD_ASSERT (h != NULL);
8275           if (h != NULL
8276               && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset))
8277             return FALSE;
8278           break;
8279
8280         default:
8281           break;
8282         }
8283
8284       /* We must not create a stub for a symbol that has relocations
8285          related to taking the function's address.  This doesn't apply to
8286          VxWorks, where CALL relocs refer to a .got.plt entry instead of
8287          a normal .got entry.  */
8288       if (!htab->is_vxworks && h != NULL)
8289         switch (r_type)
8290           {
8291           default:
8292             ((struct mips_elf_link_hash_entry *) h)->no_fn_stub = TRUE;
8293             break;
8294           case R_MIPS16_CALL16:
8295           case R_MIPS_CALL16:
8296           case R_MIPS_CALL_HI16:
8297           case R_MIPS_CALL_LO16:
8298           case R_MIPS_JALR:
8299           case R_MICROMIPS_CALL16:
8300           case R_MICROMIPS_CALL_HI16:
8301           case R_MICROMIPS_CALL_LO16:
8302           case R_MICROMIPS_JALR:
8303             break;
8304           }
8305
8306       /* See if this reloc would need to refer to a MIPS16 hard-float stub,
8307          if there is one.  We only need to handle global symbols here;
8308          we decide whether to keep or delete stubs for local symbols
8309          when processing the stub's relocations.  */
8310       if (h != NULL
8311           && !mips16_call_reloc_p (r_type)
8312           && !section_allows_mips16_refs_p (sec))
8313         {
8314           struct mips_elf_link_hash_entry *mh;
8315
8316           mh = (struct mips_elf_link_hash_entry *) h;
8317           mh->need_fn_stub = TRUE;
8318         }
8319
8320       /* Refuse some position-dependent relocations when creating a
8321          shared library.  Do not refuse R_MIPS_32 / R_MIPS_64; they're
8322          not PIC, but we can create dynamic relocations and the result
8323          will be fine.  Also do not refuse R_MIPS_LO16, which can be
8324          combined with R_MIPS_GOT16.  */
8325       if (info->shared)
8326         {
8327           switch (r_type)
8328             {
8329             case R_MIPS16_HI16:
8330             case R_MIPS_HI16:
8331             case R_MIPS_HIGHER:
8332             case R_MIPS_HIGHEST:
8333             case R_MICROMIPS_HI16:
8334             case R_MICROMIPS_HIGHER:
8335             case R_MICROMIPS_HIGHEST:
8336               /* Don't refuse a high part relocation if it's against
8337                  no symbol (e.g. part of a compound relocation).  */
8338               if (r_symndx == STN_UNDEF)
8339                 break;
8340
8341               /* R_MIPS_HI16 against _gp_disp is used for $gp setup,
8342                  and has a special meaning.  */
8343               if (!NEWABI_P (abfd) && h != NULL
8344                   && strcmp (h->root.root.string, "_gp_disp") == 0)
8345                 break;
8346
8347               /* Likewise __GOTT_BASE__ and __GOTT_INDEX__ on VxWorks.  */
8348               if (is_gott_symbol (info, h))
8349                 break;
8350
8351               /* FALLTHROUGH */
8352
8353             case R_MIPS16_26:
8354             case R_MIPS_26:
8355             case R_MICROMIPS_26_S1:
8356               howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, FALSE);
8357               (*_bfd_error_handler)
8358                 (_("%B: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC"),
8359                  abfd, howto->name,
8360                  (h) ? h->root.root.string : "a local symbol");
8361               bfd_set_error (bfd_error_bad_value);
8362               return FALSE;
8363             default:
8364               break;
8365             }
8366         }
8367     }
8368
8369   return TRUE;
8370 }
8371 \f
8372 bfd_boolean
8373 _bfd_mips_relax_section (bfd *abfd, asection *sec,
8374                          struct bfd_link_info *link_info,
8375                          bfd_boolean *again)
8376 {
8377   Elf_Internal_Rela *internal_relocs;
8378   Elf_Internal_Rela *irel, *irelend;
8379   Elf_Internal_Shdr *symtab_hdr;
8380   bfd_byte *contents = NULL;
8381   size_t extsymoff;
8382   bfd_boolean changed_contents = FALSE;
8383   bfd_vma sec_start = sec->output_section->vma + sec->output_offset;
8384   Elf_Internal_Sym *isymbuf = NULL;
8385
8386   /* We are not currently changing any sizes, so only one pass.  */
8387   *again = FALSE;
8388
8389   if (link_info->relocatable)
8390     return TRUE;
8391
8392   internal_relocs = _bfd_elf_link_read_relocs (abfd, sec, NULL, NULL,
8393                                                link_info->keep_memory);
8394   if (internal_relocs == NULL)
8395     return TRUE;
8396
8397   irelend = internal_relocs + sec->reloc_count
8398     * get_elf_backend_data (abfd)->s->int_rels_per_ext_rel;
8399   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
8400   extsymoff = (elf_bad_symtab (abfd)) ? 0 : symtab_hdr->sh_info;
8401
8402   for (irel = internal_relocs; irel < irelend; irel++)
8403     {
8404       bfd_vma symval;
8405       bfd_signed_vma sym_offset;
8406       unsigned int r_type;
8407       unsigned long r_symndx;
8408       asection *sym_sec;
8409       unsigned long instruction;
8410
8411       /* Turn jalr into bgezal, and jr into beq, if they're marked
8412          with a JALR relocation, that indicate where they jump to.
8413          This saves some pipeline bubbles.  */
8414       r_type = ELF_R_TYPE (abfd, irel->r_info);
8415       if (r_type != R_MIPS_JALR)
8416         continue;
8417
8418       r_symndx = ELF_R_SYM (abfd, irel->r_info);
8419       /* Compute the address of the jump target.  */
8420       if (r_symndx >= extsymoff)
8421         {
8422           struct mips_elf_link_hash_entry *h
8423             = ((struct mips_elf_link_hash_entry *)
8424                elf_sym_hashes (abfd) [r_symndx - extsymoff]);
8425
8426           while (h->root.root.type == bfd_link_hash_indirect
8427                  || h->root.root.type == bfd_link_hash_warning)
8428             h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
8429
8430           /* If a symbol is undefined, or if it may be overridden,
8431              skip it.  */
8432           if (! ((h->root.root.type == bfd_link_hash_defined
8433                   || h->root.root.type == bfd_link_hash_defweak)
8434                  && h->root.root.u.def.section)
8435               || (link_info->shared && ! link_info->symbolic
8436                   && !h->root.forced_local))
8437             continue;
8438
8439           sym_sec = h->root.root.u.def.section;
8440           if (sym_sec->output_section)
8441             symval = (h->root.root.u.def.value
8442                       + sym_sec->output_section->vma
8443                       + sym_sec->output_offset);
8444           else
8445             symval = h->root.root.u.def.value;
8446         }
8447       else
8448         {
8449           Elf_Internal_Sym *isym;
8450
8451           /* Read this BFD's symbols if we haven't done so already.  */
8452           if (isymbuf == NULL && symtab_hdr->sh_info != 0)
8453             {
8454               isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
8455               if (isymbuf == NULL)
8456                 isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
8457                                                 symtab_hdr->sh_info, 0,
8458                                                 NULL, NULL, NULL);
8459               if (isymbuf == NULL)
8460                 goto relax_return;
8461             }
8462
8463           isym = isymbuf + r_symndx;
8464           if (isym->st_shndx == SHN_UNDEF)
8465             continue;
8466           else if (isym->st_shndx == SHN_ABS)
8467             sym_sec = bfd_abs_section_ptr;
8468           else if (isym->st_shndx == SHN_COMMON)
8469             sym_sec = bfd_com_section_ptr;
8470           else
8471             sym_sec
8472               = bfd_section_from_elf_index (abfd, isym->st_shndx);
8473           symval = isym->st_value
8474             + sym_sec->output_section->vma
8475             + sym_sec->output_offset;
8476         }
8477
8478       /* Compute branch offset, from delay slot of the jump to the
8479          branch target.  */
8480       sym_offset = (symval + irel->r_addend)
8481         - (sec_start + irel->r_offset + 4);
8482
8483       /* Branch offset must be properly aligned.  */
8484       if ((sym_offset & 3) != 0)
8485         continue;
8486
8487       sym_offset >>= 2;
8488
8489       /* Check that it's in range.  */
8490       if (sym_offset < -0x8000 || sym_offset >= 0x8000)
8491         continue;
8492
8493       /* Get the section contents if we haven't done so already.  */
8494       if (!mips_elf_get_section_contents (abfd, sec, &contents))
8495         goto relax_return;
8496
8497       instruction = bfd_get_32 (abfd, contents + irel->r_offset);
8498
8499       /* If it was jalr <reg>, turn it into bgezal $zero, <target>.  */
8500       if ((instruction & 0xfc1fffff) == 0x0000f809)
8501         instruction = 0x04110000;
8502       /* If it was jr <reg>, turn it into b <target>.  */
8503       else if ((instruction & 0xfc1fffff) == 0x00000008)
8504         instruction = 0x10000000;
8505       else
8506         continue;
8507
8508       instruction |= (sym_offset & 0xffff);
8509       bfd_put_32 (abfd, instruction, contents + irel->r_offset);
8510       changed_contents = TRUE;
8511     }
8512
8513   if (contents != NULL
8514       && elf_section_data (sec)->this_hdr.contents != contents)
8515     {
8516       if (!changed_contents && !link_info->keep_memory)
8517         free (contents);
8518       else
8519         {
8520           /* Cache the section contents for elf_link_input_bfd.  */
8521           elf_section_data (sec)->this_hdr.contents = contents;
8522         }
8523     }
8524   return TRUE;
8525
8526  relax_return:
8527   if (contents != NULL
8528       && elf_section_data (sec)->this_hdr.contents != contents)
8529     free (contents);
8530   return FALSE;
8531 }
8532 \f
8533 /* Allocate space for global sym dynamic relocs.  */
8534
8535 static bfd_boolean
8536 allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
8537 {
8538   struct bfd_link_info *info = inf;
8539   bfd *dynobj;
8540   struct mips_elf_link_hash_entry *hmips;
8541   struct mips_elf_link_hash_table *htab;
8542
8543   htab = mips_elf_hash_table (info);
8544   BFD_ASSERT (htab != NULL);
8545
8546   dynobj = elf_hash_table (info)->dynobj;
8547   hmips = (struct mips_elf_link_hash_entry *) h;
8548
8549   /* VxWorks executables are handled elsewhere; we only need to
8550      allocate relocations in shared objects.  */
8551   if (htab->is_vxworks && !info->shared)
8552     return TRUE;
8553
8554   /* Ignore indirect symbols.  All relocations against such symbols
8555      will be redirected to the target symbol.  */
8556   if (h->root.type == bfd_link_hash_indirect)
8557     return TRUE;
8558
8559   /* If this symbol is defined in a dynamic object, or we are creating
8560      a shared library, we will need to copy any R_MIPS_32 or
8561      R_MIPS_REL32 relocs against it into the output file.  */
8562   if (! info->relocatable
8563       && hmips->possibly_dynamic_relocs != 0
8564       && (h->root.type == bfd_link_hash_defweak
8565           || (!h->def_regular && !ELF_COMMON_DEF_P (h))
8566           || info->shared))
8567     {
8568       bfd_boolean do_copy = TRUE;
8569
8570       if (h->root.type == bfd_link_hash_undefweak)
8571         {
8572           /* Do not copy relocations for undefined weak symbols with
8573              non-default visibility.  */
8574           if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
8575             do_copy = FALSE;
8576
8577           /* Make sure undefined weak symbols are output as a dynamic
8578              symbol in PIEs.  */
8579           else if (h->dynindx == -1 && !h->forced_local)
8580             {
8581               if (! bfd_elf_link_record_dynamic_symbol (info, h))
8582                 return FALSE;
8583             }
8584         }
8585
8586       if (do_copy)
8587         {
8588           /* Even though we don't directly need a GOT entry for this symbol,
8589              the SVR4 psABI requires it to have a dynamic symbol table
8590              index greater that DT_MIPS_GOTSYM if there are dynamic
8591              relocations against it.
8592
8593              VxWorks does not enforce the same mapping between the GOT
8594              and the symbol table, so the same requirement does not
8595              apply there.  */
8596           if (!htab->is_vxworks)
8597             {
8598               if (hmips->global_got_area > GGA_RELOC_ONLY)
8599                 hmips->global_got_area = GGA_RELOC_ONLY;
8600               hmips->got_only_for_calls = FALSE;
8601             }
8602
8603           mips_elf_allocate_dynamic_relocations
8604             (dynobj, info, hmips->possibly_dynamic_relocs);
8605           if (hmips->readonly_reloc)
8606             /* We tell the dynamic linker that there are relocations
8607                against the text segment.  */
8608             info->flags |= DF_TEXTREL;
8609         }
8610     }
8611
8612   return TRUE;
8613 }
8614
8615 /* Adjust a symbol defined by a dynamic object and referenced by a
8616    regular object.  The current definition is in some section of the
8617    dynamic object, but we're not including those sections.  We have to
8618    change the definition to something the rest of the link can
8619    understand.  */
8620
8621 bfd_boolean
8622 _bfd_mips_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
8623                                      struct elf_link_hash_entry *h)
8624 {
8625   bfd *dynobj;
8626   struct mips_elf_link_hash_entry *hmips;
8627   struct mips_elf_link_hash_table *htab;
8628
8629   htab = mips_elf_hash_table (info);
8630   BFD_ASSERT (htab != NULL);
8631
8632   dynobj = elf_hash_table (info)->dynobj;
8633   hmips = (struct mips_elf_link_hash_entry *) h;
8634
8635   /* Make sure we know what is going on here.  */
8636   BFD_ASSERT (dynobj != NULL
8637               && (h->needs_plt
8638                   || h->u.weakdef != NULL
8639                   || (h->def_dynamic
8640                       && h->ref_regular
8641                       && !h->def_regular)));
8642
8643   hmips = (struct mips_elf_link_hash_entry *) h;
8644
8645   /* If there are call relocations against an externally-defined symbol,
8646      see whether we can create a MIPS lazy-binding stub for it.  We can
8647      only do this if all references to the function are through call
8648      relocations, and in that case, the traditional lazy-binding stubs
8649      are much more efficient than PLT entries.
8650
8651      Traditional stubs are only available on SVR4 psABI-based systems;
8652      VxWorks always uses PLTs instead.  */
8653   if (!htab->is_vxworks && h->needs_plt && !hmips->no_fn_stub)
8654     {
8655       if (! elf_hash_table (info)->dynamic_sections_created)
8656         return TRUE;
8657
8658       /* If this symbol is not defined in a regular file, then set
8659          the symbol to the stub location.  This is required to make
8660          function pointers compare as equal between the normal
8661          executable and the shared library.  */
8662       if (!h->def_regular)
8663         {
8664           hmips->needs_lazy_stub = TRUE;
8665           htab->lazy_stub_count++;
8666           return TRUE;
8667         }
8668     }
8669   /* As above, VxWorks requires PLT entries for externally-defined
8670      functions that are only accessed through call relocations.
8671
8672      Both VxWorks and non-VxWorks targets also need PLT entries if there
8673      are static-only relocations against an externally-defined function.
8674      This can technically occur for shared libraries if there are
8675      branches to the symbol, although it is unlikely that this will be
8676      used in practice due to the short ranges involved.  It can occur
8677      for any relative or absolute relocation in executables; in that
8678      case, the PLT entry becomes the function's canonical address.  */
8679   else if (((h->needs_plt && !hmips->no_fn_stub)
8680             || (h->type == STT_FUNC && hmips->has_static_relocs))
8681            && htab->use_plts_and_copy_relocs
8682            && !SYMBOL_CALLS_LOCAL (info, h)
8683            && !(ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
8684                 && h->root.type == bfd_link_hash_undefweak))
8685     {
8686       /* If this is the first symbol to need a PLT entry, allocate room
8687          for the header.  */
8688       if (htab->splt->size == 0)
8689         {
8690           BFD_ASSERT (htab->sgotplt->size == 0);
8691
8692           /* If we're using the PLT additions to the psABI, each PLT
8693              entry is 16 bytes and the PLT0 entry is 32 bytes.
8694              Encourage better cache usage by aligning.  We do this
8695              lazily to avoid pessimizing traditional objects.  */
8696           if (!htab->is_vxworks
8697               && !bfd_set_section_alignment (dynobj, htab->splt, 5))
8698             return FALSE;
8699
8700           /* Make sure that .got.plt is word-aligned.  We do this lazily
8701              for the same reason as above.  */
8702           if (!bfd_set_section_alignment (dynobj, htab->sgotplt,
8703                                           MIPS_ELF_LOG_FILE_ALIGN (dynobj)))
8704             return FALSE;
8705
8706           htab->splt->size += htab->plt_header_size;
8707
8708           /* On non-VxWorks targets, the first two entries in .got.plt
8709              are reserved.  */
8710           if (!htab->is_vxworks)
8711             htab->sgotplt->size
8712               += get_elf_backend_data (dynobj)->got_header_size;
8713
8714           /* On VxWorks, also allocate room for the header's
8715              .rela.plt.unloaded entries.  */
8716           if (htab->is_vxworks && !info->shared)
8717             htab->srelplt2->size += 2 * sizeof (Elf32_External_Rela);
8718         }
8719
8720       /* Assign the next .plt entry to this symbol.  */
8721       h->plt.offset = htab->splt->size;
8722       htab->splt->size += htab->plt_entry_size;
8723
8724       /* If the output file has no definition of the symbol, set the
8725          symbol's value to the address of the stub.  */
8726       if (!info->shared && !h->def_regular)
8727         {
8728           h->root.u.def.section = htab->splt;
8729           h->root.u.def.value = h->plt.offset;
8730           /* For VxWorks, point at the PLT load stub rather than the
8731              lazy resolution stub; this stub will become the canonical
8732              function address.  */
8733           if (htab->is_vxworks)
8734             h->root.u.def.value += 8;
8735         }
8736
8737       /* Make room for the .got.plt entry and the R_MIPS_JUMP_SLOT
8738          relocation.  */
8739       htab->sgotplt->size += MIPS_ELF_GOT_SIZE (dynobj);
8740       htab->srelplt->size += (htab->is_vxworks
8741                               ? MIPS_ELF_RELA_SIZE (dynobj)
8742                               : MIPS_ELF_REL_SIZE (dynobj));
8743
8744       /* Make room for the .rela.plt.unloaded relocations.  */
8745       if (htab->is_vxworks && !info->shared)
8746         htab->srelplt2->size += 3 * sizeof (Elf32_External_Rela);
8747
8748       /* All relocations against this symbol that could have been made
8749          dynamic will now refer to the PLT entry instead.  */
8750       hmips->possibly_dynamic_relocs = 0;
8751
8752       return TRUE;
8753     }
8754
8755   /* If this is a weak symbol, and there is a real definition, the
8756      processor independent code will have arranged for us to see the
8757      real definition first, and we can just use the same value.  */
8758   if (h->u.weakdef != NULL)
8759     {
8760       BFD_ASSERT (h->u.weakdef->root.type == bfd_link_hash_defined
8761                   || h->u.weakdef->root.type == bfd_link_hash_defweak);
8762       h->root.u.def.section = h->u.weakdef->root.u.def.section;
8763       h->root.u.def.value = h->u.weakdef->root.u.def.value;
8764       return TRUE;
8765     }
8766
8767   /* Otherwise, there is nothing further to do for symbols defined
8768      in regular objects.  */
8769   if (h->def_regular)
8770     return TRUE;
8771
8772   /* There's also nothing more to do if we'll convert all relocations
8773      against this symbol into dynamic relocations.  */
8774   if (!hmips->has_static_relocs)
8775     return TRUE;
8776
8777   /* We're now relying on copy relocations.  Complain if we have
8778      some that we can't convert.  */
8779   if (!htab->use_plts_and_copy_relocs || info->shared)
8780     {
8781       (*_bfd_error_handler) (_("non-dynamic relocations refer to "
8782                                "dynamic symbol %s"),
8783                              h->root.root.string);
8784       bfd_set_error (bfd_error_bad_value);
8785       return FALSE;
8786     }
8787
8788   /* We must allocate the symbol in our .dynbss section, which will
8789      become part of the .bss section of the executable.  There will be
8790      an entry for this symbol in the .dynsym section.  The dynamic
8791      object will contain position independent code, so all references
8792      from the dynamic object to this symbol will go through the global
8793      offset table.  The dynamic linker will use the .dynsym entry to
8794      determine the address it must put in the global offset table, so
8795      both the dynamic object and the regular object will refer to the
8796      same memory location for the variable.  */
8797
8798   if ((h->root.u.def.section->flags & SEC_ALLOC) != 0)
8799     {
8800       if (htab->is_vxworks)
8801         htab->srelbss->size += sizeof (Elf32_External_Rela);
8802       else
8803         mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
8804       h->needs_copy = 1;
8805     }
8806
8807   /* All relocations against this symbol that could have been made
8808      dynamic will now refer to the local copy instead.  */
8809   hmips->possibly_dynamic_relocs = 0;
8810
8811   return _bfd_elf_adjust_dynamic_copy (h, htab->sdynbss);
8812 }
8813 \f
8814 /* This function is called after all the input files have been read,
8815    and the input sections have been assigned to output sections.  We
8816    check for any mips16 stub sections that we can discard.  */
8817
8818 bfd_boolean
8819 _bfd_mips_elf_always_size_sections (bfd *output_bfd,
8820                                     struct bfd_link_info *info)
8821 {
8822   asection *ri;
8823   struct mips_elf_link_hash_table *htab;
8824   struct mips_htab_traverse_info hti;
8825
8826   htab = mips_elf_hash_table (info);
8827   BFD_ASSERT (htab != NULL);
8828
8829   /* The .reginfo section has a fixed size.  */
8830   ri = bfd_get_section_by_name (output_bfd, ".reginfo");
8831   if (ri != NULL)
8832     bfd_set_section_size (output_bfd, ri, sizeof (Elf32_External_RegInfo));
8833
8834   hti.info = info;
8835   hti.output_bfd = output_bfd;
8836   hti.error = FALSE;
8837   mips_elf_link_hash_traverse (mips_elf_hash_table (info),
8838                                mips_elf_check_symbols, &hti);
8839   if (hti.error)
8840     return FALSE;
8841
8842   return TRUE;
8843 }
8844
8845 /* If the link uses a GOT, lay it out and work out its size.  */
8846
8847 static bfd_boolean
8848 mips_elf_lay_out_got (bfd *output_bfd, struct bfd_link_info *info)
8849 {
8850   bfd *dynobj;
8851   asection *s;
8852   struct mips_got_info *g;
8853   bfd_size_type loadable_size = 0;
8854   bfd_size_type page_gotno;
8855   bfd *sub;
8856   struct mips_elf_count_tls_arg count_tls_arg;
8857   struct mips_elf_link_hash_table *htab;
8858
8859   htab = mips_elf_hash_table (info);
8860   BFD_ASSERT (htab != NULL);
8861
8862   s = htab->sgot;
8863   if (s == NULL)
8864     return TRUE;
8865
8866   dynobj = elf_hash_table (info)->dynobj;
8867   g = htab->got_info;
8868
8869   /* Allocate room for the reserved entries.  VxWorks always reserves
8870      3 entries; other objects only reserve 2 entries.  */
8871   BFD_ASSERT (g->assigned_gotno == 0);
8872   if (htab->is_vxworks)
8873     htab->reserved_gotno = 3;
8874   else
8875     htab->reserved_gotno = 2;
8876   g->local_gotno += htab->reserved_gotno;
8877   g->assigned_gotno = htab->reserved_gotno;
8878
8879   /* Replace entries for indirect and warning symbols with entries for
8880      the target symbol.  */
8881   if (!mips_elf_resolve_final_got_entries (g))
8882     return FALSE;
8883
8884   /* Count the number of GOT symbols.  */
8885   mips_elf_link_hash_traverse (htab, mips_elf_count_got_symbols, info);
8886
8887   /* Calculate the total loadable size of the output.  That
8888      will give us the maximum number of GOT_PAGE entries
8889      required.  */
8890   for (sub = info->input_bfds; sub; sub = sub->link_next)
8891     {
8892       asection *subsection;
8893
8894       for (subsection = sub->sections;
8895            subsection;
8896            subsection = subsection->next)
8897         {
8898           if ((subsection->flags & SEC_ALLOC) == 0)
8899             continue;
8900           loadable_size += ((subsection->size + 0xf)
8901                             &~ (bfd_size_type) 0xf);
8902         }
8903     }
8904
8905   if (htab->is_vxworks)
8906     /* There's no need to allocate page entries for VxWorks; R_MIPS*_GOT16
8907        relocations against local symbols evaluate to "G", and the EABI does
8908        not include R_MIPS_GOT_PAGE.  */
8909     page_gotno = 0;
8910   else
8911     /* Assume there are two loadable segments consisting of contiguous
8912        sections.  Is 5 enough?  */
8913     page_gotno = (loadable_size >> 16) + 5;
8914
8915   /* Choose the smaller of the two estimates; both are intended to be
8916      conservative.  */
8917   if (page_gotno > g->page_gotno)
8918     page_gotno = g->page_gotno;
8919
8920   g->local_gotno += page_gotno;
8921   s->size += g->local_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
8922   s->size += g->global_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
8923
8924   /* We need to calculate tls_gotno for global symbols at this point
8925      instead of building it up earlier, to avoid doublecounting
8926      entries for one global symbol from multiple input files.  */
8927   count_tls_arg.info = info;
8928   count_tls_arg.needed = 0;
8929   elf_link_hash_traverse (elf_hash_table (info),
8930                           mips_elf_count_global_tls_entries,
8931                           &count_tls_arg);
8932   g->tls_gotno += count_tls_arg.needed;
8933   s->size += g->tls_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
8934
8935   /* VxWorks does not support multiple GOTs.  It initializes $gp to
8936      __GOTT_BASE__[__GOTT_INDEX__], the value of which is set by the
8937      dynamic loader.  */
8938   if (htab->is_vxworks)
8939     {
8940       /* VxWorks executables do not need a GOT.  */
8941       if (info->shared)
8942         {
8943           /* Each VxWorks GOT entry needs an explicit relocation.  */
8944           unsigned int count;
8945
8946           count = g->global_gotno + g->local_gotno - htab->reserved_gotno;
8947           if (count)
8948             mips_elf_allocate_dynamic_relocations (dynobj, info, count);
8949         }
8950     }
8951   else if (s->size > MIPS_ELF_GOT_MAX_SIZE (info))
8952     {
8953       if (!mips_elf_multi_got (output_bfd, info, s, page_gotno))
8954         return FALSE;
8955     }
8956   else
8957     {
8958       struct mips_elf_count_tls_arg arg;
8959
8960       /* Set up TLS entries.  */
8961       g->tls_assigned_gotno = g->global_gotno + g->local_gotno;
8962       htab_traverse (g->got_entries, mips_elf_initialize_tls_index, g);
8963
8964       /* Allocate room for the TLS relocations.  */
8965       arg.info = info;
8966       arg.needed = 0;
8967       htab_traverse (g->got_entries, mips_elf_count_local_tls_relocs, &arg);
8968       elf_link_hash_traverse (elf_hash_table (info),
8969                               mips_elf_count_global_tls_relocs,
8970                               &arg);
8971       if (arg.needed)
8972         mips_elf_allocate_dynamic_relocations (dynobj, info, arg.needed);
8973     }
8974
8975   return TRUE;
8976 }
8977
8978 /* Estimate the size of the .MIPS.stubs section.  */
8979
8980 static void
8981 mips_elf_estimate_stub_size (bfd *output_bfd, struct bfd_link_info *info)
8982 {
8983   struct mips_elf_link_hash_table *htab;
8984   bfd_size_type dynsymcount;
8985
8986   htab = mips_elf_hash_table (info);
8987   BFD_ASSERT (htab != NULL);
8988
8989   if (htab->lazy_stub_count == 0)
8990     return;
8991
8992   /* IRIX rld assumes that a function stub isn't at the end of the .text
8993      section, so add a dummy entry to the end.  */
8994   htab->lazy_stub_count++;
8995
8996   /* Get a worst-case estimate of the number of dynamic symbols needed.
8997      At this point, dynsymcount does not account for section symbols
8998      and count_section_dynsyms may overestimate the number that will
8999      be needed.  */
9000   dynsymcount = (elf_hash_table (info)->dynsymcount
9001                  + count_section_dynsyms (output_bfd, info));
9002
9003   /* Determine the size of one stub entry.  */
9004   htab->function_stub_size = (dynsymcount > 0x10000
9005                               ? MIPS_FUNCTION_STUB_BIG_SIZE
9006                               : MIPS_FUNCTION_STUB_NORMAL_SIZE);
9007
9008   htab->sstubs->size = htab->lazy_stub_count * htab->function_stub_size;
9009 }
9010
9011 /* A mips_elf_link_hash_traverse callback for which DATA points to the
9012    MIPS hash table.  If H needs a traditional MIPS lazy-binding stub,
9013    allocate an entry in the stubs section.  */
9014
9015 static bfd_boolean
9016 mips_elf_allocate_lazy_stub (struct mips_elf_link_hash_entry *h, void **data)
9017 {
9018   struct mips_elf_link_hash_table *htab;
9019
9020   htab = (struct mips_elf_link_hash_table *) data;
9021   if (h->needs_lazy_stub)
9022     {
9023       h->root.root.u.def.section = htab->sstubs;
9024       h->root.root.u.def.value = htab->sstubs->size;
9025       h->root.plt.offset = htab->sstubs->size;
9026       htab->sstubs->size += htab->function_stub_size;
9027     }
9028   return TRUE;
9029 }
9030
9031 /* Allocate offsets in the stubs section to each symbol that needs one.
9032    Set the final size of the .MIPS.stub section.  */
9033
9034 static void
9035 mips_elf_lay_out_lazy_stubs (struct bfd_link_info *info)
9036 {
9037   struct mips_elf_link_hash_table *htab;
9038
9039   htab = mips_elf_hash_table (info);
9040   BFD_ASSERT (htab != NULL);
9041
9042   if (htab->lazy_stub_count == 0)
9043     return;
9044
9045   htab->sstubs->size = 0;
9046   mips_elf_link_hash_traverse (htab, mips_elf_allocate_lazy_stub, htab);
9047   htab->sstubs->size += htab->function_stub_size;
9048   BFD_ASSERT (htab->sstubs->size
9049               == htab->lazy_stub_count * htab->function_stub_size);
9050 }
9051
9052 /* Set the sizes of the dynamic sections.  */
9053
9054 bfd_boolean
9055 _bfd_mips_elf_size_dynamic_sections (bfd *output_bfd,
9056                                      struct bfd_link_info *info)
9057 {
9058   bfd *dynobj;
9059   asection *s, *sreldyn;
9060   bfd_boolean reltext;
9061   struct mips_elf_link_hash_table *htab;
9062
9063   htab = mips_elf_hash_table (info);
9064   BFD_ASSERT (htab != NULL);
9065   dynobj = elf_hash_table (info)->dynobj;
9066   BFD_ASSERT (dynobj != NULL);
9067
9068   if (elf_hash_table (info)->dynamic_sections_created)
9069     {
9070       /* Set the contents of the .interp section to the interpreter.  */
9071       if (info->executable)
9072         {
9073           s = bfd_get_linker_section (dynobj, ".interp");
9074           BFD_ASSERT (s != NULL);
9075           s->size
9076             = strlen (ELF_DYNAMIC_INTERPRETER (output_bfd)) + 1;
9077           s->contents
9078             = (bfd_byte *) ELF_DYNAMIC_INTERPRETER (output_bfd);
9079         }
9080
9081       /* Create a symbol for the PLT, if we know that we are using it.  */
9082       if (htab->splt && htab->splt->size > 0 && htab->root.hplt == NULL)
9083         {
9084           struct elf_link_hash_entry *h;
9085
9086           BFD_ASSERT (htab->use_plts_and_copy_relocs);
9087
9088           h = _bfd_elf_define_linkage_sym (dynobj, info, htab->splt,
9089                                            "_PROCEDURE_LINKAGE_TABLE_");
9090           htab->root.hplt = h;
9091           if (h == NULL)
9092             return FALSE;
9093           h->type = STT_FUNC;
9094         }
9095     }
9096
9097   /* Allocate space for global sym dynamic relocs.  */
9098   elf_link_hash_traverse (&htab->root, allocate_dynrelocs, info);
9099
9100   mips_elf_estimate_stub_size (output_bfd, info);
9101
9102   if (!mips_elf_lay_out_got (output_bfd, info))
9103     return FALSE;
9104
9105   mips_elf_lay_out_lazy_stubs (info);
9106
9107   /* The check_relocs and adjust_dynamic_symbol entry points have
9108      determined the sizes of the various dynamic sections.  Allocate
9109      memory for them.  */
9110   reltext = FALSE;
9111   for (s = dynobj->sections; s != NULL; s = s->next)
9112     {
9113       const char *name;
9114
9115       /* It's OK to base decisions on the section name, because none
9116          of the dynobj section names depend upon the input files.  */
9117       name = bfd_get_section_name (dynobj, s);
9118
9119       if ((s->flags & SEC_LINKER_CREATED) == 0)
9120         continue;
9121
9122       if (CONST_STRNEQ (name, ".rel"))
9123         {
9124           if (s->size != 0)
9125             {
9126               const char *outname;
9127               asection *target;
9128
9129               /* If this relocation section applies to a read only
9130                  section, then we probably need a DT_TEXTREL entry.
9131                  If the relocation section is .rel(a).dyn, we always
9132                  assert a DT_TEXTREL entry rather than testing whether
9133                  there exists a relocation to a read only section or
9134                  not.  */
9135               outname = bfd_get_section_name (output_bfd,
9136                                               s->output_section);
9137               target = bfd_get_section_by_name (output_bfd, outname + 4);
9138               if ((target != NULL
9139                    && (target->flags & SEC_READONLY) != 0
9140                    && (target->flags & SEC_ALLOC) != 0)
9141                   || strcmp (outname, MIPS_ELF_REL_DYN_NAME (info)) == 0)
9142                 reltext = TRUE;
9143
9144               /* We use the reloc_count field as a counter if we need
9145                  to copy relocs into the output file.  */
9146               if (strcmp (name, MIPS_ELF_REL_DYN_NAME (info)) != 0)
9147                 s->reloc_count = 0;
9148
9149               /* If combreloc is enabled, elf_link_sort_relocs() will
9150                  sort relocations, but in a different way than we do,
9151                  and before we're done creating relocations.  Also, it
9152                  will move them around between input sections'
9153                  relocation's contents, so our sorting would be
9154                  broken, so don't let it run.  */
9155               info->combreloc = 0;
9156             }
9157         }
9158       else if (! info->shared
9159                && ! mips_elf_hash_table (info)->use_rld_obj_head
9160                && CONST_STRNEQ (name, ".rld_map"))
9161         {
9162           /* We add a room for __rld_map.  It will be filled in by the
9163              rtld to contain a pointer to the _r_debug structure.  */
9164           s->size += MIPS_ELF_RLD_MAP_SIZE (output_bfd);
9165         }
9166       else if (SGI_COMPAT (output_bfd)
9167                && CONST_STRNEQ (name, ".compact_rel"))
9168         s->size += mips_elf_hash_table (info)->compact_rel_size;
9169       else if (s == htab->splt)
9170         {
9171           /* If the last PLT entry has a branch delay slot, allocate
9172              room for an extra nop to fill the delay slot.  This is
9173              for CPUs without load interlocking.  */
9174           if (! LOAD_INTERLOCKS_P (output_bfd)
9175               && ! htab->is_vxworks && s->size > 0)
9176             s->size += 4;
9177         }
9178       else if (! CONST_STRNEQ (name, ".init")
9179                && s != htab->sgot
9180                && s != htab->sgotplt
9181                && s != htab->sstubs
9182                && s != htab->sdynbss)
9183         {
9184           /* It's not one of our sections, so don't allocate space.  */
9185           continue;
9186         }
9187
9188       if (s->size == 0)
9189         {
9190           s->flags |= SEC_EXCLUDE;
9191           continue;
9192         }
9193
9194       if ((s->flags & SEC_HAS_CONTENTS) == 0)
9195         continue;
9196
9197       /* Allocate memory for the section contents.  */
9198       s->contents = bfd_zalloc (dynobj, s->size);
9199       if (s->contents == NULL)
9200         {
9201           bfd_set_error (bfd_error_no_memory);
9202           return FALSE;
9203         }
9204     }
9205
9206   if (elf_hash_table (info)->dynamic_sections_created)
9207     {
9208       /* Add some entries to the .dynamic section.  We fill in the
9209          values later, in _bfd_mips_elf_finish_dynamic_sections, but we
9210          must add the entries now so that we get the correct size for
9211          the .dynamic section.  */
9212
9213       /* SGI object has the equivalence of DT_DEBUG in the
9214          DT_MIPS_RLD_MAP entry.  This must come first because glibc
9215          only fills in DT_MIPS_RLD_MAP (not DT_DEBUG) and some tools
9216          may only look at the first one they see.  */
9217       if (!info->shared
9218           && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_MAP, 0))
9219         return FALSE;
9220
9221       /* The DT_DEBUG entry may be filled in by the dynamic linker and
9222          used by the debugger.  */
9223       if (info->executable
9224           && !SGI_COMPAT (output_bfd)
9225           && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_DEBUG, 0))
9226         return FALSE;
9227
9228       if (reltext && (SGI_COMPAT (output_bfd) || htab->is_vxworks))
9229         info->flags |= DF_TEXTREL;
9230
9231       if ((info->flags & DF_TEXTREL) != 0)
9232         {
9233           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_TEXTREL, 0))
9234             return FALSE;
9235
9236           /* Clear the DF_TEXTREL flag.  It will be set again if we
9237              write out an actual text relocation; we may not, because
9238              at this point we do not know whether e.g. any .eh_frame
9239              absolute relocations have been converted to PC-relative.  */
9240           info->flags &= ~DF_TEXTREL;
9241         }
9242
9243       if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTGOT, 0))
9244         return FALSE;
9245
9246       sreldyn = mips_elf_rel_dyn_section (info, FALSE);
9247       if (htab->is_vxworks)
9248         {
9249           /* VxWorks uses .rela.dyn instead of .rel.dyn.  It does not
9250              use any of the DT_MIPS_* tags.  */
9251           if (sreldyn && sreldyn->size > 0)
9252             {
9253               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELA, 0))
9254                 return FALSE;
9255
9256               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELASZ, 0))
9257                 return FALSE;
9258
9259               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELAENT, 0))
9260                 return FALSE;
9261             }
9262         }
9263       else
9264         {
9265           if (sreldyn && sreldyn->size > 0)
9266             {
9267               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_REL, 0))
9268                 return FALSE;
9269
9270               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELSZ, 0))
9271                 return FALSE;
9272
9273               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELENT, 0))
9274                 return FALSE;
9275             }
9276
9277           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_VERSION, 0))
9278             return FALSE;
9279
9280           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_FLAGS, 0))
9281             return FALSE;
9282
9283           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_BASE_ADDRESS, 0))
9284             return FALSE;
9285
9286           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_LOCAL_GOTNO, 0))
9287             return FALSE;
9288
9289           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_SYMTABNO, 0))
9290             return FALSE;
9291
9292           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_UNREFEXTNO, 0))
9293             return FALSE;
9294
9295           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_GOTSYM, 0))
9296             return FALSE;
9297
9298           if (IRIX_COMPAT (dynobj) == ict_irix5
9299               && ! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_HIPAGENO, 0))
9300             return FALSE;
9301
9302           if (IRIX_COMPAT (dynobj) == ict_irix6
9303               && (bfd_get_section_by_name
9304                   (output_bfd, MIPS_ELF_OPTIONS_SECTION_NAME (dynobj)))
9305               && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_OPTIONS, 0))
9306             return FALSE;
9307         }
9308       if (htab->splt->size > 0)
9309         {
9310           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTREL, 0))
9311             return FALSE;
9312
9313           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_JMPREL, 0))
9314             return FALSE;
9315
9316           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTRELSZ, 0))
9317             return FALSE;
9318
9319           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_PLTGOT, 0))
9320             return FALSE;
9321         }
9322       if (htab->is_vxworks
9323           && !elf_vxworks_add_dynamic_entries (output_bfd, info))
9324         return FALSE;
9325     }
9326
9327   return TRUE;
9328 }
9329 \f
9330 /* REL is a relocation in INPUT_BFD that is being copied to OUTPUT_BFD.
9331    Adjust its R_ADDEND field so that it is correct for the output file.
9332    LOCAL_SYMS and LOCAL_SECTIONS are arrays of INPUT_BFD's local symbols
9333    and sections respectively; both use symbol indexes.  */
9334
9335 static void
9336 mips_elf_adjust_addend (bfd *output_bfd, struct bfd_link_info *info,
9337                         bfd *input_bfd, Elf_Internal_Sym *local_syms,
9338                         asection **local_sections, Elf_Internal_Rela *rel)
9339 {
9340   unsigned int r_type, r_symndx;
9341   Elf_Internal_Sym *sym;
9342   asection *sec;
9343
9344   if (mips_elf_local_relocation_p (input_bfd, rel, local_sections))
9345     {
9346       r_type = ELF_R_TYPE (output_bfd, rel->r_info);
9347       if (gprel16_reloc_p (r_type)
9348           || r_type == R_MIPS_GPREL32
9349           || literal_reloc_p (r_type))
9350         {
9351           rel->r_addend += _bfd_get_gp_value (input_bfd);
9352           rel->r_addend -= _bfd_get_gp_value (output_bfd);
9353         }
9354
9355       r_symndx = ELF_R_SYM (output_bfd, rel->r_info);
9356       sym = local_syms + r_symndx;
9357
9358       /* Adjust REL's addend to account for section merging.  */
9359       if (!info->relocatable)
9360         {
9361           sec = local_sections[r_symndx];
9362           _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
9363         }
9364
9365       /* This would normally be done by the rela_normal code in elflink.c.  */
9366       if (ELF_ST_TYPE (sym->st_info) == STT_SECTION)
9367         rel->r_addend += local_sections[r_symndx]->output_offset;
9368     }
9369 }
9370
9371 /* Handle relocations against symbols from removed linkonce sections,
9372    or sections discarded by a linker script.  We use this wrapper around
9373    RELOC_AGAINST_DISCARDED_SECTION to handle triplets of compound relocs
9374    on 64-bit ELF targets.  In this case for any relocation handled, which
9375    always be the first in a triplet, the remaining two have to be processed
9376    together with the first, even if they are R_MIPS_NONE.  It is the symbol
9377    index referred by the first reloc that applies to all the three and the
9378    remaining two never refer to an object symbol.  And it is the final
9379    relocation (the last non-null one) that determines the output field of
9380    the whole relocation so retrieve the corresponding howto structure for
9381    the relocatable field to be cleared by RELOC_AGAINST_DISCARDED_SECTION.
9382
9383    Note that RELOC_AGAINST_DISCARDED_SECTION is a macro that uses "continue"
9384    and therefore requires to be pasted in a loop.  It also defines a block
9385    and does not protect any of its arguments, hence the extra brackets.  */
9386
9387 static void
9388 mips_reloc_against_discarded_section (bfd *output_bfd,
9389                                       struct bfd_link_info *info,
9390                                       bfd *input_bfd, asection *input_section,
9391                                       Elf_Internal_Rela **rel,
9392                                       const Elf_Internal_Rela **relend,
9393                                       bfd_boolean rel_reloc,
9394                                       reloc_howto_type *howto,
9395                                       bfd_byte *contents)
9396 {
9397   const struct elf_backend_data *bed = get_elf_backend_data (output_bfd);
9398   int count = bed->s->int_rels_per_ext_rel;
9399   unsigned int r_type;
9400   int i;
9401
9402   for (i = count - 1; i > 0; i--)
9403     {
9404       r_type = ELF_R_TYPE (output_bfd, (*rel)[i].r_info);
9405       if (r_type != R_MIPS_NONE)
9406         {
9407           howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, r_type, !rel_reloc);
9408           break;
9409         }
9410     }
9411   do
9412     {
9413        RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
9414                                         (*rel), count, (*relend),
9415                                         howto, i, contents);
9416     }
9417   while (0);
9418 }
9419
9420 /* Relocate a MIPS ELF section.  */
9421
9422 bfd_boolean
9423 _bfd_mips_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
9424                                 bfd *input_bfd, asection *input_section,
9425                                 bfd_byte *contents, Elf_Internal_Rela *relocs,
9426                                 Elf_Internal_Sym *local_syms,
9427                                 asection **local_sections)
9428 {
9429   Elf_Internal_Rela *rel;
9430   const Elf_Internal_Rela *relend;
9431   bfd_vma addend = 0;
9432   bfd_boolean use_saved_addend_p = FALSE;
9433   const struct elf_backend_data *bed;
9434
9435   bed = get_elf_backend_data (output_bfd);
9436   relend = relocs + input_section->reloc_count * bed->s->int_rels_per_ext_rel;
9437   for (rel = relocs; rel < relend; ++rel)
9438     {
9439       const char *name;
9440       bfd_vma value = 0;
9441       reloc_howto_type *howto;
9442       bfd_boolean cross_mode_jump_p;
9443       /* TRUE if the relocation is a RELA relocation, rather than a
9444          REL relocation.  */
9445       bfd_boolean rela_relocation_p = TRUE;
9446       unsigned int r_type = ELF_R_TYPE (output_bfd, rel->r_info);
9447       const char *msg;
9448       unsigned long r_symndx;
9449       asection *sec;
9450       Elf_Internal_Shdr *symtab_hdr;
9451       struct elf_link_hash_entry *h;
9452       bfd_boolean rel_reloc;
9453
9454       rel_reloc = (NEWABI_P (input_bfd)
9455                    && mips_elf_rel_relocation_p (input_bfd, input_section,
9456                                                  relocs, rel));
9457       /* Find the relocation howto for this relocation.  */
9458       howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, r_type, !rel_reloc);
9459
9460       r_symndx = ELF_R_SYM (input_bfd, rel->r_info);
9461       symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
9462       if (mips_elf_local_relocation_p (input_bfd, rel, local_sections))
9463         {
9464           sec = local_sections[r_symndx];
9465           h = NULL;
9466         }
9467       else
9468         {
9469           unsigned long extsymoff;
9470
9471           extsymoff = 0;
9472           if (!elf_bad_symtab (input_bfd))
9473             extsymoff = symtab_hdr->sh_info;
9474           h = elf_sym_hashes (input_bfd) [r_symndx - extsymoff];
9475           while (h->root.type == bfd_link_hash_indirect
9476                  || h->root.type == bfd_link_hash_warning)
9477             h = (struct elf_link_hash_entry *) h->root.u.i.link;
9478
9479           sec = NULL;
9480           if (h->root.type == bfd_link_hash_defined
9481               || h->root.type == bfd_link_hash_defweak)
9482             sec = h->root.u.def.section;
9483         }
9484
9485       if (sec != NULL && discarded_section (sec))
9486         {
9487           mips_reloc_against_discarded_section (output_bfd, info, input_bfd,
9488                                                 input_section, &rel, &relend,
9489                                                 rel_reloc, howto, contents);
9490           continue;
9491         }
9492
9493       if (r_type == R_MIPS_64 && ! NEWABI_P (input_bfd))
9494         {
9495           /* Some 32-bit code uses R_MIPS_64.  In particular, people use
9496              64-bit code, but make sure all their addresses are in the
9497              lowermost or uppermost 32-bit section of the 64-bit address
9498              space.  Thus, when they use an R_MIPS_64 they mean what is
9499              usually meant by R_MIPS_32, with the exception that the
9500              stored value is sign-extended to 64 bits.  */
9501           howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, R_MIPS_32, FALSE);
9502
9503           /* On big-endian systems, we need to lie about the position
9504              of the reloc.  */
9505           if (bfd_big_endian (input_bfd))
9506             rel->r_offset += 4;
9507         }
9508
9509       if (!use_saved_addend_p)
9510         {
9511           /* If these relocations were originally of the REL variety,
9512              we must pull the addend out of the field that will be
9513              relocated.  Otherwise, we simply use the contents of the
9514              RELA relocation.  */
9515           if (mips_elf_rel_relocation_p (input_bfd, input_section,
9516                                          relocs, rel))
9517             {
9518               rela_relocation_p = FALSE;
9519               addend = mips_elf_read_rel_addend (input_bfd, rel,
9520                                                  howto, contents);
9521               if (hi16_reloc_p (r_type)
9522                   || (got16_reloc_p (r_type)
9523                       && mips_elf_local_relocation_p (input_bfd, rel,
9524                                                       local_sections)))
9525                 {
9526                   if (!mips_elf_add_lo16_rel_addend (input_bfd, rel, relend,
9527                                                      contents, &addend))
9528                     {
9529                       if (h)
9530                         name = h->root.root.string;
9531                       else
9532                         name = bfd_elf_sym_name (input_bfd, symtab_hdr,
9533                                                  local_syms + r_symndx,
9534                                                  sec);
9535                       (*_bfd_error_handler)
9536                         (_("%B: Can't find matching LO16 reloc against `%s' for %s at 0x%lx in section `%A'"),
9537                          input_bfd, input_section, name, howto->name,
9538                          rel->r_offset);
9539                     }
9540                 }
9541               else
9542                 addend <<= howto->rightshift;
9543             }
9544           else
9545             addend = rel->r_addend;
9546           mips_elf_adjust_addend (output_bfd, info, input_bfd,
9547                                   local_syms, local_sections, rel);
9548         }
9549
9550       if (info->relocatable)
9551         {
9552           if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd)
9553               && bfd_big_endian (input_bfd))
9554             rel->r_offset -= 4;
9555
9556           if (!rela_relocation_p && rel->r_addend)
9557             {
9558               addend += rel->r_addend;
9559               if (hi16_reloc_p (r_type) || got16_reloc_p (r_type))
9560                 addend = mips_elf_high (addend);
9561               else if (r_type == R_MIPS_HIGHER)
9562                 addend = mips_elf_higher (addend);
9563               else if (r_type == R_MIPS_HIGHEST)
9564                 addend = mips_elf_highest (addend);
9565               else
9566                 addend >>= howto->rightshift;
9567
9568               /* We use the source mask, rather than the destination
9569                  mask because the place to which we are writing will be
9570                  source of the addend in the final link.  */
9571               addend &= howto->src_mask;
9572
9573               if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd))
9574                 /* See the comment above about using R_MIPS_64 in the 32-bit
9575                    ABI.  Here, we need to update the addend.  It would be
9576                    possible to get away with just using the R_MIPS_32 reloc
9577                    but for endianness.  */
9578                 {
9579                   bfd_vma sign_bits;
9580                   bfd_vma low_bits;
9581                   bfd_vma high_bits;
9582
9583                   if (addend & ((bfd_vma) 1 << 31))
9584 #ifdef BFD64
9585                     sign_bits = ((bfd_vma) 1 << 32) - 1;
9586 #else
9587                     sign_bits = -1;
9588 #endif
9589                   else
9590                     sign_bits = 0;
9591
9592                   /* If we don't know that we have a 64-bit type,
9593                      do two separate stores.  */
9594                   if (bfd_big_endian (input_bfd))
9595                     {
9596                       /* Store the sign-bits (which are most significant)
9597                          first.  */
9598                       low_bits = sign_bits;
9599                       high_bits = addend;
9600                     }
9601                   else
9602                     {
9603                       low_bits = addend;
9604                       high_bits = sign_bits;
9605                     }
9606                   bfd_put_32 (input_bfd, low_bits,
9607                               contents + rel->r_offset);
9608                   bfd_put_32 (input_bfd, high_bits,
9609                               contents + rel->r_offset + 4);
9610                   continue;
9611                 }
9612
9613               if (! mips_elf_perform_relocation (info, howto, rel, addend,
9614                                                  input_bfd, input_section,
9615                                                  contents, FALSE))
9616                 return FALSE;
9617             }
9618
9619           /* Go on to the next relocation.  */
9620           continue;
9621         }
9622
9623       /* In the N32 and 64-bit ABIs there may be multiple consecutive
9624          relocations for the same offset.  In that case we are
9625          supposed to treat the output of each relocation as the addend
9626          for the next.  */
9627       if (rel + 1 < relend
9628           && rel->r_offset == rel[1].r_offset
9629           && ELF_R_TYPE (input_bfd, rel[1].r_info) != R_MIPS_NONE)
9630         use_saved_addend_p = TRUE;
9631       else
9632         use_saved_addend_p = FALSE;
9633
9634       /* Figure out what value we are supposed to relocate.  */
9635       switch (mips_elf_calculate_relocation (output_bfd, input_bfd,
9636                                              input_section, info, rel,
9637                                              addend, howto, local_syms,
9638                                              local_sections, &value,
9639                                              &name, &cross_mode_jump_p,
9640                                              use_saved_addend_p))
9641         {
9642         case bfd_reloc_continue:
9643           /* There's nothing to do.  */
9644           continue;
9645
9646         case bfd_reloc_undefined:
9647           /* mips_elf_calculate_relocation already called the
9648              undefined_symbol callback.  There's no real point in
9649              trying to perform the relocation at this point, so we
9650              just skip ahead to the next relocation.  */
9651           continue;
9652
9653         case bfd_reloc_notsupported:
9654           msg = _("internal error: unsupported relocation error");
9655           info->callbacks->warning
9656             (info, msg, name, input_bfd, input_section, rel->r_offset);
9657           return FALSE;
9658
9659         case bfd_reloc_overflow:
9660           if (use_saved_addend_p)
9661             /* Ignore overflow until we reach the last relocation for
9662                a given location.  */
9663             ;
9664           else
9665             {
9666               struct mips_elf_link_hash_table *htab;
9667
9668               htab = mips_elf_hash_table (info);
9669               BFD_ASSERT (htab != NULL);
9670               BFD_ASSERT (name != NULL);
9671               if (!htab->small_data_overflow_reported
9672                   && (gprel16_reloc_p (howto->type)
9673                       || literal_reloc_p (howto->type)))
9674                 {
9675                   msg = _("small-data section exceeds 64KB;"
9676                           " lower small-data size limit (see option -G)");
9677
9678                   htab->small_data_overflow_reported = TRUE;
9679                   (*info->callbacks->einfo) ("%P: %s\n", msg);
9680                 }
9681               if (! ((*info->callbacks->reloc_overflow)
9682                      (info, NULL, name, howto->name, (bfd_vma) 0,
9683                       input_bfd, input_section, rel->r_offset)))
9684                 return FALSE;
9685             }
9686           break;
9687
9688         case bfd_reloc_ok:
9689           break;
9690
9691         case bfd_reloc_outofrange:
9692           if (jal_reloc_p (howto->type))
9693             {
9694               msg = _("JALX to a non-word-aligned address");
9695               info->callbacks->warning
9696                 (info, msg, name, input_bfd, input_section, rel->r_offset);
9697               return FALSE;
9698             }
9699           /* Fall through.  */
9700
9701         default:
9702           abort ();
9703           break;
9704         }
9705
9706       /* If we've got another relocation for the address, keep going
9707          until we reach the last one.  */
9708       if (use_saved_addend_p)
9709         {
9710           addend = value;
9711           continue;
9712         }
9713
9714       if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd))
9715         /* See the comment above about using R_MIPS_64 in the 32-bit
9716            ABI.  Until now, we've been using the HOWTO for R_MIPS_32;
9717            that calculated the right value.  Now, however, we
9718            sign-extend the 32-bit result to 64-bits, and store it as a
9719            64-bit value.  We are especially generous here in that we
9720            go to extreme lengths to support this usage on systems with
9721            only a 32-bit VMA.  */
9722         {
9723           bfd_vma sign_bits;
9724           bfd_vma low_bits;
9725           bfd_vma high_bits;
9726
9727           if (value & ((bfd_vma) 1 << 31))
9728 #ifdef BFD64
9729             sign_bits = ((bfd_vma) 1 << 32) - 1;
9730 #else
9731             sign_bits = -1;
9732 #endif
9733           else
9734             sign_bits = 0;
9735
9736           /* If we don't know that we have a 64-bit type,
9737              do two separate stores.  */
9738           if (bfd_big_endian (input_bfd))
9739             {
9740               /* Undo what we did above.  */
9741               rel->r_offset -= 4;
9742               /* Store the sign-bits (which are most significant)
9743                  first.  */
9744               low_bits = sign_bits;
9745               high_bits = value;
9746             }
9747           else
9748             {
9749               low_bits = value;
9750               high_bits = sign_bits;
9751             }
9752           bfd_put_32 (input_bfd, low_bits,
9753                       contents + rel->r_offset);
9754           bfd_put_32 (input_bfd, high_bits,
9755                       contents + rel->r_offset + 4);
9756           continue;
9757         }
9758
9759       /* Actually perform the relocation.  */
9760       if (! mips_elf_perform_relocation (info, howto, rel, value,
9761                                          input_bfd, input_section,
9762                                          contents, cross_mode_jump_p))
9763         return FALSE;
9764     }
9765
9766   return TRUE;
9767 }
9768 \f
9769 /* A function that iterates over each entry in la25_stubs and fills
9770    in the code for each one.  DATA points to a mips_htab_traverse_info.  */
9771
9772 static int
9773 mips_elf_create_la25_stub (void **slot, void *data)
9774 {
9775   struct mips_htab_traverse_info *hti;
9776   struct mips_elf_link_hash_table *htab;
9777   struct mips_elf_la25_stub *stub;
9778   asection *s;
9779   bfd_byte *loc;
9780   bfd_vma offset, target, target_high, target_low;
9781
9782   stub = (struct mips_elf_la25_stub *) *slot;
9783   hti = (struct mips_htab_traverse_info *) data;
9784   htab = mips_elf_hash_table (hti->info);
9785   BFD_ASSERT (htab != NULL);
9786
9787   /* Create the section contents, if we haven't already.  */
9788   s = stub->stub_section;
9789   loc = s->contents;
9790   if (loc == NULL)
9791     {
9792       loc = bfd_malloc (s->size);
9793       if (loc == NULL)
9794         {
9795           hti->error = TRUE;
9796           return FALSE;
9797         }
9798       s->contents = loc;
9799     }
9800
9801   /* Work out where in the section this stub should go.  */
9802   offset = stub->offset;
9803
9804   /* Work out the target address.  */
9805   target = mips_elf_get_la25_target (stub, &s);
9806   target += s->output_section->vma + s->output_offset;
9807
9808   target_high = ((target + 0x8000) >> 16) & 0xffff;
9809   target_low = (target & 0xffff);
9810
9811   if (stub->stub_section != htab->strampoline)
9812     {
9813       /* This is a simple LUI/ADDIU stub.  Zero out the beginning
9814          of the section and write the two instructions at the end.  */
9815       memset (loc, 0, offset);
9816       loc += offset;
9817       if (ELF_ST_IS_MICROMIPS (stub->h->root.other))
9818         {
9819           bfd_put_micromips_32 (hti->output_bfd,
9820                                 LA25_LUI_MICROMIPS (target_high),
9821                                 loc);
9822           bfd_put_micromips_32 (hti->output_bfd,
9823                                 LA25_ADDIU_MICROMIPS (target_low),
9824                                 loc + 4);
9825         }
9826       else
9827         {
9828           bfd_put_32 (hti->output_bfd, LA25_LUI (target_high), loc);
9829           bfd_put_32 (hti->output_bfd, LA25_ADDIU (target_low), loc + 4);
9830         }
9831     }
9832   else
9833     {
9834       /* This is trampoline.  */
9835       loc += offset;
9836       if (ELF_ST_IS_MICROMIPS (stub->h->root.other))
9837         {
9838           bfd_put_micromips_32 (hti->output_bfd,
9839                                 LA25_LUI_MICROMIPS (target_high), loc);
9840           bfd_put_micromips_32 (hti->output_bfd,
9841                                 LA25_J_MICROMIPS (target), loc + 4);
9842           bfd_put_micromips_32 (hti->output_bfd,
9843                                 LA25_ADDIU_MICROMIPS (target_low), loc + 8);
9844           bfd_put_32 (hti->output_bfd, 0, loc + 12);
9845         }
9846       else
9847         {
9848           bfd_put_32 (hti->output_bfd, LA25_LUI (target_high), loc);
9849           bfd_put_32 (hti->output_bfd, LA25_J (target), loc + 4);
9850           bfd_put_32 (hti->output_bfd, LA25_ADDIU (target_low), loc + 8);
9851           bfd_put_32 (hti->output_bfd, 0, loc + 12);
9852         }
9853     }
9854   return TRUE;
9855 }
9856
9857 /* If NAME is one of the special IRIX6 symbols defined by the linker,
9858    adjust it appropriately now.  */
9859
9860 static void
9861 mips_elf_irix6_finish_dynamic_symbol (bfd *abfd ATTRIBUTE_UNUSED,
9862                                       const char *name, Elf_Internal_Sym *sym)
9863 {
9864   /* The linker script takes care of providing names and values for
9865      these, but we must place them into the right sections.  */
9866   static const char* const text_section_symbols[] = {
9867     "_ftext",
9868     "_etext",
9869     "__dso_displacement",
9870     "__elf_header",
9871     "__program_header_table",
9872     NULL
9873   };
9874
9875   static const char* const data_section_symbols[] = {
9876     "_fdata",
9877     "_edata",
9878     "_end",
9879     "_fbss",
9880     NULL
9881   };
9882
9883   const char* const *p;
9884   int i;
9885
9886   for (i = 0; i < 2; ++i)
9887     for (p = (i == 0) ? text_section_symbols : data_section_symbols;
9888          *p;
9889          ++p)
9890       if (strcmp (*p, name) == 0)
9891         {
9892           /* All of these symbols are given type STT_SECTION by the
9893              IRIX6 linker.  */
9894           sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
9895           sym->st_other = STO_PROTECTED;
9896
9897           /* The IRIX linker puts these symbols in special sections.  */
9898           if (i == 0)
9899             sym->st_shndx = SHN_MIPS_TEXT;
9900           else
9901             sym->st_shndx = SHN_MIPS_DATA;
9902
9903           break;
9904         }
9905 }
9906
9907 /* Finish up dynamic symbol handling.  We set the contents of various
9908    dynamic sections here.  */
9909
9910 bfd_boolean
9911 _bfd_mips_elf_finish_dynamic_symbol (bfd *output_bfd,
9912                                      struct bfd_link_info *info,
9913                                      struct elf_link_hash_entry *h,
9914                                      Elf_Internal_Sym *sym)
9915 {
9916   bfd *dynobj;
9917   asection *sgot;
9918   struct mips_got_info *g, *gg;
9919   const char *name;
9920   int idx;
9921   struct mips_elf_link_hash_table *htab;
9922   struct mips_elf_link_hash_entry *hmips;
9923
9924   htab = mips_elf_hash_table (info);
9925   BFD_ASSERT (htab != NULL);
9926   dynobj = elf_hash_table (info)->dynobj;
9927   hmips = (struct mips_elf_link_hash_entry *) h;
9928
9929   BFD_ASSERT (!htab->is_vxworks);
9930
9931   if (h->plt.offset != MINUS_ONE && hmips->no_fn_stub)
9932     {
9933       /* We've decided to create a PLT entry for this symbol.  */
9934       bfd_byte *loc;
9935       bfd_vma header_address, plt_index, got_address;
9936       bfd_vma got_address_high, got_address_low, load;
9937       const bfd_vma *plt_entry;
9938
9939       BFD_ASSERT (htab->use_plts_and_copy_relocs);
9940       BFD_ASSERT (h->dynindx != -1);
9941       BFD_ASSERT (htab->splt != NULL);
9942       BFD_ASSERT (h->plt.offset <= htab->splt->size);
9943       BFD_ASSERT (!h->def_regular);
9944
9945       /* Calculate the address of the PLT header.  */
9946       header_address = (htab->splt->output_section->vma
9947                         + htab->splt->output_offset);
9948
9949       /* Calculate the index of the entry.  */
9950       plt_index = ((h->plt.offset - htab->plt_header_size)
9951                    / htab->plt_entry_size);
9952
9953       /* Calculate the address of the .got.plt entry.  */
9954       got_address = (htab->sgotplt->output_section->vma
9955                      + htab->sgotplt->output_offset
9956                      + (2 + plt_index) * MIPS_ELF_GOT_SIZE (dynobj));
9957       got_address_high = ((got_address + 0x8000) >> 16) & 0xffff;
9958       got_address_low = got_address & 0xffff;
9959
9960       /* Initially point the .got.plt entry at the PLT header.  */
9961       loc = (htab->sgotplt->contents
9962              + (2 + plt_index) * MIPS_ELF_GOT_SIZE (dynobj));
9963       if (ABI_64_P (output_bfd))
9964         bfd_put_64 (output_bfd, header_address, loc);
9965       else
9966         bfd_put_32 (output_bfd, header_address, loc);
9967
9968       /* Find out where the .plt entry should go.  */
9969       loc = htab->splt->contents + h->plt.offset;
9970
9971       /* Pick the load opcode.  */
9972       load = MIPS_ELF_LOAD_WORD (output_bfd);
9973
9974       /* Fill in the PLT entry itself.  */
9975       plt_entry = mips_exec_plt_entry;
9976       bfd_put_32 (output_bfd, plt_entry[0] | got_address_high, loc);
9977       bfd_put_32 (output_bfd, plt_entry[1] | got_address_low | load, loc + 4);
9978
9979       if (! LOAD_INTERLOCKS_P (output_bfd))
9980         {
9981           bfd_put_32 (output_bfd, plt_entry[2] | got_address_low, loc + 8);
9982           bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
9983         }
9984       else
9985         {
9986           bfd_put_32 (output_bfd, plt_entry[3], loc + 8);
9987           bfd_put_32 (output_bfd, plt_entry[2] | got_address_low, loc + 12);
9988         }
9989
9990       /* Emit an R_MIPS_JUMP_SLOT relocation against the .got.plt entry.  */
9991       mips_elf_output_dynamic_relocation (output_bfd, htab->srelplt,
9992                                           plt_index, h->dynindx,
9993                                           R_MIPS_JUMP_SLOT, got_address);
9994
9995       /* We distinguish between PLT entries and lazy-binding stubs by
9996          giving the former an st_other value of STO_MIPS_PLT.  Set the
9997          flag and leave the value if there are any relocations in the
9998          binary where pointer equality matters.  */
9999       sym->st_shndx = SHN_UNDEF;
10000       if (h->pointer_equality_needed)
10001         sym->st_other = STO_MIPS_PLT;
10002       else
10003         sym->st_value = 0;
10004     }
10005   else if (h->plt.offset != MINUS_ONE)
10006     {
10007       /* We've decided to create a lazy-binding stub.  */
10008       bfd_byte stub[MIPS_FUNCTION_STUB_BIG_SIZE];
10009
10010       /* This symbol has a stub.  Set it up.  */
10011
10012       BFD_ASSERT (h->dynindx != -1);
10013
10014       BFD_ASSERT ((htab->function_stub_size == MIPS_FUNCTION_STUB_BIG_SIZE)
10015                   || (h->dynindx <= 0xffff));
10016
10017       /* Values up to 2^31 - 1 are allowed.  Larger values would cause
10018          sign extension at runtime in the stub, resulting in a negative
10019          index value.  */
10020       if (h->dynindx & ~0x7fffffff)
10021         return FALSE;
10022
10023       /* Fill the stub.  */
10024       idx = 0;
10025       bfd_put_32 (output_bfd, STUB_LW (output_bfd), stub + idx);
10026       idx += 4;
10027       bfd_put_32 (output_bfd, STUB_MOVE (output_bfd), stub + idx);
10028       idx += 4;
10029       if (htab->function_stub_size == MIPS_FUNCTION_STUB_BIG_SIZE)
10030         {
10031           bfd_put_32 (output_bfd, STUB_LUI ((h->dynindx >> 16) & 0x7fff),
10032                       stub + idx);
10033           idx += 4;
10034         }
10035       bfd_put_32 (output_bfd, STUB_JALR, stub + idx);
10036       idx += 4;
10037
10038       /* If a large stub is not required and sign extension is not a
10039          problem, then use legacy code in the stub.  */
10040       if (htab->function_stub_size == MIPS_FUNCTION_STUB_BIG_SIZE)
10041         bfd_put_32 (output_bfd, STUB_ORI (h->dynindx & 0xffff), stub + idx);
10042       else if (h->dynindx & ~0x7fff)
10043         bfd_put_32 (output_bfd, STUB_LI16U (h->dynindx & 0xffff), stub + idx);
10044       else
10045         bfd_put_32 (output_bfd, STUB_LI16S (output_bfd, h->dynindx),
10046                     stub + idx);
10047
10048       BFD_ASSERT (h->plt.offset <= htab->sstubs->size);
10049       memcpy (htab->sstubs->contents + h->plt.offset,
10050               stub, htab->function_stub_size);
10051
10052       /* Mark the symbol as undefined.  plt.offset != -1 occurs
10053          only for the referenced symbol.  */
10054       sym->st_shndx = SHN_UNDEF;
10055
10056       /* The run-time linker uses the st_value field of the symbol
10057          to reset the global offset table entry for this external
10058          to its stub address when unlinking a shared object.  */
10059       sym->st_value = (htab->sstubs->output_section->vma
10060                        + htab->sstubs->output_offset
10061                        + h->plt.offset);
10062     }
10063
10064   /* If we have a MIPS16 function with a stub, the dynamic symbol must
10065      refer to the stub, since only the stub uses the standard calling
10066      conventions.  */
10067   if (h->dynindx != -1 && hmips->fn_stub != NULL)
10068     {
10069       BFD_ASSERT (hmips->need_fn_stub);
10070       sym->st_value = (hmips->fn_stub->output_section->vma
10071                        + hmips->fn_stub->output_offset);
10072       sym->st_size = hmips->fn_stub->size;
10073       sym->st_other = ELF_ST_VISIBILITY (sym->st_other);
10074     }
10075
10076   BFD_ASSERT (h->dynindx != -1
10077               || h->forced_local);
10078
10079   sgot = htab->sgot;
10080   g = htab->got_info;
10081   BFD_ASSERT (g != NULL);
10082
10083   /* Run through the global symbol table, creating GOT entries for all
10084      the symbols that need them.  */
10085   if (hmips->global_got_area != GGA_NONE)
10086     {
10087       bfd_vma offset;
10088       bfd_vma value;
10089
10090       value = sym->st_value;
10091       offset = mips_elf_global_got_index (dynobj, output_bfd, h,
10092                                           R_MIPS_GOT16, info);
10093       MIPS_ELF_PUT_WORD (output_bfd, value, sgot->contents + offset);
10094     }
10095
10096   if (hmips->global_got_area != GGA_NONE && g->next && h->type != STT_TLS)
10097     {
10098       struct mips_got_entry e, *p;
10099       bfd_vma entry;
10100       bfd_vma offset;
10101
10102       gg = g;
10103
10104       e.abfd = output_bfd;
10105       e.symndx = -1;
10106       e.d.h = hmips;
10107       e.tls_type = 0;
10108
10109       for (g = g->next; g->next != gg; g = g->next)
10110         {
10111           if (g->got_entries
10112               && (p = (struct mips_got_entry *) htab_find (g->got_entries,
10113                                                            &e)))
10114             {
10115               offset = p->gotidx;
10116               if (info->shared
10117                   || (elf_hash_table (info)->dynamic_sections_created
10118                       && p->d.h != NULL
10119                       && p->d.h->root.def_dynamic
10120                       && !p->d.h->root.def_regular))
10121                 {
10122                   /* Create an R_MIPS_REL32 relocation for this entry.  Due to
10123                      the various compatibility problems, it's easier to mock
10124                      up an R_MIPS_32 or R_MIPS_64 relocation and leave
10125                      mips_elf_create_dynamic_relocation to calculate the
10126                      appropriate addend.  */
10127                   Elf_Internal_Rela rel[3];
10128
10129                   memset (rel, 0, sizeof (rel));
10130                   if (ABI_64_P (output_bfd))
10131                     rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_64);
10132                   else
10133                     rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_32);
10134                   rel[0].r_offset = rel[1].r_offset = rel[2].r_offset = offset;
10135
10136                   entry = 0;
10137                   if (! (mips_elf_create_dynamic_relocation
10138                          (output_bfd, info, rel,
10139                           e.d.h, NULL, sym->st_value, &entry, sgot)))
10140                     return FALSE;
10141                 }
10142               else
10143                 entry = sym->st_value;
10144               MIPS_ELF_PUT_WORD (output_bfd, entry, sgot->contents + offset);
10145             }
10146         }
10147     }
10148
10149   /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute.  */
10150   name = h->root.root.string;
10151   if (h == elf_hash_table (info)->hdynamic
10152       || h == elf_hash_table (info)->hgot)
10153     sym->st_shndx = SHN_ABS;
10154   else if (strcmp (name, "_DYNAMIC_LINK") == 0
10155            || strcmp (name, "_DYNAMIC_LINKING") == 0)
10156     {
10157       sym->st_shndx = SHN_ABS;
10158       sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10159       sym->st_value = 1;
10160     }
10161   else if (strcmp (name, "_gp_disp") == 0 && ! NEWABI_P (output_bfd))
10162     {
10163       sym->st_shndx = SHN_ABS;
10164       sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10165       sym->st_value = elf_gp (output_bfd);
10166     }
10167   else if (SGI_COMPAT (output_bfd))
10168     {
10169       if (strcmp (name, mips_elf_dynsym_rtproc_names[0]) == 0
10170           || strcmp (name, mips_elf_dynsym_rtproc_names[1]) == 0)
10171         {
10172           sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10173           sym->st_other = STO_PROTECTED;
10174           sym->st_value = 0;
10175           sym->st_shndx = SHN_MIPS_DATA;
10176         }
10177       else if (strcmp (name, mips_elf_dynsym_rtproc_names[2]) == 0)
10178         {
10179           sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10180           sym->st_other = STO_PROTECTED;
10181           sym->st_value = mips_elf_hash_table (info)->procedure_count;
10182           sym->st_shndx = SHN_ABS;
10183         }
10184       else if (sym->st_shndx != SHN_UNDEF && sym->st_shndx != SHN_ABS)
10185         {
10186           if (h->type == STT_FUNC)
10187             sym->st_shndx = SHN_MIPS_TEXT;
10188           else if (h->type == STT_OBJECT)
10189             sym->st_shndx = SHN_MIPS_DATA;
10190         }
10191     }
10192
10193   /* Emit a copy reloc, if needed.  */
10194   if (h->needs_copy)
10195     {
10196       asection *s;
10197       bfd_vma symval;
10198
10199       BFD_ASSERT (h->dynindx != -1);
10200       BFD_ASSERT (htab->use_plts_and_copy_relocs);
10201
10202       s = mips_elf_rel_dyn_section (info, FALSE);
10203       symval = (h->root.u.def.section->output_section->vma
10204                 + h->root.u.def.section->output_offset
10205                 + h->root.u.def.value);
10206       mips_elf_output_dynamic_relocation (output_bfd, s, s->reloc_count++,
10207                                           h->dynindx, R_MIPS_COPY, symval);
10208     }
10209
10210   /* Handle the IRIX6-specific symbols.  */
10211   if (IRIX_COMPAT (output_bfd) == ict_irix6)
10212     mips_elf_irix6_finish_dynamic_symbol (output_bfd, name, sym);
10213
10214   /* Keep dynamic MIPS16 symbols odd.  This allows the dynamic linker to
10215      treat MIPS16 symbols like any other.  */
10216   if (ELF_ST_IS_MIPS16 (sym->st_other))
10217     {
10218       BFD_ASSERT (sym->st_value & 1);
10219       sym->st_other -= STO_MIPS16;
10220     }
10221
10222   return TRUE;
10223 }
10224
10225 /* Likewise, for VxWorks.  */
10226
10227 bfd_boolean
10228 _bfd_mips_vxworks_finish_dynamic_symbol (bfd *output_bfd,
10229                                          struct bfd_link_info *info,
10230                                          struct elf_link_hash_entry *h,
10231                                          Elf_Internal_Sym *sym)
10232 {
10233   bfd *dynobj;
10234   asection *sgot;
10235   struct mips_got_info *g;
10236   struct mips_elf_link_hash_table *htab;
10237   struct mips_elf_link_hash_entry *hmips;
10238
10239   htab = mips_elf_hash_table (info);
10240   BFD_ASSERT (htab != NULL);
10241   dynobj = elf_hash_table (info)->dynobj;
10242   hmips = (struct mips_elf_link_hash_entry *) h;
10243
10244   if (h->plt.offset != (bfd_vma) -1)
10245     {
10246       bfd_byte *loc;
10247       bfd_vma plt_address, plt_index, got_address, got_offset, branch_offset;
10248       Elf_Internal_Rela rel;
10249       static const bfd_vma *plt_entry;
10250
10251       BFD_ASSERT (h->dynindx != -1);
10252       BFD_ASSERT (htab->splt != NULL);
10253       BFD_ASSERT (h->plt.offset <= htab->splt->size);
10254
10255       /* Calculate the address of the .plt entry.  */
10256       plt_address = (htab->splt->output_section->vma
10257                      + htab->splt->output_offset
10258                      + h->plt.offset);
10259
10260       /* Calculate the index of the entry.  */
10261       plt_index = ((h->plt.offset - htab->plt_header_size)
10262                    / htab->plt_entry_size);
10263
10264       /* Calculate the address of the .got.plt entry.  */
10265       got_address = (htab->sgotplt->output_section->vma
10266                      + htab->sgotplt->output_offset
10267                      + plt_index * 4);
10268
10269       /* Calculate the offset of the .got.plt entry from
10270          _GLOBAL_OFFSET_TABLE_.  */
10271       got_offset = mips_elf_gotplt_index (info, h);
10272
10273       /* Calculate the offset for the branch at the start of the PLT
10274          entry.  The branch jumps to the beginning of .plt.  */
10275       branch_offset = -(h->plt.offset / 4 + 1) & 0xffff;
10276
10277       /* Fill in the initial value of the .got.plt entry.  */
10278       bfd_put_32 (output_bfd, plt_address,
10279                   htab->sgotplt->contents + plt_index * 4);
10280
10281       /* Find out where the .plt entry should go.  */
10282       loc = htab->splt->contents + h->plt.offset;
10283
10284       if (info->shared)
10285         {
10286           plt_entry = mips_vxworks_shared_plt_entry;
10287           bfd_put_32 (output_bfd, plt_entry[0] | branch_offset, loc);
10288           bfd_put_32 (output_bfd, plt_entry[1] | plt_index, loc + 4);
10289         }
10290       else
10291         {
10292           bfd_vma got_address_high, got_address_low;
10293
10294           plt_entry = mips_vxworks_exec_plt_entry;
10295           got_address_high = ((got_address + 0x8000) >> 16) & 0xffff;
10296           got_address_low = got_address & 0xffff;
10297
10298           bfd_put_32 (output_bfd, plt_entry[0] | branch_offset, loc);
10299           bfd_put_32 (output_bfd, plt_entry[1] | plt_index, loc + 4);
10300           bfd_put_32 (output_bfd, plt_entry[2] | got_address_high, loc + 8);
10301           bfd_put_32 (output_bfd, plt_entry[3] | got_address_low, loc + 12);
10302           bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
10303           bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
10304           bfd_put_32 (output_bfd, plt_entry[6], loc + 24);
10305           bfd_put_32 (output_bfd, plt_entry[7], loc + 28);
10306
10307           loc = (htab->srelplt2->contents
10308                  + (plt_index * 3 + 2) * sizeof (Elf32_External_Rela));
10309
10310           /* Emit a relocation for the .got.plt entry.  */
10311           rel.r_offset = got_address;
10312           rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_MIPS_32);
10313           rel.r_addend = h->plt.offset;
10314           bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10315
10316           /* Emit a relocation for the lui of %hi(<.got.plt slot>).  */
10317           loc += sizeof (Elf32_External_Rela);
10318           rel.r_offset = plt_address + 8;
10319           rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
10320           rel.r_addend = got_offset;
10321           bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10322
10323           /* Emit a relocation for the addiu of %lo(<.got.plt slot>).  */
10324           loc += sizeof (Elf32_External_Rela);
10325           rel.r_offset += 4;
10326           rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
10327           bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10328         }
10329
10330       /* Emit an R_MIPS_JUMP_SLOT relocation against the .got.plt entry.  */
10331       loc = htab->srelplt->contents + plt_index * sizeof (Elf32_External_Rela);
10332       rel.r_offset = got_address;
10333       rel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_JUMP_SLOT);
10334       rel.r_addend = 0;
10335       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10336
10337       if (!h->def_regular)
10338         sym->st_shndx = SHN_UNDEF;
10339     }
10340
10341   BFD_ASSERT (h->dynindx != -1 || h->forced_local);
10342
10343   sgot = htab->sgot;
10344   g = htab->got_info;
10345   BFD_ASSERT (g != NULL);
10346
10347   /* See if this symbol has an entry in the GOT.  */
10348   if (hmips->global_got_area != GGA_NONE)
10349     {
10350       bfd_vma offset;
10351       Elf_Internal_Rela outrel;
10352       bfd_byte *loc;
10353       asection *s;
10354
10355       /* Install the symbol value in the GOT.   */
10356       offset = mips_elf_global_got_index (dynobj, output_bfd, h,
10357                                           R_MIPS_GOT16, info);
10358       MIPS_ELF_PUT_WORD (output_bfd, sym->st_value, sgot->contents + offset);
10359
10360       /* Add a dynamic relocation for it.  */
10361       s = mips_elf_rel_dyn_section (info, FALSE);
10362       loc = s->contents + (s->reloc_count++ * sizeof (Elf32_External_Rela));
10363       outrel.r_offset = (sgot->output_section->vma
10364                          + sgot->output_offset
10365                          + offset);
10366       outrel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_32);
10367       outrel.r_addend = 0;
10368       bfd_elf32_swap_reloca_out (dynobj, &outrel, loc);
10369     }
10370
10371   /* Emit a copy reloc, if needed.  */
10372   if (h->needs_copy)
10373     {
10374       Elf_Internal_Rela rel;
10375
10376       BFD_ASSERT (h->dynindx != -1);
10377
10378       rel.r_offset = (h->root.u.def.section->output_section->vma
10379                       + h->root.u.def.section->output_offset
10380                       + h->root.u.def.value);
10381       rel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_COPY);
10382       rel.r_addend = 0;
10383       bfd_elf32_swap_reloca_out (output_bfd, &rel,
10384                                  htab->srelbss->contents
10385                                  + (htab->srelbss->reloc_count
10386                                     * sizeof (Elf32_External_Rela)));
10387       ++htab->srelbss->reloc_count;
10388     }
10389
10390   /* If this is a mips16/microMIPS symbol, force the value to be even.  */
10391   if (ELF_ST_IS_COMPRESSED (sym->st_other))
10392     sym->st_value &= ~1;
10393
10394   return TRUE;
10395 }
10396
10397 /* Write out a plt0 entry to the beginning of .plt.  */
10398
10399 static void
10400 mips_finish_exec_plt (bfd *output_bfd, struct bfd_link_info *info)
10401 {
10402   bfd_byte *loc;
10403   bfd_vma gotplt_value, gotplt_value_high, gotplt_value_low;
10404   static const bfd_vma *plt_entry;
10405   struct mips_elf_link_hash_table *htab;
10406
10407   htab = mips_elf_hash_table (info);
10408   BFD_ASSERT (htab != NULL);
10409
10410   if (ABI_64_P (output_bfd))
10411     plt_entry = mips_n64_exec_plt0_entry;
10412   else if (ABI_N32_P (output_bfd))
10413     plt_entry = mips_n32_exec_plt0_entry;
10414   else
10415     plt_entry = mips_o32_exec_plt0_entry;
10416
10417   /* Calculate the value of .got.plt.  */
10418   gotplt_value = (htab->sgotplt->output_section->vma
10419                   + htab->sgotplt->output_offset);
10420   gotplt_value_high = ((gotplt_value + 0x8000) >> 16) & 0xffff;
10421   gotplt_value_low = gotplt_value & 0xffff;
10422
10423   /* The PLT sequence is not safe for N64 if .got.plt's address can
10424      not be loaded in two instructions.  */
10425   BFD_ASSERT ((gotplt_value & ~(bfd_vma) 0x7fffffff) == 0
10426               || ~(gotplt_value | 0x7fffffff) == 0);
10427
10428   /* Install the PLT header.  */
10429   loc = htab->splt->contents;
10430   bfd_put_32 (output_bfd, plt_entry[0] | gotplt_value_high, loc);
10431   bfd_put_32 (output_bfd, plt_entry[1] | gotplt_value_low, loc + 4);
10432   bfd_put_32 (output_bfd, plt_entry[2] | gotplt_value_low, loc + 8);
10433   bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
10434   bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
10435   bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
10436   bfd_put_32 (output_bfd, plt_entry[6], loc + 24);
10437   bfd_put_32 (output_bfd, plt_entry[7], loc + 28);
10438 }
10439
10440 /* Install the PLT header for a VxWorks executable and finalize the
10441    contents of .rela.plt.unloaded.  */
10442
10443 static void
10444 mips_vxworks_finish_exec_plt (bfd *output_bfd, struct bfd_link_info *info)
10445 {
10446   Elf_Internal_Rela rela;
10447   bfd_byte *loc;
10448   bfd_vma got_value, got_value_high, got_value_low, plt_address;
10449   static const bfd_vma *plt_entry;
10450   struct mips_elf_link_hash_table *htab;
10451
10452   htab = mips_elf_hash_table (info);
10453   BFD_ASSERT (htab != NULL);
10454
10455   plt_entry = mips_vxworks_exec_plt0_entry;
10456
10457   /* Calculate the value of _GLOBAL_OFFSET_TABLE_.  */
10458   got_value = (htab->root.hgot->root.u.def.section->output_section->vma
10459                + htab->root.hgot->root.u.def.section->output_offset
10460                + htab->root.hgot->root.u.def.value);
10461
10462   got_value_high = ((got_value + 0x8000) >> 16) & 0xffff;
10463   got_value_low = got_value & 0xffff;
10464
10465   /* Calculate the address of the PLT header.  */
10466   plt_address = htab->splt->output_section->vma + htab->splt->output_offset;
10467
10468   /* Install the PLT header.  */
10469   loc = htab->splt->contents;
10470   bfd_put_32 (output_bfd, plt_entry[0] | got_value_high, loc);
10471   bfd_put_32 (output_bfd, plt_entry[1] | got_value_low, loc + 4);
10472   bfd_put_32 (output_bfd, plt_entry[2], loc + 8);
10473   bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
10474   bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
10475   bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
10476
10477   /* Output the relocation for the lui of %hi(_GLOBAL_OFFSET_TABLE_).  */
10478   loc = htab->srelplt2->contents;
10479   rela.r_offset = plt_address;
10480   rela.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
10481   rela.r_addend = 0;
10482   bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
10483   loc += sizeof (Elf32_External_Rela);
10484
10485   /* Output the relocation for the following addiu of
10486      %lo(_GLOBAL_OFFSET_TABLE_).  */
10487   rela.r_offset += 4;
10488   rela.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
10489   bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
10490   loc += sizeof (Elf32_External_Rela);
10491
10492   /* Fix up the remaining relocations.  They may have the wrong
10493      symbol index for _G_O_T_ or _P_L_T_ depending on the order
10494      in which symbols were output.  */
10495   while (loc < htab->srelplt2->contents + htab->srelplt2->size)
10496     {
10497       Elf_Internal_Rela rel;
10498
10499       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
10500       rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_MIPS_32);
10501       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10502       loc += sizeof (Elf32_External_Rela);
10503
10504       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
10505       rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
10506       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10507       loc += sizeof (Elf32_External_Rela);
10508
10509       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
10510       rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
10511       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10512       loc += sizeof (Elf32_External_Rela);
10513     }
10514 }
10515
10516 /* Install the PLT header for a VxWorks shared library.  */
10517
10518 static void
10519 mips_vxworks_finish_shared_plt (bfd *output_bfd, struct bfd_link_info *info)
10520 {
10521   unsigned int i;
10522   struct mips_elf_link_hash_table *htab;
10523
10524   htab = mips_elf_hash_table (info);
10525   BFD_ASSERT (htab != NULL);
10526
10527   /* We just need to copy the entry byte-by-byte.  */
10528   for (i = 0; i < ARRAY_SIZE (mips_vxworks_shared_plt0_entry); i++)
10529     bfd_put_32 (output_bfd, mips_vxworks_shared_plt0_entry[i],
10530                 htab->splt->contents + i * 4);
10531 }
10532
10533 /* Finish up the dynamic sections.  */
10534
10535 bfd_boolean
10536 _bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd,
10537                                        struct bfd_link_info *info)
10538 {
10539   bfd *dynobj;
10540   asection *sdyn;
10541   asection *sgot;
10542   struct mips_got_info *gg, *g;
10543   struct mips_elf_link_hash_table *htab;
10544
10545   htab = mips_elf_hash_table (info);
10546   BFD_ASSERT (htab != NULL);
10547
10548   dynobj = elf_hash_table (info)->dynobj;
10549
10550   sdyn = bfd_get_linker_section (dynobj, ".dynamic");
10551
10552   sgot = htab->sgot;
10553   gg = htab->got_info;
10554
10555   if (elf_hash_table (info)->dynamic_sections_created)
10556     {
10557       bfd_byte *b;
10558       int dyn_to_skip = 0, dyn_skipped = 0;
10559
10560       BFD_ASSERT (sdyn != NULL);
10561       BFD_ASSERT (gg != NULL);
10562
10563       g = mips_elf_got_for_ibfd (gg, output_bfd);
10564       BFD_ASSERT (g != NULL);
10565
10566       for (b = sdyn->contents;
10567            b < sdyn->contents + sdyn->size;
10568            b += MIPS_ELF_DYN_SIZE (dynobj))
10569         {
10570           Elf_Internal_Dyn dyn;
10571           const char *name;
10572           size_t elemsize;
10573           asection *s;
10574           bfd_boolean swap_out_p;
10575
10576           /* Read in the current dynamic entry.  */
10577           (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
10578
10579           /* Assume that we're going to modify it and write it out.  */
10580           swap_out_p = TRUE;
10581
10582           switch (dyn.d_tag)
10583             {
10584             case DT_RELENT:
10585               dyn.d_un.d_val = MIPS_ELF_REL_SIZE (dynobj);
10586               break;
10587
10588             case DT_RELAENT:
10589               BFD_ASSERT (htab->is_vxworks);
10590               dyn.d_un.d_val = MIPS_ELF_RELA_SIZE (dynobj);
10591               break;
10592
10593             case DT_STRSZ:
10594               /* Rewrite DT_STRSZ.  */
10595               dyn.d_un.d_val =
10596                 _bfd_elf_strtab_size (elf_hash_table (info)->dynstr);
10597               break;
10598
10599             case DT_PLTGOT:
10600               s = htab->sgot;
10601               dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
10602               break;
10603
10604             case DT_MIPS_PLTGOT:
10605               s = htab->sgotplt;
10606               dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
10607               break;
10608
10609             case DT_MIPS_RLD_VERSION:
10610               dyn.d_un.d_val = 1; /* XXX */
10611               break;
10612
10613             case DT_MIPS_FLAGS:
10614               dyn.d_un.d_val = RHF_NOTPOT; /* XXX */
10615               break;
10616
10617             case DT_MIPS_TIME_STAMP:
10618               {
10619                 time_t t;
10620                 time (&t);
10621                 dyn.d_un.d_val = t;
10622               }
10623               break;
10624
10625             case DT_MIPS_ICHECKSUM:
10626               /* XXX FIXME: */
10627               swap_out_p = FALSE;
10628               break;
10629
10630             case DT_MIPS_IVERSION:
10631               /* XXX FIXME: */
10632               swap_out_p = FALSE;
10633               break;
10634
10635             case DT_MIPS_BASE_ADDRESS:
10636               s = output_bfd->sections;
10637               BFD_ASSERT (s != NULL);
10638               dyn.d_un.d_ptr = s->vma & ~(bfd_vma) 0xffff;
10639               break;
10640
10641             case DT_MIPS_LOCAL_GOTNO:
10642               dyn.d_un.d_val = g->local_gotno;
10643               break;
10644
10645             case DT_MIPS_UNREFEXTNO:
10646               /* The index into the dynamic symbol table which is the
10647                  entry of the first external symbol that is not
10648                  referenced within the same object.  */
10649               dyn.d_un.d_val = bfd_count_sections (output_bfd) + 1;
10650               break;
10651
10652             case DT_MIPS_GOTSYM:
10653               if (gg->global_gotsym)
10654                 {
10655                   dyn.d_un.d_val = gg->global_gotsym->dynindx;
10656                   break;
10657                 }
10658               /* In case if we don't have global got symbols we default
10659                  to setting DT_MIPS_GOTSYM to the same value as
10660                  DT_MIPS_SYMTABNO, so we just fall through.  */
10661
10662             case DT_MIPS_SYMTABNO:
10663               name = ".dynsym";
10664               elemsize = MIPS_ELF_SYM_SIZE (output_bfd);
10665               s = bfd_get_section_by_name (output_bfd, name);
10666               BFD_ASSERT (s != NULL);
10667
10668               dyn.d_un.d_val = s->size / elemsize;
10669               break;
10670
10671             case DT_MIPS_HIPAGENO:
10672               dyn.d_un.d_val = g->local_gotno - htab->reserved_gotno;
10673               break;
10674
10675             case DT_MIPS_RLD_MAP:
10676               {
10677                 struct elf_link_hash_entry *h;
10678                 h = mips_elf_hash_table (info)->rld_symbol;
10679                 if (!h)
10680                   {
10681                     dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
10682                     swap_out_p = FALSE;
10683                     break;
10684                   }
10685                 s = h->root.u.def.section;
10686                 dyn.d_un.d_ptr = (s->output_section->vma + s->output_offset
10687                                   + h->root.u.def.value);
10688               }
10689               break;
10690
10691             case DT_MIPS_OPTIONS:
10692               s = (bfd_get_section_by_name
10693                    (output_bfd, MIPS_ELF_OPTIONS_SECTION_NAME (output_bfd)));
10694               dyn.d_un.d_ptr = s->vma;
10695               break;
10696
10697             case DT_RELASZ:
10698               BFD_ASSERT (htab->is_vxworks);
10699               /* The count does not include the JUMP_SLOT relocations.  */
10700               if (htab->srelplt)
10701                 dyn.d_un.d_val -= htab->srelplt->size;
10702               break;
10703
10704             case DT_PLTREL:
10705               BFD_ASSERT (htab->use_plts_and_copy_relocs);
10706               if (htab->is_vxworks)
10707                 dyn.d_un.d_val = DT_RELA;
10708               else
10709                 dyn.d_un.d_val = DT_REL;
10710               break;
10711
10712             case DT_PLTRELSZ:
10713               BFD_ASSERT (htab->use_plts_and_copy_relocs);
10714               dyn.d_un.d_val = htab->srelplt->size;
10715               break;
10716
10717             case DT_JMPREL:
10718               BFD_ASSERT (htab->use_plts_and_copy_relocs);
10719               dyn.d_un.d_ptr = (htab->srelplt->output_section->vma
10720                                 + htab->srelplt->output_offset);
10721               break;
10722
10723             case DT_TEXTREL:
10724               /* If we didn't need any text relocations after all, delete
10725                  the dynamic tag.  */
10726               if (!(info->flags & DF_TEXTREL))
10727                 {
10728                   dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
10729                   swap_out_p = FALSE;
10730                 }
10731               break;
10732
10733             case DT_FLAGS:
10734               /* If we didn't need any text relocations after all, clear
10735                  DF_TEXTREL from DT_FLAGS.  */
10736               if (!(info->flags & DF_TEXTREL))
10737                 dyn.d_un.d_val &= ~DF_TEXTREL;
10738               else
10739                 swap_out_p = FALSE;
10740               break;
10741
10742             default:
10743               swap_out_p = FALSE;
10744               if (htab->is_vxworks
10745                   && elf_vxworks_finish_dynamic_entry (output_bfd, &dyn))
10746                 swap_out_p = TRUE;
10747               break;
10748             }
10749
10750           if (swap_out_p || dyn_skipped)
10751             (*get_elf_backend_data (dynobj)->s->swap_dyn_out)
10752               (dynobj, &dyn, b - dyn_skipped);
10753
10754           if (dyn_to_skip)
10755             {
10756               dyn_skipped += dyn_to_skip;
10757               dyn_to_skip = 0;
10758             }
10759         }
10760
10761       /* Wipe out any trailing entries if we shifted down a dynamic tag.  */
10762       if (dyn_skipped > 0)
10763         memset (b - dyn_skipped, 0, dyn_skipped);
10764     }
10765
10766   if (sgot != NULL && sgot->size > 0
10767       && !bfd_is_abs_section (sgot->output_section))
10768     {
10769       if (htab->is_vxworks)
10770         {
10771           /* The first entry of the global offset table points to the
10772              ".dynamic" section.  The second is initialized by the
10773              loader and contains the shared library identifier.
10774              The third is also initialized by the loader and points
10775              to the lazy resolution stub.  */
10776           MIPS_ELF_PUT_WORD (output_bfd,
10777                              sdyn->output_offset + sdyn->output_section->vma,
10778                              sgot->contents);
10779           MIPS_ELF_PUT_WORD (output_bfd, 0,
10780                              sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd));
10781           MIPS_ELF_PUT_WORD (output_bfd, 0,
10782                              sgot->contents
10783                              + 2 * MIPS_ELF_GOT_SIZE (output_bfd));
10784         }
10785       else
10786         {
10787           /* The first entry of the global offset table will be filled at
10788              runtime. The second entry will be used by some runtime loaders.
10789              This isn't the case of IRIX rld.  */
10790           MIPS_ELF_PUT_WORD (output_bfd, (bfd_vma) 0, sgot->contents);
10791           MIPS_ELF_PUT_WORD (output_bfd, MIPS_ELF_GNU_GOT1_MASK (output_bfd),
10792                              sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd));
10793         }
10794
10795       elf_section_data (sgot->output_section)->this_hdr.sh_entsize
10796          = MIPS_ELF_GOT_SIZE (output_bfd);
10797     }
10798
10799   /* Generate dynamic relocations for the non-primary gots.  */
10800   if (gg != NULL && gg->next)
10801     {
10802       Elf_Internal_Rela rel[3];
10803       bfd_vma addend = 0;
10804
10805       memset (rel, 0, sizeof (rel));
10806       rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_REL32);
10807
10808       for (g = gg->next; g->next != gg; g = g->next)
10809         {
10810           bfd_vma got_index = g->next->local_gotno + g->next->global_gotno
10811             + g->next->tls_gotno;
10812
10813           MIPS_ELF_PUT_WORD (output_bfd, 0, sgot->contents
10814                              + got_index++ * MIPS_ELF_GOT_SIZE (output_bfd));
10815           MIPS_ELF_PUT_WORD (output_bfd, MIPS_ELF_GNU_GOT1_MASK (output_bfd),
10816                              sgot->contents
10817                              + got_index++ * MIPS_ELF_GOT_SIZE (output_bfd));
10818
10819           if (! info->shared)
10820             continue;
10821
10822           while (got_index < g->assigned_gotno)
10823             {
10824               rel[0].r_offset = rel[1].r_offset = rel[2].r_offset
10825                 = got_index++ * MIPS_ELF_GOT_SIZE (output_bfd);
10826               if (!(mips_elf_create_dynamic_relocation
10827                     (output_bfd, info, rel, NULL,
10828                      bfd_abs_section_ptr,
10829                      0, &addend, sgot)))
10830                 return FALSE;
10831               BFD_ASSERT (addend == 0);
10832             }
10833         }
10834     }
10835
10836   /* The generation of dynamic relocations for the non-primary gots
10837      adds more dynamic relocations.  We cannot count them until
10838      here.  */
10839
10840   if (elf_hash_table (info)->dynamic_sections_created)
10841     {
10842       bfd_byte *b;
10843       bfd_boolean swap_out_p;
10844
10845       BFD_ASSERT (sdyn != NULL);
10846
10847       for (b = sdyn->contents;
10848            b < sdyn->contents + sdyn->size;
10849            b += MIPS_ELF_DYN_SIZE (dynobj))
10850         {
10851           Elf_Internal_Dyn dyn;
10852           asection *s;
10853
10854           /* Read in the current dynamic entry.  */
10855           (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
10856
10857           /* Assume that we're going to modify it and write it out.  */
10858           swap_out_p = TRUE;
10859
10860           switch (dyn.d_tag)
10861             {
10862             case DT_RELSZ:
10863               /* Reduce DT_RELSZ to account for any relocations we
10864                  decided not to make.  This is for the n64 irix rld,
10865                  which doesn't seem to apply any relocations if there
10866                  are trailing null entries.  */
10867               s = mips_elf_rel_dyn_section (info, FALSE);
10868               dyn.d_un.d_val = (s->reloc_count
10869                                 * (ABI_64_P (output_bfd)
10870                                    ? sizeof (Elf64_Mips_External_Rel)
10871                                    : sizeof (Elf32_External_Rel)));
10872               /* Adjust the section size too.  Tools like the prelinker
10873                  can reasonably expect the values to the same.  */
10874               elf_section_data (s->output_section)->this_hdr.sh_size
10875                 = dyn.d_un.d_val;
10876               break;
10877
10878             default:
10879               swap_out_p = FALSE;
10880               break;
10881             }
10882
10883           if (swap_out_p)
10884             (*get_elf_backend_data (dynobj)->s->swap_dyn_out)
10885               (dynobj, &dyn, b);
10886         }
10887     }
10888
10889   {
10890     asection *s;
10891     Elf32_compact_rel cpt;
10892
10893     if (SGI_COMPAT (output_bfd))
10894       {
10895         /* Write .compact_rel section out.  */
10896         s = bfd_get_linker_section (dynobj, ".compact_rel");
10897         if (s != NULL)
10898           {
10899             cpt.id1 = 1;
10900             cpt.num = s->reloc_count;
10901             cpt.id2 = 2;
10902             cpt.offset = (s->output_section->filepos
10903                           + sizeof (Elf32_External_compact_rel));
10904             cpt.reserved0 = 0;
10905             cpt.reserved1 = 0;
10906             bfd_elf32_swap_compact_rel_out (output_bfd, &cpt,
10907                                             ((Elf32_External_compact_rel *)
10908                                              s->contents));
10909
10910             /* Clean up a dummy stub function entry in .text.  */
10911             if (htab->sstubs != NULL)
10912               {
10913                 file_ptr dummy_offset;
10914
10915                 BFD_ASSERT (htab->sstubs->size >= htab->function_stub_size);
10916                 dummy_offset = htab->sstubs->size - htab->function_stub_size;
10917                 memset (htab->sstubs->contents + dummy_offset, 0,
10918                         htab->function_stub_size);
10919               }
10920           }
10921       }
10922
10923     /* The psABI says that the dynamic relocations must be sorted in
10924        increasing order of r_symndx.  The VxWorks EABI doesn't require
10925        this, and because the code below handles REL rather than RELA
10926        relocations, using it for VxWorks would be outright harmful.  */
10927     if (!htab->is_vxworks)
10928       {
10929         s = mips_elf_rel_dyn_section (info, FALSE);
10930         if (s != NULL
10931             && s->size > (bfd_vma)2 * MIPS_ELF_REL_SIZE (output_bfd))
10932           {
10933             reldyn_sorting_bfd = output_bfd;
10934
10935             if (ABI_64_P (output_bfd))
10936               qsort ((Elf64_External_Rel *) s->contents + 1,
10937                      s->reloc_count - 1, sizeof (Elf64_Mips_External_Rel),
10938                      sort_dynamic_relocs_64);
10939             else
10940               qsort ((Elf32_External_Rel *) s->contents + 1,
10941                      s->reloc_count - 1, sizeof (Elf32_External_Rel),
10942                      sort_dynamic_relocs);
10943           }
10944       }
10945   }
10946
10947   if (htab->splt && htab->splt->size > 0)
10948     {
10949       if (htab->is_vxworks)
10950         {
10951           if (info->shared)
10952             mips_vxworks_finish_shared_plt (output_bfd, info);
10953           else
10954             mips_vxworks_finish_exec_plt (output_bfd, info);
10955         }
10956       else
10957         {
10958           BFD_ASSERT (!info->shared);
10959           mips_finish_exec_plt (output_bfd, info);
10960         }
10961     }
10962   return TRUE;
10963 }
10964
10965
10966 /* Set ABFD's EF_MIPS_ARCH and EF_MIPS_MACH flags.  */
10967
10968 static void
10969 mips_set_isa_flags (bfd *abfd)
10970 {
10971   flagword val;
10972
10973   switch (bfd_get_mach (abfd))
10974     {
10975     default:
10976     case bfd_mach_mips3000:
10977       val = E_MIPS_ARCH_1;
10978       break;
10979
10980     case bfd_mach_mips3900:
10981       val = E_MIPS_ARCH_1 | E_MIPS_MACH_3900;
10982       break;
10983
10984     case bfd_mach_mips6000:
10985       val = E_MIPS_ARCH_2;
10986       break;
10987
10988     case bfd_mach_mips4000:
10989     case bfd_mach_mips4300:
10990     case bfd_mach_mips4400:
10991     case bfd_mach_mips4600:
10992       val = E_MIPS_ARCH_3;
10993       break;
10994
10995     case bfd_mach_mips4010:
10996       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4010;
10997       break;
10998
10999     case bfd_mach_mips4100:
11000       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4100;
11001       break;
11002
11003     case bfd_mach_mips4111:
11004       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4111;
11005       break;
11006
11007     case bfd_mach_mips4120:
11008       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4120;
11009       break;
11010
11011     case bfd_mach_mips4650:
11012       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4650;
11013       break;
11014
11015     case bfd_mach_mips5400:
11016       val = E_MIPS_ARCH_4 | E_MIPS_MACH_5400;
11017       break;
11018
11019     case bfd_mach_mips5500:
11020       val = E_MIPS_ARCH_4 | E_MIPS_MACH_5500;
11021       break;
11022
11023     case bfd_mach_mips5900:
11024       val = E_MIPS_ARCH_3 | E_MIPS_MACH_5900;
11025       break;
11026
11027     case bfd_mach_mips9000:
11028       val = E_MIPS_ARCH_4 | E_MIPS_MACH_9000;
11029       break;
11030
11031     case bfd_mach_mips5000:
11032     case bfd_mach_mips7000:
11033     case bfd_mach_mips8000:
11034     case bfd_mach_mips10000:
11035     case bfd_mach_mips12000:
11036     case bfd_mach_mips14000:
11037     case bfd_mach_mips16000:
11038       val = E_MIPS_ARCH_4;
11039       break;
11040
11041     case bfd_mach_mips5:
11042       val = E_MIPS_ARCH_5;
11043       break;
11044
11045     case bfd_mach_mips_loongson_2e:
11046       val = E_MIPS_ARCH_3 | E_MIPS_MACH_LS2E;
11047       break;
11048
11049     case bfd_mach_mips_loongson_2f:
11050       val = E_MIPS_ARCH_3 | E_MIPS_MACH_LS2F;
11051       break;
11052
11053     case bfd_mach_mips_sb1:
11054       val = E_MIPS_ARCH_64 | E_MIPS_MACH_SB1;
11055       break;
11056
11057     case bfd_mach_mips_loongson_3a:
11058       val = E_MIPS_ARCH_64 | E_MIPS_MACH_LS3A;
11059       break;
11060
11061     case bfd_mach_mips_octeon:
11062     case bfd_mach_mips_octeonp:
11063       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON;
11064       break;
11065
11066     case bfd_mach_mips_xlr:
11067       val = E_MIPS_ARCH_64 | E_MIPS_MACH_XLR;
11068       break;
11069
11070     case bfd_mach_mips_octeon2:
11071       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON2;
11072       break;
11073
11074     case bfd_mach_mipsisa32:
11075       val = E_MIPS_ARCH_32;
11076       break;
11077
11078     case bfd_mach_mipsisa64:
11079       val = E_MIPS_ARCH_64;
11080       break;
11081
11082     case bfd_mach_mipsisa32r2:
11083       val = E_MIPS_ARCH_32R2;
11084       break;
11085
11086     case bfd_mach_mipsisa64r2:
11087       val = E_MIPS_ARCH_64R2;
11088       break;
11089     }
11090   elf_elfheader (abfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH);
11091   elf_elfheader (abfd)->e_flags |= val;
11092
11093 }
11094
11095
11096 /* The final processing done just before writing out a MIPS ELF object
11097    file.  This gets the MIPS architecture right based on the machine
11098    number.  This is used by both the 32-bit and the 64-bit ABI.  */
11099
11100 void
11101 _bfd_mips_elf_final_write_processing (bfd *abfd,
11102                                       bfd_boolean linker ATTRIBUTE_UNUSED)
11103 {
11104   unsigned int i;
11105   Elf_Internal_Shdr **hdrpp;
11106   const char *name;
11107   asection *sec;
11108
11109   /* Keep the existing EF_MIPS_MACH and EF_MIPS_ARCH flags if the former
11110      is nonzero.  This is for compatibility with old objects, which used
11111      a combination of a 32-bit EF_MIPS_ARCH and a 64-bit EF_MIPS_MACH.  */
11112   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == 0)
11113     mips_set_isa_flags (abfd);
11114
11115   /* Set the sh_info field for .gptab sections and other appropriate
11116      info for each special section.  */
11117   for (i = 1, hdrpp = elf_elfsections (abfd) + 1;
11118        i < elf_numsections (abfd);
11119        i++, hdrpp++)
11120     {
11121       switch ((*hdrpp)->sh_type)
11122         {
11123         case SHT_MIPS_MSYM:
11124         case SHT_MIPS_LIBLIST:
11125           sec = bfd_get_section_by_name (abfd, ".dynstr");
11126           if (sec != NULL)
11127             (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
11128           break;
11129
11130         case SHT_MIPS_GPTAB:
11131           BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
11132           name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
11133           BFD_ASSERT (name != NULL
11134                       && CONST_STRNEQ (name, ".gptab."));
11135           sec = bfd_get_section_by_name (abfd, name + sizeof ".gptab" - 1);
11136           BFD_ASSERT (sec != NULL);
11137           (*hdrpp)->sh_info = elf_section_data (sec)->this_idx;
11138           break;
11139
11140         case SHT_MIPS_CONTENT:
11141           BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
11142           name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
11143           BFD_ASSERT (name != NULL
11144                       && CONST_STRNEQ (name, ".MIPS.content"));
11145           sec = bfd_get_section_by_name (abfd,
11146                                          name + sizeof ".MIPS.content" - 1);
11147           BFD_ASSERT (sec != NULL);
11148           (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
11149           break;
11150
11151         case SHT_MIPS_SYMBOL_LIB:
11152           sec = bfd_get_section_by_name (abfd, ".dynsym");
11153           if (sec != NULL)
11154             (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
11155           sec = bfd_get_section_by_name (abfd, ".liblist");
11156           if (sec != NULL)
11157             (*hdrpp)->sh_info = elf_section_data (sec)->this_idx;
11158           break;
11159
11160         case SHT_MIPS_EVENTS:
11161           BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
11162           name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
11163           BFD_ASSERT (name != NULL);
11164           if (CONST_STRNEQ (name, ".MIPS.events"))
11165             sec = bfd_get_section_by_name (abfd,
11166                                            name + sizeof ".MIPS.events" - 1);
11167           else
11168             {
11169               BFD_ASSERT (CONST_STRNEQ (name, ".MIPS.post_rel"));
11170               sec = bfd_get_section_by_name (abfd,
11171                                              (name
11172                                               + sizeof ".MIPS.post_rel" - 1));
11173             }
11174           BFD_ASSERT (sec != NULL);
11175           (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
11176           break;
11177
11178         }
11179     }
11180 }
11181 \f
11182 /* When creating an IRIX5 executable, we need REGINFO and RTPROC
11183    segments.  */
11184
11185 int
11186 _bfd_mips_elf_additional_program_headers (bfd *abfd,
11187                                           struct bfd_link_info *info ATTRIBUTE_UNUSED)
11188 {
11189   asection *s;
11190   int ret = 0;
11191
11192   /* See if we need a PT_MIPS_REGINFO segment.  */
11193   s = bfd_get_section_by_name (abfd, ".reginfo");
11194   if (s && (s->flags & SEC_LOAD))
11195     ++ret;
11196
11197   /* See if we need a PT_MIPS_OPTIONS segment.  */
11198   if (IRIX_COMPAT (abfd) == ict_irix6
11199       && bfd_get_section_by_name (abfd,
11200                                   MIPS_ELF_OPTIONS_SECTION_NAME (abfd)))
11201     ++ret;
11202
11203   /* See if we need a PT_MIPS_RTPROC segment.  */
11204   if (IRIX_COMPAT (abfd) == ict_irix5
11205       && bfd_get_section_by_name (abfd, ".dynamic")
11206       && bfd_get_section_by_name (abfd, ".mdebug"))
11207     ++ret;
11208
11209   /* Allocate a PT_NULL header in dynamic objects.  See
11210      _bfd_mips_elf_modify_segment_map for details.  */
11211   if (!SGI_COMPAT (abfd)
11212       && bfd_get_section_by_name (abfd, ".dynamic"))
11213     ++ret;
11214
11215   return ret;
11216 }
11217
11218 /* Modify the segment map for an IRIX5 executable.  */
11219
11220 bfd_boolean
11221 _bfd_mips_elf_modify_segment_map (bfd *abfd,
11222                                   struct bfd_link_info *info)
11223 {
11224   asection *s;
11225   struct elf_segment_map *m, **pm;
11226   bfd_size_type amt;
11227
11228   /* If there is a .reginfo section, we need a PT_MIPS_REGINFO
11229      segment.  */
11230   s = bfd_get_section_by_name (abfd, ".reginfo");
11231   if (s != NULL && (s->flags & SEC_LOAD) != 0)
11232     {
11233       for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
11234         if (m->p_type == PT_MIPS_REGINFO)
11235           break;
11236       if (m == NULL)
11237         {
11238           amt = sizeof *m;
11239           m = bfd_zalloc (abfd, amt);
11240           if (m == NULL)
11241             return FALSE;
11242
11243           m->p_type = PT_MIPS_REGINFO;
11244           m->count = 1;
11245           m->sections[0] = s;
11246
11247           /* We want to put it after the PHDR and INTERP segments.  */
11248           pm = &elf_tdata (abfd)->segment_map;
11249           while (*pm != NULL
11250                  && ((*pm)->p_type == PT_PHDR
11251                      || (*pm)->p_type == PT_INTERP))
11252             pm = &(*pm)->next;
11253
11254           m->next = *pm;
11255           *pm = m;
11256         }
11257     }
11258
11259   /* For IRIX 6, we don't have .mdebug sections, nor does anything but
11260      .dynamic end up in PT_DYNAMIC.  However, we do have to insert a
11261      PT_MIPS_OPTIONS segment immediately following the program header
11262      table.  */
11263   if (NEWABI_P (abfd)
11264       /* On non-IRIX6 new abi, we'll have already created a segment
11265          for this section, so don't create another.  I'm not sure this
11266          is not also the case for IRIX 6, but I can't test it right
11267          now.  */
11268       && IRIX_COMPAT (abfd) == ict_irix6)
11269     {
11270       for (s = abfd->sections; s; s = s->next)
11271         if (elf_section_data (s)->this_hdr.sh_type == SHT_MIPS_OPTIONS)
11272           break;
11273
11274       if (s)
11275         {
11276           struct elf_segment_map *options_segment;
11277
11278           pm = &elf_tdata (abfd)->segment_map;
11279           while (*pm != NULL
11280                  && ((*pm)->p_type == PT_PHDR
11281                      || (*pm)->p_type == PT_INTERP))
11282             pm = &(*pm)->next;
11283
11284           if (*pm == NULL || (*pm)->p_type != PT_MIPS_OPTIONS)
11285             {
11286               amt = sizeof (struct elf_segment_map);
11287               options_segment = bfd_zalloc (abfd, amt);
11288               options_segment->next = *pm;
11289               options_segment->p_type = PT_MIPS_OPTIONS;
11290               options_segment->p_flags = PF_R;
11291               options_segment->p_flags_valid = TRUE;
11292               options_segment->count = 1;
11293               options_segment->sections[0] = s;
11294               *pm = options_segment;
11295             }
11296         }
11297     }
11298   else
11299     {
11300       if (IRIX_COMPAT (abfd) == ict_irix5)
11301         {
11302           /* If there are .dynamic and .mdebug sections, we make a room
11303              for the RTPROC header.  FIXME: Rewrite without section names.  */
11304           if (bfd_get_section_by_name (abfd, ".interp") == NULL
11305               && bfd_get_section_by_name (abfd, ".dynamic") != NULL
11306               && bfd_get_section_by_name (abfd, ".mdebug") != NULL)
11307             {
11308               for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
11309                 if (m->p_type == PT_MIPS_RTPROC)
11310                   break;
11311               if (m == NULL)
11312                 {
11313                   amt = sizeof *m;
11314                   m = bfd_zalloc (abfd, amt);
11315                   if (m == NULL)
11316                     return FALSE;
11317
11318                   m->p_type = PT_MIPS_RTPROC;
11319
11320                   s = bfd_get_section_by_name (abfd, ".rtproc");
11321                   if (s == NULL)
11322                     {
11323                       m->count = 0;
11324                       m->p_flags = 0;
11325                       m->p_flags_valid = 1;
11326                     }
11327                   else
11328                     {
11329                       m->count = 1;
11330                       m->sections[0] = s;
11331                     }
11332
11333                   /* We want to put it after the DYNAMIC segment.  */
11334                   pm = &elf_tdata (abfd)->segment_map;
11335                   while (*pm != NULL && (*pm)->p_type != PT_DYNAMIC)
11336                     pm = &(*pm)->next;
11337                   if (*pm != NULL)
11338                     pm = &(*pm)->next;
11339
11340                   m->next = *pm;
11341                   *pm = m;
11342                 }
11343             }
11344         }
11345       /* On IRIX5, the PT_DYNAMIC segment includes the .dynamic,
11346          .dynstr, .dynsym, and .hash sections, and everything in
11347          between.  */
11348       for (pm = &elf_tdata (abfd)->segment_map; *pm != NULL;
11349            pm = &(*pm)->next)
11350         if ((*pm)->p_type == PT_DYNAMIC)
11351           break;
11352       m = *pm;
11353       if (m != NULL && IRIX_COMPAT (abfd) == ict_none)
11354         {
11355           /* For a normal mips executable the permissions for the PT_DYNAMIC
11356              segment are read, write and execute. We do that here since
11357              the code in elf.c sets only the read permission. This matters
11358              sometimes for the dynamic linker.  */
11359           if (bfd_get_section_by_name (abfd, ".dynamic") != NULL)
11360             {
11361               m->p_flags = PF_R | PF_W | PF_X;
11362               m->p_flags_valid = 1;
11363             }
11364         }
11365       /* GNU/Linux binaries do not need the extended PT_DYNAMIC section.
11366          glibc's dynamic linker has traditionally derived the number of
11367          tags from the p_filesz field, and sometimes allocates stack
11368          arrays of that size.  An overly-big PT_DYNAMIC segment can
11369          be actively harmful in such cases.  Making PT_DYNAMIC contain
11370          other sections can also make life hard for the prelinker,
11371          which might move one of the other sections to a different
11372          PT_LOAD segment.  */
11373       if (SGI_COMPAT (abfd)
11374           && m != NULL
11375           && m->count == 1
11376           && strcmp (m->sections[0]->name, ".dynamic") == 0)
11377         {
11378           static const char *sec_names[] =
11379           {
11380             ".dynamic", ".dynstr", ".dynsym", ".hash"
11381           };
11382           bfd_vma low, high;
11383           unsigned int i, c;
11384           struct elf_segment_map *n;
11385
11386           low = ~(bfd_vma) 0;
11387           high = 0;
11388           for (i = 0; i < sizeof sec_names / sizeof sec_names[0]; i++)
11389             {
11390               s = bfd_get_section_by_name (abfd, sec_names[i]);
11391               if (s != NULL && (s->flags & SEC_LOAD) != 0)
11392                 {
11393                   bfd_size_type sz;
11394
11395                   if (low > s->vma)
11396                     low = s->vma;
11397                   sz = s->size;
11398                   if (high < s->vma + sz)
11399                     high = s->vma + sz;
11400                 }
11401             }
11402
11403           c = 0;
11404           for (s = abfd->sections; s != NULL; s = s->next)
11405             if ((s->flags & SEC_LOAD) != 0
11406                 && s->vma >= low
11407                 && s->vma + s->size <= high)
11408               ++c;
11409
11410           amt = sizeof *n + (bfd_size_type) (c - 1) * sizeof (asection *);
11411           n = bfd_zalloc (abfd, amt);
11412           if (n == NULL)
11413             return FALSE;
11414           *n = *m;
11415           n->count = c;
11416
11417           i = 0;
11418           for (s = abfd->sections; s != NULL; s = s->next)
11419             {
11420               if ((s->flags & SEC_LOAD) != 0
11421                   && s->vma >= low
11422                   && s->vma + s->size <= high)
11423                 {
11424                   n->sections[i] = s;
11425                   ++i;
11426                 }
11427             }
11428
11429           *pm = n;
11430         }
11431     }
11432
11433   /* Allocate a spare program header in dynamic objects so that tools
11434      like the prelinker can add an extra PT_LOAD entry.
11435
11436      If the prelinker needs to make room for a new PT_LOAD entry, its
11437      standard procedure is to move the first (read-only) sections into
11438      the new (writable) segment.  However, the MIPS ABI requires
11439      .dynamic to be in a read-only segment, and the section will often
11440      start within sizeof (ElfNN_Phdr) bytes of the last program header.
11441
11442      Although the prelinker could in principle move .dynamic to a
11443      writable segment, it seems better to allocate a spare program
11444      header instead, and avoid the need to move any sections.
11445      There is a long tradition of allocating spare dynamic tags,
11446      so allocating a spare program header seems like a natural
11447      extension.
11448
11449      If INFO is NULL, we may be copying an already prelinked binary
11450      with objcopy or strip, so do not add this header.  */
11451   if (info != NULL
11452       && !SGI_COMPAT (abfd)
11453       && bfd_get_section_by_name (abfd, ".dynamic"))
11454     {
11455       for (pm = &elf_tdata (abfd)->segment_map; *pm != NULL; pm = &(*pm)->next)
11456         if ((*pm)->p_type == PT_NULL)
11457           break;
11458       if (*pm == NULL)
11459         {
11460           m = bfd_zalloc (abfd, sizeof (*m));
11461           if (m == NULL)
11462             return FALSE;
11463
11464           m->p_type = PT_NULL;
11465           *pm = m;
11466         }
11467     }
11468
11469   return TRUE;
11470 }
11471 \f
11472 /* Return the section that should be marked against GC for a given
11473    relocation.  */
11474
11475 asection *
11476 _bfd_mips_elf_gc_mark_hook (asection *sec,
11477                             struct bfd_link_info *info,
11478                             Elf_Internal_Rela *rel,
11479                             struct elf_link_hash_entry *h,
11480                             Elf_Internal_Sym *sym)
11481 {
11482   /* ??? Do mips16 stub sections need to be handled special?  */
11483
11484   if (h != NULL)
11485     switch (ELF_R_TYPE (sec->owner, rel->r_info))
11486       {
11487       case R_MIPS_GNU_VTINHERIT:
11488       case R_MIPS_GNU_VTENTRY:
11489         return NULL;
11490       }
11491
11492   return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
11493 }
11494
11495 /* Update the got entry reference counts for the section being removed.  */
11496
11497 bfd_boolean
11498 _bfd_mips_elf_gc_sweep_hook (bfd *abfd ATTRIBUTE_UNUSED,
11499                              struct bfd_link_info *info ATTRIBUTE_UNUSED,
11500                              asection *sec ATTRIBUTE_UNUSED,
11501                              const Elf_Internal_Rela *relocs ATTRIBUTE_UNUSED)
11502 {
11503 #if 0
11504   Elf_Internal_Shdr *symtab_hdr;
11505   struct elf_link_hash_entry **sym_hashes;
11506   bfd_signed_vma *local_got_refcounts;
11507   const Elf_Internal_Rela *rel, *relend;
11508   unsigned long r_symndx;
11509   struct elf_link_hash_entry *h;
11510
11511   if (info->relocatable)
11512     return TRUE;
11513
11514   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
11515   sym_hashes = elf_sym_hashes (abfd);
11516   local_got_refcounts = elf_local_got_refcounts (abfd);
11517
11518   relend = relocs + sec->reloc_count;
11519   for (rel = relocs; rel < relend; rel++)
11520     switch (ELF_R_TYPE (abfd, rel->r_info))
11521       {
11522       case R_MIPS16_GOT16:
11523       case R_MIPS16_CALL16:
11524       case R_MIPS_GOT16:
11525       case R_MIPS_CALL16:
11526       case R_MIPS_CALL_HI16:
11527       case R_MIPS_CALL_LO16:
11528       case R_MIPS_GOT_HI16:
11529       case R_MIPS_GOT_LO16:
11530       case R_MIPS_GOT_DISP:
11531       case R_MIPS_GOT_PAGE:
11532       case R_MIPS_GOT_OFST:
11533       case R_MICROMIPS_GOT16:
11534       case R_MICROMIPS_CALL16:
11535       case R_MICROMIPS_CALL_HI16:
11536       case R_MICROMIPS_CALL_LO16:
11537       case R_MICROMIPS_GOT_HI16:
11538       case R_MICROMIPS_GOT_LO16:
11539       case R_MICROMIPS_GOT_DISP:
11540       case R_MICROMIPS_GOT_PAGE:
11541       case R_MICROMIPS_GOT_OFST:
11542         /* ??? It would seem that the existing MIPS code does no sort
11543            of reference counting or whatnot on its GOT and PLT entries,
11544            so it is not possible to garbage collect them at this time.  */
11545         break;
11546
11547       default:
11548         break;
11549       }
11550 #endif
11551
11552   return TRUE;
11553 }
11554 \f
11555 /* Copy data from a MIPS ELF indirect symbol to its direct symbol,
11556    hiding the old indirect symbol.  Process additional relocation
11557    information.  Also called for weakdefs, in which case we just let
11558    _bfd_elf_link_hash_copy_indirect copy the flags for us.  */
11559
11560 void
11561 _bfd_mips_elf_copy_indirect_symbol (struct bfd_link_info *info,
11562                                     struct elf_link_hash_entry *dir,
11563                                     struct elf_link_hash_entry *ind)
11564 {
11565   struct mips_elf_link_hash_entry *dirmips, *indmips;
11566
11567   _bfd_elf_link_hash_copy_indirect (info, dir, ind);
11568
11569   dirmips = (struct mips_elf_link_hash_entry *) dir;
11570   indmips = (struct mips_elf_link_hash_entry *) ind;
11571   /* Any absolute non-dynamic relocations against an indirect or weak
11572      definition will be against the target symbol.  */
11573   if (indmips->has_static_relocs)
11574     dirmips->has_static_relocs = TRUE;
11575
11576   if (ind->root.type != bfd_link_hash_indirect)
11577     return;
11578
11579   dirmips->possibly_dynamic_relocs += indmips->possibly_dynamic_relocs;
11580   if (indmips->readonly_reloc)
11581     dirmips->readonly_reloc = TRUE;
11582   if (indmips->no_fn_stub)
11583     dirmips->no_fn_stub = TRUE;
11584   if (indmips->fn_stub)
11585     {
11586       dirmips->fn_stub = indmips->fn_stub;
11587       indmips->fn_stub = NULL;
11588     }
11589   if (indmips->need_fn_stub)
11590     {
11591       dirmips->need_fn_stub = TRUE;
11592       indmips->need_fn_stub = FALSE;
11593     }
11594   if (indmips->call_stub)
11595     {
11596       dirmips->call_stub = indmips->call_stub;
11597       indmips->call_stub = NULL;
11598     }
11599   if (indmips->call_fp_stub)
11600     {
11601       dirmips->call_fp_stub = indmips->call_fp_stub;
11602       indmips->call_fp_stub = NULL;
11603     }
11604   if (indmips->global_got_area < dirmips->global_got_area)
11605     dirmips->global_got_area = indmips->global_got_area;
11606   if (indmips->global_got_area < GGA_NONE)
11607     indmips->global_got_area = GGA_NONE;
11608   if (indmips->has_nonpic_branches)
11609     dirmips->has_nonpic_branches = TRUE;
11610
11611   if (dirmips->tls_type == 0)
11612     dirmips->tls_type = indmips->tls_type;
11613 }
11614 \f
11615 #define PDR_SIZE 32
11616
11617 bfd_boolean
11618 _bfd_mips_elf_discard_info (bfd *abfd, struct elf_reloc_cookie *cookie,
11619                             struct bfd_link_info *info)
11620 {
11621   asection *o;
11622   bfd_boolean ret = FALSE;
11623   unsigned char *tdata;
11624   size_t i, skip;
11625
11626   o = bfd_get_section_by_name (abfd, ".pdr");
11627   if (! o)
11628     return FALSE;
11629   if (o->size == 0)
11630     return FALSE;
11631   if (o->size % PDR_SIZE != 0)
11632     return FALSE;
11633   if (o->output_section != NULL
11634       && bfd_is_abs_section (o->output_section))
11635     return FALSE;
11636
11637   tdata = bfd_zmalloc (o->size / PDR_SIZE);
11638   if (! tdata)
11639     return FALSE;
11640
11641   cookie->rels = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
11642                                             info->keep_memory);
11643   if (!cookie->rels)
11644     {
11645       free (tdata);
11646       return FALSE;
11647     }
11648
11649   cookie->rel = cookie->rels;
11650   cookie->relend = cookie->rels + o->reloc_count;
11651
11652   for (i = 0, skip = 0; i < o->size / PDR_SIZE; i ++)
11653     {
11654       if (bfd_elf_reloc_symbol_deleted_p (i * PDR_SIZE, cookie))
11655         {
11656           tdata[i] = 1;
11657           skip ++;
11658         }
11659     }
11660
11661   if (skip != 0)
11662     {
11663       mips_elf_section_data (o)->u.tdata = tdata;
11664       o->size -= skip * PDR_SIZE;
11665       ret = TRUE;
11666     }
11667   else
11668     free (tdata);
11669
11670   if (! info->keep_memory)
11671     free (cookie->rels);
11672
11673   return ret;
11674 }
11675
11676 bfd_boolean
11677 _bfd_mips_elf_ignore_discarded_relocs (asection *sec)
11678 {
11679   if (strcmp (sec->name, ".pdr") == 0)
11680     return TRUE;
11681   return FALSE;
11682 }
11683
11684 bfd_boolean
11685 _bfd_mips_elf_write_section (bfd *output_bfd,
11686                              struct bfd_link_info *link_info ATTRIBUTE_UNUSED,
11687                              asection *sec, bfd_byte *contents)
11688 {
11689   bfd_byte *to, *from, *end;
11690   int i;
11691
11692   if (strcmp (sec->name, ".pdr") != 0)
11693     return FALSE;
11694
11695   if (mips_elf_section_data (sec)->u.tdata == NULL)
11696     return FALSE;
11697
11698   to = contents;
11699   end = contents + sec->size;
11700   for (from = contents, i = 0;
11701        from < end;
11702        from += PDR_SIZE, i++)
11703     {
11704       if ((mips_elf_section_data (sec)->u.tdata)[i] == 1)
11705         continue;
11706       if (to != from)
11707         memcpy (to, from, PDR_SIZE);
11708       to += PDR_SIZE;
11709     }
11710   bfd_set_section_contents (output_bfd, sec->output_section, contents,
11711                             sec->output_offset, sec->size);
11712   return TRUE;
11713 }
11714 \f
11715 /* microMIPS code retains local labels for linker relaxation.  Omit them
11716    from output by default for clarity.  */
11717
11718 bfd_boolean
11719 _bfd_mips_elf_is_target_special_symbol (bfd *abfd, asymbol *sym)
11720 {
11721   return _bfd_elf_is_local_label_name (abfd, sym->name);
11722 }
11723
11724 /* MIPS ELF uses a special find_nearest_line routine in order the
11725    handle the ECOFF debugging information.  */
11726
11727 struct mips_elf_find_line
11728 {
11729   struct ecoff_debug_info d;
11730   struct ecoff_find_line i;
11731 };
11732
11733 bfd_boolean
11734 _bfd_mips_elf_find_nearest_line (bfd *abfd, asection *section,
11735                                  asymbol **symbols, bfd_vma offset,
11736                                  const char **filename_ptr,
11737                                  const char **functionname_ptr,
11738                                  unsigned int *line_ptr)
11739 {
11740   asection *msec;
11741
11742   if (_bfd_dwarf1_find_nearest_line (abfd, section, symbols, offset,
11743                                      filename_ptr, functionname_ptr,
11744                                      line_ptr))
11745     return TRUE;
11746
11747   if (_bfd_dwarf2_find_nearest_line (abfd, dwarf_debug_sections,
11748                                      section, symbols, offset,
11749                                      filename_ptr, functionname_ptr,
11750                                      line_ptr, NULL, ABI_64_P (abfd) ? 8 : 0,
11751                                      &elf_tdata (abfd)->dwarf2_find_line_info))
11752     return TRUE;
11753
11754   msec = bfd_get_section_by_name (abfd, ".mdebug");
11755   if (msec != NULL)
11756     {
11757       flagword origflags;
11758       struct mips_elf_find_line *fi;
11759       const struct ecoff_debug_swap * const swap =
11760         get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
11761
11762       /* If we are called during a link, mips_elf_final_link may have
11763          cleared the SEC_HAS_CONTENTS field.  We force it back on here
11764          if appropriate (which it normally will be).  */
11765       origflags = msec->flags;
11766       if (elf_section_data (msec)->this_hdr.sh_type != SHT_NOBITS)
11767         msec->flags |= SEC_HAS_CONTENTS;
11768
11769       fi = elf_tdata (abfd)->find_line_info;
11770       if (fi == NULL)
11771         {
11772           bfd_size_type external_fdr_size;
11773           char *fraw_src;
11774           char *fraw_end;
11775           struct fdr *fdr_ptr;
11776           bfd_size_type amt = sizeof (struct mips_elf_find_line);
11777
11778           fi = bfd_zalloc (abfd, amt);
11779           if (fi == NULL)
11780             {
11781               msec->flags = origflags;
11782               return FALSE;
11783             }
11784
11785           if (! _bfd_mips_elf_read_ecoff_info (abfd, msec, &fi->d))
11786             {
11787               msec->flags = origflags;
11788               return FALSE;
11789             }
11790
11791           /* Swap in the FDR information.  */
11792           amt = fi->d.symbolic_header.ifdMax * sizeof (struct fdr);
11793           fi->d.fdr = bfd_alloc (abfd, amt);
11794           if (fi->d.fdr == NULL)
11795             {
11796               msec->flags = origflags;
11797               return FALSE;
11798             }
11799           external_fdr_size = swap->external_fdr_size;
11800           fdr_ptr = fi->d.fdr;
11801           fraw_src = (char *) fi->d.external_fdr;
11802           fraw_end = (fraw_src
11803                       + fi->d.symbolic_header.ifdMax * external_fdr_size);
11804           for (; fraw_src < fraw_end; fraw_src += external_fdr_size, fdr_ptr++)
11805             (*swap->swap_fdr_in) (abfd, fraw_src, fdr_ptr);
11806
11807           elf_tdata (abfd)->find_line_info = fi;
11808
11809           /* Note that we don't bother to ever free this information.
11810              find_nearest_line is either called all the time, as in
11811              objdump -l, so the information should be saved, or it is
11812              rarely called, as in ld error messages, so the memory
11813              wasted is unimportant.  Still, it would probably be a
11814              good idea for free_cached_info to throw it away.  */
11815         }
11816
11817       if (_bfd_ecoff_locate_line (abfd, section, offset, &fi->d, swap,
11818                                   &fi->i, filename_ptr, functionname_ptr,
11819                                   line_ptr))
11820         {
11821           msec->flags = origflags;
11822           return TRUE;
11823         }
11824
11825       msec->flags = origflags;
11826     }
11827
11828   /* Fall back on the generic ELF find_nearest_line routine.  */
11829
11830   return _bfd_elf_find_nearest_line (abfd, section, symbols, offset,
11831                                      filename_ptr, functionname_ptr,
11832                                      line_ptr);
11833 }
11834
11835 bfd_boolean
11836 _bfd_mips_elf_find_inliner_info (bfd *abfd,
11837                                  const char **filename_ptr,
11838                                  const char **functionname_ptr,
11839                                  unsigned int *line_ptr)
11840 {
11841   bfd_boolean found;
11842   found = _bfd_dwarf2_find_inliner_info (abfd, filename_ptr,
11843                                          functionname_ptr, line_ptr,
11844                                          & elf_tdata (abfd)->dwarf2_find_line_info);
11845   return found;
11846 }
11847
11848 \f
11849 /* When are writing out the .options or .MIPS.options section,
11850    remember the bytes we are writing out, so that we can install the
11851    GP value in the section_processing routine.  */
11852
11853 bfd_boolean
11854 _bfd_mips_elf_set_section_contents (bfd *abfd, sec_ptr section,
11855                                     const void *location,
11856                                     file_ptr offset, bfd_size_type count)
11857 {
11858   if (MIPS_ELF_OPTIONS_SECTION_NAME_P (section->name))
11859     {
11860       bfd_byte *c;
11861
11862       if (elf_section_data (section) == NULL)
11863         {
11864           bfd_size_type amt = sizeof (struct bfd_elf_section_data);
11865           section->used_by_bfd = bfd_zalloc (abfd, amt);
11866           if (elf_section_data (section) == NULL)
11867             return FALSE;
11868         }
11869       c = mips_elf_section_data (section)->u.tdata;
11870       if (c == NULL)
11871         {
11872           c = bfd_zalloc (abfd, section->size);
11873           if (c == NULL)
11874             return FALSE;
11875           mips_elf_section_data (section)->u.tdata = c;
11876         }
11877
11878       memcpy (c + offset, location, count);
11879     }
11880
11881   return _bfd_elf_set_section_contents (abfd, section, location, offset,
11882                                         count);
11883 }
11884
11885 /* This is almost identical to bfd_generic_get_... except that some
11886    MIPS relocations need to be handled specially.  Sigh.  */
11887
11888 bfd_byte *
11889 _bfd_elf_mips_get_relocated_section_contents
11890   (bfd *abfd,
11891    struct bfd_link_info *link_info,
11892    struct bfd_link_order *link_order,
11893    bfd_byte *data,
11894    bfd_boolean relocatable,
11895    asymbol **symbols)
11896 {
11897   /* Get enough memory to hold the stuff */
11898   bfd *input_bfd = link_order->u.indirect.section->owner;
11899   asection *input_section = link_order->u.indirect.section;
11900   bfd_size_type sz;
11901
11902   long reloc_size = bfd_get_reloc_upper_bound (input_bfd, input_section);
11903   arelent **reloc_vector = NULL;
11904   long reloc_count;
11905
11906   if (reloc_size < 0)
11907     goto error_return;
11908
11909   reloc_vector = bfd_malloc (reloc_size);
11910   if (reloc_vector == NULL && reloc_size != 0)
11911     goto error_return;
11912
11913   /* read in the section */
11914   sz = input_section->rawsize ? input_section->rawsize : input_section->size;
11915   if (!bfd_get_section_contents (input_bfd, input_section, data, 0, sz))
11916     goto error_return;
11917
11918   reloc_count = bfd_canonicalize_reloc (input_bfd,
11919                                         input_section,
11920                                         reloc_vector,
11921                                         symbols);
11922   if (reloc_count < 0)
11923     goto error_return;
11924
11925   if (reloc_count > 0)
11926     {
11927       arelent **parent;
11928       /* for mips */
11929       int gp_found;
11930       bfd_vma gp = 0x12345678;  /* initialize just to shut gcc up */
11931
11932       {
11933         struct bfd_hash_entry *h;
11934         struct bfd_link_hash_entry *lh;
11935         /* Skip all this stuff if we aren't mixing formats.  */
11936         if (abfd && input_bfd
11937             && abfd->xvec == input_bfd->xvec)
11938           lh = 0;
11939         else
11940           {
11941             h = bfd_hash_lookup (&link_info->hash->table, "_gp", FALSE, FALSE);
11942             lh = (struct bfd_link_hash_entry *) h;
11943           }
11944       lookup:
11945         if (lh)
11946           {
11947             switch (lh->type)
11948               {
11949               case bfd_link_hash_undefined:
11950               case bfd_link_hash_undefweak:
11951               case bfd_link_hash_common:
11952                 gp_found = 0;
11953                 break;
11954               case bfd_link_hash_defined:
11955               case bfd_link_hash_defweak:
11956                 gp_found = 1;
11957                 gp = lh->u.def.value;
11958                 break;
11959               case bfd_link_hash_indirect:
11960               case bfd_link_hash_warning:
11961                 lh = lh->u.i.link;
11962                 /* @@FIXME  ignoring warning for now */
11963                 goto lookup;
11964               case bfd_link_hash_new:
11965               default:
11966                 abort ();
11967               }
11968           }
11969         else
11970           gp_found = 0;
11971       }
11972       /* end mips */
11973       for (parent = reloc_vector; *parent != NULL; parent++)
11974         {
11975           char *error_message = NULL;
11976           bfd_reloc_status_type r;
11977
11978           /* Specific to MIPS: Deal with relocation types that require
11979              knowing the gp of the output bfd.  */
11980           asymbol *sym = *(*parent)->sym_ptr_ptr;
11981
11982           /* If we've managed to find the gp and have a special
11983              function for the relocation then go ahead, else default
11984              to the generic handling.  */
11985           if (gp_found
11986               && (*parent)->howto->special_function
11987               == _bfd_mips_elf32_gprel16_reloc)
11988             r = _bfd_mips_elf_gprel16_with_gp (input_bfd, sym, *parent,
11989                                                input_section, relocatable,
11990                                                data, gp);
11991           else
11992             r = bfd_perform_relocation (input_bfd, *parent, data,
11993                                         input_section,
11994                                         relocatable ? abfd : NULL,
11995                                         &error_message);
11996
11997           if (relocatable)
11998             {
11999               asection *os = input_section->output_section;
12000
12001               /* A partial link, so keep the relocs */
12002               os->orelocation[os->reloc_count] = *parent;
12003               os->reloc_count++;
12004             }
12005
12006           if (r != bfd_reloc_ok)
12007             {
12008               switch (r)
12009                 {
12010                 case bfd_reloc_undefined:
12011                   if (!((*link_info->callbacks->undefined_symbol)
12012                         (link_info, bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
12013                          input_bfd, input_section, (*parent)->address, TRUE)))
12014                     goto error_return;
12015                   break;
12016                 case bfd_reloc_dangerous:
12017                   BFD_ASSERT (error_message != NULL);
12018                   if (!((*link_info->callbacks->reloc_dangerous)
12019                         (link_info, error_message, input_bfd, input_section,
12020                          (*parent)->address)))
12021                     goto error_return;
12022                   break;
12023                 case bfd_reloc_overflow:
12024                   if (!((*link_info->callbacks->reloc_overflow)
12025                         (link_info, NULL,
12026                          bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
12027                          (*parent)->howto->name, (*parent)->addend,
12028                          input_bfd, input_section, (*parent)->address)))
12029                     goto error_return;
12030                   break;
12031                 case bfd_reloc_outofrange:
12032                 default:
12033                   abort ();
12034                   break;
12035                 }
12036
12037             }
12038         }
12039     }
12040   if (reloc_vector != NULL)
12041     free (reloc_vector);
12042   return data;
12043
12044 error_return:
12045   if (reloc_vector != NULL)
12046     free (reloc_vector);
12047   return NULL;
12048 }
12049 \f
12050 static bfd_boolean
12051 mips_elf_relax_delete_bytes (bfd *abfd,
12052                              asection *sec, bfd_vma addr, int count)
12053 {
12054   Elf_Internal_Shdr *symtab_hdr;
12055   unsigned int sec_shndx;
12056   bfd_byte *contents;
12057   Elf_Internal_Rela *irel, *irelend;
12058   Elf_Internal_Sym *isym;
12059   Elf_Internal_Sym *isymend;
12060   struct elf_link_hash_entry **sym_hashes;
12061   struct elf_link_hash_entry **end_hashes;
12062   struct elf_link_hash_entry **start_hashes;
12063   unsigned int symcount;
12064
12065   sec_shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
12066   contents = elf_section_data (sec)->this_hdr.contents;
12067
12068   irel = elf_section_data (sec)->relocs;
12069   irelend = irel + sec->reloc_count;
12070
12071   /* Actually delete the bytes.  */
12072   memmove (contents + addr, contents + addr + count,
12073            (size_t) (sec->size - addr - count));
12074   sec->size -= count;
12075
12076   /* Adjust all the relocs.  */
12077   for (irel = elf_section_data (sec)->relocs; irel < irelend; irel++)
12078     {
12079       /* Get the new reloc address.  */
12080       if (irel->r_offset > addr)
12081         irel->r_offset -= count;
12082     }
12083
12084   BFD_ASSERT (addr % 2 == 0);
12085   BFD_ASSERT (count % 2 == 0);
12086
12087   /* Adjust the local symbols defined in this section.  */
12088   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
12089   isym = (Elf_Internal_Sym *) symtab_hdr->contents;
12090   for (isymend = isym + symtab_hdr->sh_info; isym < isymend; isym++)
12091     if (isym->st_shndx == sec_shndx && isym->st_value > addr)
12092       isym->st_value -= count;
12093
12094   /* Now adjust the global symbols defined in this section.  */
12095   symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym)
12096               - symtab_hdr->sh_info);
12097   sym_hashes = start_hashes = elf_sym_hashes (abfd);
12098   end_hashes = sym_hashes + symcount;
12099
12100   for (; sym_hashes < end_hashes; sym_hashes++)
12101     {
12102       struct elf_link_hash_entry *sym_hash = *sym_hashes;
12103
12104       if ((sym_hash->root.type == bfd_link_hash_defined
12105            || sym_hash->root.type == bfd_link_hash_defweak)
12106           && sym_hash->root.u.def.section == sec)
12107         {
12108           bfd_vma value = sym_hash->root.u.def.value;
12109
12110           if (ELF_ST_IS_MICROMIPS (sym_hash->other))
12111             value &= MINUS_TWO;
12112           if (value > addr)
12113             sym_hash->root.u.def.value -= count;
12114         }
12115     }
12116
12117   return TRUE;
12118 }
12119
12120
12121 /* Opcodes needed for microMIPS relaxation as found in
12122    opcodes/micromips-opc.c.  */
12123
12124 struct opcode_descriptor {
12125   unsigned long match;
12126   unsigned long mask;
12127 };
12128
12129 /* The $ra register aka $31.  */
12130
12131 #define RA 31
12132
12133 /* 32-bit instruction format register fields.  */
12134
12135 #define OP32_SREG(opcode) (((opcode) >> 16) & 0x1f)
12136 #define OP32_TREG(opcode) (((opcode) >> 21) & 0x1f)
12137
12138 /* Check if a 5-bit register index can be abbreviated to 3 bits.  */
12139
12140 #define OP16_VALID_REG(r) \
12141   ((2 <= (r) && (r) <= 7) || (16 <= (r) && (r) <= 17))
12142
12143
12144 /* 32-bit and 16-bit branches.  */
12145
12146 static const struct opcode_descriptor b_insns_32[] = {
12147   { /* "b",     "p",            */ 0x40400000, 0xffff0000 }, /* bgez 0 */
12148   { /* "b",     "p",            */ 0x94000000, 0xffff0000 }, /* beq 0, 0 */
12149   { 0, 0 }  /* End marker for find_match().  */
12150 };
12151
12152 static const struct opcode_descriptor bc_insn_32 =
12153   { /* "bc(1|2)(ft)", "N,p",    */ 0x42800000, 0xfec30000 };
12154
12155 static const struct opcode_descriptor bz_insn_32 =
12156   { /* "b(g|l)(e|t)z", "s,p",   */ 0x40000000, 0xff200000 };
12157
12158 static const struct opcode_descriptor bzal_insn_32 =
12159   { /* "b(ge|lt)zal", "s,p",    */ 0x40200000, 0xffa00000 };
12160
12161 static const struct opcode_descriptor beq_insn_32 =
12162   { /* "b(eq|ne)", "s,t,p",     */ 0x94000000, 0xdc000000 };
12163
12164 static const struct opcode_descriptor b_insn_16 =
12165   { /* "b",     "mD",           */ 0xcc00,     0xfc00 };
12166
12167 static const struct opcode_descriptor bz_insn_16 =
12168   { /* "b(eq|ne)z", "md,mE",    */ 0x8c00,     0xdc00 };
12169
12170
12171 /* 32-bit and 16-bit branch EQ and NE zero.  */
12172
12173 /* NOTE: All opcode tables have BEQ/BNE in the same order: first the
12174    eq and second the ne.  This convention is used when replacing a
12175    32-bit BEQ/BNE with the 16-bit version.  */
12176
12177 #define BZC32_REG_FIELD(r) (((r) & 0x1f) << 16)
12178
12179 static const struct opcode_descriptor bz_rs_insns_32[] = {
12180   { /* "beqz",  "s,p",          */ 0x94000000, 0xffe00000 },
12181   { /* "bnez",  "s,p",          */ 0xb4000000, 0xffe00000 },
12182   { 0, 0 }  /* End marker for find_match().  */
12183 };
12184
12185 static const struct opcode_descriptor bz_rt_insns_32[] = {
12186   { /* "beqz",  "t,p",          */ 0x94000000, 0xfc01f000 },
12187   { /* "bnez",  "t,p",          */ 0xb4000000, 0xfc01f000 },
12188   { 0, 0 }  /* End marker for find_match().  */
12189 };
12190
12191 static const struct opcode_descriptor bzc_insns_32[] = {
12192   { /* "beqzc", "s,p",          */ 0x40e00000, 0xffe00000 },
12193   { /* "bnezc", "s,p",          */ 0x40a00000, 0xffe00000 },
12194   { 0, 0 }  /* End marker for find_match().  */
12195 };
12196
12197 static const struct opcode_descriptor bz_insns_16[] = {
12198   { /* "beqz",  "md,mE",        */ 0x8c00,     0xfc00 },
12199   { /* "bnez",  "md,mE",        */ 0xac00,     0xfc00 },
12200   { 0, 0 }  /* End marker for find_match().  */
12201 };
12202
12203 /* Switch between a 5-bit register index and its 3-bit shorthand.  */
12204
12205 #define BZ16_REG(opcode) ((((((opcode) >> 7) & 7) + 0x1e) & 0x17) + 2)
12206 #define BZ16_REG_FIELD(r) \
12207   (((2 <= (r) && (r) <= 7) ? (r) : ((r) - 16)) << 7)
12208
12209
12210 /* 32-bit instructions with a delay slot.  */
12211
12212 static const struct opcode_descriptor jal_insn_32_bd16 =
12213   { /* "jals",  "a",            */ 0x74000000, 0xfc000000 };
12214
12215 static const struct opcode_descriptor jal_insn_32_bd32 =
12216   { /* "jal",   "a",            */ 0xf4000000, 0xfc000000 };
12217
12218 static const struct opcode_descriptor jal_x_insn_32_bd32 =
12219   { /* "jal[x]", "a",           */ 0xf0000000, 0xf8000000 };
12220
12221 static const struct opcode_descriptor j_insn_32 =
12222   { /* "j",     "a",            */ 0xd4000000, 0xfc000000 };
12223
12224 static const struct opcode_descriptor jalr_insn_32 =
12225   { /* "jalr[.hb]", "t,s",      */ 0x00000f3c, 0xfc00efff };
12226
12227 /* This table can be compacted, because no opcode replacement is made.  */
12228
12229 static const struct opcode_descriptor ds_insns_32_bd16[] = {
12230   { /* "jals",  "a",            */ 0x74000000, 0xfc000000 },
12231
12232   { /* "jalrs[.hb]", "t,s",     */ 0x00004f3c, 0xfc00efff },
12233   { /* "b(ge|lt)zals", "s,p",   */ 0x42200000, 0xffa00000 },
12234
12235   { /* "b(g|l)(e|t)z", "s,p",   */ 0x40000000, 0xff200000 },
12236   { /* "b(eq|ne)", "s,t,p",     */ 0x94000000, 0xdc000000 },
12237   { /* "j",     "a",            */ 0xd4000000, 0xfc000000 },
12238   { 0, 0 }  /* End marker for find_match().  */
12239 };
12240
12241 /* This table can be compacted, because no opcode replacement is made.  */
12242
12243 static const struct opcode_descriptor ds_insns_32_bd32[] = {
12244   { /* "jal[x]", "a",           */ 0xf0000000, 0xf8000000 },
12245
12246   { /* "jalr[.hb]", "t,s",      */ 0x00000f3c, 0xfc00efff },
12247   { /* "b(ge|lt)zal", "s,p",    */ 0x40200000, 0xffa00000 },
12248   { 0, 0 }  /* End marker for find_match().  */
12249 };
12250
12251
12252 /* 16-bit instructions with a delay slot.  */
12253
12254 static const struct opcode_descriptor jalr_insn_16_bd16 =
12255   { /* "jalrs", "my,mj",        */ 0x45e0,     0xffe0 };
12256
12257 static const struct opcode_descriptor jalr_insn_16_bd32 =
12258   { /* "jalr",  "my,mj",        */ 0x45c0,     0xffe0 };
12259
12260 static const struct opcode_descriptor jr_insn_16 =
12261   { /* "jr",    "mj",           */ 0x4580,     0xffe0 };
12262
12263 #define JR16_REG(opcode) ((opcode) & 0x1f)
12264
12265 /* This table can be compacted, because no opcode replacement is made.  */
12266
12267 static const struct opcode_descriptor ds_insns_16_bd16[] = {
12268   { /* "jalrs", "my,mj",        */ 0x45e0,     0xffe0 },
12269
12270   { /* "b",     "mD",           */ 0xcc00,     0xfc00 },
12271   { /* "b(eq|ne)z", "md,mE",    */ 0x8c00,     0xdc00 },
12272   { /* "jr",    "mj",           */ 0x4580,     0xffe0 },
12273   { 0, 0 }  /* End marker for find_match().  */
12274 };
12275
12276
12277 /* LUI instruction.  */
12278
12279 static const struct opcode_descriptor lui_insn =
12280  { /* "lui",    "s,u",          */ 0x41a00000, 0xffe00000 };
12281
12282
12283 /* ADDIU instruction.  */
12284
12285 static const struct opcode_descriptor addiu_insn =
12286   { /* "addiu", "t,r,j",        */ 0x30000000, 0xfc000000 };
12287
12288 static const struct opcode_descriptor addiupc_insn =
12289   { /* "addiu", "mb,$pc,mQ",    */ 0x78000000, 0xfc000000 };
12290
12291 #define ADDIUPC_REG_FIELD(r) \
12292   (((2 <= (r) && (r) <= 7) ? (r) : ((r) - 16)) << 23)
12293
12294
12295 /* Relaxable instructions in a JAL delay slot: MOVE.  */
12296
12297 /* The 16-bit move has rd in 9:5 and rs in 4:0.  The 32-bit moves
12298    (ADDU, OR) have rd in 15:11 and rs in 10:16.  */
12299 #define MOVE32_RD(opcode) (((opcode) >> 11) & 0x1f)
12300 #define MOVE32_RS(opcode) (((opcode) >> 16) & 0x1f)
12301
12302 #define MOVE16_RD_FIELD(r) (((r) & 0x1f) << 5)
12303 #define MOVE16_RS_FIELD(r) (((r) & 0x1f)     )
12304
12305 static const struct opcode_descriptor move_insns_32[] = {
12306   { /* "move",  "d,s",          */ 0x00000150, 0xffe007ff }, /* addu d,s,$0 */
12307   { /* "move",  "d,s",          */ 0x00000290, 0xffe007ff }, /* or   d,s,$0 */
12308   { 0, 0 }  /* End marker for find_match().  */
12309 };
12310
12311 static const struct opcode_descriptor move_insn_16 =
12312   { /* "move",  "mp,mj",        */ 0x0c00,     0xfc00 };
12313
12314
12315 /* NOP instructions.  */
12316
12317 static const struct opcode_descriptor nop_insn_32 =
12318   { /* "nop",   "",             */ 0x00000000, 0xffffffff };
12319
12320 static const struct opcode_descriptor nop_insn_16 =
12321   { /* "nop",   "",             */ 0x0c00,     0xffff };
12322
12323
12324 /* Instruction match support.  */
12325
12326 #define MATCH(opcode, insn) ((opcode & insn.mask) == insn.match)
12327
12328 static int
12329 find_match (unsigned long opcode, const struct opcode_descriptor insn[])
12330 {
12331   unsigned long indx;
12332
12333   for (indx = 0; insn[indx].mask != 0; indx++)
12334     if (MATCH (opcode, insn[indx]))
12335       return indx;
12336
12337   return -1;
12338 }
12339
12340
12341 /* Branch and delay slot decoding support.  */
12342
12343 /* If PTR points to what *might* be a 16-bit branch or jump, then
12344    return the minimum length of its delay slot, otherwise return 0.
12345    Non-zero results are not definitive as we might be checking against
12346    the second half of another instruction.  */
12347
12348 static int
12349 check_br16_dslot (bfd *abfd, bfd_byte *ptr)
12350 {
12351   unsigned long opcode;
12352   int bdsize;
12353
12354   opcode = bfd_get_16 (abfd, ptr);
12355   if (MATCH (opcode, jalr_insn_16_bd32) != 0)
12356     /* 16-bit branch/jump with a 32-bit delay slot.  */
12357     bdsize = 4;
12358   else if (MATCH (opcode, jalr_insn_16_bd16) != 0
12359            || find_match (opcode, ds_insns_16_bd16) >= 0)
12360     /* 16-bit branch/jump with a 16-bit delay slot.  */
12361     bdsize = 2;
12362   else
12363     /* No delay slot.  */
12364     bdsize = 0;
12365
12366   return bdsize;
12367 }
12368
12369 /* If PTR points to what *might* be a 32-bit branch or jump, then
12370    return the minimum length of its delay slot, otherwise return 0.
12371    Non-zero results are not definitive as we might be checking against
12372    the second half of another instruction.  */
12373
12374 static int
12375 check_br32_dslot (bfd *abfd, bfd_byte *ptr)
12376 {
12377   unsigned long opcode;
12378   int bdsize;
12379
12380   opcode = bfd_get_micromips_32 (abfd, ptr);
12381   if (find_match (opcode, ds_insns_32_bd32) >= 0)
12382     /* 32-bit branch/jump with a 32-bit delay slot.  */
12383     bdsize = 4;
12384   else if (find_match (opcode, ds_insns_32_bd16) >= 0)
12385     /* 32-bit branch/jump with a 16-bit delay slot.  */
12386     bdsize = 2;
12387   else
12388     /* No delay slot.  */
12389     bdsize = 0;
12390
12391   return bdsize;
12392 }
12393
12394 /* If PTR points to a 16-bit branch or jump with a 32-bit delay slot
12395    that doesn't fiddle with REG, then return TRUE, otherwise FALSE.  */
12396
12397 static bfd_boolean
12398 check_br16 (bfd *abfd, bfd_byte *ptr, unsigned long reg)
12399 {
12400   unsigned long opcode;
12401
12402   opcode = bfd_get_16 (abfd, ptr);
12403   if (MATCH (opcode, b_insn_16)
12404                                                 /* B16  */
12405       || (MATCH (opcode, jr_insn_16) && reg != JR16_REG (opcode))
12406                                                 /* JR16  */
12407       || (MATCH (opcode, bz_insn_16) && reg != BZ16_REG (opcode))
12408                                                 /* BEQZ16, BNEZ16  */
12409       || (MATCH (opcode, jalr_insn_16_bd32)
12410                                                 /* JALR16  */
12411           && reg != JR16_REG (opcode) && reg != RA))
12412     return TRUE;
12413
12414   return FALSE;
12415 }
12416
12417 /* If PTR points to a 32-bit branch or jump that doesn't fiddle with REG,
12418    then return TRUE, otherwise FALSE.  */
12419
12420 static bfd_boolean
12421 check_br32 (bfd *abfd, bfd_byte *ptr, unsigned long reg)
12422 {
12423   unsigned long opcode;
12424
12425   opcode = bfd_get_micromips_32 (abfd, ptr);
12426   if (MATCH (opcode, j_insn_32)
12427                                                 /* J  */
12428       || MATCH (opcode, bc_insn_32)
12429                                                 /* BC1F, BC1T, BC2F, BC2T  */
12430       || (MATCH (opcode, jal_x_insn_32_bd32) && reg != RA)
12431                                                 /* JAL, JALX  */
12432       || (MATCH (opcode, bz_insn_32) && reg != OP32_SREG (opcode))
12433                                                 /* BGEZ, BGTZ, BLEZ, BLTZ  */
12434       || (MATCH (opcode, bzal_insn_32)
12435                                                 /* BGEZAL, BLTZAL  */
12436           && reg != OP32_SREG (opcode) && reg != RA)
12437       || ((MATCH (opcode, jalr_insn_32) || MATCH (opcode, beq_insn_32))
12438                                                 /* JALR, JALR.HB, BEQ, BNE  */
12439           && reg != OP32_SREG (opcode) && reg != OP32_TREG (opcode)))
12440     return TRUE;
12441
12442   return FALSE;
12443 }
12444
12445 /* If the instruction encoding at PTR and relocations [INTERNAL_RELOCS,
12446    IRELEND) at OFFSET indicate that there must be a compact branch there,
12447    then return TRUE, otherwise FALSE.  */
12448
12449 static bfd_boolean
12450 check_relocated_bzc (bfd *abfd, const bfd_byte *ptr, bfd_vma offset,
12451                      const Elf_Internal_Rela *internal_relocs,
12452                      const Elf_Internal_Rela *irelend)
12453 {
12454   const Elf_Internal_Rela *irel;
12455   unsigned long opcode;
12456
12457   opcode = bfd_get_micromips_32 (abfd, ptr);
12458   if (find_match (opcode, bzc_insns_32) < 0)
12459     return FALSE;
12460
12461   for (irel = internal_relocs; irel < irelend; irel++)
12462     if (irel->r_offset == offset
12463         && ELF32_R_TYPE (irel->r_info) == R_MICROMIPS_PC16_S1)
12464       return TRUE;
12465
12466   return FALSE;
12467 }
12468
12469 /* Bitsize checking.  */
12470 #define IS_BITSIZE(val, N)                                              \
12471   (((((val) & ((1ULL << (N)) - 1)) ^ (1ULL << ((N) - 1)))               \
12472     - (1ULL << ((N) - 1))) == (val))
12473
12474 \f
12475 bfd_boolean
12476 _bfd_mips_elf_relax_section (bfd *abfd, asection *sec,
12477                              struct bfd_link_info *link_info,
12478                              bfd_boolean *again)
12479 {
12480   Elf_Internal_Shdr *symtab_hdr;
12481   Elf_Internal_Rela *internal_relocs;
12482   Elf_Internal_Rela *irel, *irelend;
12483   bfd_byte *contents = NULL;
12484   Elf_Internal_Sym *isymbuf = NULL;
12485
12486   /* Assume nothing changes.  */
12487   *again = FALSE;
12488
12489   /* We don't have to do anything for a relocatable link, if
12490      this section does not have relocs, or if this is not a
12491      code section.  */
12492
12493   if (link_info->relocatable
12494       || (sec->flags & SEC_RELOC) == 0
12495       || sec->reloc_count == 0
12496       || (sec->flags & SEC_CODE) == 0)
12497     return TRUE;
12498
12499   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
12500
12501   /* Get a copy of the native relocations.  */
12502   internal_relocs = (_bfd_elf_link_read_relocs
12503                      (abfd, sec, NULL, (Elf_Internal_Rela *) NULL,
12504                       link_info->keep_memory));
12505   if (internal_relocs == NULL)
12506     goto error_return;
12507
12508   /* Walk through them looking for relaxing opportunities.  */
12509   irelend = internal_relocs + sec->reloc_count;
12510   for (irel = internal_relocs; irel < irelend; irel++)
12511     {
12512       unsigned long r_symndx = ELF32_R_SYM (irel->r_info);
12513       unsigned int r_type = ELF32_R_TYPE (irel->r_info);
12514       bfd_boolean target_is_micromips_code_p;
12515       unsigned long opcode;
12516       bfd_vma symval;
12517       bfd_vma pcrval;
12518       bfd_byte *ptr;
12519       int fndopc;
12520
12521       /* The number of bytes to delete for relaxation and from where
12522          to delete these bytes starting at irel->r_offset.  */
12523       int delcnt = 0;
12524       int deloff = 0;
12525
12526       /* If this isn't something that can be relaxed, then ignore
12527          this reloc.  */
12528       if (r_type != R_MICROMIPS_HI16
12529           && r_type != R_MICROMIPS_PC16_S1
12530           && r_type != R_MICROMIPS_26_S1)
12531         continue;
12532
12533       /* Get the section contents if we haven't done so already.  */
12534       if (contents == NULL)
12535         {
12536           /* Get cached copy if it exists.  */
12537           if (elf_section_data (sec)->this_hdr.contents != NULL)
12538             contents = elf_section_data (sec)->this_hdr.contents;
12539           /* Go get them off disk.  */
12540           else if (!bfd_malloc_and_get_section (abfd, sec, &contents))
12541             goto error_return;
12542         }
12543       ptr = contents + irel->r_offset;
12544
12545       /* Read this BFD's local symbols if we haven't done so already.  */
12546       if (isymbuf == NULL && symtab_hdr->sh_info != 0)
12547         {
12548           isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
12549           if (isymbuf == NULL)
12550             isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
12551                                             symtab_hdr->sh_info, 0,
12552                                             NULL, NULL, NULL);
12553           if (isymbuf == NULL)
12554             goto error_return;
12555         }
12556
12557       /* Get the value of the symbol referred to by the reloc.  */
12558       if (r_symndx < symtab_hdr->sh_info)
12559         {
12560           /* A local symbol.  */
12561           Elf_Internal_Sym *isym;
12562           asection *sym_sec;
12563
12564           isym = isymbuf + r_symndx;
12565           if (isym->st_shndx == SHN_UNDEF)
12566             sym_sec = bfd_und_section_ptr;
12567           else if (isym->st_shndx == SHN_ABS)
12568             sym_sec = bfd_abs_section_ptr;
12569           else if (isym->st_shndx == SHN_COMMON)
12570             sym_sec = bfd_com_section_ptr;
12571           else
12572             sym_sec = bfd_section_from_elf_index (abfd, isym->st_shndx);
12573           symval = (isym->st_value
12574                     + sym_sec->output_section->vma
12575                     + sym_sec->output_offset);
12576           target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (isym->st_other);
12577         }
12578       else
12579         {
12580           unsigned long indx;
12581           struct elf_link_hash_entry *h;
12582
12583           /* An external symbol.  */
12584           indx = r_symndx - symtab_hdr->sh_info;
12585           h = elf_sym_hashes (abfd)[indx];
12586           BFD_ASSERT (h != NULL);
12587
12588           if (h->root.type != bfd_link_hash_defined
12589               && h->root.type != bfd_link_hash_defweak)
12590             /* This appears to be a reference to an undefined
12591                symbol.  Just ignore it -- it will be caught by the
12592                regular reloc processing.  */
12593             continue;
12594
12595           symval = (h->root.u.def.value
12596                     + h->root.u.def.section->output_section->vma
12597                     + h->root.u.def.section->output_offset);
12598           target_is_micromips_code_p = (!h->needs_plt
12599                                         && ELF_ST_IS_MICROMIPS (h->other));
12600         }
12601
12602
12603       /* For simplicity of coding, we are going to modify the
12604          section contents, the section relocs, and the BFD symbol
12605          table.  We must tell the rest of the code not to free up this
12606          information.  It would be possible to instead create a table
12607          of changes which have to be made, as is done in coff-mips.c;
12608          that would be more work, but would require less memory when
12609          the linker is run.  */
12610
12611       /* Only 32-bit instructions relaxed.  */
12612       if (irel->r_offset + 4 > sec->size)
12613         continue;
12614
12615       opcode = bfd_get_micromips_32 (abfd, ptr);
12616
12617       /* This is the pc-relative distance from the instruction the
12618          relocation is applied to, to the symbol referred.  */
12619       pcrval = (symval
12620                 - (sec->output_section->vma + sec->output_offset)
12621                 - irel->r_offset);
12622
12623       /* R_MICROMIPS_HI16 / LUI relaxation to nil, performing relaxation
12624          of corresponding R_MICROMIPS_LO16 to R_MICROMIPS_HI0_LO16 or
12625          R_MICROMIPS_PC23_S2.  The R_MICROMIPS_PC23_S2 condition is
12626
12627            (symval % 4 == 0 && IS_BITSIZE (pcrval, 25))
12628
12629          where pcrval has first to be adjusted to apply against the LO16
12630          location (we make the adjustment later on, when we have figured
12631          out the offset).  */
12632       if (r_type == R_MICROMIPS_HI16 && MATCH (opcode, lui_insn))
12633         {
12634           bfd_boolean bzc = FALSE;
12635           unsigned long nextopc;
12636           unsigned long reg;
12637           bfd_vma offset;
12638
12639           /* Give up if the previous reloc was a HI16 against this symbol
12640              too.  */
12641           if (irel > internal_relocs
12642               && ELF32_R_TYPE (irel[-1].r_info) == R_MICROMIPS_HI16
12643               && ELF32_R_SYM (irel[-1].r_info) == r_symndx)
12644             continue;
12645
12646           /* Or if the next reloc is not a LO16 against this symbol.  */
12647           if (irel + 1 >= irelend
12648               || ELF32_R_TYPE (irel[1].r_info) != R_MICROMIPS_LO16
12649               || ELF32_R_SYM (irel[1].r_info) != r_symndx)
12650             continue;
12651
12652           /* Or if the second next reloc is a LO16 against this symbol too.  */
12653           if (irel + 2 >= irelend
12654               && ELF32_R_TYPE (irel[2].r_info) == R_MICROMIPS_LO16
12655               && ELF32_R_SYM (irel[2].r_info) == r_symndx)
12656             continue;
12657
12658           /* See if the LUI instruction *might* be in a branch delay slot.
12659              We check whether what looks like a 16-bit branch or jump is
12660              actually an immediate argument to a compact branch, and let
12661              it through if so.  */
12662           if (irel->r_offset >= 2
12663               && check_br16_dslot (abfd, ptr - 2)
12664               && !(irel->r_offset >= 4
12665                    && (bzc = check_relocated_bzc (abfd,
12666                                                   ptr - 4, irel->r_offset - 4,
12667                                                   internal_relocs, irelend))))
12668             continue;
12669           if (irel->r_offset >= 4
12670               && !bzc
12671               && check_br32_dslot (abfd, ptr - 4))
12672             continue;
12673
12674           reg = OP32_SREG (opcode);
12675
12676           /* We only relax adjacent instructions or ones separated with
12677              a branch or jump that has a delay slot.  The branch or jump
12678              must not fiddle with the register used to hold the address.
12679              Subtract 4 for the LUI itself.  */
12680           offset = irel[1].r_offset - irel[0].r_offset;
12681           switch (offset - 4)
12682             {
12683             case 0:
12684               break;
12685             case 2:
12686               if (check_br16 (abfd, ptr + 4, reg))
12687                 break;
12688               continue;
12689             case 4:
12690               if (check_br32 (abfd, ptr + 4, reg))
12691                 break;
12692               continue;
12693             default:
12694               continue;
12695             }
12696
12697           nextopc = bfd_get_micromips_32 (abfd, contents + irel[1].r_offset);
12698
12699           /* Give up unless the same register is used with both
12700              relocations.  */
12701           if (OP32_SREG (nextopc) != reg)
12702             continue;
12703
12704           /* Now adjust pcrval, subtracting the offset to the LO16 reloc
12705              and rounding up to take masking of the two LSBs into account.  */
12706           pcrval = ((pcrval - offset + 3) | 3) ^ 3;
12707
12708           /* R_MICROMIPS_LO16 relaxation to R_MICROMIPS_HI0_LO16.  */
12709           if (IS_BITSIZE (symval, 16))
12710             {
12711               /* Fix the relocation's type.  */
12712               irel[1].r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_HI0_LO16);
12713
12714               /* Instructions using R_MICROMIPS_LO16 have the base or
12715                  source register in bits 20:16.  This register becomes $0
12716                  (zero) as the result of the R_MICROMIPS_HI16 being 0.  */
12717               nextopc &= ~0x001f0000;
12718               bfd_put_16 (abfd, (nextopc >> 16) & 0xffff,
12719                           contents + irel[1].r_offset);
12720             }
12721
12722           /* R_MICROMIPS_LO16 / ADDIU relaxation to R_MICROMIPS_PC23_S2.
12723              We add 4 to take LUI deletion into account while checking
12724              the PC-relative distance.  */
12725           else if (symval % 4 == 0
12726                    && IS_BITSIZE (pcrval + 4, 25)
12727                    && MATCH (nextopc, addiu_insn)
12728                    && OP32_TREG (nextopc) == OP32_SREG (nextopc)
12729                    && OP16_VALID_REG (OP32_TREG (nextopc)))
12730             {
12731               /* Fix the relocation's type.  */
12732               irel[1].r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC23_S2);
12733
12734               /* Replace ADDIU with the ADDIUPC version.  */
12735               nextopc = (addiupc_insn.match
12736                          | ADDIUPC_REG_FIELD (OP32_TREG (nextopc)));
12737
12738               bfd_put_micromips_32 (abfd, nextopc,
12739                                     contents + irel[1].r_offset);
12740             }
12741
12742           /* Can't do anything, give up, sigh...  */
12743           else
12744             continue;
12745
12746           /* Fix the relocation's type.  */
12747           irel->r_info = ELF32_R_INFO (r_symndx, R_MIPS_NONE);
12748
12749           /* Delete the LUI instruction: 4 bytes at irel->r_offset.  */
12750           delcnt = 4;
12751           deloff = 0;
12752         }
12753
12754       /* Compact branch relaxation -- due to the multitude of macros
12755          employed by the compiler/assembler, compact branches are not
12756          always generated.  Obviously, this can/will be fixed elsewhere,
12757          but there is no drawback in double checking it here.  */
12758       else if (r_type == R_MICROMIPS_PC16_S1
12759                && irel->r_offset + 5 < sec->size
12760                && ((fndopc = find_match (opcode, bz_rs_insns_32)) >= 0
12761                    || (fndopc = find_match (opcode, bz_rt_insns_32)) >= 0)
12762                && MATCH (bfd_get_16 (abfd, ptr + 4), nop_insn_16))
12763         {
12764           unsigned long reg;
12765
12766           reg = OP32_SREG (opcode) ? OP32_SREG (opcode) : OP32_TREG (opcode);
12767
12768           /* Replace BEQZ/BNEZ with the compact version.  */
12769           opcode = (bzc_insns_32[fndopc].match
12770                     | BZC32_REG_FIELD (reg)
12771                     | (opcode & 0xffff));               /* Addend value.  */
12772
12773           bfd_put_micromips_32 (abfd, opcode, ptr);
12774
12775           /* Delete the 16-bit delay slot NOP: two bytes from
12776              irel->offset + 4.  */
12777           delcnt = 2;
12778           deloff = 4;
12779         }
12780
12781       /* R_MICROMIPS_PC16_S1 relaxation to R_MICROMIPS_PC10_S1.  We need
12782          to check the distance from the next instruction, so subtract 2.  */
12783       else if (r_type == R_MICROMIPS_PC16_S1
12784                && IS_BITSIZE (pcrval - 2, 11)
12785                && find_match (opcode, b_insns_32) >= 0)
12786         {
12787           /* Fix the relocation's type.  */
12788           irel->r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC10_S1);
12789
12790           /* Replace the 32-bit opcode with a 16-bit opcode.  */
12791           bfd_put_16 (abfd,
12792                       (b_insn_16.match
12793                        | (opcode & 0x3ff)),             /* Addend value.  */
12794                       ptr);
12795
12796           /* Delete 2 bytes from irel->r_offset + 2.  */
12797           delcnt = 2;
12798           deloff = 2;
12799         }
12800
12801       /* R_MICROMIPS_PC16_S1 relaxation to R_MICROMIPS_PC7_S1.  We need
12802          to check the distance from the next instruction, so subtract 2.  */
12803       else if (r_type == R_MICROMIPS_PC16_S1
12804                && IS_BITSIZE (pcrval - 2, 8)
12805                && (((fndopc = find_match (opcode, bz_rs_insns_32)) >= 0
12806                     && OP16_VALID_REG (OP32_SREG (opcode)))
12807                    || ((fndopc = find_match (opcode, bz_rt_insns_32)) >= 0
12808                        && OP16_VALID_REG (OP32_TREG (opcode)))))
12809         {
12810           unsigned long reg;
12811
12812           reg = OP32_SREG (opcode) ? OP32_SREG (opcode) : OP32_TREG (opcode);
12813
12814           /* Fix the relocation's type.  */
12815           irel->r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC7_S1);
12816
12817           /* Replace the 32-bit opcode with a 16-bit opcode.  */
12818           bfd_put_16 (abfd,
12819                       (bz_insns_16[fndopc].match
12820                        | BZ16_REG_FIELD (reg)
12821                        | (opcode & 0x7f)),              /* Addend value.  */
12822                       ptr);
12823
12824           /* Delete 2 bytes from irel->r_offset + 2.  */
12825           delcnt = 2;
12826           deloff = 2;
12827         }
12828
12829       /* R_MICROMIPS_26_S1 -- JAL to JALS relaxation for microMIPS targets.  */
12830       else if (r_type == R_MICROMIPS_26_S1
12831                && target_is_micromips_code_p
12832                && irel->r_offset + 7 < sec->size
12833                && MATCH (opcode, jal_insn_32_bd32))
12834         {
12835           unsigned long n32opc;
12836           bfd_boolean relaxed = FALSE;
12837
12838           n32opc = bfd_get_micromips_32 (abfd, ptr + 4);
12839
12840           if (MATCH (n32opc, nop_insn_32))
12841             {
12842               /* Replace delay slot 32-bit NOP with a 16-bit NOP.  */
12843               bfd_put_16 (abfd, nop_insn_16.match, ptr + 4);
12844
12845               relaxed = TRUE;
12846             }
12847           else if (find_match (n32opc, move_insns_32) >= 0)
12848             {
12849               /* Replace delay slot 32-bit MOVE with 16-bit MOVE.  */
12850               bfd_put_16 (abfd,
12851                           (move_insn_16.match
12852                            | MOVE16_RD_FIELD (MOVE32_RD (n32opc))
12853                            | MOVE16_RS_FIELD (MOVE32_RS (n32opc))),
12854                           ptr + 4);
12855
12856               relaxed = TRUE;
12857             }
12858           /* Other 32-bit instructions relaxable to 16-bit
12859              instructions will be handled here later.  */
12860
12861           if (relaxed)
12862             {
12863               /* JAL with 32-bit delay slot that is changed to a JALS
12864                  with 16-bit delay slot.  */
12865               bfd_put_micromips_32 (abfd, jal_insn_32_bd16.match, ptr);
12866
12867               /* Delete 2 bytes from irel->r_offset + 6.  */
12868               delcnt = 2;
12869               deloff = 6;
12870             }
12871         }
12872
12873       if (delcnt != 0)
12874         {
12875           /* Note that we've changed the relocs, section contents, etc.  */
12876           elf_section_data (sec)->relocs = internal_relocs;
12877           elf_section_data (sec)->this_hdr.contents = contents;
12878           symtab_hdr->contents = (unsigned char *) isymbuf;
12879
12880           /* Delete bytes depending on the delcnt and deloff.  */
12881           if (!mips_elf_relax_delete_bytes (abfd, sec,
12882                                             irel->r_offset + deloff, delcnt))
12883             goto error_return;
12884
12885           /* That will change things, so we should relax again.
12886              Note that this is not required, and it may be slow.  */
12887           *again = TRUE;
12888         }
12889     }
12890
12891   if (isymbuf != NULL
12892       && symtab_hdr->contents != (unsigned char *) isymbuf)
12893     {
12894       if (! link_info->keep_memory)
12895         free (isymbuf);
12896       else
12897         {
12898           /* Cache the symbols for elf_link_input_bfd.  */
12899           symtab_hdr->contents = (unsigned char *) isymbuf;
12900         }
12901     }
12902
12903   if (contents != NULL
12904       && elf_section_data (sec)->this_hdr.contents != contents)
12905     {
12906       if (! link_info->keep_memory)
12907         free (contents);
12908       else
12909         {
12910           /* Cache the section contents for elf_link_input_bfd.  */
12911           elf_section_data (sec)->this_hdr.contents = contents;
12912         }
12913     }
12914
12915   if (internal_relocs != NULL
12916       && elf_section_data (sec)->relocs != internal_relocs)
12917     free (internal_relocs);
12918
12919   return TRUE;
12920
12921  error_return:
12922   if (isymbuf != NULL
12923       && symtab_hdr->contents != (unsigned char *) isymbuf)
12924     free (isymbuf);
12925   if (contents != NULL
12926       && elf_section_data (sec)->this_hdr.contents != contents)
12927     free (contents);
12928   if (internal_relocs != NULL
12929       && elf_section_data (sec)->relocs != internal_relocs)
12930     free (internal_relocs);
12931
12932   return FALSE;
12933 }
12934 \f
12935 /* Create a MIPS ELF linker hash table.  */
12936
12937 struct bfd_link_hash_table *
12938 _bfd_mips_elf_link_hash_table_create (bfd *abfd)
12939 {
12940   struct mips_elf_link_hash_table *ret;
12941   bfd_size_type amt = sizeof (struct mips_elf_link_hash_table);
12942
12943   ret = bfd_zmalloc (amt);
12944   if (ret == NULL)
12945     return NULL;
12946
12947   if (!_bfd_elf_link_hash_table_init (&ret->root, abfd,
12948                                       mips_elf_link_hash_newfunc,
12949                                       sizeof (struct mips_elf_link_hash_entry),
12950                                       MIPS_ELF_DATA))
12951     {
12952       free (ret);
12953       return NULL;
12954     }
12955
12956   return &ret->root.root;
12957 }
12958
12959 /* Likewise, but indicate that the target is VxWorks.  */
12960
12961 struct bfd_link_hash_table *
12962 _bfd_mips_vxworks_link_hash_table_create (bfd *abfd)
12963 {
12964   struct bfd_link_hash_table *ret;
12965
12966   ret = _bfd_mips_elf_link_hash_table_create (abfd);
12967   if (ret)
12968     {
12969       struct mips_elf_link_hash_table *htab;
12970
12971       htab = (struct mips_elf_link_hash_table *) ret;
12972       htab->use_plts_and_copy_relocs = TRUE;
12973       htab->is_vxworks = TRUE;
12974     }
12975   return ret;
12976 }
12977
12978 /* A function that the linker calls if we are allowed to use PLTs
12979    and copy relocs.  */
12980
12981 void
12982 _bfd_mips_elf_use_plts_and_copy_relocs (struct bfd_link_info *info)
12983 {
12984   mips_elf_hash_table (info)->use_plts_and_copy_relocs = TRUE;
12985 }
12986 \f
12987 /* We need to use a special link routine to handle the .reginfo and
12988    the .mdebug sections.  We need to merge all instances of these
12989    sections together, not write them all out sequentially.  */
12990
12991 bfd_boolean
12992 _bfd_mips_elf_final_link (bfd *abfd, struct bfd_link_info *info)
12993 {
12994   asection *o;
12995   struct bfd_link_order *p;
12996   asection *reginfo_sec, *mdebug_sec, *gptab_data_sec, *gptab_bss_sec;
12997   asection *rtproc_sec;
12998   Elf32_RegInfo reginfo;
12999   struct ecoff_debug_info debug;
13000   struct mips_htab_traverse_info hti;
13001   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
13002   const struct ecoff_debug_swap *swap = bed->elf_backend_ecoff_debug_swap;
13003   HDRR *symhdr = &debug.symbolic_header;
13004   void *mdebug_handle = NULL;
13005   asection *s;
13006   EXTR esym;
13007   unsigned int i;
13008   bfd_size_type amt;
13009   struct mips_elf_link_hash_table *htab;
13010
13011   static const char * const secname[] =
13012   {
13013     ".text", ".init", ".fini", ".data",
13014     ".rodata", ".sdata", ".sbss", ".bss"
13015   };
13016   static const int sc[] =
13017   {
13018     scText, scInit, scFini, scData,
13019     scRData, scSData, scSBss, scBss
13020   };
13021
13022   /* Sort the dynamic symbols so that those with GOT entries come after
13023      those without.  */
13024   htab = mips_elf_hash_table (info);
13025   BFD_ASSERT (htab != NULL);
13026
13027   if (!mips_elf_sort_hash_table (abfd, info))
13028     return FALSE;
13029
13030   /* Create any scheduled LA25 stubs.  */
13031   hti.info = info;
13032   hti.output_bfd = abfd;
13033   hti.error = FALSE;
13034   htab_traverse (htab->la25_stubs, mips_elf_create_la25_stub, &hti);
13035   if (hti.error)
13036     return FALSE;
13037
13038   /* Get a value for the GP register.  */
13039   if (elf_gp (abfd) == 0)
13040     {
13041       struct bfd_link_hash_entry *h;
13042
13043       h = bfd_link_hash_lookup (info->hash, "_gp", FALSE, FALSE, TRUE);
13044       if (h != NULL && h->type == bfd_link_hash_defined)
13045         elf_gp (abfd) = (h->u.def.value
13046                          + h->u.def.section->output_section->vma
13047                          + h->u.def.section->output_offset);
13048       else if (htab->is_vxworks
13049                && (h = bfd_link_hash_lookup (info->hash,
13050                                              "_GLOBAL_OFFSET_TABLE_",
13051                                              FALSE, FALSE, TRUE))
13052                && h->type == bfd_link_hash_defined)
13053         elf_gp (abfd) = (h->u.def.section->output_section->vma
13054                          + h->u.def.section->output_offset
13055                          + h->u.def.value);
13056       else if (info->relocatable)
13057         {
13058           bfd_vma lo = MINUS_ONE;
13059
13060           /* Find the GP-relative section with the lowest offset.  */
13061           for (o = abfd->sections; o != NULL; o = o->next)
13062             if (o->vma < lo
13063                 && (elf_section_data (o)->this_hdr.sh_flags & SHF_MIPS_GPREL))
13064               lo = o->vma;
13065
13066           /* And calculate GP relative to that.  */
13067           elf_gp (abfd) = lo + ELF_MIPS_GP_OFFSET (info);
13068         }
13069       else
13070         {
13071           /* If the relocate_section function needs to do a reloc
13072              involving the GP value, it should make a reloc_dangerous
13073              callback to warn that GP is not defined.  */
13074         }
13075     }
13076
13077   /* Go through the sections and collect the .reginfo and .mdebug
13078      information.  */
13079   reginfo_sec = NULL;
13080   mdebug_sec = NULL;
13081   gptab_data_sec = NULL;
13082   gptab_bss_sec = NULL;
13083   for (o = abfd->sections; o != NULL; o = o->next)
13084     {
13085       if (strcmp (o->name, ".reginfo") == 0)
13086         {
13087           memset (&reginfo, 0, sizeof reginfo);
13088
13089           /* We have found the .reginfo section in the output file.
13090              Look through all the link_orders comprising it and merge
13091              the information together.  */
13092           for (p = o->map_head.link_order; p != NULL; p = p->next)
13093             {
13094               asection *input_section;
13095               bfd *input_bfd;
13096               Elf32_External_RegInfo ext;
13097               Elf32_RegInfo sub;
13098
13099               if (p->type != bfd_indirect_link_order)
13100                 {
13101                   if (p->type == bfd_data_link_order)
13102                     continue;
13103                   abort ();
13104                 }
13105
13106               input_section = p->u.indirect.section;
13107               input_bfd = input_section->owner;
13108
13109               if (! bfd_get_section_contents (input_bfd, input_section,
13110                                               &ext, 0, sizeof ext))
13111                 return FALSE;
13112
13113               bfd_mips_elf32_swap_reginfo_in (input_bfd, &ext, &sub);
13114
13115               reginfo.ri_gprmask |= sub.ri_gprmask;
13116               reginfo.ri_cprmask[0] |= sub.ri_cprmask[0];
13117               reginfo.ri_cprmask[1] |= sub.ri_cprmask[1];
13118               reginfo.ri_cprmask[2] |= sub.ri_cprmask[2];
13119               reginfo.ri_cprmask[3] |= sub.ri_cprmask[3];
13120
13121               /* ri_gp_value is set by the function
13122                  mips_elf32_section_processing when the section is
13123                  finally written out.  */
13124
13125               /* Hack: reset the SEC_HAS_CONTENTS flag so that
13126                  elf_link_input_bfd ignores this section.  */
13127               input_section->flags &= ~SEC_HAS_CONTENTS;
13128             }
13129
13130           /* Size has been set in _bfd_mips_elf_always_size_sections.  */
13131           BFD_ASSERT(o->size == sizeof (Elf32_External_RegInfo));
13132
13133           /* Skip this section later on (I don't think this currently
13134              matters, but someday it might).  */
13135           o->map_head.link_order = NULL;
13136
13137           reginfo_sec = o;
13138         }
13139
13140       if (strcmp (o->name, ".mdebug") == 0)
13141         {
13142           struct extsym_info einfo;
13143           bfd_vma last;
13144
13145           /* We have found the .mdebug section in the output file.
13146              Look through all the link_orders comprising it and merge
13147              the information together.  */
13148           symhdr->magic = swap->sym_magic;
13149           /* FIXME: What should the version stamp be?  */
13150           symhdr->vstamp = 0;
13151           symhdr->ilineMax = 0;
13152           symhdr->cbLine = 0;
13153           symhdr->idnMax = 0;
13154           symhdr->ipdMax = 0;
13155           symhdr->isymMax = 0;
13156           symhdr->ioptMax = 0;
13157           symhdr->iauxMax = 0;
13158           symhdr->issMax = 0;
13159           symhdr->issExtMax = 0;
13160           symhdr->ifdMax = 0;
13161           symhdr->crfd = 0;
13162           symhdr->iextMax = 0;
13163
13164           /* We accumulate the debugging information itself in the
13165              debug_info structure.  */
13166           debug.line = NULL;
13167           debug.external_dnr = NULL;
13168           debug.external_pdr = NULL;
13169           debug.external_sym = NULL;
13170           debug.external_opt = NULL;
13171           debug.external_aux = NULL;
13172           debug.ss = NULL;
13173           debug.ssext = debug.ssext_end = NULL;
13174           debug.external_fdr = NULL;
13175           debug.external_rfd = NULL;
13176           debug.external_ext = debug.external_ext_end = NULL;
13177
13178           mdebug_handle = bfd_ecoff_debug_init (abfd, &debug, swap, info);
13179           if (mdebug_handle == NULL)
13180             return FALSE;
13181
13182           esym.jmptbl = 0;
13183           esym.cobol_main = 0;
13184           esym.weakext = 0;
13185           esym.reserved = 0;
13186           esym.ifd = ifdNil;
13187           esym.asym.iss = issNil;
13188           esym.asym.st = stLocal;
13189           esym.asym.reserved = 0;
13190           esym.asym.index = indexNil;
13191           last = 0;
13192           for (i = 0; i < sizeof (secname) / sizeof (secname[0]); i++)
13193             {
13194               esym.asym.sc = sc[i];
13195               s = bfd_get_section_by_name (abfd, secname[i]);
13196               if (s != NULL)
13197                 {
13198                   esym.asym.value = s->vma;
13199                   last = s->vma + s->size;
13200                 }
13201               else
13202                 esym.asym.value = last;
13203               if (!bfd_ecoff_debug_one_external (abfd, &debug, swap,
13204                                                  secname[i], &esym))
13205                 return FALSE;
13206             }
13207
13208           for (p = o->map_head.link_order; p != NULL; p = p->next)
13209             {
13210               asection *input_section;
13211               bfd *input_bfd;
13212               const struct ecoff_debug_swap *input_swap;
13213               struct ecoff_debug_info input_debug;
13214               char *eraw_src;
13215               char *eraw_end;
13216
13217               if (p->type != bfd_indirect_link_order)
13218                 {
13219                   if (p->type == bfd_data_link_order)
13220                     continue;
13221                   abort ();
13222                 }
13223
13224               input_section = p->u.indirect.section;
13225               input_bfd = input_section->owner;
13226
13227               if (!is_mips_elf (input_bfd))
13228                 {
13229                   /* I don't know what a non MIPS ELF bfd would be
13230                      doing with a .mdebug section, but I don't really
13231                      want to deal with it.  */
13232                   continue;
13233                 }
13234
13235               input_swap = (get_elf_backend_data (input_bfd)
13236                             ->elf_backend_ecoff_debug_swap);
13237
13238               BFD_ASSERT (p->size == input_section->size);
13239
13240               /* The ECOFF linking code expects that we have already
13241                  read in the debugging information and set up an
13242                  ecoff_debug_info structure, so we do that now.  */
13243               if (! _bfd_mips_elf_read_ecoff_info (input_bfd, input_section,
13244                                                    &input_debug))
13245                 return FALSE;
13246
13247               if (! (bfd_ecoff_debug_accumulate
13248                      (mdebug_handle, abfd, &debug, swap, input_bfd,
13249                       &input_debug, input_swap, info)))
13250                 return FALSE;
13251
13252               /* Loop through the external symbols.  For each one with
13253                  interesting information, try to find the symbol in
13254                  the linker global hash table and save the information
13255                  for the output external symbols.  */
13256               eraw_src = input_debug.external_ext;
13257               eraw_end = (eraw_src
13258                           + (input_debug.symbolic_header.iextMax
13259                              * input_swap->external_ext_size));
13260               for (;
13261                    eraw_src < eraw_end;
13262                    eraw_src += input_swap->external_ext_size)
13263                 {
13264                   EXTR ext;
13265                   const char *name;
13266                   struct mips_elf_link_hash_entry *h;
13267
13268                   (*input_swap->swap_ext_in) (input_bfd, eraw_src, &ext);
13269                   if (ext.asym.sc == scNil
13270                       || ext.asym.sc == scUndefined
13271                       || ext.asym.sc == scSUndefined)
13272                     continue;
13273
13274                   name = input_debug.ssext + ext.asym.iss;
13275                   h = mips_elf_link_hash_lookup (mips_elf_hash_table (info),
13276                                                  name, FALSE, FALSE, TRUE);
13277                   if (h == NULL || h->esym.ifd != -2)
13278                     continue;
13279
13280                   if (ext.ifd != -1)
13281                     {
13282                       BFD_ASSERT (ext.ifd
13283                                   < input_debug.symbolic_header.ifdMax);
13284                       ext.ifd = input_debug.ifdmap[ext.ifd];
13285                     }
13286
13287                   h->esym = ext;
13288                 }
13289
13290               /* Free up the information we just read.  */
13291               free (input_debug.line);
13292               free (input_debug.external_dnr);
13293               free (input_debug.external_pdr);
13294               free (input_debug.external_sym);
13295               free (input_debug.external_opt);
13296               free (input_debug.external_aux);
13297               free (input_debug.ss);
13298               free (input_debug.ssext);
13299               free (input_debug.external_fdr);
13300               free (input_debug.external_rfd);
13301               free (input_debug.external_ext);
13302
13303               /* Hack: reset the SEC_HAS_CONTENTS flag so that
13304                  elf_link_input_bfd ignores this section.  */
13305               input_section->flags &= ~SEC_HAS_CONTENTS;
13306             }
13307
13308           if (SGI_COMPAT (abfd) && info->shared)
13309             {
13310               /* Create .rtproc section.  */
13311               rtproc_sec = bfd_get_linker_section (abfd, ".rtproc");
13312               if (rtproc_sec == NULL)
13313                 {
13314                   flagword flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY
13315                                     | SEC_LINKER_CREATED | SEC_READONLY);
13316
13317                   rtproc_sec = bfd_make_section_anyway_with_flags (abfd,
13318                                                                    ".rtproc",
13319                                                                    flags);
13320                   if (rtproc_sec == NULL
13321                       || ! bfd_set_section_alignment (abfd, rtproc_sec, 4))
13322                     return FALSE;
13323                 }
13324
13325               if (! mips_elf_create_procedure_table (mdebug_handle, abfd,
13326                                                      info, rtproc_sec,
13327                                                      &debug))
13328                 return FALSE;
13329             }
13330
13331           /* Build the external symbol information.  */
13332           einfo.abfd = abfd;
13333           einfo.info = info;
13334           einfo.debug = &debug;
13335           einfo.swap = swap;
13336           einfo.failed = FALSE;
13337           mips_elf_link_hash_traverse (mips_elf_hash_table (info),
13338                                        mips_elf_output_extsym, &einfo);
13339           if (einfo.failed)
13340             return FALSE;
13341
13342           /* Set the size of the .mdebug section.  */
13343           o->size = bfd_ecoff_debug_size (abfd, &debug, swap);
13344
13345           /* Skip this section later on (I don't think this currently
13346              matters, but someday it might).  */
13347           o->map_head.link_order = NULL;
13348
13349           mdebug_sec = o;
13350         }
13351
13352       if (CONST_STRNEQ (o->name, ".gptab."))
13353         {
13354           const char *subname;
13355           unsigned int c;
13356           Elf32_gptab *tab;
13357           Elf32_External_gptab *ext_tab;
13358           unsigned int j;
13359
13360           /* The .gptab.sdata and .gptab.sbss sections hold
13361              information describing how the small data area would
13362              change depending upon the -G switch.  These sections
13363              not used in executables files.  */
13364           if (! info->relocatable)
13365             {
13366               for (p = o->map_head.link_order; p != NULL; p = p->next)
13367                 {
13368                   asection *input_section;
13369
13370                   if (p->type != bfd_indirect_link_order)
13371                     {
13372                       if (p->type == bfd_data_link_order)
13373                         continue;
13374                       abort ();
13375                     }
13376
13377                   input_section = p->u.indirect.section;
13378
13379                   /* Hack: reset the SEC_HAS_CONTENTS flag so that
13380                      elf_link_input_bfd ignores this section.  */
13381                   input_section->flags &= ~SEC_HAS_CONTENTS;
13382                 }
13383
13384               /* Skip this section later on (I don't think this
13385                  currently matters, but someday it might).  */
13386               o->map_head.link_order = NULL;
13387
13388               /* Really remove the section.  */
13389               bfd_section_list_remove (abfd, o);
13390               --abfd->section_count;
13391
13392               continue;
13393             }
13394
13395           /* There is one gptab for initialized data, and one for
13396              uninitialized data.  */
13397           if (strcmp (o->name, ".gptab.sdata") == 0)
13398             gptab_data_sec = o;
13399           else if (strcmp (o->name, ".gptab.sbss") == 0)
13400             gptab_bss_sec = o;
13401           else
13402             {
13403               (*_bfd_error_handler)
13404                 (_("%s: illegal section name `%s'"),
13405                  bfd_get_filename (abfd), o->name);
13406               bfd_set_error (bfd_error_nonrepresentable_section);
13407               return FALSE;
13408             }
13409
13410           /* The linker script always combines .gptab.data and
13411              .gptab.sdata into .gptab.sdata, and likewise for
13412              .gptab.bss and .gptab.sbss.  It is possible that there is
13413              no .sdata or .sbss section in the output file, in which
13414              case we must change the name of the output section.  */
13415           subname = o->name + sizeof ".gptab" - 1;
13416           if (bfd_get_section_by_name (abfd, subname) == NULL)
13417             {
13418               if (o == gptab_data_sec)
13419                 o->name = ".gptab.data";
13420               else
13421                 o->name = ".gptab.bss";
13422               subname = o->name + sizeof ".gptab" - 1;
13423               BFD_ASSERT (bfd_get_section_by_name (abfd, subname) != NULL);
13424             }
13425
13426           /* Set up the first entry.  */
13427           c = 1;
13428           amt = c * sizeof (Elf32_gptab);
13429           tab = bfd_malloc (amt);
13430           if (tab == NULL)
13431             return FALSE;
13432           tab[0].gt_header.gt_current_g_value = elf_gp_size (abfd);
13433           tab[0].gt_header.gt_unused = 0;
13434
13435           /* Combine the input sections.  */
13436           for (p = o->map_head.link_order; p != NULL; p = p->next)
13437             {
13438               asection *input_section;
13439               bfd *input_bfd;
13440               bfd_size_type size;
13441               unsigned long last;
13442               bfd_size_type gpentry;
13443
13444               if (p->type != bfd_indirect_link_order)
13445                 {
13446                   if (p->type == bfd_data_link_order)
13447                     continue;
13448                   abort ();
13449                 }
13450
13451               input_section = p->u.indirect.section;
13452               input_bfd = input_section->owner;
13453
13454               /* Combine the gptab entries for this input section one
13455                  by one.  We know that the input gptab entries are
13456                  sorted by ascending -G value.  */
13457               size = input_section->size;
13458               last = 0;
13459               for (gpentry = sizeof (Elf32_External_gptab);
13460                    gpentry < size;
13461                    gpentry += sizeof (Elf32_External_gptab))
13462                 {
13463                   Elf32_External_gptab ext_gptab;
13464                   Elf32_gptab int_gptab;
13465                   unsigned long val;
13466                   unsigned long add;
13467                   bfd_boolean exact;
13468                   unsigned int look;
13469
13470                   if (! (bfd_get_section_contents
13471                          (input_bfd, input_section, &ext_gptab, gpentry,
13472                           sizeof (Elf32_External_gptab))))
13473                     {
13474                       free (tab);
13475                       return FALSE;
13476                     }
13477
13478                   bfd_mips_elf32_swap_gptab_in (input_bfd, &ext_gptab,
13479                                                 &int_gptab);
13480                   val = int_gptab.gt_entry.gt_g_value;
13481                   add = int_gptab.gt_entry.gt_bytes - last;
13482
13483                   exact = FALSE;
13484                   for (look = 1; look < c; look++)
13485                     {
13486                       if (tab[look].gt_entry.gt_g_value >= val)
13487                         tab[look].gt_entry.gt_bytes += add;
13488
13489                       if (tab[look].gt_entry.gt_g_value == val)
13490                         exact = TRUE;
13491                     }
13492
13493                   if (! exact)
13494                     {
13495                       Elf32_gptab *new_tab;
13496                       unsigned int max;
13497
13498                       /* We need a new table entry.  */
13499                       amt = (bfd_size_type) (c + 1) * sizeof (Elf32_gptab);
13500                       new_tab = bfd_realloc (tab, amt);
13501                       if (new_tab == NULL)
13502                         {
13503                           free (tab);
13504                           return FALSE;
13505                         }
13506                       tab = new_tab;
13507                       tab[c].gt_entry.gt_g_value = val;
13508                       tab[c].gt_entry.gt_bytes = add;
13509
13510                       /* Merge in the size for the next smallest -G
13511                          value, since that will be implied by this new
13512                          value.  */
13513                       max = 0;
13514                       for (look = 1; look < c; look++)
13515                         {
13516                           if (tab[look].gt_entry.gt_g_value < val
13517                               && (max == 0
13518                                   || (tab[look].gt_entry.gt_g_value
13519                                       > tab[max].gt_entry.gt_g_value)))
13520                             max = look;
13521                         }
13522                       if (max != 0)
13523                         tab[c].gt_entry.gt_bytes +=
13524                           tab[max].gt_entry.gt_bytes;
13525
13526                       ++c;
13527                     }
13528
13529                   last = int_gptab.gt_entry.gt_bytes;
13530                 }
13531
13532               /* Hack: reset the SEC_HAS_CONTENTS flag so that
13533                  elf_link_input_bfd ignores this section.  */
13534               input_section->flags &= ~SEC_HAS_CONTENTS;
13535             }
13536
13537           /* The table must be sorted by -G value.  */
13538           if (c > 2)
13539             qsort (tab + 1, c - 1, sizeof (tab[0]), gptab_compare);
13540
13541           /* Swap out the table.  */
13542           amt = (bfd_size_type) c * sizeof (Elf32_External_gptab);
13543           ext_tab = bfd_alloc (abfd, amt);
13544           if (ext_tab == NULL)
13545             {
13546               free (tab);
13547               return FALSE;
13548             }
13549
13550           for (j = 0; j < c; j++)
13551             bfd_mips_elf32_swap_gptab_out (abfd, tab + j, ext_tab + j);
13552           free (tab);
13553
13554           o->size = c * sizeof (Elf32_External_gptab);
13555           o->contents = (bfd_byte *) ext_tab;
13556
13557           /* Skip this section later on (I don't think this currently
13558              matters, but someday it might).  */
13559           o->map_head.link_order = NULL;
13560         }
13561     }
13562
13563   /* Invoke the regular ELF backend linker to do all the work.  */
13564   if (!bfd_elf_final_link (abfd, info))
13565     return FALSE;
13566
13567   /* Now write out the computed sections.  */
13568
13569   if (reginfo_sec != NULL)
13570     {
13571       Elf32_External_RegInfo ext;
13572
13573       bfd_mips_elf32_swap_reginfo_out (abfd, &reginfo, &ext);
13574       if (! bfd_set_section_contents (abfd, reginfo_sec, &ext, 0, sizeof ext))
13575         return FALSE;
13576     }
13577
13578   if (mdebug_sec != NULL)
13579     {
13580       BFD_ASSERT (abfd->output_has_begun);
13581       if (! bfd_ecoff_write_accumulated_debug (mdebug_handle, abfd, &debug,
13582                                                swap, info,
13583                                                mdebug_sec->filepos))
13584         return FALSE;
13585
13586       bfd_ecoff_debug_free (mdebug_handle, abfd, &debug, swap, info);
13587     }
13588
13589   if (gptab_data_sec != NULL)
13590     {
13591       if (! bfd_set_section_contents (abfd, gptab_data_sec,
13592                                       gptab_data_sec->contents,
13593                                       0, gptab_data_sec->size))
13594         return FALSE;
13595     }
13596
13597   if (gptab_bss_sec != NULL)
13598     {
13599       if (! bfd_set_section_contents (abfd, gptab_bss_sec,
13600                                       gptab_bss_sec->contents,
13601                                       0, gptab_bss_sec->size))
13602         return FALSE;
13603     }
13604
13605   if (SGI_COMPAT (abfd))
13606     {
13607       rtproc_sec = bfd_get_section_by_name (abfd, ".rtproc");
13608       if (rtproc_sec != NULL)
13609         {
13610           if (! bfd_set_section_contents (abfd, rtproc_sec,
13611                                           rtproc_sec->contents,
13612                                           0, rtproc_sec->size))
13613             return FALSE;
13614         }
13615     }
13616
13617   return TRUE;
13618 }
13619 \f
13620 /* Structure for saying that BFD machine EXTENSION extends BASE.  */
13621
13622 struct mips_mach_extension {
13623   unsigned long extension, base;
13624 };
13625
13626
13627 /* An array describing how BFD machines relate to one another.  The entries
13628    are ordered topologically with MIPS I extensions listed last.  */
13629
13630 static const struct mips_mach_extension mips_mach_extensions[] = {
13631   /* MIPS64r2 extensions.  */
13632   { bfd_mach_mips_octeon2, bfd_mach_mips_octeonp },
13633   { bfd_mach_mips_octeonp, bfd_mach_mips_octeon },
13634   { bfd_mach_mips_octeon, bfd_mach_mipsisa64r2 },
13635
13636   /* MIPS64 extensions.  */
13637   { bfd_mach_mipsisa64r2, bfd_mach_mipsisa64 },
13638   { bfd_mach_mips_sb1, bfd_mach_mipsisa64 },
13639   { bfd_mach_mips_xlr, bfd_mach_mipsisa64 },
13640   { bfd_mach_mips_loongson_3a, bfd_mach_mipsisa64 },
13641
13642   /* MIPS V extensions.  */
13643   { bfd_mach_mipsisa64, bfd_mach_mips5 },
13644
13645   /* R10000 extensions.  */
13646   { bfd_mach_mips12000, bfd_mach_mips10000 },
13647   { bfd_mach_mips14000, bfd_mach_mips10000 },
13648   { bfd_mach_mips16000, bfd_mach_mips10000 },
13649
13650   /* R5000 extensions.  Note: the vr5500 ISA is an extension of the core
13651      vr5400 ISA, but doesn't include the multimedia stuff.  It seems
13652      better to allow vr5400 and vr5500 code to be merged anyway, since
13653      many libraries will just use the core ISA.  Perhaps we could add
13654      some sort of ASE flag if this ever proves a problem.  */
13655   { bfd_mach_mips5500, bfd_mach_mips5400 },
13656   { bfd_mach_mips5400, bfd_mach_mips5000 },
13657
13658   /* MIPS IV extensions.  */
13659   { bfd_mach_mips5, bfd_mach_mips8000 },
13660   { bfd_mach_mips10000, bfd_mach_mips8000 },
13661   { bfd_mach_mips5000, bfd_mach_mips8000 },
13662   { bfd_mach_mips7000, bfd_mach_mips8000 },
13663   { bfd_mach_mips9000, bfd_mach_mips8000 },
13664
13665   /* VR4100 extensions.  */
13666   { bfd_mach_mips4120, bfd_mach_mips4100 },
13667   { bfd_mach_mips4111, bfd_mach_mips4100 },
13668
13669   /* MIPS III extensions.  */
13670   { bfd_mach_mips_loongson_2e, bfd_mach_mips4000 },
13671   { bfd_mach_mips_loongson_2f, bfd_mach_mips4000 },
13672   { bfd_mach_mips8000, bfd_mach_mips4000 },
13673   { bfd_mach_mips4650, bfd_mach_mips4000 },
13674   { bfd_mach_mips4600, bfd_mach_mips4000 },
13675   { bfd_mach_mips4400, bfd_mach_mips4000 },
13676   { bfd_mach_mips4300, bfd_mach_mips4000 },
13677   { bfd_mach_mips4100, bfd_mach_mips4000 },
13678   { bfd_mach_mips4010, bfd_mach_mips4000 },
13679   { bfd_mach_mips5900, bfd_mach_mips4000 },
13680
13681   /* MIPS32 extensions.  */
13682   { bfd_mach_mipsisa32r2, bfd_mach_mipsisa32 },
13683
13684   /* MIPS II extensions.  */
13685   { bfd_mach_mips4000, bfd_mach_mips6000 },
13686   { bfd_mach_mipsisa32, bfd_mach_mips6000 },
13687
13688   /* MIPS I extensions.  */
13689   { bfd_mach_mips6000, bfd_mach_mips3000 },
13690   { bfd_mach_mips3900, bfd_mach_mips3000 }
13691 };
13692
13693
13694 /* Return true if bfd machine EXTENSION is an extension of machine BASE.  */
13695
13696 static bfd_boolean
13697 mips_mach_extends_p (unsigned long base, unsigned long extension)
13698 {
13699   size_t i;
13700
13701   if (extension == base)
13702     return TRUE;
13703
13704   if (base == bfd_mach_mipsisa32
13705       && mips_mach_extends_p (bfd_mach_mipsisa64, extension))
13706     return TRUE;
13707
13708   if (base == bfd_mach_mipsisa32r2
13709       && mips_mach_extends_p (bfd_mach_mipsisa64r2, extension))
13710     return TRUE;
13711
13712   for (i = 0; i < ARRAY_SIZE (mips_mach_extensions); i++)
13713     if (extension == mips_mach_extensions[i].extension)
13714       {
13715         extension = mips_mach_extensions[i].base;
13716         if (extension == base)
13717           return TRUE;
13718       }
13719
13720   return FALSE;
13721 }
13722
13723
13724 /* Return true if the given ELF header flags describe a 32-bit binary.  */
13725
13726 static bfd_boolean
13727 mips_32bit_flags_p (flagword flags)
13728 {
13729   return ((flags & EF_MIPS_32BITMODE) != 0
13730           || (flags & EF_MIPS_ABI) == E_MIPS_ABI_O32
13731           || (flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32
13732           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1
13733           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2
13734           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32
13735           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2);
13736 }
13737
13738
13739 /* Merge object attributes from IBFD into OBFD.  Raise an error if
13740    there are conflicting attributes.  */
13741 static bfd_boolean
13742 mips_elf_merge_obj_attributes (bfd *ibfd, bfd *obfd)
13743 {
13744   obj_attribute *in_attr;
13745   obj_attribute *out_attr;
13746   bfd *abi_fp_bfd;
13747
13748   abi_fp_bfd = mips_elf_tdata (obfd)->abi_fp_bfd;
13749   in_attr = elf_known_obj_attributes (ibfd)[OBJ_ATTR_GNU];
13750   if (!abi_fp_bfd && in_attr[Tag_GNU_MIPS_ABI_FP].i != 0)
13751     mips_elf_tdata (obfd)->abi_fp_bfd = ibfd;
13752
13753   if (!elf_known_obj_attributes_proc (obfd)[0].i)
13754     {
13755       /* This is the first object.  Copy the attributes.  */
13756       _bfd_elf_copy_obj_attributes (ibfd, obfd);
13757
13758       /* Use the Tag_null value to indicate the attributes have been
13759          initialized.  */
13760       elf_known_obj_attributes_proc (obfd)[0].i = 1;
13761
13762       return TRUE;
13763     }
13764
13765   /* Check for conflicting Tag_GNU_MIPS_ABI_FP attributes and merge
13766      non-conflicting ones.  */
13767   out_attr = elf_known_obj_attributes (obfd)[OBJ_ATTR_GNU];
13768   if (in_attr[Tag_GNU_MIPS_ABI_FP].i != out_attr[Tag_GNU_MIPS_ABI_FP].i)
13769     {
13770       out_attr[Tag_GNU_MIPS_ABI_FP].type = 1;
13771       if (out_attr[Tag_GNU_MIPS_ABI_FP].i == 0)
13772         out_attr[Tag_GNU_MIPS_ABI_FP].i = in_attr[Tag_GNU_MIPS_ABI_FP].i;
13773       else if (in_attr[Tag_GNU_MIPS_ABI_FP].i != 0)
13774         switch (out_attr[Tag_GNU_MIPS_ABI_FP].i)
13775           {
13776           case 1:
13777             switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
13778               {
13779               case 2:
13780                 _bfd_error_handler
13781                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13782                    obfd, abi_fp_bfd, ibfd, "-mdouble-float", "-msingle-float");
13783                 break;
13784
13785               case 3:
13786                 _bfd_error_handler
13787                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13788                    obfd, abi_fp_bfd, ibfd, "-mhard-float", "-msoft-float");
13789                 break;
13790
13791               case 4:
13792                 _bfd_error_handler
13793                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13794                    obfd, abi_fp_bfd, ibfd,
13795                    "-mdouble-float", "-mips32r2 -mfp64");
13796                 break;
13797
13798               default:
13799                 _bfd_error_handler
13800                   (_("Warning: %B uses %s (set by %B), "
13801                      "%B uses unknown floating point ABI %d"),
13802                    obfd, abi_fp_bfd, ibfd,
13803                    "-mdouble-float", in_attr[Tag_GNU_MIPS_ABI_FP].i);
13804                 break;
13805               }
13806             break;
13807
13808           case 2:
13809             switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
13810               {
13811               case 1:
13812                 _bfd_error_handler
13813                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13814                    obfd, abi_fp_bfd, ibfd, "-msingle-float", "-mdouble-float");
13815                 break;
13816
13817               case 3:
13818                 _bfd_error_handler
13819                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13820                    obfd, abi_fp_bfd, ibfd, "-mhard-float", "-msoft-float");
13821                 break;
13822
13823               case 4:
13824                 _bfd_error_handler
13825                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13826                    obfd, abi_fp_bfd, ibfd,
13827                    "-msingle-float", "-mips32r2 -mfp64");
13828                 break;
13829
13830               default:
13831                 _bfd_error_handler
13832                   (_("Warning: %B uses %s (set by %B), "
13833                      "%B uses unknown floating point ABI %d"),
13834                    obfd, abi_fp_bfd, ibfd,
13835                    "-msingle-float", in_attr[Tag_GNU_MIPS_ABI_FP].i);
13836                 break;
13837               }
13838             break;
13839
13840           case 3:
13841             switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
13842               {
13843               case 1:
13844               case 2:
13845               case 4:
13846                 _bfd_error_handler
13847                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13848                    obfd, abi_fp_bfd, ibfd, "-msoft-float", "-mhard-float");
13849                 break;
13850
13851               default:
13852                 _bfd_error_handler
13853                   (_("Warning: %B uses %s (set by %B), "
13854                      "%B uses unknown floating point ABI %d"),
13855                    obfd, abi_fp_bfd, ibfd,
13856                    "-msoft-float", in_attr[Tag_GNU_MIPS_ABI_FP].i);
13857                 break;
13858               }
13859             break;
13860
13861           case 4:
13862             switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
13863               {
13864               case 1:
13865                 _bfd_error_handler
13866                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13867                    obfd, abi_fp_bfd, ibfd,
13868                    "-mips32r2 -mfp64", "-mdouble-float");
13869                 break;
13870
13871               case 2:
13872                 _bfd_error_handler
13873                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13874                    obfd, abi_fp_bfd, ibfd,
13875                    "-mips32r2 -mfp64", "-msingle-float");
13876                 break;
13877
13878               case 3:
13879                 _bfd_error_handler
13880                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13881                    obfd, abi_fp_bfd, ibfd, "-mhard-float", "-msoft-float");
13882                 break;
13883
13884               default:
13885                 _bfd_error_handler
13886                   (_("Warning: %B uses %s (set by %B), "
13887                      "%B uses unknown floating point ABI %d"),
13888                    obfd, abi_fp_bfd, ibfd,
13889                    "-mips32r2 -mfp64", in_attr[Tag_GNU_MIPS_ABI_FP].i);
13890                 break;
13891               }
13892             break;
13893
13894           default:
13895             switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
13896               {
13897               case 1:
13898                 _bfd_error_handler
13899                   (_("Warning: %B uses unknown floating point ABI %d "
13900                      "(set by %B), %B uses %s"),
13901                    obfd, abi_fp_bfd, ibfd,
13902                    out_attr[Tag_GNU_MIPS_ABI_FP].i, "-mdouble-float");
13903                 break;
13904
13905               case 2:
13906                 _bfd_error_handler
13907                   (_("Warning: %B uses unknown floating point ABI %d "
13908                      "(set by %B), %B uses %s"),
13909                    obfd, abi_fp_bfd, ibfd,
13910                    out_attr[Tag_GNU_MIPS_ABI_FP].i, "-msingle-float");
13911                 break;
13912
13913               case 3:
13914                 _bfd_error_handler
13915                   (_("Warning: %B uses unknown floating point ABI %d "
13916                      "(set by %B), %B uses %s"),
13917                    obfd, abi_fp_bfd, ibfd,
13918                    out_attr[Tag_GNU_MIPS_ABI_FP].i, "-msoft-float");
13919                 break;
13920
13921               case 4:
13922                 _bfd_error_handler
13923                   (_("Warning: %B uses unknown floating point ABI %d "
13924                      "(set by %B), %B uses %s"),
13925                    obfd, abi_fp_bfd, ibfd,
13926                    out_attr[Tag_GNU_MIPS_ABI_FP].i, "-mips32r2 -mfp64");
13927                 break;
13928
13929               default:
13930                 _bfd_error_handler
13931                   (_("Warning: %B uses unknown floating point ABI %d "
13932                      "(set by %B), %B uses unknown floating point ABI %d"),
13933                    obfd, abi_fp_bfd, ibfd,
13934                    out_attr[Tag_GNU_MIPS_ABI_FP].i,
13935                    in_attr[Tag_GNU_MIPS_ABI_FP].i);
13936                 break;
13937               }
13938             break;
13939           }
13940     }
13941
13942   /* Merge Tag_compatibility attributes and any common GNU ones.  */
13943   _bfd_elf_merge_object_attributes (ibfd, obfd);
13944
13945   return TRUE;
13946 }
13947
13948 /* Merge backend specific data from an object file to the output
13949    object file when linking.  */
13950
13951 bfd_boolean
13952 _bfd_mips_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
13953 {
13954   flagword old_flags;
13955   flagword new_flags;
13956   bfd_boolean ok;
13957   bfd_boolean null_input_bfd = TRUE;
13958   asection *sec;
13959
13960   /* Check if we have the same endianness.  */
13961   if (! _bfd_generic_verify_endian_match (ibfd, obfd))
13962     {
13963       (*_bfd_error_handler)
13964         (_("%B: endianness incompatible with that of the selected emulation"),
13965          ibfd);
13966       return FALSE;
13967     }
13968
13969   if (!is_mips_elf (ibfd) || !is_mips_elf (obfd))
13970     return TRUE;
13971
13972   if (strcmp (bfd_get_target (ibfd), bfd_get_target (obfd)) != 0)
13973     {
13974       (*_bfd_error_handler)
13975         (_("%B: ABI is incompatible with that of the selected emulation"),
13976          ibfd);
13977       return FALSE;
13978     }
13979
13980   if (!mips_elf_merge_obj_attributes (ibfd, obfd))
13981     return FALSE;
13982
13983   new_flags = elf_elfheader (ibfd)->e_flags;
13984   elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_NOREORDER;
13985   old_flags = elf_elfheader (obfd)->e_flags;
13986
13987   if (! elf_flags_init (obfd))
13988     {
13989       elf_flags_init (obfd) = TRUE;
13990       elf_elfheader (obfd)->e_flags = new_flags;
13991       elf_elfheader (obfd)->e_ident[EI_CLASS]
13992         = elf_elfheader (ibfd)->e_ident[EI_CLASS];
13993
13994       if (bfd_get_arch (obfd) == bfd_get_arch (ibfd)
13995           && (bfd_get_arch_info (obfd)->the_default
13996               || mips_mach_extends_p (bfd_get_mach (obfd),
13997                                       bfd_get_mach (ibfd))))
13998         {
13999           if (! bfd_set_arch_mach (obfd, bfd_get_arch (ibfd),
14000                                    bfd_get_mach (ibfd)))
14001             return FALSE;
14002         }
14003
14004       return TRUE;
14005     }
14006
14007   /* Check flag compatibility.  */
14008
14009   new_flags &= ~EF_MIPS_NOREORDER;
14010   old_flags &= ~EF_MIPS_NOREORDER;
14011
14012   /* Some IRIX 6 BSD-compatibility objects have this bit set.  It
14013      doesn't seem to matter.  */
14014   new_flags &= ~EF_MIPS_XGOT;
14015   old_flags &= ~EF_MIPS_XGOT;
14016
14017   /* MIPSpro generates ucode info in n64 objects.  Again, we should
14018      just be able to ignore this.  */
14019   new_flags &= ~EF_MIPS_UCODE;
14020   old_flags &= ~EF_MIPS_UCODE;
14021
14022   /* DSOs should only be linked with CPIC code.  */
14023   if ((ibfd->flags & DYNAMIC) != 0)
14024     new_flags |= EF_MIPS_PIC | EF_MIPS_CPIC;
14025
14026   if (new_flags == old_flags)
14027     return TRUE;
14028
14029   /* Check to see if the input BFD actually contains any sections.
14030      If not, its flags may not have been initialised either, but it cannot
14031      actually cause any incompatibility.  */
14032   for (sec = ibfd->sections; sec != NULL; sec = sec->next)
14033     {
14034       /* Ignore synthetic sections and empty .text, .data and .bss sections
14035          which are automatically generated by gas.  Also ignore fake
14036          (s)common sections, since merely defining a common symbol does
14037          not affect compatibility.  */
14038       if ((sec->flags & SEC_IS_COMMON) == 0
14039           && strcmp (sec->name, ".reginfo")
14040           && strcmp (sec->name, ".mdebug")
14041           && (sec->size != 0
14042               || (strcmp (sec->name, ".text")
14043                   && strcmp (sec->name, ".data")
14044                   && strcmp (sec->name, ".bss"))))
14045         {
14046           null_input_bfd = FALSE;
14047           break;
14048         }
14049     }
14050   if (null_input_bfd)
14051     return TRUE;
14052
14053   ok = TRUE;
14054
14055   if (((new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0)
14056       != ((old_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0))
14057     {
14058       (*_bfd_error_handler)
14059         (_("%B: warning: linking abicalls files with non-abicalls files"),
14060          ibfd);
14061       ok = TRUE;
14062     }
14063
14064   if (new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC))
14065     elf_elfheader (obfd)->e_flags |= EF_MIPS_CPIC;
14066   if (! (new_flags & EF_MIPS_PIC))
14067     elf_elfheader (obfd)->e_flags &= ~EF_MIPS_PIC;
14068
14069   new_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC);
14070   old_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC);
14071
14072   /* Compare the ISAs.  */
14073   if (mips_32bit_flags_p (old_flags) != mips_32bit_flags_p (new_flags))
14074     {
14075       (*_bfd_error_handler)
14076         (_("%B: linking 32-bit code with 64-bit code"),
14077          ibfd);
14078       ok = FALSE;
14079     }
14080   else if (!mips_mach_extends_p (bfd_get_mach (ibfd), bfd_get_mach (obfd)))
14081     {
14082       /* OBFD's ISA isn't the same as, or an extension of, IBFD's.  */
14083       if (mips_mach_extends_p (bfd_get_mach (obfd), bfd_get_mach (ibfd)))
14084         {
14085           /* Copy the architecture info from IBFD to OBFD.  Also copy
14086              the 32-bit flag (if set) so that we continue to recognise
14087              OBFD as a 32-bit binary.  */
14088           bfd_set_arch_info (obfd, bfd_get_arch_info (ibfd));
14089           elf_elfheader (obfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH);
14090           elf_elfheader (obfd)->e_flags
14091             |= new_flags & (EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
14092
14093           /* Copy across the ABI flags if OBFD doesn't use them
14094              and if that was what caused us to treat IBFD as 32-bit.  */
14095           if ((old_flags & EF_MIPS_ABI) == 0
14096               && mips_32bit_flags_p (new_flags)
14097               && !mips_32bit_flags_p (new_flags & ~EF_MIPS_ABI))
14098             elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ABI;
14099         }
14100       else
14101         {
14102           /* The ISAs aren't compatible.  */
14103           (*_bfd_error_handler)
14104             (_("%B: linking %s module with previous %s modules"),
14105              ibfd,
14106              bfd_printable_name (ibfd),
14107              bfd_printable_name (obfd));
14108           ok = FALSE;
14109         }
14110     }
14111
14112   new_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
14113   old_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
14114
14115   /* Compare ABIs.  The 64-bit ABI does not use EF_MIPS_ABI.  But, it
14116      does set EI_CLASS differently from any 32-bit ABI.  */
14117   if ((new_flags & EF_MIPS_ABI) != (old_flags & EF_MIPS_ABI)
14118       || (elf_elfheader (ibfd)->e_ident[EI_CLASS]
14119           != elf_elfheader (obfd)->e_ident[EI_CLASS]))
14120     {
14121       /* Only error if both are set (to different values).  */
14122       if (((new_flags & EF_MIPS_ABI) && (old_flags & EF_MIPS_ABI))
14123           || (elf_elfheader (ibfd)->e_ident[EI_CLASS]
14124               != elf_elfheader (obfd)->e_ident[EI_CLASS]))
14125         {
14126           (*_bfd_error_handler)
14127             (_("%B: ABI mismatch: linking %s module with previous %s modules"),
14128              ibfd,
14129              elf_mips_abi_name (ibfd),
14130              elf_mips_abi_name (obfd));
14131           ok = FALSE;
14132         }
14133       new_flags &= ~EF_MIPS_ABI;
14134       old_flags &= ~EF_MIPS_ABI;
14135     }
14136
14137   /* Compare ASEs.  Forbid linking MIPS16 and microMIPS ASE modules together
14138      and allow arbitrary mixing of the remaining ASEs (retain the union).  */
14139   if ((new_flags & EF_MIPS_ARCH_ASE) != (old_flags & EF_MIPS_ARCH_ASE))
14140     {
14141       int old_micro = old_flags & EF_MIPS_ARCH_ASE_MICROMIPS;
14142       int new_micro = new_flags & EF_MIPS_ARCH_ASE_MICROMIPS;
14143       int old_m16 = old_flags & EF_MIPS_ARCH_ASE_M16;
14144       int new_m16 = new_flags & EF_MIPS_ARCH_ASE_M16;
14145       int micro_mis = old_m16 && new_micro;
14146       int m16_mis = old_micro && new_m16;
14147
14148       if (m16_mis || micro_mis)
14149         {
14150           (*_bfd_error_handler)
14151             (_("%B: ASE mismatch: linking %s module with previous %s modules"),
14152              ibfd,
14153              m16_mis ? "MIPS16" : "microMIPS",
14154              m16_mis ? "microMIPS" : "MIPS16");
14155           ok = FALSE;
14156         }
14157
14158       elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ARCH_ASE;
14159
14160       new_flags &= ~ EF_MIPS_ARCH_ASE;
14161       old_flags &= ~ EF_MIPS_ARCH_ASE;
14162     }
14163
14164   /* Warn about any other mismatches */
14165   if (new_flags != old_flags)
14166     {
14167       (*_bfd_error_handler)
14168         (_("%B: uses different e_flags (0x%lx) fields than previous modules (0x%lx)"),
14169          ibfd, (unsigned long) new_flags,
14170          (unsigned long) old_flags);
14171       ok = FALSE;
14172     }
14173
14174   if (! ok)
14175     {
14176       bfd_set_error (bfd_error_bad_value);
14177       return FALSE;
14178     }
14179
14180   return TRUE;
14181 }
14182
14183 /* Function to keep MIPS specific file flags like as EF_MIPS_PIC.  */
14184
14185 bfd_boolean
14186 _bfd_mips_elf_set_private_flags (bfd *abfd, flagword flags)
14187 {
14188   BFD_ASSERT (!elf_flags_init (abfd)
14189               || elf_elfheader (abfd)->e_flags == flags);
14190
14191   elf_elfheader (abfd)->e_flags = flags;
14192   elf_flags_init (abfd) = TRUE;
14193   return TRUE;
14194 }
14195
14196 char *
14197 _bfd_mips_elf_get_target_dtag (bfd_vma dtag)
14198 {
14199   switch (dtag)
14200     {
14201     default: return "";
14202     case DT_MIPS_RLD_VERSION:
14203       return "MIPS_RLD_VERSION";
14204     case DT_MIPS_TIME_STAMP:
14205       return "MIPS_TIME_STAMP";
14206     case DT_MIPS_ICHECKSUM:
14207       return "MIPS_ICHECKSUM";
14208     case DT_MIPS_IVERSION:
14209       return "MIPS_IVERSION";
14210     case DT_MIPS_FLAGS:
14211       return "MIPS_FLAGS";
14212     case DT_MIPS_BASE_ADDRESS:
14213       return "MIPS_BASE_ADDRESS";
14214     case DT_MIPS_MSYM:
14215       return "MIPS_MSYM";
14216     case DT_MIPS_CONFLICT:
14217       return "MIPS_CONFLICT";
14218     case DT_MIPS_LIBLIST:
14219       return "MIPS_LIBLIST";
14220     case DT_MIPS_LOCAL_GOTNO:
14221       return "MIPS_LOCAL_GOTNO";
14222     case DT_MIPS_CONFLICTNO:
14223       return "MIPS_CONFLICTNO";
14224     case DT_MIPS_LIBLISTNO:
14225       return "MIPS_LIBLISTNO";
14226     case DT_MIPS_SYMTABNO:
14227       return "MIPS_SYMTABNO";
14228     case DT_MIPS_UNREFEXTNO:
14229       return "MIPS_UNREFEXTNO";
14230     case DT_MIPS_GOTSYM:
14231       return "MIPS_GOTSYM";
14232     case DT_MIPS_HIPAGENO:
14233       return "MIPS_HIPAGENO";
14234     case DT_MIPS_RLD_MAP:
14235       return "MIPS_RLD_MAP";
14236     case DT_MIPS_DELTA_CLASS:
14237       return "MIPS_DELTA_CLASS";
14238     case DT_MIPS_DELTA_CLASS_NO:
14239       return "MIPS_DELTA_CLASS_NO";
14240     case DT_MIPS_DELTA_INSTANCE:
14241       return "MIPS_DELTA_INSTANCE";
14242     case DT_MIPS_DELTA_INSTANCE_NO:
14243       return "MIPS_DELTA_INSTANCE_NO";
14244     case DT_MIPS_DELTA_RELOC:
14245       return "MIPS_DELTA_RELOC";
14246     case DT_MIPS_DELTA_RELOC_NO:
14247       return "MIPS_DELTA_RELOC_NO";
14248     case DT_MIPS_DELTA_SYM:
14249       return "MIPS_DELTA_SYM";
14250     case DT_MIPS_DELTA_SYM_NO:
14251       return "MIPS_DELTA_SYM_NO";
14252     case DT_MIPS_DELTA_CLASSSYM:
14253       return "MIPS_DELTA_CLASSSYM";
14254     case DT_MIPS_DELTA_CLASSSYM_NO:
14255       return "MIPS_DELTA_CLASSSYM_NO";
14256     case DT_MIPS_CXX_FLAGS:
14257       return "MIPS_CXX_FLAGS";
14258     case DT_MIPS_PIXIE_INIT:
14259       return "MIPS_PIXIE_INIT";
14260     case DT_MIPS_SYMBOL_LIB:
14261       return "MIPS_SYMBOL_LIB";
14262     case DT_MIPS_LOCALPAGE_GOTIDX:
14263       return "MIPS_LOCALPAGE_GOTIDX";
14264     case DT_MIPS_LOCAL_GOTIDX:
14265       return "MIPS_LOCAL_GOTIDX";
14266     case DT_MIPS_HIDDEN_GOTIDX:
14267       return "MIPS_HIDDEN_GOTIDX";
14268     case DT_MIPS_PROTECTED_GOTIDX:
14269       return "MIPS_PROTECTED_GOT_IDX";
14270     case DT_MIPS_OPTIONS:
14271       return "MIPS_OPTIONS";
14272     case DT_MIPS_INTERFACE:
14273       return "MIPS_INTERFACE";
14274     case DT_MIPS_DYNSTR_ALIGN:
14275       return "DT_MIPS_DYNSTR_ALIGN";
14276     case DT_MIPS_INTERFACE_SIZE:
14277       return "DT_MIPS_INTERFACE_SIZE";
14278     case DT_MIPS_RLD_TEXT_RESOLVE_ADDR:
14279       return "DT_MIPS_RLD_TEXT_RESOLVE_ADDR";
14280     case DT_MIPS_PERF_SUFFIX:
14281       return "DT_MIPS_PERF_SUFFIX";
14282     case DT_MIPS_COMPACT_SIZE:
14283       return "DT_MIPS_COMPACT_SIZE";
14284     case DT_MIPS_GP_VALUE:
14285       return "DT_MIPS_GP_VALUE";
14286     case DT_MIPS_AUX_DYNAMIC:
14287       return "DT_MIPS_AUX_DYNAMIC";
14288     case DT_MIPS_PLTGOT:
14289       return "DT_MIPS_PLTGOT";
14290     case DT_MIPS_RWPLT:
14291       return "DT_MIPS_RWPLT";
14292     }
14293 }
14294
14295 bfd_boolean
14296 _bfd_mips_elf_print_private_bfd_data (bfd *abfd, void *ptr)
14297 {
14298   FILE *file = ptr;
14299
14300   BFD_ASSERT (abfd != NULL && ptr != NULL);
14301
14302   /* Print normal ELF private data.  */
14303   _bfd_elf_print_private_bfd_data (abfd, ptr);
14304
14305   /* xgettext:c-format */
14306   fprintf (file, _("private flags = %lx:"), elf_elfheader (abfd)->e_flags);
14307
14308   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O32)
14309     fprintf (file, _(" [abi=O32]"));
14310   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O64)
14311     fprintf (file, _(" [abi=O64]"));
14312   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32)
14313     fprintf (file, _(" [abi=EABI32]"));
14314   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI64)
14315     fprintf (file, _(" [abi=EABI64]"));
14316   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI))
14317     fprintf (file, _(" [abi unknown]"));
14318   else if (ABI_N32_P (abfd))
14319     fprintf (file, _(" [abi=N32]"));
14320   else if (ABI_64_P (abfd))
14321     fprintf (file, _(" [abi=64]"));
14322   else
14323     fprintf (file, _(" [no abi set]"));
14324
14325   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1)
14326     fprintf (file, " [mips1]");
14327   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2)
14328     fprintf (file, " [mips2]");
14329   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_3)
14330     fprintf (file, " [mips3]");
14331   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_4)
14332     fprintf (file, " [mips4]");
14333   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_5)
14334     fprintf (file, " [mips5]");
14335   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32)
14336     fprintf (file, " [mips32]");
14337   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64)
14338     fprintf (file, " [mips64]");
14339   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2)
14340     fprintf (file, " [mips32r2]");
14341   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64R2)
14342     fprintf (file, " [mips64r2]");
14343   else
14344     fprintf (file, _(" [unknown ISA]"));
14345
14346   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MDMX)
14347     fprintf (file, " [mdmx]");
14348
14349   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_M16)
14350     fprintf (file, " [mips16]");
14351
14352   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MICROMIPS)
14353     fprintf (file, " [micromips]");
14354
14355   if (elf_elfheader (abfd)->e_flags & EF_MIPS_32BITMODE)
14356     fprintf (file, " [32bitmode]");
14357   else
14358     fprintf (file, _(" [not 32bitmode]"));
14359
14360   if (elf_elfheader (abfd)->e_flags & EF_MIPS_NOREORDER)
14361     fprintf (file, " [noreorder]");
14362
14363   if (elf_elfheader (abfd)->e_flags & EF_MIPS_PIC)
14364     fprintf (file, " [PIC]");
14365
14366   if (elf_elfheader (abfd)->e_flags & EF_MIPS_CPIC)
14367     fprintf (file, " [CPIC]");
14368
14369   if (elf_elfheader (abfd)->e_flags & EF_MIPS_XGOT)
14370     fprintf (file, " [XGOT]");
14371
14372   if (elf_elfheader (abfd)->e_flags & EF_MIPS_UCODE)
14373     fprintf (file, " [UCODE]");
14374
14375   fputc ('\n', file);
14376
14377   return TRUE;
14378 }
14379
14380 const struct bfd_elf_special_section _bfd_mips_elf_special_sections[] =
14381 {
14382   { STRING_COMMA_LEN (".lit4"),   0, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
14383   { STRING_COMMA_LEN (".lit8"),   0, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
14384   { STRING_COMMA_LEN (".mdebug"), 0, SHT_MIPS_DEBUG, 0 },
14385   { STRING_COMMA_LEN (".sbss"),  -2, SHT_NOBITS,     SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
14386   { STRING_COMMA_LEN (".sdata"), -2, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
14387   { STRING_COMMA_LEN (".ucode"),  0, SHT_MIPS_UCODE, 0 },
14388   { NULL,                     0,  0, 0,              0 }
14389 };
14390
14391 /* Merge non visibility st_other attributes.  Ensure that the
14392    STO_OPTIONAL flag is copied into h->other, even if this is not a
14393    definiton of the symbol.  */
14394 void
14395 _bfd_mips_elf_merge_symbol_attribute (struct elf_link_hash_entry *h,
14396                                       const Elf_Internal_Sym *isym,
14397                                       bfd_boolean definition,
14398                                       bfd_boolean dynamic ATTRIBUTE_UNUSED)
14399 {
14400   if ((isym->st_other & ~ELF_ST_VISIBILITY (-1)) != 0)
14401     {
14402       unsigned char other;
14403
14404       other = (definition ? isym->st_other : h->other);
14405       other &= ~ELF_ST_VISIBILITY (-1);
14406       h->other = other | ELF_ST_VISIBILITY (h->other);
14407     }
14408
14409   if (!definition
14410       && ELF_MIPS_IS_OPTIONAL (isym->st_other))
14411     h->other |= STO_OPTIONAL;
14412 }
14413
14414 /* Decide whether an undefined symbol is special and can be ignored.
14415    This is the case for OPTIONAL symbols on IRIX.  */
14416 bfd_boolean
14417 _bfd_mips_elf_ignore_undef_symbol (struct elf_link_hash_entry *h)
14418 {
14419   return ELF_MIPS_IS_OPTIONAL (h->other) ? TRUE : FALSE;
14420 }
14421
14422 bfd_boolean
14423 _bfd_mips_elf_common_definition (Elf_Internal_Sym *sym)
14424 {
14425   return (sym->st_shndx == SHN_COMMON
14426           || sym->st_shndx == SHN_MIPS_ACOMMON
14427           || sym->st_shndx == SHN_MIPS_SCOMMON);
14428 }
14429
14430 /* Return address for Ith PLT stub in section PLT, for relocation REL
14431    or (bfd_vma) -1 if it should not be included.  */
14432
14433 bfd_vma
14434 _bfd_mips_elf_plt_sym_val (bfd_vma i, const asection *plt,
14435                            const arelent *rel ATTRIBUTE_UNUSED)
14436 {
14437   return (plt->vma
14438           + 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry)
14439           + i * 4 * ARRAY_SIZE (mips_exec_plt_entry));
14440 }
14441
14442 void
14443 _bfd_mips_post_process_headers (bfd *abfd, struct bfd_link_info *link_info)
14444 {
14445   struct mips_elf_link_hash_table *htab;
14446   Elf_Internal_Ehdr *i_ehdrp;
14447
14448   i_ehdrp = elf_elfheader (abfd);
14449   if (link_info)
14450     {
14451       htab = mips_elf_hash_table (link_info);
14452       BFD_ASSERT (htab != NULL);
14453
14454       if (htab->use_plts_and_copy_relocs && !htab->is_vxworks)
14455         i_ehdrp->e_ident[EI_ABIVERSION] = 1;
14456     }
14457 }