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 type of this GOT entry: GOT_NORMAL, GOT_TLS_IE, GOT_TLS_GD
105      or GOT_TLS_LDM.  An LDM GOT entry will be a local symbol entry with
106      r_symndx == 0.  */
107   unsigned char tls_type;
108
109   /* The offset from the beginning of the .got section to the entry
110      corresponding to this symbol+addend.  If it's a global symbol
111      whose offset is yet to be decided, it's going to be -1.  */
112   long gotidx;
113 };
114
115 /* This structure describes a range of addends: [MIN_ADDEND, MAX_ADDEND].
116    The structures form a non-overlapping list that is sorted by increasing
117    MIN_ADDEND.  */
118 struct mips_got_page_range
119 {
120   struct mips_got_page_range *next;
121   bfd_signed_vma min_addend;
122   bfd_signed_vma max_addend;
123 };
124
125 /* This structure describes the range of addends that are applied to page
126    relocations against a given symbol.  */
127 struct mips_got_page_entry
128 {
129   /* The input bfd in which the symbol is defined.  */
130   bfd *abfd;
131   /* The index of the symbol, as stored in the relocation r_info.  */
132   long symndx;
133   /* The ranges for this page entry.  */
134   struct mips_got_page_range *ranges;
135   /* The maximum number of page entries needed for RANGES.  */
136   bfd_vma num_pages;
137 };
138
139 /* This structure is used to hold .got information when linking.  */
140
141 struct mips_got_info
142 {
143   /* The number of global .got entries.  */
144   unsigned int global_gotno;
145   /* The number of global .got entries that are in the GGA_RELOC_ONLY area.  */
146   unsigned int reloc_only_gotno;
147   /* The number of .got slots used for TLS.  */
148   unsigned int tls_gotno;
149   /* The first unused TLS .got entry.  Used only during
150      mips_elf_initialize_tls_index.  */
151   unsigned int tls_assigned_gotno;
152   /* The number of local .got entries, eventually including page entries.  */
153   unsigned int local_gotno;
154   /* The maximum number of page entries needed.  */
155   unsigned int page_gotno;
156   /* The number of relocations needed for the GOT entries.  */
157   unsigned int relocs;
158   /* The number of local .got entries we have used.  */
159   unsigned int assigned_gotno;
160   /* A hash table holding members of the got.  */
161   struct htab *got_entries;
162   /* A hash table of mips_got_page_entry structures.  */
163   struct htab *got_page_entries;
164   /* In multi-got links, a pointer to the next got (err, rather, most
165      of the time, it points to the previous got).  */
166   struct mips_got_info *next;
167   /* This is the GOT index of the TLS LDM entry for the GOT, MINUS_ONE
168      for none, or MINUS_TWO for not yet assigned.  This is needed
169      because a single-GOT link may have multiple hash table entries
170      for the LDM.  It does not get initialized in multi-GOT mode.  */
171   bfd_vma tls_ldm_offset;
172 };
173
174 /* Structure passed when merging bfds' gots.  */
175
176 struct mips_elf_got_per_bfd_arg
177 {
178   /* The output bfd.  */
179   bfd *obfd;
180   /* The link information.  */
181   struct bfd_link_info *info;
182   /* A pointer to the primary got, i.e., the one that's going to get
183      the implicit relocations from DT_MIPS_LOCAL_GOTNO and
184      DT_MIPS_GOTSYM.  */
185   struct mips_got_info *primary;
186   /* A non-primary got we're trying to merge with other input bfd's
187      gots.  */
188   struct mips_got_info *current;
189   /* The maximum number of got entries that can be addressed with a
190      16-bit offset.  */
191   unsigned int max_count;
192   /* The maximum number of page entries needed by each got.  */
193   unsigned int max_pages;
194   /* The total number of global entries which will live in the
195      primary got and be automatically relocated.  This includes
196      those not referenced by the primary GOT but included in
197      the "master" GOT.  */
198   unsigned int global_count;
199 };
200
201 /* A structure used to pass information to htab_traverse callbacks
202    when laying out the GOT.  */
203
204 struct mips_elf_traverse_got_arg
205 {
206   struct bfd_link_info *info;
207   struct mips_got_info *g;
208   int value;
209 };
210
211 struct _mips_elf_section_data
212 {
213   struct bfd_elf_section_data elf;
214   union
215   {
216     bfd_byte *tdata;
217   } u;
218 };
219
220 #define mips_elf_section_data(sec) \
221   ((struct _mips_elf_section_data *) elf_section_data (sec))
222
223 #define is_mips_elf(bfd)                                \
224   (bfd_get_flavour (bfd) == bfd_target_elf_flavour      \
225    && elf_tdata (bfd) != NULL                           \
226    && elf_object_id (bfd) == MIPS_ELF_DATA)
227
228 /* The ABI says that every symbol used by dynamic relocations must have
229    a global GOT entry.  Among other things, this provides the dynamic
230    linker with a free, directly-indexed cache.  The GOT can therefore
231    contain symbols that are not referenced by GOT relocations themselves
232    (in other words, it may have symbols that are not referenced by things
233    like R_MIPS_GOT16 and R_MIPS_GOT_PAGE).
234
235    GOT relocations are less likely to overflow if we put the associated
236    GOT entries towards the beginning.  We therefore divide the global
237    GOT entries into two areas: "normal" and "reloc-only".  Entries in
238    the first area can be used for both dynamic relocations and GP-relative
239    accesses, while those in the "reloc-only" area are for dynamic
240    relocations only.
241
242    These GGA_* ("Global GOT Area") values are organised so that lower
243    values are more general than higher values.  Also, non-GGA_NONE
244    values are ordered by the position of the area in the GOT.  */
245 #define GGA_NORMAL 0
246 #define GGA_RELOC_ONLY 1
247 #define GGA_NONE 2
248
249 /* Information about a non-PIC interface to a PIC function.  There are
250    two ways of creating these interfaces.  The first is to add:
251
252         lui     $25,%hi(func)
253         addiu   $25,$25,%lo(func)
254
255    immediately before a PIC function "func".  The second is to add:
256
257         lui     $25,%hi(func)
258         j       func
259         addiu   $25,$25,%lo(func)
260
261    to a separate trampoline section.
262
263    Stubs of the first kind go in a new section immediately before the
264    target function.  Stubs of the second kind go in a single section
265    pointed to by the hash table's "strampoline" field.  */
266 struct mips_elf_la25_stub {
267   /* The generated section that contains this stub.  */
268   asection *stub_section;
269
270   /* The offset of the stub from the start of STUB_SECTION.  */
271   bfd_vma offset;
272
273   /* One symbol for the original function.  Its location is available
274      in H->root.root.u.def.  */
275   struct mips_elf_link_hash_entry *h;
276 };
277
278 /* Macros for populating a mips_elf_la25_stub.  */
279
280 #define LA25_LUI(VAL) (0x3c190000 | (VAL))      /* lui t9,VAL */
281 #define LA25_J(VAL) (0x08000000 | (((VAL) >> 2) & 0x3ffffff)) /* j VAL */
282 #define LA25_ADDIU(VAL) (0x27390000 | (VAL))    /* addiu t9,t9,VAL */
283 #define LA25_LUI_MICROMIPS(VAL)                                         \
284   (0x41b90000 | (VAL))                          /* lui t9,VAL */
285 #define LA25_J_MICROMIPS(VAL)                                           \
286   (0xd4000000 | (((VAL) >> 1) & 0x3ffffff))     /* j VAL */
287 #define LA25_ADDIU_MICROMIPS(VAL)                                       \
288   (0x33390000 | (VAL))                          /* addiu t9,t9,VAL */
289
290 /* This structure is passed to mips_elf_sort_hash_table_f when sorting
291    the dynamic symbols.  */
292
293 struct mips_elf_hash_sort_data
294 {
295   /* The symbol in the global GOT with the lowest dynamic symbol table
296      index.  */
297   struct elf_link_hash_entry *low;
298   /* The least dynamic symbol table index corresponding to a non-TLS
299      symbol with a GOT entry.  */
300   long min_got_dynindx;
301   /* The greatest dynamic symbol table index corresponding to a symbol
302      with a GOT entry that is not referenced (e.g., a dynamic symbol
303      with dynamic relocations pointing to it from non-primary GOTs).  */
304   long max_unref_got_dynindx;
305   /* The greatest dynamic symbol table index not corresponding to a
306      symbol without a GOT entry.  */
307   long max_non_got_dynindx;
308 };
309
310 /* The MIPS ELF linker needs additional information for each symbol in
311    the global hash table.  */
312
313 struct mips_elf_link_hash_entry
314 {
315   struct elf_link_hash_entry root;
316
317   /* External symbol information.  */
318   EXTR esym;
319
320   /* The la25 stub we have created for ths symbol, if any.  */
321   struct mips_elf_la25_stub *la25_stub;
322
323   /* Number of R_MIPS_32, R_MIPS_REL32, or R_MIPS_64 relocs against
324      this symbol.  */
325   unsigned int possibly_dynamic_relocs;
326
327   /* If there is a stub that 32 bit functions should use to call this
328      16 bit function, this points to the section containing the stub.  */
329   asection *fn_stub;
330
331   /* If there is a stub that 16 bit functions should use to call this
332      32 bit function, this points to the section containing the stub.  */
333   asection *call_stub;
334
335   /* This is like the call_stub field, but it is used if the function
336      being called returns a floating point value.  */
337   asection *call_fp_stub;
338
339 #define GOT_NORMAL      0
340 #define GOT_TLS_GD      1
341 #define GOT_TLS_LDM     2
342 #define GOT_TLS_IE      4
343 #define GOT_TLS_TYPE    7
344 #define GOT_TLS_OFFSET_DONE    0x40
345 #define GOT_TLS_DONE    0x80
346   unsigned char tls_ie_type;
347   unsigned char tls_gd_type;
348
349   /* These fields are only used in single-GOT mode; in multi-GOT mode there
350      is one mips_got_entry per GOT entry, so the offset is stored
351      there.  In single-GOT mode there may be many mips_got_entry
352      structures all referring to the same GOT slot.  */
353   bfd_vma tls_ie_got_offset;
354   bfd_vma tls_gd_got_offset;
355
356   /* The highest GGA_* value that satisfies all references to this symbol.  */
357   unsigned int global_got_area : 2;
358
359   /* True if all GOT relocations against this symbol are for calls.  This is
360      a looser condition than no_fn_stub below, because there may be other
361      non-call non-GOT relocations against the symbol.  */
362   unsigned int got_only_for_calls : 1;
363
364   /* True if one of the relocations described by possibly_dynamic_relocs
365      is against a readonly section.  */
366   unsigned int readonly_reloc : 1;
367
368   /* True if there is a relocation against this symbol that must be
369      resolved by the static linker (in other words, if the relocation
370      cannot possibly be made dynamic).  */
371   unsigned int has_static_relocs : 1;
372
373   /* True if we must not create a .MIPS.stubs entry for this symbol.
374      This is set, for example, if there are relocations related to
375      taking the function's address, i.e. any but R_MIPS_CALL*16 ones.
376      See "MIPS ABI Supplement, 3rd Edition", p. 4-20.  */
377   unsigned int no_fn_stub : 1;
378
379   /* Whether we need the fn_stub; this is true if this symbol appears
380      in any relocs other than a 16 bit call.  */
381   unsigned int need_fn_stub : 1;
382
383   /* True if this symbol is referenced by branch relocations from
384      any non-PIC input file.  This is used to determine whether an
385      la25 stub is required.  */
386   unsigned int has_nonpic_branches : 1;
387
388   /* Does this symbol need a traditional MIPS lazy-binding stub
389      (as opposed to a PLT entry)?  */
390   unsigned int needs_lazy_stub : 1;
391 };
392
393 /* MIPS ELF linker hash table.  */
394
395 struct mips_elf_link_hash_table
396 {
397   struct elf_link_hash_table root;
398
399   /* The number of .rtproc entries.  */
400   bfd_size_type procedure_count;
401
402   /* The size of the .compact_rel section (if SGI_COMPAT).  */
403   bfd_size_type compact_rel_size;
404
405   /* This flag indicates that the value of DT_MIPS_RLD_MAP dynamic entry
406      is set to the address of __rld_obj_head as in IRIX5 and IRIX6.  */
407   bfd_boolean use_rld_obj_head;
408
409   /* The  __rld_map or __rld_obj_head symbol. */
410   struct elf_link_hash_entry *rld_symbol;
411
412   /* This is set if we see any mips16 stub sections.  */
413   bfd_boolean mips16_stubs_seen;
414
415   /* True if we can generate copy relocs and PLTs.  */
416   bfd_boolean use_plts_and_copy_relocs;
417
418   /* True if we're generating code for VxWorks.  */
419   bfd_boolean is_vxworks;
420
421   /* True if we already reported the small-data section overflow.  */
422   bfd_boolean small_data_overflow_reported;
423
424   /* Shortcuts to some dynamic sections, or NULL if they are not
425      being used.  */
426   asection *srelbss;
427   asection *sdynbss;
428   asection *srelplt;
429   asection *srelplt2;
430   asection *sgotplt;
431   asection *splt;
432   asection *sstubs;
433   asection *sgot;
434
435   /* The master GOT information.  */
436   struct mips_got_info *got_info;
437
438   /* The global symbol in the GOT with the lowest index in the dynamic
439      symbol table.  */
440   struct elf_link_hash_entry *global_gotsym;
441
442   /* The size of the PLT header in bytes.  */
443   bfd_vma plt_header_size;
444
445   /* The size of a PLT entry in bytes.  */
446   bfd_vma plt_entry_size;
447
448   /* The number of functions that need a lazy-binding stub.  */
449   bfd_vma lazy_stub_count;
450
451   /* The size of a function stub entry in bytes.  */
452   bfd_vma function_stub_size;
453
454   /* The number of reserved entries at the beginning of the GOT.  */
455   unsigned int reserved_gotno;
456
457   /* The section used for mips_elf_la25_stub trampolines.
458      See the comment above that structure for details.  */
459   asection *strampoline;
460
461   /* A table of mips_elf_la25_stubs, indexed by (input_section, offset)
462      pairs.  */
463   htab_t la25_stubs;
464
465   /* A function FN (NAME, IS, OS) that creates a new input section
466      called NAME and links it to output section OS.  If IS is nonnull,
467      the new section should go immediately before it, otherwise it
468      should go at the (current) beginning of OS.
469
470      The function returns the new section on success, otherwise it
471      returns null.  */
472   asection *(*add_stub_section) (const char *, asection *, asection *);
473 };
474
475 /* Get the MIPS ELF linker hash table from a link_info structure.  */
476
477 #define mips_elf_hash_table(p) \
478   (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
479   == MIPS_ELF_DATA ? ((struct mips_elf_link_hash_table *) ((p)->hash)) : NULL)
480
481 /* A structure used to communicate with htab_traverse callbacks.  */
482 struct mips_htab_traverse_info
483 {
484   /* The usual link-wide information.  */
485   struct bfd_link_info *info;
486   bfd *output_bfd;
487
488   /* Starts off FALSE and is set to TRUE if the link should be aborted.  */
489   bfd_boolean error;
490 };
491
492 /* MIPS ELF private object data.  */
493
494 struct mips_elf_obj_tdata
495 {
496   /* Generic ELF private object data.  */
497   struct elf_obj_tdata root;
498
499   /* Input BFD providing Tag_GNU_MIPS_ABI_FP attribute for output.  */
500   bfd *abi_fp_bfd;
501
502   /* The GOT requirements of input bfds.  */
503   struct mips_got_info *got;
504 };
505
506 /* Get MIPS ELF private object data from BFD's tdata.  */
507
508 #define mips_elf_tdata(bfd) \
509   ((struct mips_elf_obj_tdata *) (bfd)->tdata.any)
510
511 #define TLS_RELOC_P(r_type) \
512   (r_type == R_MIPS_TLS_DTPMOD32                \
513    || r_type == R_MIPS_TLS_DTPMOD64             \
514    || r_type == R_MIPS_TLS_DTPREL32             \
515    || r_type == R_MIPS_TLS_DTPREL64             \
516    || r_type == R_MIPS_TLS_GD                   \
517    || r_type == R_MIPS_TLS_LDM                  \
518    || r_type == R_MIPS_TLS_DTPREL_HI16          \
519    || r_type == R_MIPS_TLS_DTPREL_LO16          \
520    || r_type == R_MIPS_TLS_GOTTPREL             \
521    || r_type == R_MIPS_TLS_TPREL32              \
522    || r_type == R_MIPS_TLS_TPREL64              \
523    || r_type == R_MIPS_TLS_TPREL_HI16           \
524    || r_type == R_MIPS_TLS_TPREL_LO16           \
525    || r_type == R_MIPS16_TLS_GD                 \
526    || r_type == R_MIPS16_TLS_LDM                \
527    || r_type == R_MIPS16_TLS_DTPREL_HI16        \
528    || r_type == R_MIPS16_TLS_DTPREL_LO16        \
529    || r_type == R_MIPS16_TLS_GOTTPREL           \
530    || r_type == R_MIPS16_TLS_TPREL_HI16         \
531    || r_type == R_MIPS16_TLS_TPREL_LO16         \
532    || r_type == R_MICROMIPS_TLS_GD              \
533    || r_type == R_MICROMIPS_TLS_LDM             \
534    || r_type == R_MICROMIPS_TLS_DTPREL_HI16     \
535    || r_type == R_MICROMIPS_TLS_DTPREL_LO16     \
536    || r_type == R_MICROMIPS_TLS_GOTTPREL        \
537    || r_type == R_MICROMIPS_TLS_TPREL_HI16      \
538    || r_type == R_MICROMIPS_TLS_TPREL_LO16)
539
540 /* Structure used to pass information to mips_elf_output_extsym.  */
541
542 struct extsym_info
543 {
544   bfd *abfd;
545   struct bfd_link_info *info;
546   struct ecoff_debug_info *debug;
547   const struct ecoff_debug_swap *swap;
548   bfd_boolean failed;
549 };
550
551 /* The names of the runtime procedure table symbols used on IRIX5.  */
552
553 static const char * const mips_elf_dynsym_rtproc_names[] =
554 {
555   "_procedure_table",
556   "_procedure_string_table",
557   "_procedure_table_size",
558   NULL
559 };
560
561 /* These structures are used to generate the .compact_rel section on
562    IRIX5.  */
563
564 typedef struct
565 {
566   unsigned long id1;            /* Always one?  */
567   unsigned long num;            /* Number of compact relocation entries.  */
568   unsigned long id2;            /* Always two?  */
569   unsigned long offset;         /* The file offset of the first relocation.  */
570   unsigned long reserved0;      /* Zero?  */
571   unsigned long reserved1;      /* Zero?  */
572 } Elf32_compact_rel;
573
574 typedef struct
575 {
576   bfd_byte id1[4];
577   bfd_byte num[4];
578   bfd_byte id2[4];
579   bfd_byte offset[4];
580   bfd_byte reserved0[4];
581   bfd_byte reserved1[4];
582 } Elf32_External_compact_rel;
583
584 typedef struct
585 {
586   unsigned int ctype : 1;       /* 1: long 0: short format. See below.  */
587   unsigned int rtype : 4;       /* Relocation types. See below.  */
588   unsigned int dist2to : 8;
589   unsigned int relvaddr : 19;   /* (VADDR - vaddr of the previous entry)/ 4 */
590   unsigned long konst;          /* KONST field. See below.  */
591   unsigned long vaddr;          /* VADDR to be relocated.  */
592 } Elf32_crinfo;
593
594 typedef struct
595 {
596   unsigned int ctype : 1;       /* 1: long 0: short format. See below.  */
597   unsigned int rtype : 4;       /* Relocation types. See below.  */
598   unsigned int dist2to : 8;
599   unsigned int relvaddr : 19;   /* (VADDR - vaddr of the previous entry)/ 4 */
600   unsigned long konst;          /* KONST field. See below.  */
601 } Elf32_crinfo2;
602
603 typedef struct
604 {
605   bfd_byte info[4];
606   bfd_byte konst[4];
607   bfd_byte vaddr[4];
608 } Elf32_External_crinfo;
609
610 typedef struct
611 {
612   bfd_byte info[4];
613   bfd_byte konst[4];
614 } Elf32_External_crinfo2;
615
616 /* These are the constants used to swap the bitfields in a crinfo.  */
617
618 #define CRINFO_CTYPE (0x1)
619 #define CRINFO_CTYPE_SH (31)
620 #define CRINFO_RTYPE (0xf)
621 #define CRINFO_RTYPE_SH (27)
622 #define CRINFO_DIST2TO (0xff)
623 #define CRINFO_DIST2TO_SH (19)
624 #define CRINFO_RELVADDR (0x7ffff)
625 #define CRINFO_RELVADDR_SH (0)
626
627 /* A compact relocation info has long (3 words) or short (2 words)
628    formats.  A short format doesn't have VADDR field and relvaddr
629    fields contains ((VADDR - vaddr of the previous entry) >> 2).  */
630 #define CRF_MIPS_LONG                   1
631 #define CRF_MIPS_SHORT                  0
632
633 /* There are 4 types of compact relocation at least. The value KONST
634    has different meaning for each type:
635
636    (type)               (konst)
637    CT_MIPS_REL32        Address in data
638    CT_MIPS_WORD         Address in word (XXX)
639    CT_MIPS_GPHI_LO      GP - vaddr
640    CT_MIPS_JMPAD        Address to jump
641    */
642
643 #define CRT_MIPS_REL32                  0xa
644 #define CRT_MIPS_WORD                   0xb
645 #define CRT_MIPS_GPHI_LO                0xc
646 #define CRT_MIPS_JMPAD                  0xd
647
648 #define mips_elf_set_cr_format(x,format)        ((x).ctype = (format))
649 #define mips_elf_set_cr_type(x,type)            ((x).rtype = (type))
650 #define mips_elf_set_cr_dist2to(x,v)            ((x).dist2to = (v))
651 #define mips_elf_set_cr_relvaddr(x,d)           ((x).relvaddr = (d)<<2)
652 \f
653 /* The structure of the runtime procedure descriptor created by the
654    loader for use by the static exception system.  */
655
656 typedef struct runtime_pdr {
657         bfd_vma adr;            /* Memory address of start of procedure.  */
658         long    regmask;        /* Save register mask.  */
659         long    regoffset;      /* Save register offset.  */
660         long    fregmask;       /* Save floating point register mask.  */
661         long    fregoffset;     /* Save floating point register offset.  */
662         long    frameoffset;    /* Frame size.  */
663         short   framereg;       /* Frame pointer register.  */
664         short   pcreg;          /* Offset or reg of return pc.  */
665         long    irpss;          /* Index into the runtime string table.  */
666         long    reserved;
667         struct exception_info *exception_info;/* Pointer to exception array.  */
668 } RPDR, *pRPDR;
669 #define cbRPDR sizeof (RPDR)
670 #define rpdNil ((pRPDR) 0)
671 \f
672 static struct mips_got_entry *mips_elf_create_local_got_entry
673   (bfd *, struct bfd_link_info *, bfd *, bfd_vma, unsigned long,
674    struct mips_elf_link_hash_entry *, int);
675 static bfd_boolean mips_elf_sort_hash_table_f
676   (struct mips_elf_link_hash_entry *, void *);
677 static bfd_vma mips_elf_high
678   (bfd_vma);
679 static bfd_boolean mips_elf_create_dynamic_relocation
680   (bfd *, struct bfd_link_info *, const Elf_Internal_Rela *,
681    struct mips_elf_link_hash_entry *, asection *, bfd_vma,
682    bfd_vma *, asection *);
683 static bfd_vma mips_elf_adjust_gp
684   (bfd *, struct mips_got_info *, bfd *);
685
686 /* This will be used when we sort the dynamic relocation records.  */
687 static bfd *reldyn_sorting_bfd;
688
689 /* True if ABFD is for CPUs with load interlocking that include
690    non-MIPS1 CPUs and R3900.  */
691 #define LOAD_INTERLOCKS_P(abfd) \
692   (   ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) != E_MIPS_ARCH_1) \
693    || ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == E_MIPS_MACH_3900))
694
695 /* True if ABFD is for CPUs that are faster if JAL is converted to BAL.
696    This should be safe for all architectures.  We enable this predicate
697    for RM9000 for now.  */
698 #define JAL_TO_BAL_P(abfd) \
699   ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == E_MIPS_MACH_9000)
700
701 /* True if ABFD is for CPUs that are faster if JALR is converted to BAL.
702    This should be safe for all architectures.  We enable this predicate for
703    all CPUs.  */
704 #define JALR_TO_BAL_P(abfd) 1
705
706 /* True if ABFD is for CPUs that are faster if JR is converted to B.
707    This should be safe for all architectures.  We enable this predicate for
708    all CPUs.  */
709 #define JR_TO_B_P(abfd) 1
710
711 /* True if ABFD is a PIC object.  */
712 #define PIC_OBJECT_P(abfd) \
713   ((elf_elfheader (abfd)->e_flags & EF_MIPS_PIC) != 0)
714
715 /* Nonzero if ABFD is using the N32 ABI.  */
716 #define ABI_N32_P(abfd) \
717   ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI2) != 0)
718
719 /* Nonzero if ABFD is using the N64 ABI.  */
720 #define ABI_64_P(abfd) \
721   (get_elf_backend_data (abfd)->s->elfclass == ELFCLASS64)
722
723 /* Nonzero if ABFD is using NewABI conventions.  */
724 #define NEWABI_P(abfd) (ABI_N32_P (abfd) || ABI_64_P (abfd))
725
726 /* The IRIX compatibility level we are striving for.  */
727 #define IRIX_COMPAT(abfd) \
728   (get_elf_backend_data (abfd)->elf_backend_mips_irix_compat (abfd))
729
730 /* Whether we are trying to be compatible with IRIX at all.  */
731 #define SGI_COMPAT(abfd) \
732   (IRIX_COMPAT (abfd) != ict_none)
733
734 /* The name of the options section.  */
735 #define MIPS_ELF_OPTIONS_SECTION_NAME(abfd) \
736   (NEWABI_P (abfd) ? ".MIPS.options" : ".options")
737
738 /* True if NAME is the recognized name of any SHT_MIPS_OPTIONS section.
739    Some IRIX system files do not use MIPS_ELF_OPTIONS_SECTION_NAME.  */
740 #define MIPS_ELF_OPTIONS_SECTION_NAME_P(NAME) \
741   (strcmp (NAME, ".MIPS.options") == 0 || strcmp (NAME, ".options") == 0)
742
743 /* Whether the section is readonly.  */
744 #define MIPS_ELF_READONLY_SECTION(sec) \
745   ((sec->flags & (SEC_ALLOC | SEC_LOAD | SEC_READONLY))         \
746    == (SEC_ALLOC | SEC_LOAD | SEC_READONLY))
747
748 /* The name of the stub section.  */
749 #define MIPS_ELF_STUB_SECTION_NAME(abfd) ".MIPS.stubs"
750
751 /* The size of an external REL relocation.  */
752 #define MIPS_ELF_REL_SIZE(abfd) \
753   (get_elf_backend_data (abfd)->s->sizeof_rel)
754
755 /* The size of an external RELA relocation.  */
756 #define MIPS_ELF_RELA_SIZE(abfd) \
757   (get_elf_backend_data (abfd)->s->sizeof_rela)
758
759 /* The size of an external dynamic table entry.  */
760 #define MIPS_ELF_DYN_SIZE(abfd) \
761   (get_elf_backend_data (abfd)->s->sizeof_dyn)
762
763 /* The size of a GOT entry.  */
764 #define MIPS_ELF_GOT_SIZE(abfd) \
765   (get_elf_backend_data (abfd)->s->arch_size / 8)
766
767 /* The size of the .rld_map section. */
768 #define MIPS_ELF_RLD_MAP_SIZE(abfd) \
769   (get_elf_backend_data (abfd)->s->arch_size / 8)
770
771 /* The size of a symbol-table entry.  */
772 #define MIPS_ELF_SYM_SIZE(abfd) \
773   (get_elf_backend_data (abfd)->s->sizeof_sym)
774
775 /* The default alignment for sections, as a power of two.  */
776 #define MIPS_ELF_LOG_FILE_ALIGN(abfd)                           \
777   (get_elf_backend_data (abfd)->s->log_file_align)
778
779 /* Get word-sized data.  */
780 #define MIPS_ELF_GET_WORD(abfd, ptr) \
781   (ABI_64_P (abfd) ? bfd_get_64 (abfd, ptr) : bfd_get_32 (abfd, ptr))
782
783 /* Put out word-sized data.  */
784 #define MIPS_ELF_PUT_WORD(abfd, val, ptr)       \
785   (ABI_64_P (abfd)                              \
786    ? bfd_put_64 (abfd, val, ptr)                \
787    : bfd_put_32 (abfd, val, ptr))
788
789 /* The opcode for word-sized loads (LW or LD).  */
790 #define MIPS_ELF_LOAD_WORD(abfd) \
791   (ABI_64_P (abfd) ? 0xdc000000 : 0x8c000000)
792
793 /* Add a dynamic symbol table-entry.  */
794 #define MIPS_ELF_ADD_DYNAMIC_ENTRY(info, tag, val)      \
795   _bfd_elf_add_dynamic_entry (info, tag, val)
796
797 #define MIPS_ELF_RTYPE_TO_HOWTO(abfd, rtype, rela)                      \
798   (get_elf_backend_data (abfd)->elf_backend_mips_rtype_to_howto (rtype, rela))
799
800 /* The name of the dynamic relocation section.  */
801 #define MIPS_ELF_REL_DYN_NAME(INFO) \
802   (mips_elf_hash_table (INFO)->is_vxworks ? ".rela.dyn" : ".rel.dyn")
803
804 /* In case we're on a 32-bit machine, construct a 64-bit "-1" value
805    from smaller values.  Start with zero, widen, *then* decrement.  */
806 #define MINUS_ONE       (((bfd_vma)0) - 1)
807 #define MINUS_TWO       (((bfd_vma)0) - 2)
808
809 /* The value to write into got[1] for SVR4 targets, to identify it is
810    a GNU object.  The dynamic linker can then use got[1] to store the
811    module pointer.  */
812 #define MIPS_ELF_GNU_GOT1_MASK(abfd) \
813   ((bfd_vma) 1 << (ABI_64_P (abfd) ? 63 : 31))
814
815 /* The offset of $gp from the beginning of the .got section.  */
816 #define ELF_MIPS_GP_OFFSET(INFO) \
817   (mips_elf_hash_table (INFO)->is_vxworks ? 0x0 : 0x7ff0)
818
819 /* The maximum size of the GOT for it to be addressable using 16-bit
820    offsets from $gp.  */
821 #define MIPS_ELF_GOT_MAX_SIZE(INFO) (ELF_MIPS_GP_OFFSET (INFO) + 0x7fff)
822
823 /* Instructions which appear in a stub.  */
824 #define STUB_LW(abfd)                                                   \
825   ((ABI_64_P (abfd)                                                     \
826     ? 0xdf998010                                /* ld t9,0x8010(gp) */  \
827     : 0x8f998010))                              /* lw t9,0x8010(gp) */
828 #define STUB_MOVE(abfd)                                                 \
829    ((ABI_64_P (abfd)                                                    \
830      ? 0x03e0782d                               /* daddu t7,ra */       \
831      : 0x03e07821))                             /* addu t7,ra */
832 #define STUB_LUI(VAL) (0x3c180000 + (VAL))      /* lui t8,VAL */
833 #define STUB_JALR 0x0320f809                    /* jalr t9,ra */
834 #define STUB_ORI(VAL) (0x37180000 + (VAL))      /* ori t8,t8,VAL */
835 #define STUB_LI16U(VAL) (0x34180000 + (VAL))    /* ori t8,zero,VAL unsigned */
836 #define STUB_LI16S(abfd, VAL)                                           \
837    ((ABI_64_P (abfd)                                                    \
838     ? (0x64180000 + (VAL))      /* daddiu t8,zero,VAL sign extended */  \
839     : (0x24180000 + (VAL))))    /* addiu t8,zero,VAL sign extended */
840
841 #define MIPS_FUNCTION_STUB_NORMAL_SIZE 16
842 #define MIPS_FUNCTION_STUB_BIG_SIZE 20
843
844 /* The name of the dynamic interpreter.  This is put in the .interp
845    section.  */
846
847 #define ELF_DYNAMIC_INTERPRETER(abfd)           \
848    (ABI_N32_P (abfd) ? "/usr/lib32/libc.so.1"   \
849     : ABI_64_P (abfd) ? "/usr/lib64/libc.so.1"  \
850     : "/usr/lib/libc.so.1")
851
852 #ifdef BFD64
853 #define MNAME(bfd,pre,pos) \
854   (ABI_64_P (bfd) ? CONCAT4 (pre,64,_,pos) : CONCAT4 (pre,32,_,pos))
855 #define ELF_R_SYM(bfd, i)                                       \
856   (ABI_64_P (bfd) ? ELF64_R_SYM (i) : ELF32_R_SYM (i))
857 #define ELF_R_TYPE(bfd, i)                                      \
858   (ABI_64_P (bfd) ? ELF64_MIPS_R_TYPE (i) : ELF32_R_TYPE (i))
859 #define ELF_R_INFO(bfd, s, t)                                   \
860   (ABI_64_P (bfd) ? ELF64_R_INFO (s, t) : ELF32_R_INFO (s, t))
861 #else
862 #define MNAME(bfd,pre,pos) CONCAT4 (pre,32,_,pos)
863 #define ELF_R_SYM(bfd, i)                                       \
864   (ELF32_R_SYM (i))
865 #define ELF_R_TYPE(bfd, i)                                      \
866   (ELF32_R_TYPE (i))
867 #define ELF_R_INFO(bfd, s, t)                                   \
868   (ELF32_R_INFO (s, t))
869 #endif
870 \f
871   /* The mips16 compiler uses a couple of special sections to handle
872      floating point arguments.
873
874      Section names that look like .mips16.fn.FNNAME contain stubs that
875      copy floating point arguments from the fp regs to the gp regs and
876      then jump to FNNAME.  If any 32 bit function calls FNNAME, the
877      call should be redirected to the stub instead.  If no 32 bit
878      function calls FNNAME, the stub should be discarded.  We need to
879      consider any reference to the function, not just a call, because
880      if the address of the function is taken we will need the stub,
881      since the address might be passed to a 32 bit function.
882
883      Section names that look like .mips16.call.FNNAME contain stubs
884      that copy floating point arguments from the gp regs to the fp
885      regs and then jump to FNNAME.  If FNNAME is a 32 bit function,
886      then any 16 bit function that calls FNNAME should be redirected
887      to the stub instead.  If FNNAME is not a 32 bit function, the
888      stub should be discarded.
889
890      .mips16.call.fp.FNNAME sections are similar, but contain stubs
891      which call FNNAME and then copy the return value from the fp regs
892      to the gp regs.  These stubs store the return value in $18 while
893      calling FNNAME; any function which might call one of these stubs
894      must arrange to save $18 around the call.  (This case is not
895      needed for 32 bit functions that call 16 bit functions, because
896      16 bit functions always return floating point values in both
897      $f0/$f1 and $2/$3.)
898
899      Note that in all cases FNNAME might be defined statically.
900      Therefore, FNNAME is not used literally.  Instead, the relocation
901      information will indicate which symbol the section is for.
902
903      We record any stubs that we find in the symbol table.  */
904
905 #define FN_STUB ".mips16.fn."
906 #define CALL_STUB ".mips16.call."
907 #define CALL_FP_STUB ".mips16.call.fp."
908
909 #define FN_STUB_P(name) CONST_STRNEQ (name, FN_STUB)
910 #define CALL_STUB_P(name) CONST_STRNEQ (name, CALL_STUB)
911 #define CALL_FP_STUB_P(name) CONST_STRNEQ (name, CALL_FP_STUB)
912 \f
913 /* The format of the first PLT entry in an O32 executable.  */
914 static const bfd_vma mips_o32_exec_plt0_entry[] =
915 {
916   0x3c1c0000,   /* lui $28, %hi(&GOTPLT[0])                             */
917   0x8f990000,   /* lw $25, %lo(&GOTPLT[0])($28)                         */
918   0x279c0000,   /* addiu $28, $28, %lo(&GOTPLT[0])                      */
919   0x031cc023,   /* subu $24, $24, $28                                   */
920   0x03e07821,   /* move $15, $31        # 32-bit move (addu)            */
921   0x0018c082,   /* srl $24, $24, 2                                      */
922   0x0320f809,   /* jalr $25                                             */
923   0x2718fffe    /* subu $24, $24, 2                                     */
924 };
925
926 /* The format of the first PLT entry in an N32 executable.  Different
927    because gp ($28) is not available; we use t2 ($14) instead.  */
928 static const bfd_vma mips_n32_exec_plt0_entry[] =
929 {
930   0x3c0e0000,   /* lui $14, %hi(&GOTPLT[0])                             */
931   0x8dd90000,   /* lw $25, %lo(&GOTPLT[0])($14)                         */
932   0x25ce0000,   /* addiu $14, $14, %lo(&GOTPLT[0])                      */
933   0x030ec023,   /* subu $24, $24, $14                                   */
934   0x03e07821,   /* move $15, $31        # 32-bit move (addu)            */
935   0x0018c082,   /* srl $24, $24, 2                                      */
936   0x0320f809,   /* jalr $25                                             */
937   0x2718fffe    /* subu $24, $24, 2                                     */
938 };
939
940 /* The format of the first PLT entry in an N64 executable.  Different
941    from N32 because of the increased size of GOT entries.  */
942 static const bfd_vma mips_n64_exec_plt0_entry[] =
943 {
944   0x3c0e0000,   /* lui $14, %hi(&GOTPLT[0])                             */
945   0xddd90000,   /* ld $25, %lo(&GOTPLT[0])($14)                         */
946   0x25ce0000,   /* addiu $14, $14, %lo(&GOTPLT[0])                      */
947   0x030ec023,   /* subu $24, $24, $14                                   */
948   0x03e0782d,   /* move $15, $31        # 64-bit move (daddu)           */
949   0x0018c0c2,   /* srl $24, $24, 3                                      */
950   0x0320f809,   /* jalr $25                                             */
951   0x2718fffe    /* subu $24, $24, 2                                     */
952 };
953
954 /* The format of subsequent PLT entries.  */
955 static const bfd_vma mips_exec_plt_entry[] =
956 {
957   0x3c0f0000,   /* lui $15, %hi(.got.plt entry)                 */
958   0x01f90000,   /* l[wd] $25, %lo(.got.plt entry)($15)          */
959   0x25f80000,   /* addiu $24, $15, %lo(.got.plt entry)          */
960   0x03200008    /* jr $25                                       */
961 };
962
963 /* The format of the first PLT entry in a VxWorks executable.  */
964 static const bfd_vma mips_vxworks_exec_plt0_entry[] =
965 {
966   0x3c190000,   /* lui t9, %hi(_GLOBAL_OFFSET_TABLE_)           */
967   0x27390000,   /* addiu t9, t9, %lo(_GLOBAL_OFFSET_TABLE_)     */
968   0x8f390008,   /* lw t9, 8(t9)                                 */
969   0x00000000,   /* nop                                          */
970   0x03200008,   /* jr t9                                        */
971   0x00000000    /* nop                                          */
972 };
973
974 /* The format of subsequent PLT entries.  */
975 static const bfd_vma mips_vxworks_exec_plt_entry[] =
976 {
977   0x10000000,   /* b .PLT_resolver                      */
978   0x24180000,   /* li t8, <pltindex>                    */
979   0x3c190000,   /* lui t9, %hi(<.got.plt slot>)         */
980   0x27390000,   /* addiu t9, t9, %lo(<.got.plt slot>)   */
981   0x8f390000,   /* lw t9, 0(t9)                         */
982   0x00000000,   /* nop                                  */
983   0x03200008,   /* jr t9                                */
984   0x00000000    /* nop                                  */
985 };
986
987 /* The format of the first PLT entry in a VxWorks shared object.  */
988 static const bfd_vma mips_vxworks_shared_plt0_entry[] =
989 {
990   0x8f990008,   /* lw t9, 8(gp)         */
991   0x00000000,   /* nop                  */
992   0x03200008,   /* jr t9                */
993   0x00000000,   /* nop                  */
994   0x00000000,   /* nop                  */
995   0x00000000    /* nop                  */
996 };
997
998 /* The format of subsequent PLT entries.  */
999 static const bfd_vma mips_vxworks_shared_plt_entry[] =
1000 {
1001   0x10000000,   /* b .PLT_resolver      */
1002   0x24180000    /* li t8, <pltindex>    */
1003 };
1004 \f
1005 /* microMIPS 32-bit opcode helper installer.  */
1006
1007 static void
1008 bfd_put_micromips_32 (const bfd *abfd, bfd_vma opcode, bfd_byte *ptr)
1009 {
1010   bfd_put_16 (abfd, (opcode >> 16) & 0xffff, ptr);
1011   bfd_put_16 (abfd,  opcode        & 0xffff, ptr + 2);
1012 }
1013
1014 /* microMIPS 32-bit opcode helper retriever.  */
1015
1016 static bfd_vma
1017 bfd_get_micromips_32 (const bfd *abfd, const bfd_byte *ptr)
1018 {
1019   return (bfd_get_16 (abfd, ptr) << 16) | bfd_get_16 (abfd, ptr + 2);
1020 }
1021 \f
1022 /* Look up an entry in a MIPS ELF linker hash table.  */
1023
1024 #define mips_elf_link_hash_lookup(table, string, create, copy, follow)  \
1025   ((struct mips_elf_link_hash_entry *)                                  \
1026    elf_link_hash_lookup (&(table)->root, (string), (create),            \
1027                          (copy), (follow)))
1028
1029 /* Traverse a MIPS ELF linker hash table.  */
1030
1031 #define mips_elf_link_hash_traverse(table, func, info)                  \
1032   (elf_link_hash_traverse                                               \
1033    (&(table)->root,                                                     \
1034     (bfd_boolean (*) (struct elf_link_hash_entry *, void *)) (func),    \
1035     (info)))
1036
1037 /* Find the base offsets for thread-local storage in this object,
1038    for GD/LD and IE/LE respectively.  */
1039
1040 #define TP_OFFSET 0x7000
1041 #define DTP_OFFSET 0x8000
1042
1043 static bfd_vma
1044 dtprel_base (struct bfd_link_info *info)
1045 {
1046   /* If tls_sec is NULL, we should have signalled an error already.  */
1047   if (elf_hash_table (info)->tls_sec == NULL)
1048     return 0;
1049   return elf_hash_table (info)->tls_sec->vma + DTP_OFFSET;
1050 }
1051
1052 static bfd_vma
1053 tprel_base (struct bfd_link_info *info)
1054 {
1055   /* If tls_sec is NULL, we should have signalled an error already.  */
1056   if (elf_hash_table (info)->tls_sec == NULL)
1057     return 0;
1058   return elf_hash_table (info)->tls_sec->vma + TP_OFFSET;
1059 }
1060
1061 /* Create an entry in a MIPS ELF linker hash table.  */
1062
1063 static struct bfd_hash_entry *
1064 mips_elf_link_hash_newfunc (struct bfd_hash_entry *entry,
1065                             struct bfd_hash_table *table, const char *string)
1066 {
1067   struct mips_elf_link_hash_entry *ret =
1068     (struct mips_elf_link_hash_entry *) entry;
1069
1070   /* Allocate the structure if it has not already been allocated by a
1071      subclass.  */
1072   if (ret == NULL)
1073     ret = bfd_hash_allocate (table, sizeof (struct mips_elf_link_hash_entry));
1074   if (ret == NULL)
1075     return (struct bfd_hash_entry *) ret;
1076
1077   /* Call the allocation method of the superclass.  */
1078   ret = ((struct mips_elf_link_hash_entry *)
1079          _bfd_elf_link_hash_newfunc ((struct bfd_hash_entry *) ret,
1080                                      table, string));
1081   if (ret != NULL)
1082     {
1083       /* Set local fields.  */
1084       memset (&ret->esym, 0, sizeof (EXTR));
1085       /* We use -2 as a marker to indicate that the information has
1086          not been set.  -1 means there is no associated ifd.  */
1087       ret->esym.ifd = -2;
1088       ret->la25_stub = 0;
1089       ret->possibly_dynamic_relocs = 0;
1090       ret->fn_stub = NULL;
1091       ret->call_stub = NULL;
1092       ret->call_fp_stub = NULL;
1093       ret->tls_ie_type = GOT_NORMAL;
1094       ret->tls_gd_type = GOT_NORMAL;
1095       ret->global_got_area = GGA_NONE;
1096       ret->got_only_for_calls = TRUE;
1097       ret->readonly_reloc = FALSE;
1098       ret->has_static_relocs = FALSE;
1099       ret->no_fn_stub = FALSE;
1100       ret->need_fn_stub = FALSE;
1101       ret->has_nonpic_branches = FALSE;
1102       ret->needs_lazy_stub = FALSE;
1103     }
1104
1105   return (struct bfd_hash_entry *) ret;
1106 }
1107
1108 /* Allocate MIPS ELF private object data.  */
1109
1110 bfd_boolean
1111 _bfd_mips_elf_mkobject (bfd *abfd)
1112 {
1113   return bfd_elf_allocate_object (abfd, sizeof (struct mips_elf_obj_tdata),
1114                                   MIPS_ELF_DATA);
1115 }
1116
1117 bfd_boolean
1118 _bfd_mips_elf_new_section_hook (bfd *abfd, asection *sec)
1119 {
1120   if (!sec->used_by_bfd)
1121     {
1122       struct _mips_elf_section_data *sdata;
1123       bfd_size_type amt = sizeof (*sdata);
1124
1125       sdata = bfd_zalloc (abfd, amt);
1126       if (sdata == NULL)
1127         return FALSE;
1128       sec->used_by_bfd = sdata;
1129     }
1130
1131   return _bfd_elf_new_section_hook (abfd, sec);
1132 }
1133 \f
1134 /* Read ECOFF debugging information from a .mdebug section into a
1135    ecoff_debug_info structure.  */
1136
1137 bfd_boolean
1138 _bfd_mips_elf_read_ecoff_info (bfd *abfd, asection *section,
1139                                struct ecoff_debug_info *debug)
1140 {
1141   HDRR *symhdr;
1142   const struct ecoff_debug_swap *swap;
1143   char *ext_hdr;
1144
1145   swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
1146   memset (debug, 0, sizeof (*debug));
1147
1148   ext_hdr = bfd_malloc (swap->external_hdr_size);
1149   if (ext_hdr == NULL && swap->external_hdr_size != 0)
1150     goto error_return;
1151
1152   if (! bfd_get_section_contents (abfd, section, ext_hdr, 0,
1153                                   swap->external_hdr_size))
1154     goto error_return;
1155
1156   symhdr = &debug->symbolic_header;
1157   (*swap->swap_hdr_in) (abfd, ext_hdr, symhdr);
1158
1159   /* The symbolic header contains absolute file offsets and sizes to
1160      read.  */
1161 #define READ(ptr, offset, count, size, type)                            \
1162   if (symhdr->count == 0)                                               \
1163     debug->ptr = NULL;                                                  \
1164   else                                                                  \
1165     {                                                                   \
1166       bfd_size_type amt = (bfd_size_type) size * symhdr->count;         \
1167       debug->ptr = bfd_malloc (amt);                                    \
1168       if (debug->ptr == NULL)                                           \
1169         goto error_return;                                              \
1170       if (bfd_seek (abfd, symhdr->offset, SEEK_SET) != 0                \
1171           || bfd_bread (debug->ptr, amt, abfd) != amt)                  \
1172         goto error_return;                                              \
1173     }
1174
1175   READ (line, cbLineOffset, cbLine, sizeof (unsigned char), unsigned char *);
1176   READ (external_dnr, cbDnOffset, idnMax, swap->external_dnr_size, void *);
1177   READ (external_pdr, cbPdOffset, ipdMax, swap->external_pdr_size, void *);
1178   READ (external_sym, cbSymOffset, isymMax, swap->external_sym_size, void *);
1179   READ (external_opt, cbOptOffset, ioptMax, swap->external_opt_size, void *);
1180   READ (external_aux, cbAuxOffset, iauxMax, sizeof (union aux_ext),
1181         union aux_ext *);
1182   READ (ss, cbSsOffset, issMax, sizeof (char), char *);
1183   READ (ssext, cbSsExtOffset, issExtMax, sizeof (char), char *);
1184   READ (external_fdr, cbFdOffset, ifdMax, swap->external_fdr_size, void *);
1185   READ (external_rfd, cbRfdOffset, crfd, swap->external_rfd_size, void *);
1186   READ (external_ext, cbExtOffset, iextMax, swap->external_ext_size, void *);
1187 #undef READ
1188
1189   debug->fdr = NULL;
1190
1191   return TRUE;
1192
1193  error_return:
1194   if (ext_hdr != NULL)
1195     free (ext_hdr);
1196   if (debug->line != NULL)
1197     free (debug->line);
1198   if (debug->external_dnr != NULL)
1199     free (debug->external_dnr);
1200   if (debug->external_pdr != NULL)
1201     free (debug->external_pdr);
1202   if (debug->external_sym != NULL)
1203     free (debug->external_sym);
1204   if (debug->external_opt != NULL)
1205     free (debug->external_opt);
1206   if (debug->external_aux != NULL)
1207     free (debug->external_aux);
1208   if (debug->ss != NULL)
1209     free (debug->ss);
1210   if (debug->ssext != NULL)
1211     free (debug->ssext);
1212   if (debug->external_fdr != NULL)
1213     free (debug->external_fdr);
1214   if (debug->external_rfd != NULL)
1215     free (debug->external_rfd);
1216   if (debug->external_ext != NULL)
1217     free (debug->external_ext);
1218   return FALSE;
1219 }
1220 \f
1221 /* Swap RPDR (runtime procedure table entry) for output.  */
1222
1223 static void
1224 ecoff_swap_rpdr_out (bfd *abfd, const RPDR *in, struct rpdr_ext *ex)
1225 {
1226   H_PUT_S32 (abfd, in->adr, ex->p_adr);
1227   H_PUT_32 (abfd, in->regmask, ex->p_regmask);
1228   H_PUT_32 (abfd, in->regoffset, ex->p_regoffset);
1229   H_PUT_32 (abfd, in->fregmask, ex->p_fregmask);
1230   H_PUT_32 (abfd, in->fregoffset, ex->p_fregoffset);
1231   H_PUT_32 (abfd, in->frameoffset, ex->p_frameoffset);
1232
1233   H_PUT_16 (abfd, in->framereg, ex->p_framereg);
1234   H_PUT_16 (abfd, in->pcreg, ex->p_pcreg);
1235
1236   H_PUT_32 (abfd, in->irpss, ex->p_irpss);
1237 }
1238
1239 /* Create a runtime procedure table from the .mdebug section.  */
1240
1241 static bfd_boolean
1242 mips_elf_create_procedure_table (void *handle, bfd *abfd,
1243                                  struct bfd_link_info *info, asection *s,
1244                                  struct ecoff_debug_info *debug)
1245 {
1246   const struct ecoff_debug_swap *swap;
1247   HDRR *hdr = &debug->symbolic_header;
1248   RPDR *rpdr, *rp;
1249   struct rpdr_ext *erp;
1250   void *rtproc;
1251   struct pdr_ext *epdr;
1252   struct sym_ext *esym;
1253   char *ss, **sv;
1254   char *str;
1255   bfd_size_type size;
1256   bfd_size_type count;
1257   unsigned long sindex;
1258   unsigned long i;
1259   PDR pdr;
1260   SYMR sym;
1261   const char *no_name_func = _("static procedure (no name)");
1262
1263   epdr = NULL;
1264   rpdr = NULL;
1265   esym = NULL;
1266   ss = NULL;
1267   sv = NULL;
1268
1269   swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
1270
1271   sindex = strlen (no_name_func) + 1;
1272   count = hdr->ipdMax;
1273   if (count > 0)
1274     {
1275       size = swap->external_pdr_size;
1276
1277       epdr = bfd_malloc (size * count);
1278       if (epdr == NULL)
1279         goto error_return;
1280
1281       if (! _bfd_ecoff_get_accumulated_pdr (handle, (bfd_byte *) epdr))
1282         goto error_return;
1283
1284       size = sizeof (RPDR);
1285       rp = rpdr = bfd_malloc (size * count);
1286       if (rpdr == NULL)
1287         goto error_return;
1288
1289       size = sizeof (char *);
1290       sv = bfd_malloc (size * count);
1291       if (sv == NULL)
1292         goto error_return;
1293
1294       count = hdr->isymMax;
1295       size = swap->external_sym_size;
1296       esym = bfd_malloc (size * count);
1297       if (esym == NULL)
1298         goto error_return;
1299
1300       if (! _bfd_ecoff_get_accumulated_sym (handle, (bfd_byte *) esym))
1301         goto error_return;
1302
1303       count = hdr->issMax;
1304       ss = bfd_malloc (count);
1305       if (ss == NULL)
1306         goto error_return;
1307       if (! _bfd_ecoff_get_accumulated_ss (handle, (bfd_byte *) ss))
1308         goto error_return;
1309
1310       count = hdr->ipdMax;
1311       for (i = 0; i < (unsigned long) count; i++, rp++)
1312         {
1313           (*swap->swap_pdr_in) (abfd, epdr + i, &pdr);
1314           (*swap->swap_sym_in) (abfd, &esym[pdr.isym], &sym);
1315           rp->adr = sym.value;
1316           rp->regmask = pdr.regmask;
1317           rp->regoffset = pdr.regoffset;
1318           rp->fregmask = pdr.fregmask;
1319           rp->fregoffset = pdr.fregoffset;
1320           rp->frameoffset = pdr.frameoffset;
1321           rp->framereg = pdr.framereg;
1322           rp->pcreg = pdr.pcreg;
1323           rp->irpss = sindex;
1324           sv[i] = ss + sym.iss;
1325           sindex += strlen (sv[i]) + 1;
1326         }
1327     }
1328
1329   size = sizeof (struct rpdr_ext) * (count + 2) + sindex;
1330   size = BFD_ALIGN (size, 16);
1331   rtproc = bfd_alloc (abfd, size);
1332   if (rtproc == NULL)
1333     {
1334       mips_elf_hash_table (info)->procedure_count = 0;
1335       goto error_return;
1336     }
1337
1338   mips_elf_hash_table (info)->procedure_count = count + 2;
1339
1340   erp = rtproc;
1341   memset (erp, 0, sizeof (struct rpdr_ext));
1342   erp++;
1343   str = (char *) rtproc + sizeof (struct rpdr_ext) * (count + 2);
1344   strcpy (str, no_name_func);
1345   str += strlen (no_name_func) + 1;
1346   for (i = 0; i < count; i++)
1347     {
1348       ecoff_swap_rpdr_out (abfd, rpdr + i, erp + i);
1349       strcpy (str, sv[i]);
1350       str += strlen (sv[i]) + 1;
1351     }
1352   H_PUT_S32 (abfd, -1, (erp + count)->p_adr);
1353
1354   /* Set the size and contents of .rtproc section.  */
1355   s->size = size;
1356   s->contents = rtproc;
1357
1358   /* Skip this section later on (I don't think this currently
1359      matters, but someday it might).  */
1360   s->map_head.link_order = NULL;
1361
1362   if (epdr != NULL)
1363     free (epdr);
1364   if (rpdr != NULL)
1365     free (rpdr);
1366   if (esym != NULL)
1367     free (esym);
1368   if (ss != NULL)
1369     free (ss);
1370   if (sv != NULL)
1371     free (sv);
1372
1373   return TRUE;
1374
1375  error_return:
1376   if (epdr != NULL)
1377     free (epdr);
1378   if (rpdr != NULL)
1379     free (rpdr);
1380   if (esym != NULL)
1381     free (esym);
1382   if (ss != NULL)
1383     free (ss);
1384   if (sv != NULL)
1385     free (sv);
1386   return FALSE;
1387 }
1388 \f
1389 /* We're going to create a stub for H.  Create a symbol for the stub's
1390    value and size, to help make the disassembly easier to read.  */
1391
1392 static bfd_boolean
1393 mips_elf_create_stub_symbol (struct bfd_link_info *info,
1394                              struct mips_elf_link_hash_entry *h,
1395                              const char *prefix, asection *s, bfd_vma value,
1396                              bfd_vma size)
1397 {
1398   struct bfd_link_hash_entry *bh;
1399   struct elf_link_hash_entry *elfh;
1400   const char *name;
1401
1402   if (ELF_ST_IS_MICROMIPS (h->root.other))
1403     value |= 1;
1404
1405   /* Create a new symbol.  */
1406   name = ACONCAT ((prefix, h->root.root.root.string, NULL));
1407   bh = NULL;
1408   if (!_bfd_generic_link_add_one_symbol (info, s->owner, name,
1409                                          BSF_LOCAL, s, value, NULL,
1410                                          TRUE, FALSE, &bh))
1411     return FALSE;
1412
1413   /* Make it a local function.  */
1414   elfh = (struct elf_link_hash_entry *) bh;
1415   elfh->type = ELF_ST_INFO (STB_LOCAL, STT_FUNC);
1416   elfh->size = size;
1417   elfh->forced_local = 1;
1418   return TRUE;
1419 }
1420
1421 /* We're about to redefine H.  Create a symbol to represent H's
1422    current value and size, to help make the disassembly easier
1423    to read.  */
1424
1425 static bfd_boolean
1426 mips_elf_create_shadow_symbol (struct bfd_link_info *info,
1427                                struct mips_elf_link_hash_entry *h,
1428                                const char *prefix)
1429 {
1430   struct bfd_link_hash_entry *bh;
1431   struct elf_link_hash_entry *elfh;
1432   const char *name;
1433   asection *s;
1434   bfd_vma value;
1435
1436   /* Read the symbol's value.  */
1437   BFD_ASSERT (h->root.root.type == bfd_link_hash_defined
1438               || h->root.root.type == bfd_link_hash_defweak);
1439   s = h->root.root.u.def.section;
1440   value = h->root.root.u.def.value;
1441
1442   /* Create a new symbol.  */
1443   name = ACONCAT ((prefix, h->root.root.root.string, NULL));
1444   bh = NULL;
1445   if (!_bfd_generic_link_add_one_symbol (info, s->owner, name,
1446                                          BSF_LOCAL, s, value, NULL,
1447                                          TRUE, FALSE, &bh))
1448     return FALSE;
1449
1450   /* Make it local and copy the other attributes from H.  */
1451   elfh = (struct elf_link_hash_entry *) bh;
1452   elfh->type = ELF_ST_INFO (STB_LOCAL, ELF_ST_TYPE (h->root.type));
1453   elfh->other = h->root.other;
1454   elfh->size = h->root.size;
1455   elfh->forced_local = 1;
1456   return TRUE;
1457 }
1458
1459 /* Return TRUE if relocations in SECTION can refer directly to a MIPS16
1460    function rather than to a hard-float stub.  */
1461
1462 static bfd_boolean
1463 section_allows_mips16_refs_p (asection *section)
1464 {
1465   const char *name;
1466
1467   name = bfd_get_section_name (section->owner, section);
1468   return (FN_STUB_P (name)
1469           || CALL_STUB_P (name)
1470           || CALL_FP_STUB_P (name)
1471           || strcmp (name, ".pdr") == 0);
1472 }
1473
1474 /* [RELOCS, RELEND) are the relocations against SEC, which is a MIPS16
1475    stub section of some kind.  Return the R_SYMNDX of the target
1476    function, or 0 if we can't decide which function that is.  */
1477
1478 static unsigned long
1479 mips16_stub_symndx (const struct elf_backend_data *bed,
1480                     asection *sec ATTRIBUTE_UNUSED,
1481                     const Elf_Internal_Rela *relocs,
1482                     const Elf_Internal_Rela *relend)
1483 {
1484   int int_rels_per_ext_rel = bed->s->int_rels_per_ext_rel;
1485   const Elf_Internal_Rela *rel;
1486
1487   /* Trust the first R_MIPS_NONE relocation, if any, but not a subsequent
1488      one in a compound relocation.  */
1489   for (rel = relocs; rel < relend; rel += int_rels_per_ext_rel)
1490     if (ELF_R_TYPE (sec->owner, rel->r_info) == R_MIPS_NONE)
1491       return ELF_R_SYM (sec->owner, rel->r_info);
1492
1493   /* Otherwise trust the first relocation, whatever its kind.  This is
1494      the traditional behavior.  */
1495   if (relocs < relend)
1496     return ELF_R_SYM (sec->owner, relocs->r_info);
1497
1498   return 0;
1499 }
1500
1501 /* Check the mips16 stubs for a particular symbol, and see if we can
1502    discard them.  */
1503
1504 static void
1505 mips_elf_check_mips16_stubs (struct bfd_link_info *info,
1506                              struct mips_elf_link_hash_entry *h)
1507 {
1508   /* Dynamic symbols must use the standard call interface, in case other
1509      objects try to call them.  */
1510   if (h->fn_stub != NULL
1511       && h->root.dynindx != -1)
1512     {
1513       mips_elf_create_shadow_symbol (info, h, ".mips16.");
1514       h->need_fn_stub = TRUE;
1515     }
1516
1517   if (h->fn_stub != NULL
1518       && ! h->need_fn_stub)
1519     {
1520       /* We don't need the fn_stub; the only references to this symbol
1521          are 16 bit calls.  Clobber the size to 0 to prevent it from
1522          being included in the link.  */
1523       h->fn_stub->size = 0;
1524       h->fn_stub->flags &= ~SEC_RELOC;
1525       h->fn_stub->reloc_count = 0;
1526       h->fn_stub->flags |= SEC_EXCLUDE;
1527     }
1528
1529   if (h->call_stub != NULL
1530       && ELF_ST_IS_MIPS16 (h->root.other))
1531     {
1532       /* We don't need the call_stub; this is a 16 bit function, so
1533          calls from other 16 bit functions are OK.  Clobber the size
1534          to 0 to prevent it from being included in the link.  */
1535       h->call_stub->size = 0;
1536       h->call_stub->flags &= ~SEC_RELOC;
1537       h->call_stub->reloc_count = 0;
1538       h->call_stub->flags |= SEC_EXCLUDE;
1539     }
1540
1541   if (h->call_fp_stub != NULL
1542       && ELF_ST_IS_MIPS16 (h->root.other))
1543     {
1544       /* We don't need the call_stub; this is a 16 bit function, so
1545          calls from other 16 bit functions are OK.  Clobber the size
1546          to 0 to prevent it from being included in the link.  */
1547       h->call_fp_stub->size = 0;
1548       h->call_fp_stub->flags &= ~SEC_RELOC;
1549       h->call_fp_stub->reloc_count = 0;
1550       h->call_fp_stub->flags |= SEC_EXCLUDE;
1551     }
1552 }
1553
1554 /* Hashtable callbacks for mips_elf_la25_stubs.  */
1555
1556 static hashval_t
1557 mips_elf_la25_stub_hash (const void *entry_)
1558 {
1559   const struct mips_elf_la25_stub *entry;
1560
1561   entry = (struct mips_elf_la25_stub *) entry_;
1562   return entry->h->root.root.u.def.section->id
1563     + entry->h->root.root.u.def.value;
1564 }
1565
1566 static int
1567 mips_elf_la25_stub_eq (const void *entry1_, const void *entry2_)
1568 {
1569   const struct mips_elf_la25_stub *entry1, *entry2;
1570
1571   entry1 = (struct mips_elf_la25_stub *) entry1_;
1572   entry2 = (struct mips_elf_la25_stub *) entry2_;
1573   return ((entry1->h->root.root.u.def.section
1574            == entry2->h->root.root.u.def.section)
1575           && (entry1->h->root.root.u.def.value
1576               == entry2->h->root.root.u.def.value));
1577 }
1578
1579 /* Called by the linker to set up the la25 stub-creation code.  FN is
1580    the linker's implementation of add_stub_function.  Return true on
1581    success.  */
1582
1583 bfd_boolean
1584 _bfd_mips_elf_init_stubs (struct bfd_link_info *info,
1585                           asection *(*fn) (const char *, asection *,
1586                                            asection *))
1587 {
1588   struct mips_elf_link_hash_table *htab;
1589
1590   htab = mips_elf_hash_table (info);
1591   if (htab == NULL)
1592     return FALSE;
1593
1594   htab->add_stub_section = fn;
1595   htab->la25_stubs = htab_try_create (1, mips_elf_la25_stub_hash,
1596                                       mips_elf_la25_stub_eq, NULL);
1597   if (htab->la25_stubs == NULL)
1598     return FALSE;
1599
1600   return TRUE;
1601 }
1602
1603 /* Return true if H is a locally-defined PIC function, in the sense
1604    that it or its fn_stub might need $25 to be valid on entry.
1605    Note that MIPS16 functions set up $gp using PC-relative instructions,
1606    so they themselves never need $25 to be valid.  Only non-MIPS16
1607    entry points are of interest here.  */
1608
1609 static bfd_boolean
1610 mips_elf_local_pic_function_p (struct mips_elf_link_hash_entry *h)
1611 {
1612   return ((h->root.root.type == bfd_link_hash_defined
1613            || h->root.root.type == bfd_link_hash_defweak)
1614           && h->root.def_regular
1615           && !bfd_is_abs_section (h->root.root.u.def.section)
1616           && (!ELF_ST_IS_MIPS16 (h->root.other)
1617               || (h->fn_stub && h->need_fn_stub))
1618           && (PIC_OBJECT_P (h->root.root.u.def.section->owner)
1619               || ELF_ST_IS_MIPS_PIC (h->root.other)));
1620 }
1621
1622 /* Set *SEC to the input section that contains the target of STUB.
1623    Return the offset of the target from the start of that section.  */
1624
1625 static bfd_vma
1626 mips_elf_get_la25_target (struct mips_elf_la25_stub *stub,
1627                           asection **sec)
1628 {
1629   if (ELF_ST_IS_MIPS16 (stub->h->root.other))
1630     {
1631       BFD_ASSERT (stub->h->need_fn_stub);
1632       *sec = stub->h->fn_stub;
1633       return 0;
1634     }
1635   else
1636     {
1637       *sec = stub->h->root.root.u.def.section;
1638       return stub->h->root.root.u.def.value;
1639     }
1640 }
1641
1642 /* STUB describes an la25 stub that we have decided to implement
1643    by inserting an LUI/ADDIU pair before the target function.
1644    Create the section and redirect the function symbol to it.  */
1645
1646 static bfd_boolean
1647 mips_elf_add_la25_intro (struct mips_elf_la25_stub *stub,
1648                          struct bfd_link_info *info)
1649 {
1650   struct mips_elf_link_hash_table *htab;
1651   char *name;
1652   asection *s, *input_section;
1653   unsigned int align;
1654
1655   htab = mips_elf_hash_table (info);
1656   if (htab == NULL)
1657     return FALSE;
1658
1659   /* Create a unique name for the new section.  */
1660   name = bfd_malloc (11 + sizeof (".text.stub."));
1661   if (name == NULL)
1662     return FALSE;
1663   sprintf (name, ".text.stub.%d", (int) htab_elements (htab->la25_stubs));
1664
1665   /* Create the section.  */
1666   mips_elf_get_la25_target (stub, &input_section);
1667   s = htab->add_stub_section (name, input_section,
1668                               input_section->output_section);
1669   if (s == NULL)
1670     return FALSE;
1671
1672   /* Make sure that any padding goes before the stub.  */
1673   align = input_section->alignment_power;
1674   if (!bfd_set_section_alignment (s->owner, s, align))
1675     return FALSE;
1676   if (align > 3)
1677     s->size = (1 << align) - 8;
1678
1679   /* Create a symbol for the stub.  */
1680   mips_elf_create_stub_symbol (info, stub->h, ".pic.", s, s->size, 8);
1681   stub->stub_section = s;
1682   stub->offset = s->size;
1683
1684   /* Allocate room for it.  */
1685   s->size += 8;
1686   return TRUE;
1687 }
1688
1689 /* STUB describes an la25 stub that we have decided to implement
1690    with a separate trampoline.  Allocate room for it and redirect
1691    the function symbol to it.  */
1692
1693 static bfd_boolean
1694 mips_elf_add_la25_trampoline (struct mips_elf_la25_stub *stub,
1695                               struct bfd_link_info *info)
1696 {
1697   struct mips_elf_link_hash_table *htab;
1698   asection *s;
1699
1700   htab = mips_elf_hash_table (info);
1701   if (htab == NULL)
1702     return FALSE;
1703
1704   /* Create a trampoline section, if we haven't already.  */
1705   s = htab->strampoline;
1706   if (s == NULL)
1707     {
1708       asection *input_section = stub->h->root.root.u.def.section;
1709       s = htab->add_stub_section (".text", NULL,
1710                                   input_section->output_section);
1711       if (s == NULL || !bfd_set_section_alignment (s->owner, s, 4))
1712         return FALSE;
1713       htab->strampoline = s;
1714     }
1715
1716   /* Create a symbol for the stub.  */
1717   mips_elf_create_stub_symbol (info, stub->h, ".pic.", s, s->size, 16);
1718   stub->stub_section = s;
1719   stub->offset = s->size;
1720
1721   /* Allocate room for it.  */
1722   s->size += 16;
1723   return TRUE;
1724 }
1725
1726 /* H describes a symbol that needs an la25 stub.  Make sure that an
1727    appropriate stub exists and point H at it.  */
1728
1729 static bfd_boolean
1730 mips_elf_add_la25_stub (struct bfd_link_info *info,
1731                         struct mips_elf_link_hash_entry *h)
1732 {
1733   struct mips_elf_link_hash_table *htab;
1734   struct mips_elf_la25_stub search, *stub;
1735   bfd_boolean use_trampoline_p;
1736   asection *s;
1737   bfd_vma value;
1738   void **slot;
1739
1740   /* Describe the stub we want.  */
1741   search.stub_section = NULL;
1742   search.offset = 0;
1743   search.h = h;
1744
1745   /* See if we've already created an equivalent stub.  */
1746   htab = mips_elf_hash_table (info);
1747   if (htab == NULL)
1748     return FALSE;
1749
1750   slot = htab_find_slot (htab->la25_stubs, &search, INSERT);
1751   if (slot == NULL)
1752     return FALSE;
1753
1754   stub = (struct mips_elf_la25_stub *) *slot;
1755   if (stub != NULL)
1756     {
1757       /* We can reuse the existing stub.  */
1758       h->la25_stub = stub;
1759       return TRUE;
1760     }
1761
1762   /* Create a permanent copy of ENTRY and add it to the hash table.  */
1763   stub = bfd_malloc (sizeof (search));
1764   if (stub == NULL)
1765     return FALSE;
1766   *stub = search;
1767   *slot = stub;
1768
1769   /* Prefer to use LUI/ADDIU stubs if the function is at the beginning
1770      of the section and if we would need no more than 2 nops.  */
1771   value = mips_elf_get_la25_target (stub, &s);
1772   use_trampoline_p = (value != 0 || s->alignment_power > 4);
1773
1774   h->la25_stub = stub;
1775   return (use_trampoline_p
1776           ? mips_elf_add_la25_trampoline (stub, info)
1777           : mips_elf_add_la25_intro (stub, info));
1778 }
1779
1780 /* A mips_elf_link_hash_traverse callback that is called before sizing
1781    sections.  DATA points to a mips_htab_traverse_info structure.  */
1782
1783 static bfd_boolean
1784 mips_elf_check_symbols (struct mips_elf_link_hash_entry *h, void *data)
1785 {
1786   struct mips_htab_traverse_info *hti;
1787
1788   hti = (struct mips_htab_traverse_info *) data;
1789   if (!hti->info->relocatable)
1790     mips_elf_check_mips16_stubs (hti->info, h);
1791
1792   if (mips_elf_local_pic_function_p (h))
1793     {
1794       /* PR 12845: If H is in a section that has been garbage
1795          collected it will have its output section set to *ABS*.  */
1796       if (bfd_is_abs_section (h->root.root.u.def.section->output_section))
1797         return TRUE;
1798
1799       /* H is a function that might need $25 to be valid on entry.
1800          If we're creating a non-PIC relocatable object, mark H as
1801          being PIC.  If we're creating a non-relocatable object with
1802          non-PIC branches and jumps to H, make sure that H has an la25
1803          stub.  */
1804       if (hti->info->relocatable)
1805         {
1806           if (!PIC_OBJECT_P (hti->output_bfd))
1807             h->root.other = ELF_ST_SET_MIPS_PIC (h->root.other);
1808         }
1809       else if (h->has_nonpic_branches && !mips_elf_add_la25_stub (hti->info, h))
1810         {
1811           hti->error = TRUE;
1812           return FALSE;
1813         }
1814     }
1815   return TRUE;
1816 }
1817 \f
1818 /* R_MIPS16_26 is used for the mips16 jal and jalx instructions.
1819    Most mips16 instructions are 16 bits, but these instructions
1820    are 32 bits.
1821
1822    The format of these instructions is:
1823
1824    +--------------+--------------------------------+
1825    |     JALX     | X|   Imm 20:16  |   Imm 25:21  |
1826    +--------------+--------------------------------+
1827    |                Immediate  15:0                |
1828    +-----------------------------------------------+
1829
1830    JALX is the 5-bit value 00011.  X is 0 for jal, 1 for jalx.
1831    Note that the immediate value in the first word is swapped.
1832
1833    When producing a relocatable object file, R_MIPS16_26 is
1834    handled mostly like R_MIPS_26.  In particular, the addend is
1835    stored as a straight 26-bit value in a 32-bit instruction.
1836    (gas makes life simpler for itself by never adjusting a
1837    R_MIPS16_26 reloc to be against a section, so the addend is
1838    always zero).  However, the 32 bit instruction is stored as 2
1839    16-bit values, rather than a single 32-bit value.  In a
1840    big-endian file, the result is the same; in a little-endian
1841    file, the two 16-bit halves of the 32 bit value are swapped.
1842    This is so that a disassembler can recognize the jal
1843    instruction.
1844
1845    When doing a final link, R_MIPS16_26 is treated as a 32 bit
1846    instruction stored as two 16-bit values.  The addend A is the
1847    contents of the targ26 field.  The calculation is the same as
1848    R_MIPS_26.  When storing the calculated value, reorder the
1849    immediate value as shown above, and don't forget to store the
1850    value as two 16-bit values.
1851
1852    To put it in MIPS ABI terms, the relocation field is T-targ26-16,
1853    defined as
1854
1855    big-endian:
1856    +--------+----------------------+
1857    |        |                      |
1858    |        |    targ26-16         |
1859    |31    26|25                   0|
1860    +--------+----------------------+
1861
1862    little-endian:
1863    +----------+------+-------------+
1864    |          |      |             |
1865    |  sub1    |      |     sub2    |
1866    |0        9|10  15|16         31|
1867    +----------+--------------------+
1868    where targ26-16 is sub1 followed by sub2 (i.e., the addend field A is
1869    ((sub1 << 16) | sub2)).
1870
1871    When producing a relocatable object file, the calculation is
1872    (((A < 2) | ((P + 4) & 0xf0000000) + S) >> 2)
1873    When producing a fully linked file, the calculation is
1874    let R = (((A < 2) | ((P + 4) & 0xf0000000) + S) >> 2)
1875    ((R & 0x1f0000) << 5) | ((R & 0x3e00000) >> 5) | (R & 0xffff)
1876
1877    The table below lists the other MIPS16 instruction relocations.
1878    Each one is calculated in the same way as the non-MIPS16 relocation
1879    given on the right, but using the extended MIPS16 layout of 16-bit
1880    immediate fields:
1881
1882         R_MIPS16_GPREL          R_MIPS_GPREL16
1883         R_MIPS16_GOT16          R_MIPS_GOT16
1884         R_MIPS16_CALL16         R_MIPS_CALL16
1885         R_MIPS16_HI16           R_MIPS_HI16
1886         R_MIPS16_LO16           R_MIPS_LO16
1887
1888    A typical instruction will have a format like this:
1889
1890    +--------------+--------------------------------+
1891    |    EXTEND    |     Imm 10:5    |   Imm 15:11  |
1892    +--------------+--------------------------------+
1893    |    Major     |   rx   |   ry   |   Imm  4:0   |
1894    +--------------+--------------------------------+
1895
1896    EXTEND is the five bit value 11110.  Major is the instruction
1897    opcode.
1898
1899    All we need to do here is shuffle the bits appropriately.
1900    As above, the two 16-bit halves must be swapped on a
1901    little-endian system.  */
1902
1903 static inline bfd_boolean
1904 mips16_reloc_p (int r_type)
1905 {
1906   switch (r_type)
1907     {
1908     case R_MIPS16_26:
1909     case R_MIPS16_GPREL:
1910     case R_MIPS16_GOT16:
1911     case R_MIPS16_CALL16:
1912     case R_MIPS16_HI16:
1913     case R_MIPS16_LO16:
1914     case R_MIPS16_TLS_GD:
1915     case R_MIPS16_TLS_LDM:
1916     case R_MIPS16_TLS_DTPREL_HI16:
1917     case R_MIPS16_TLS_DTPREL_LO16:
1918     case R_MIPS16_TLS_GOTTPREL:
1919     case R_MIPS16_TLS_TPREL_HI16:
1920     case R_MIPS16_TLS_TPREL_LO16:
1921       return TRUE;
1922
1923     default:
1924       return FALSE;
1925     }
1926 }
1927
1928 /* Check if a microMIPS reloc.  */
1929
1930 static inline bfd_boolean
1931 micromips_reloc_p (unsigned int r_type)
1932 {
1933   return r_type >= R_MICROMIPS_min && r_type < R_MICROMIPS_max;
1934 }
1935
1936 /* Similar to MIPS16, the two 16-bit halves in microMIPS must be swapped
1937    on a little-endian system.  This does not apply to R_MICROMIPS_PC7_S1
1938    and R_MICROMIPS_PC10_S1 relocs that apply to 16-bit instructions.  */
1939
1940 static inline bfd_boolean
1941 micromips_reloc_shuffle_p (unsigned int r_type)
1942 {
1943   return (micromips_reloc_p (r_type)
1944           && r_type != R_MICROMIPS_PC7_S1
1945           && r_type != R_MICROMIPS_PC10_S1);
1946 }
1947
1948 static inline bfd_boolean
1949 got16_reloc_p (int r_type)
1950 {
1951   return (r_type == R_MIPS_GOT16
1952           || r_type == R_MIPS16_GOT16
1953           || r_type == R_MICROMIPS_GOT16);
1954 }
1955
1956 static inline bfd_boolean
1957 call16_reloc_p (int r_type)
1958 {
1959   return (r_type == R_MIPS_CALL16
1960           || r_type == R_MIPS16_CALL16
1961           || r_type == R_MICROMIPS_CALL16);
1962 }
1963
1964 static inline bfd_boolean
1965 got_disp_reloc_p (unsigned int r_type)
1966 {
1967   return r_type == R_MIPS_GOT_DISP || r_type == R_MICROMIPS_GOT_DISP;
1968 }
1969
1970 static inline bfd_boolean
1971 got_page_reloc_p (unsigned int r_type)
1972 {
1973   return r_type == R_MIPS_GOT_PAGE || r_type == R_MICROMIPS_GOT_PAGE;
1974 }
1975
1976 static inline bfd_boolean
1977 got_ofst_reloc_p (unsigned int r_type)
1978 {
1979   return r_type == R_MIPS_GOT_OFST || r_type == R_MICROMIPS_GOT_OFST;
1980 }
1981
1982 static inline bfd_boolean
1983 got_hi16_reloc_p (unsigned int r_type)
1984 {
1985   return r_type == R_MIPS_GOT_HI16 || r_type == R_MICROMIPS_GOT_HI16;
1986 }
1987
1988 static inline bfd_boolean
1989 got_lo16_reloc_p (unsigned int r_type)
1990 {
1991   return r_type == R_MIPS_GOT_LO16 || r_type == R_MICROMIPS_GOT_LO16;
1992 }
1993
1994 static inline bfd_boolean
1995 call_hi16_reloc_p (unsigned int r_type)
1996 {
1997   return r_type == R_MIPS_CALL_HI16 || r_type == R_MICROMIPS_CALL_HI16;
1998 }
1999
2000 static inline bfd_boolean
2001 call_lo16_reloc_p (unsigned int r_type)
2002 {
2003   return r_type == R_MIPS_CALL_LO16 || r_type == R_MICROMIPS_CALL_LO16;
2004 }
2005
2006 static inline bfd_boolean
2007 hi16_reloc_p (int r_type)
2008 {
2009   return (r_type == R_MIPS_HI16
2010           || r_type == R_MIPS16_HI16
2011           || r_type == R_MICROMIPS_HI16);
2012 }
2013
2014 static inline bfd_boolean
2015 lo16_reloc_p (int r_type)
2016 {
2017   return (r_type == R_MIPS_LO16
2018           || r_type == R_MIPS16_LO16
2019           || r_type == R_MICROMIPS_LO16);
2020 }
2021
2022 static inline bfd_boolean
2023 mips16_call_reloc_p (int r_type)
2024 {
2025   return r_type == R_MIPS16_26 || r_type == R_MIPS16_CALL16;
2026 }
2027
2028 static inline bfd_boolean
2029 jal_reloc_p (int r_type)
2030 {
2031   return (r_type == R_MIPS_26
2032           || r_type == R_MIPS16_26
2033           || r_type == R_MICROMIPS_26_S1);
2034 }
2035
2036 static inline bfd_boolean
2037 micromips_branch_reloc_p (int r_type)
2038 {
2039   return (r_type == R_MICROMIPS_26_S1
2040           || r_type == R_MICROMIPS_PC16_S1
2041           || r_type == R_MICROMIPS_PC10_S1
2042           || r_type == R_MICROMIPS_PC7_S1);
2043 }
2044
2045 static inline bfd_boolean
2046 tls_gd_reloc_p (unsigned int r_type)
2047 {
2048   return (r_type == R_MIPS_TLS_GD
2049           || r_type == R_MIPS16_TLS_GD
2050           || r_type == R_MICROMIPS_TLS_GD);
2051 }
2052
2053 static inline bfd_boolean
2054 tls_ldm_reloc_p (unsigned int r_type)
2055 {
2056   return (r_type == R_MIPS_TLS_LDM
2057           || r_type == R_MIPS16_TLS_LDM
2058           || r_type == R_MICROMIPS_TLS_LDM);
2059 }
2060
2061 static inline bfd_boolean
2062 tls_gottprel_reloc_p (unsigned int r_type)
2063 {
2064   return (r_type == R_MIPS_TLS_GOTTPREL
2065           || r_type == R_MIPS16_TLS_GOTTPREL
2066           || r_type == R_MICROMIPS_TLS_GOTTPREL);
2067 }
2068
2069 void
2070 _bfd_mips_elf_reloc_unshuffle (bfd *abfd, int r_type,
2071                                bfd_boolean jal_shuffle, bfd_byte *data)
2072 {
2073   bfd_vma first, second, val;
2074
2075   if (!mips16_reloc_p (r_type) && !micromips_reloc_shuffle_p (r_type))
2076     return;
2077
2078   /* Pick up the first and second halfwords of the instruction.  */
2079   first = bfd_get_16 (abfd, data);
2080   second = bfd_get_16 (abfd, data + 2);
2081   if (micromips_reloc_p (r_type) || (r_type == R_MIPS16_26 && !jal_shuffle))
2082     val = first << 16 | second;
2083   else if (r_type != R_MIPS16_26)
2084     val = (((first & 0xf800) << 16) | ((second & 0xffe0) << 11)
2085            | ((first & 0x1f) << 11) | (first & 0x7e0) | (second & 0x1f));
2086   else
2087     val = (((first & 0xfc00) << 16) | ((first & 0x3e0) << 11)
2088            | ((first & 0x1f) << 21) | second);
2089   bfd_put_32 (abfd, val, data);
2090 }
2091
2092 void
2093 _bfd_mips_elf_reloc_shuffle (bfd *abfd, int r_type,
2094                              bfd_boolean jal_shuffle, bfd_byte *data)
2095 {
2096   bfd_vma first, second, val;
2097
2098   if (!mips16_reloc_p (r_type) && !micromips_reloc_shuffle_p (r_type))
2099     return;
2100
2101   val = bfd_get_32 (abfd, data);
2102   if (micromips_reloc_p (r_type) || (r_type == R_MIPS16_26 && !jal_shuffle))
2103     {
2104       second = val & 0xffff;
2105       first = val >> 16;
2106     }
2107   else if (r_type != R_MIPS16_26)
2108     {
2109       second = ((val >> 11) & 0xffe0) | (val & 0x1f);
2110       first = ((val >> 16) & 0xf800) | ((val >> 11) & 0x1f) | (val & 0x7e0);
2111     }
2112   else
2113     {
2114       second = val & 0xffff;
2115       first = ((val >> 16) & 0xfc00) | ((val >> 11) & 0x3e0)
2116                | ((val >> 21) & 0x1f);
2117     }
2118   bfd_put_16 (abfd, second, data + 2);
2119   bfd_put_16 (abfd, first, data);
2120 }
2121
2122 bfd_reloc_status_type
2123 _bfd_mips_elf_gprel16_with_gp (bfd *abfd, asymbol *symbol,
2124                                arelent *reloc_entry, asection *input_section,
2125                                bfd_boolean relocatable, void *data, bfd_vma gp)
2126 {
2127   bfd_vma relocation;
2128   bfd_signed_vma val;
2129   bfd_reloc_status_type status;
2130
2131   if (bfd_is_com_section (symbol->section))
2132     relocation = 0;
2133   else
2134     relocation = symbol->value;
2135
2136   relocation += symbol->section->output_section->vma;
2137   relocation += symbol->section->output_offset;
2138
2139   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2140     return bfd_reloc_outofrange;
2141
2142   /* Set val to the offset into the section or symbol.  */
2143   val = reloc_entry->addend;
2144
2145   _bfd_mips_elf_sign_extend (val, 16);
2146
2147   /* Adjust val for the final section location and GP value.  If we
2148      are producing relocatable output, we don't want to do this for
2149      an external symbol.  */
2150   if (! relocatable
2151       || (symbol->flags & BSF_SECTION_SYM) != 0)
2152     val += relocation - gp;
2153
2154   if (reloc_entry->howto->partial_inplace)
2155     {
2156       status = _bfd_relocate_contents (reloc_entry->howto, abfd, val,
2157                                        (bfd_byte *) data
2158                                        + reloc_entry->address);
2159       if (status != bfd_reloc_ok)
2160         return status;
2161     }
2162   else
2163     reloc_entry->addend = val;
2164
2165   if (relocatable)
2166     reloc_entry->address += input_section->output_offset;
2167
2168   return bfd_reloc_ok;
2169 }
2170
2171 /* Used to store a REL high-part relocation such as R_MIPS_HI16 or
2172    R_MIPS_GOT16.  REL is the relocation, INPUT_SECTION is the section
2173    that contains the relocation field and DATA points to the start of
2174    INPUT_SECTION.  */
2175
2176 struct mips_hi16
2177 {
2178   struct mips_hi16 *next;
2179   bfd_byte *data;
2180   asection *input_section;
2181   arelent rel;
2182 };
2183
2184 /* FIXME: This should not be a static variable.  */
2185
2186 static struct mips_hi16 *mips_hi16_list;
2187
2188 /* A howto special_function for REL *HI16 relocations.  We can only
2189    calculate the correct value once we've seen the partnering
2190    *LO16 relocation, so just save the information for later.
2191
2192    The ABI requires that the *LO16 immediately follow the *HI16.
2193    However, as a GNU extension, we permit an arbitrary number of
2194    *HI16s to be associated with a single *LO16.  This significantly
2195    simplies the relocation handling in gcc.  */
2196
2197 bfd_reloc_status_type
2198 _bfd_mips_elf_hi16_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry,
2199                           asymbol *symbol ATTRIBUTE_UNUSED, void *data,
2200                           asection *input_section, bfd *output_bfd,
2201                           char **error_message ATTRIBUTE_UNUSED)
2202 {
2203   struct mips_hi16 *n;
2204
2205   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2206     return bfd_reloc_outofrange;
2207
2208   n = bfd_malloc (sizeof *n);
2209   if (n == NULL)
2210     return bfd_reloc_outofrange;
2211
2212   n->next = mips_hi16_list;
2213   n->data = data;
2214   n->input_section = input_section;
2215   n->rel = *reloc_entry;
2216   mips_hi16_list = n;
2217
2218   if (output_bfd != NULL)
2219     reloc_entry->address += input_section->output_offset;
2220
2221   return bfd_reloc_ok;
2222 }
2223
2224 /* A howto special_function for REL R_MIPS*_GOT16 relocations.  This is just
2225    like any other 16-bit relocation when applied to global symbols, but is
2226    treated in the same as R_MIPS_HI16 when applied to local symbols.  */
2227
2228 bfd_reloc_status_type
2229 _bfd_mips_elf_got16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2230                            void *data, asection *input_section,
2231                            bfd *output_bfd, char **error_message)
2232 {
2233   if ((symbol->flags & (BSF_GLOBAL | BSF_WEAK)) != 0
2234       || bfd_is_und_section (bfd_get_section (symbol))
2235       || bfd_is_com_section (bfd_get_section (symbol)))
2236     /* The relocation is against a global symbol.  */
2237     return _bfd_mips_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2238                                         input_section, output_bfd,
2239                                         error_message);
2240
2241   return _bfd_mips_elf_hi16_reloc (abfd, reloc_entry, symbol, data,
2242                                    input_section, output_bfd, error_message);
2243 }
2244
2245 /* A howto special_function for REL *LO16 relocations.  The *LO16 itself
2246    is a straightforward 16 bit inplace relocation, but we must deal with
2247    any partnering high-part relocations as well.  */
2248
2249 bfd_reloc_status_type
2250 _bfd_mips_elf_lo16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2251                           void *data, asection *input_section,
2252                           bfd *output_bfd, char **error_message)
2253 {
2254   bfd_vma vallo;
2255   bfd_byte *location = (bfd_byte *) data + reloc_entry->address;
2256
2257   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2258     return bfd_reloc_outofrange;
2259
2260   _bfd_mips_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, FALSE,
2261                                  location);
2262   vallo = bfd_get_32 (abfd, location);
2263   _bfd_mips_elf_reloc_shuffle (abfd, reloc_entry->howto->type, FALSE,
2264                                location);
2265
2266   while (mips_hi16_list != NULL)
2267     {
2268       bfd_reloc_status_type ret;
2269       struct mips_hi16 *hi;
2270
2271       hi = mips_hi16_list;
2272
2273       /* R_MIPS*_GOT16 relocations are something of a special case.  We
2274          want to install the addend in the same way as for a R_MIPS*_HI16
2275          relocation (with a rightshift of 16).  However, since GOT16
2276          relocations can also be used with global symbols, their howto
2277          has a rightshift of 0.  */
2278       if (hi->rel.howto->type == R_MIPS_GOT16)
2279         hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MIPS_HI16, FALSE);
2280       else if (hi->rel.howto->type == R_MIPS16_GOT16)
2281         hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MIPS16_HI16, FALSE);
2282       else if (hi->rel.howto->type == R_MICROMIPS_GOT16)
2283         hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MICROMIPS_HI16, FALSE);
2284
2285       /* VALLO is a signed 16-bit number.  Bias it by 0x8000 so that any
2286          carry or borrow will induce a change of +1 or -1 in the high part.  */
2287       hi->rel.addend += (vallo + 0x8000) & 0xffff;
2288
2289       ret = _bfd_mips_elf_generic_reloc (abfd, &hi->rel, symbol, hi->data,
2290                                          hi->input_section, output_bfd,
2291                                          error_message);
2292       if (ret != bfd_reloc_ok)
2293         return ret;
2294
2295       mips_hi16_list = hi->next;
2296       free (hi);
2297     }
2298
2299   return _bfd_mips_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2300                                       input_section, output_bfd,
2301                                       error_message);
2302 }
2303
2304 /* A generic howto special_function.  This calculates and installs the
2305    relocation itself, thus avoiding the oft-discussed problems in
2306    bfd_perform_relocation and bfd_install_relocation.  */
2307
2308 bfd_reloc_status_type
2309 _bfd_mips_elf_generic_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry,
2310                              asymbol *symbol, void *data ATTRIBUTE_UNUSED,
2311                              asection *input_section, bfd *output_bfd,
2312                              char **error_message ATTRIBUTE_UNUSED)
2313 {
2314   bfd_signed_vma val;
2315   bfd_reloc_status_type status;
2316   bfd_boolean relocatable;
2317
2318   relocatable = (output_bfd != NULL);
2319
2320   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2321     return bfd_reloc_outofrange;
2322
2323   /* Build up the field adjustment in VAL.  */
2324   val = 0;
2325   if (!relocatable || (symbol->flags & BSF_SECTION_SYM) != 0)
2326     {
2327       /* Either we're calculating the final field value or we have a
2328          relocation against a section symbol.  Add in the section's
2329          offset or address.  */
2330       val += symbol->section->output_section->vma;
2331       val += symbol->section->output_offset;
2332     }
2333
2334   if (!relocatable)
2335     {
2336       /* We're calculating the final field value.  Add in the symbol's value
2337          and, if pc-relative, subtract the address of the field itself.  */
2338       val += symbol->value;
2339       if (reloc_entry->howto->pc_relative)
2340         {
2341           val -= input_section->output_section->vma;
2342           val -= input_section->output_offset;
2343           val -= reloc_entry->address;
2344         }
2345     }
2346
2347   /* VAL is now the final adjustment.  If we're keeping this relocation
2348      in the output file, and if the relocation uses a separate addend,
2349      we just need to add VAL to that addend.  Otherwise we need to add
2350      VAL to the relocation field itself.  */
2351   if (relocatable && !reloc_entry->howto->partial_inplace)
2352     reloc_entry->addend += val;
2353   else
2354     {
2355       bfd_byte *location = (bfd_byte *) data + reloc_entry->address;
2356
2357       /* Add in the separate addend, if any.  */
2358       val += reloc_entry->addend;
2359
2360       /* Add VAL to the relocation field.  */
2361       _bfd_mips_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, FALSE,
2362                                      location);
2363       status = _bfd_relocate_contents (reloc_entry->howto, abfd, val,
2364                                        location);
2365       _bfd_mips_elf_reloc_shuffle (abfd, reloc_entry->howto->type, FALSE,
2366                                    location);
2367
2368       if (status != bfd_reloc_ok)
2369         return status;
2370     }
2371
2372   if (relocatable)
2373     reloc_entry->address += input_section->output_offset;
2374
2375   return bfd_reloc_ok;
2376 }
2377 \f
2378 /* Swap an entry in a .gptab section.  Note that these routines rely
2379    on the equivalence of the two elements of the union.  */
2380
2381 static void
2382 bfd_mips_elf32_swap_gptab_in (bfd *abfd, const Elf32_External_gptab *ex,
2383                               Elf32_gptab *in)
2384 {
2385   in->gt_entry.gt_g_value = H_GET_32 (abfd, ex->gt_entry.gt_g_value);
2386   in->gt_entry.gt_bytes = H_GET_32 (abfd, ex->gt_entry.gt_bytes);
2387 }
2388
2389 static void
2390 bfd_mips_elf32_swap_gptab_out (bfd *abfd, const Elf32_gptab *in,
2391                                Elf32_External_gptab *ex)
2392 {
2393   H_PUT_32 (abfd, in->gt_entry.gt_g_value, ex->gt_entry.gt_g_value);
2394   H_PUT_32 (abfd, in->gt_entry.gt_bytes, ex->gt_entry.gt_bytes);
2395 }
2396
2397 static void
2398 bfd_elf32_swap_compact_rel_out (bfd *abfd, const Elf32_compact_rel *in,
2399                                 Elf32_External_compact_rel *ex)
2400 {
2401   H_PUT_32 (abfd, in->id1, ex->id1);
2402   H_PUT_32 (abfd, in->num, ex->num);
2403   H_PUT_32 (abfd, in->id2, ex->id2);
2404   H_PUT_32 (abfd, in->offset, ex->offset);
2405   H_PUT_32 (abfd, in->reserved0, ex->reserved0);
2406   H_PUT_32 (abfd, in->reserved1, ex->reserved1);
2407 }
2408
2409 static void
2410 bfd_elf32_swap_crinfo_out (bfd *abfd, const Elf32_crinfo *in,
2411                            Elf32_External_crinfo *ex)
2412 {
2413   unsigned long l;
2414
2415   l = (((in->ctype & CRINFO_CTYPE) << CRINFO_CTYPE_SH)
2416        | ((in->rtype & CRINFO_RTYPE) << CRINFO_RTYPE_SH)
2417        | ((in->dist2to & CRINFO_DIST2TO) << CRINFO_DIST2TO_SH)
2418        | ((in->relvaddr & CRINFO_RELVADDR) << CRINFO_RELVADDR_SH));
2419   H_PUT_32 (abfd, l, ex->info);
2420   H_PUT_32 (abfd, in->konst, ex->konst);
2421   H_PUT_32 (abfd, in->vaddr, ex->vaddr);
2422 }
2423 \f
2424 /* A .reginfo section holds a single Elf32_RegInfo structure.  These
2425    routines swap this structure in and out.  They are used outside of
2426    BFD, so they are globally visible.  */
2427
2428 void
2429 bfd_mips_elf32_swap_reginfo_in (bfd *abfd, const Elf32_External_RegInfo *ex,
2430                                 Elf32_RegInfo *in)
2431 {
2432   in->ri_gprmask = H_GET_32 (abfd, ex->ri_gprmask);
2433   in->ri_cprmask[0] = H_GET_32 (abfd, ex->ri_cprmask[0]);
2434   in->ri_cprmask[1] = H_GET_32 (abfd, ex->ri_cprmask[1]);
2435   in->ri_cprmask[2] = H_GET_32 (abfd, ex->ri_cprmask[2]);
2436   in->ri_cprmask[3] = H_GET_32 (abfd, ex->ri_cprmask[3]);
2437   in->ri_gp_value = H_GET_32 (abfd, ex->ri_gp_value);
2438 }
2439
2440 void
2441 bfd_mips_elf32_swap_reginfo_out (bfd *abfd, const Elf32_RegInfo *in,
2442                                  Elf32_External_RegInfo *ex)
2443 {
2444   H_PUT_32 (abfd, in->ri_gprmask, ex->ri_gprmask);
2445   H_PUT_32 (abfd, in->ri_cprmask[0], ex->ri_cprmask[0]);
2446   H_PUT_32 (abfd, in->ri_cprmask[1], ex->ri_cprmask[1]);
2447   H_PUT_32 (abfd, in->ri_cprmask[2], ex->ri_cprmask[2]);
2448   H_PUT_32 (abfd, in->ri_cprmask[3], ex->ri_cprmask[3]);
2449   H_PUT_32 (abfd, in->ri_gp_value, ex->ri_gp_value);
2450 }
2451
2452 /* In the 64 bit ABI, the .MIPS.options section holds register
2453    information in an Elf64_Reginfo structure.  These routines swap
2454    them in and out.  They are globally visible because they are used
2455    outside of BFD.  These routines are here so that gas can call them
2456    without worrying about whether the 64 bit ABI has been included.  */
2457
2458 void
2459 bfd_mips_elf64_swap_reginfo_in (bfd *abfd, const Elf64_External_RegInfo *ex,
2460                                 Elf64_Internal_RegInfo *in)
2461 {
2462   in->ri_gprmask = H_GET_32 (abfd, ex->ri_gprmask);
2463   in->ri_pad = H_GET_32 (abfd, ex->ri_pad);
2464   in->ri_cprmask[0] = H_GET_32 (abfd, ex->ri_cprmask[0]);
2465   in->ri_cprmask[1] = H_GET_32 (abfd, ex->ri_cprmask[1]);
2466   in->ri_cprmask[2] = H_GET_32 (abfd, ex->ri_cprmask[2]);
2467   in->ri_cprmask[3] = H_GET_32 (abfd, ex->ri_cprmask[3]);
2468   in->ri_gp_value = H_GET_64 (abfd, ex->ri_gp_value);
2469 }
2470
2471 void
2472 bfd_mips_elf64_swap_reginfo_out (bfd *abfd, const Elf64_Internal_RegInfo *in,
2473                                  Elf64_External_RegInfo *ex)
2474 {
2475   H_PUT_32 (abfd, in->ri_gprmask, ex->ri_gprmask);
2476   H_PUT_32 (abfd, in->ri_pad, ex->ri_pad);
2477   H_PUT_32 (abfd, in->ri_cprmask[0], ex->ri_cprmask[0]);
2478   H_PUT_32 (abfd, in->ri_cprmask[1], ex->ri_cprmask[1]);
2479   H_PUT_32 (abfd, in->ri_cprmask[2], ex->ri_cprmask[2]);
2480   H_PUT_32 (abfd, in->ri_cprmask[3], ex->ri_cprmask[3]);
2481   H_PUT_64 (abfd, in->ri_gp_value, ex->ri_gp_value);
2482 }
2483
2484 /* Swap in an options header.  */
2485
2486 void
2487 bfd_mips_elf_swap_options_in (bfd *abfd, const Elf_External_Options *ex,
2488                               Elf_Internal_Options *in)
2489 {
2490   in->kind = H_GET_8 (abfd, ex->kind);
2491   in->size = H_GET_8 (abfd, ex->size);
2492   in->section = H_GET_16 (abfd, ex->section);
2493   in->info = H_GET_32 (abfd, ex->info);
2494 }
2495
2496 /* Swap out an options header.  */
2497
2498 void
2499 bfd_mips_elf_swap_options_out (bfd *abfd, const Elf_Internal_Options *in,
2500                                Elf_External_Options *ex)
2501 {
2502   H_PUT_8 (abfd, in->kind, ex->kind);
2503   H_PUT_8 (abfd, in->size, ex->size);
2504   H_PUT_16 (abfd, in->section, ex->section);
2505   H_PUT_32 (abfd, in->info, ex->info);
2506 }
2507 \f
2508 /* This function is called via qsort() to sort the dynamic relocation
2509    entries by increasing r_symndx value.  */
2510
2511 static int
2512 sort_dynamic_relocs (const void *arg1, const void *arg2)
2513 {
2514   Elf_Internal_Rela int_reloc1;
2515   Elf_Internal_Rela int_reloc2;
2516   int diff;
2517
2518   bfd_elf32_swap_reloc_in (reldyn_sorting_bfd, arg1, &int_reloc1);
2519   bfd_elf32_swap_reloc_in (reldyn_sorting_bfd, arg2, &int_reloc2);
2520
2521   diff = ELF32_R_SYM (int_reloc1.r_info) - ELF32_R_SYM (int_reloc2.r_info);
2522   if (diff != 0)
2523     return diff;
2524
2525   if (int_reloc1.r_offset < int_reloc2.r_offset)
2526     return -1;
2527   if (int_reloc1.r_offset > int_reloc2.r_offset)
2528     return 1;
2529   return 0;
2530 }
2531
2532 /* Like sort_dynamic_relocs, but used for elf64 relocations.  */
2533
2534 static int
2535 sort_dynamic_relocs_64 (const void *arg1 ATTRIBUTE_UNUSED,
2536                         const void *arg2 ATTRIBUTE_UNUSED)
2537 {
2538 #ifdef BFD64
2539   Elf_Internal_Rela int_reloc1[3];
2540   Elf_Internal_Rela int_reloc2[3];
2541
2542   (*get_elf_backend_data (reldyn_sorting_bfd)->s->swap_reloc_in)
2543     (reldyn_sorting_bfd, arg1, int_reloc1);
2544   (*get_elf_backend_data (reldyn_sorting_bfd)->s->swap_reloc_in)
2545     (reldyn_sorting_bfd, arg2, int_reloc2);
2546
2547   if (ELF64_R_SYM (int_reloc1[0].r_info) < ELF64_R_SYM (int_reloc2[0].r_info))
2548     return -1;
2549   if (ELF64_R_SYM (int_reloc1[0].r_info) > ELF64_R_SYM (int_reloc2[0].r_info))
2550     return 1;
2551
2552   if (int_reloc1[0].r_offset < int_reloc2[0].r_offset)
2553     return -1;
2554   if (int_reloc1[0].r_offset > int_reloc2[0].r_offset)
2555     return 1;
2556   return 0;
2557 #else
2558   abort ();
2559 #endif
2560 }
2561
2562
2563 /* This routine is used to write out ECOFF debugging external symbol
2564    information.  It is called via mips_elf_link_hash_traverse.  The
2565    ECOFF external symbol information must match the ELF external
2566    symbol information.  Unfortunately, at this point we don't know
2567    whether a symbol is required by reloc information, so the two
2568    tables may wind up being different.  We must sort out the external
2569    symbol information before we can set the final size of the .mdebug
2570    section, and we must set the size of the .mdebug section before we
2571    can relocate any sections, and we can't know which symbols are
2572    required by relocation until we relocate the sections.
2573    Fortunately, it is relatively unlikely that any symbol will be
2574    stripped but required by a reloc.  In particular, it can not happen
2575    when generating a final executable.  */
2576
2577 static bfd_boolean
2578 mips_elf_output_extsym (struct mips_elf_link_hash_entry *h, void *data)
2579 {
2580   struct extsym_info *einfo = data;
2581   bfd_boolean strip;
2582   asection *sec, *output_section;
2583
2584   if (h->root.indx == -2)
2585     strip = FALSE;
2586   else if ((h->root.def_dynamic
2587             || h->root.ref_dynamic
2588             || h->root.type == bfd_link_hash_new)
2589            && !h->root.def_regular
2590            && !h->root.ref_regular)
2591     strip = TRUE;
2592   else if (einfo->info->strip == strip_all
2593            || (einfo->info->strip == strip_some
2594                && bfd_hash_lookup (einfo->info->keep_hash,
2595                                    h->root.root.root.string,
2596                                    FALSE, FALSE) == NULL))
2597     strip = TRUE;
2598   else
2599     strip = FALSE;
2600
2601   if (strip)
2602     return TRUE;
2603
2604   if (h->esym.ifd == -2)
2605     {
2606       h->esym.jmptbl = 0;
2607       h->esym.cobol_main = 0;
2608       h->esym.weakext = 0;
2609       h->esym.reserved = 0;
2610       h->esym.ifd = ifdNil;
2611       h->esym.asym.value = 0;
2612       h->esym.asym.st = stGlobal;
2613
2614       if (h->root.root.type == bfd_link_hash_undefined
2615           || h->root.root.type == bfd_link_hash_undefweak)
2616         {
2617           const char *name;
2618
2619           /* Use undefined class.  Also, set class and type for some
2620              special symbols.  */
2621           name = h->root.root.root.string;
2622           if (strcmp (name, mips_elf_dynsym_rtproc_names[0]) == 0
2623               || strcmp (name, mips_elf_dynsym_rtproc_names[1]) == 0)
2624             {
2625               h->esym.asym.sc = scData;
2626               h->esym.asym.st = stLabel;
2627               h->esym.asym.value = 0;
2628             }
2629           else if (strcmp (name, mips_elf_dynsym_rtproc_names[2]) == 0)
2630             {
2631               h->esym.asym.sc = scAbs;
2632               h->esym.asym.st = stLabel;
2633               h->esym.asym.value =
2634                 mips_elf_hash_table (einfo->info)->procedure_count;
2635             }
2636           else if (strcmp (name, "_gp_disp") == 0 && ! NEWABI_P (einfo->abfd))
2637             {
2638               h->esym.asym.sc = scAbs;
2639               h->esym.asym.st = stLabel;
2640               h->esym.asym.value = elf_gp (einfo->abfd);
2641             }
2642           else
2643             h->esym.asym.sc = scUndefined;
2644         }
2645       else if (h->root.root.type != bfd_link_hash_defined
2646           && h->root.root.type != bfd_link_hash_defweak)
2647         h->esym.asym.sc = scAbs;
2648       else
2649         {
2650           const char *name;
2651
2652           sec = h->root.root.u.def.section;
2653           output_section = sec->output_section;
2654
2655           /* When making a shared library and symbol h is the one from
2656              the another shared library, OUTPUT_SECTION may be null.  */
2657           if (output_section == NULL)
2658             h->esym.asym.sc = scUndefined;
2659           else
2660             {
2661               name = bfd_section_name (output_section->owner, output_section);
2662
2663               if (strcmp (name, ".text") == 0)
2664                 h->esym.asym.sc = scText;
2665               else if (strcmp (name, ".data") == 0)
2666                 h->esym.asym.sc = scData;
2667               else if (strcmp (name, ".sdata") == 0)
2668                 h->esym.asym.sc = scSData;
2669               else if (strcmp (name, ".rodata") == 0
2670                        || strcmp (name, ".rdata") == 0)
2671                 h->esym.asym.sc = scRData;
2672               else if (strcmp (name, ".bss") == 0)
2673                 h->esym.asym.sc = scBss;
2674               else if (strcmp (name, ".sbss") == 0)
2675                 h->esym.asym.sc = scSBss;
2676               else if (strcmp (name, ".init") == 0)
2677                 h->esym.asym.sc = scInit;
2678               else if (strcmp (name, ".fini") == 0)
2679                 h->esym.asym.sc = scFini;
2680               else
2681                 h->esym.asym.sc = scAbs;
2682             }
2683         }
2684
2685       h->esym.asym.reserved = 0;
2686       h->esym.asym.index = indexNil;
2687     }
2688
2689   if (h->root.root.type == bfd_link_hash_common)
2690     h->esym.asym.value = h->root.root.u.c.size;
2691   else if (h->root.root.type == bfd_link_hash_defined
2692            || h->root.root.type == bfd_link_hash_defweak)
2693     {
2694       if (h->esym.asym.sc == scCommon)
2695         h->esym.asym.sc = scBss;
2696       else if (h->esym.asym.sc == scSCommon)
2697         h->esym.asym.sc = scSBss;
2698
2699       sec = h->root.root.u.def.section;
2700       output_section = sec->output_section;
2701       if (output_section != NULL)
2702         h->esym.asym.value = (h->root.root.u.def.value
2703                               + sec->output_offset
2704                               + output_section->vma);
2705       else
2706         h->esym.asym.value = 0;
2707     }
2708   else
2709     {
2710       struct mips_elf_link_hash_entry *hd = h;
2711
2712       while (hd->root.root.type == bfd_link_hash_indirect)
2713         hd = (struct mips_elf_link_hash_entry *)h->root.root.u.i.link;
2714
2715       if (hd->needs_lazy_stub)
2716         {
2717           /* Set type and value for a symbol with a function stub.  */
2718           h->esym.asym.st = stProc;
2719           sec = hd->root.root.u.def.section;
2720           if (sec == NULL)
2721             h->esym.asym.value = 0;
2722           else
2723             {
2724               output_section = sec->output_section;
2725               if (output_section != NULL)
2726                 h->esym.asym.value = (hd->root.plt.offset
2727                                       + sec->output_offset
2728                                       + output_section->vma);
2729               else
2730                 h->esym.asym.value = 0;
2731             }
2732         }
2733     }
2734
2735   if (! bfd_ecoff_debug_one_external (einfo->abfd, einfo->debug, einfo->swap,
2736                                       h->root.root.root.string,
2737                                       &h->esym))
2738     {
2739       einfo->failed = TRUE;
2740       return FALSE;
2741     }
2742
2743   return TRUE;
2744 }
2745
2746 /* A comparison routine used to sort .gptab entries.  */
2747
2748 static int
2749 gptab_compare (const void *p1, const void *p2)
2750 {
2751   const Elf32_gptab *a1 = p1;
2752   const Elf32_gptab *a2 = p2;
2753
2754   return a1->gt_entry.gt_g_value - a2->gt_entry.gt_g_value;
2755 }
2756 \f
2757 /* Functions to manage the got entry hash table.  */
2758
2759 /* Use all 64 bits of a bfd_vma for the computation of a 32-bit
2760    hash number.  */
2761
2762 static INLINE hashval_t
2763 mips_elf_hash_bfd_vma (bfd_vma addr)
2764 {
2765 #ifdef BFD64
2766   return addr + (addr >> 32);
2767 #else
2768   return addr;
2769 #endif
2770 }
2771
2772 /* got_entries only match if they're identical, except for gotidx, so
2773    use all fields to compute the hash, and compare the appropriate
2774    union members.  */
2775
2776 static int
2777 mips_elf_got_entry_eq (const void *entry1, const void *entry2)
2778 {
2779   const struct mips_got_entry *e1 = (struct mips_got_entry *)entry1;
2780   const struct mips_got_entry *e2 = (struct mips_got_entry *)entry2;
2781
2782   return (e1->abfd == e2->abfd
2783           && e1->symndx == e2->symndx
2784           && (e1->tls_type & GOT_TLS_TYPE) == (e2->tls_type & GOT_TLS_TYPE)
2785           && (!e1->abfd ? e1->d.address == e2->d.address
2786               : e1->symndx >= 0 ? e1->d.addend == e2->d.addend
2787               : e1->d.h == e2->d.h));
2788 }
2789
2790 /* multi_got_entries are still a match in the case of global objects,
2791    even if the input bfd in which they're referenced differs, so the
2792    hash computation and compare functions are adjusted
2793    accordingly.  */
2794
2795 static hashval_t
2796 mips_elf_got_entry_hash (const void *entry_)
2797 {
2798   const struct mips_got_entry *entry = (struct mips_got_entry *)entry_;
2799
2800   return (entry->symndx
2801           + (((entry->tls_type & GOT_TLS_TYPE) == GOT_TLS_LDM) << 18)
2802           + ((entry->tls_type & GOT_TLS_TYPE) == GOT_TLS_LDM ? 0
2803              : !entry->abfd ? mips_elf_hash_bfd_vma (entry->d.address)
2804              : entry->symndx >= 0 ? (entry->abfd->id
2805                                      + mips_elf_hash_bfd_vma (entry->d.addend))
2806              : entry->d.h->root.root.root.hash));
2807 }
2808
2809 static int
2810 mips_elf_multi_got_entry_eq (const void *entry1, const void *entry2)
2811 {
2812   const struct mips_got_entry *e1 = (struct mips_got_entry *)entry1;
2813   const struct mips_got_entry *e2 = (struct mips_got_entry *)entry2;
2814
2815   return (e1->symndx == e2->symndx
2816           && (e1->tls_type & GOT_TLS_TYPE) == (e2->tls_type & GOT_TLS_TYPE)
2817           && ((e1->tls_type & GOT_TLS_TYPE) == GOT_TLS_LDM ? TRUE
2818               : !e1->abfd ? !e2->abfd && e1->d.address == e2->d.address
2819               : e1->symndx >= 0 ? (e1->abfd == e2->abfd
2820                                    && e1->d.addend == e2->d.addend)
2821               : e2->abfd && e1->d.h == e2->d.h));
2822 }
2823
2824 static hashval_t
2825 mips_got_page_entry_hash (const void *entry_)
2826 {
2827   const struct mips_got_page_entry *entry;
2828
2829   entry = (const struct mips_got_page_entry *) entry_;
2830   return entry->abfd->id + entry->symndx;
2831 }
2832
2833 static int
2834 mips_got_page_entry_eq (const void *entry1_, const void *entry2_)
2835 {
2836   const struct mips_got_page_entry *entry1, *entry2;
2837
2838   entry1 = (const struct mips_got_page_entry *) entry1_;
2839   entry2 = (const struct mips_got_page_entry *) entry2_;
2840   return entry1->abfd == entry2->abfd && entry1->symndx == entry2->symndx;
2841 }
2842 \f
2843 /* Create and return a new mips_got_info structure.  MASTER_GOT_P
2844    is true if this is the master GOT rather than a multigot.  */
2845
2846 static struct mips_got_info *
2847 mips_elf_create_got_info (bfd *abfd, bfd_boolean master_got_p)
2848 {
2849   struct mips_got_info *g;
2850
2851   g = bfd_zalloc (abfd, sizeof (struct mips_got_info));
2852   if (g == NULL)
2853     return NULL;
2854
2855   g->tls_ldm_offset = MINUS_ONE;
2856   if (master_got_p)
2857     g->got_entries = htab_try_create (1, mips_elf_got_entry_hash,
2858                                       mips_elf_got_entry_eq, NULL);
2859   else
2860     g->got_entries = htab_try_create (1, mips_elf_got_entry_hash,
2861                                       mips_elf_multi_got_entry_eq, NULL);
2862   if (g->got_entries == NULL)
2863     return NULL;
2864
2865   g->got_page_entries = htab_try_create (1, mips_got_page_entry_hash,
2866                                          mips_got_page_entry_eq, NULL);
2867   if (g->got_page_entries == NULL)
2868     return NULL;
2869
2870   return g;
2871 }
2872
2873 /* Return the GOT info for input bfd ABFD, trying to create a new one if
2874    CREATE_P and if ABFD doesn't already have a GOT.  */
2875
2876 static struct mips_got_info *
2877 mips_elf_bfd_got (bfd *abfd, bfd_boolean create_p)
2878 {
2879   struct mips_elf_obj_tdata *tdata;
2880
2881   if (!is_mips_elf (abfd))
2882     return NULL;
2883
2884   tdata = mips_elf_tdata (abfd);
2885   if (!tdata->got && create_p)
2886     tdata->got = mips_elf_create_got_info (abfd, FALSE);
2887   return tdata->got;
2888 }
2889
2890 /* Record that ABFD should use output GOT G.  */
2891
2892 static void
2893 mips_elf_replace_bfd_got (bfd *abfd, struct mips_got_info *g)
2894 {
2895   struct mips_elf_obj_tdata *tdata;
2896
2897   BFD_ASSERT (is_mips_elf (abfd));
2898   tdata = mips_elf_tdata (abfd);
2899   if (tdata->got)
2900     {
2901       /* The GOT structure itself and the hash table entries are
2902          allocated to a bfd, but the hash tables aren't.  */
2903       htab_delete (tdata->got->got_entries);
2904       htab_delete (tdata->got->got_page_entries);
2905     }
2906   tdata->got = g;
2907 }
2908
2909 /* Return the dynamic relocation section.  If it doesn't exist, try to
2910    create a new it if CREATE_P, otherwise return NULL.  Also return NULL
2911    if creation fails.  */
2912
2913 static asection *
2914 mips_elf_rel_dyn_section (struct bfd_link_info *info, bfd_boolean create_p)
2915 {
2916   const char *dname;
2917   asection *sreloc;
2918   bfd *dynobj;
2919
2920   dname = MIPS_ELF_REL_DYN_NAME (info);
2921   dynobj = elf_hash_table (info)->dynobj;
2922   sreloc = bfd_get_linker_section (dynobj, dname);
2923   if (sreloc == NULL && create_p)
2924     {
2925       sreloc = bfd_make_section_anyway_with_flags (dynobj, dname,
2926                                                    (SEC_ALLOC
2927                                                     | SEC_LOAD
2928                                                     | SEC_HAS_CONTENTS
2929                                                     | SEC_IN_MEMORY
2930                                                     | SEC_LINKER_CREATED
2931                                                     | SEC_READONLY));
2932       if (sreloc == NULL
2933           || ! bfd_set_section_alignment (dynobj, sreloc,
2934                                           MIPS_ELF_LOG_FILE_ALIGN (dynobj)))
2935         return NULL;
2936     }
2937   return sreloc;
2938 }
2939
2940 /* Return the GOT_TLS_* type required by relocation type R_TYPE.  */
2941
2942 static int
2943 mips_elf_reloc_tls_type (unsigned int r_type)
2944 {
2945   if (tls_gd_reloc_p (r_type))
2946     return GOT_TLS_GD;
2947
2948   if (tls_ldm_reloc_p (r_type))
2949     return GOT_TLS_LDM;
2950
2951   if (tls_gottprel_reloc_p (r_type))
2952     return GOT_TLS_IE;
2953
2954   return GOT_NORMAL;
2955 }
2956
2957 /* Return the number of GOT slots needed for GOT TLS type TYPE.  */
2958
2959 static int
2960 mips_tls_got_entries (unsigned int type)
2961 {
2962   switch (type)
2963     {
2964     case GOT_TLS_GD:
2965     case GOT_TLS_LDM:
2966       return 2;
2967
2968     case GOT_TLS_IE:
2969       return 1;
2970
2971     case GOT_NORMAL:
2972       return 0;
2973     }
2974   abort ();
2975 }
2976
2977 /* Count the number of relocations needed for a TLS GOT entry, with
2978    access types from TLS_TYPE, and symbol H (or a local symbol if H
2979    is NULL).  */
2980
2981 static int
2982 mips_tls_got_relocs (struct bfd_link_info *info, unsigned char tls_type,
2983                      struct elf_link_hash_entry *h)
2984 {
2985   int indx = 0;
2986   bfd_boolean need_relocs = FALSE;
2987   bfd_boolean dyn = elf_hash_table (info)->dynamic_sections_created;
2988
2989   if (h && WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h)
2990       && (!info->shared || !SYMBOL_REFERENCES_LOCAL (info, h)))
2991     indx = h->dynindx;
2992
2993   if ((info->shared || indx != 0)
2994       && (h == NULL
2995           || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
2996           || h->root.type != bfd_link_hash_undefweak))
2997     need_relocs = TRUE;
2998
2999   if (!need_relocs)
3000     return 0;
3001
3002   switch (tls_type & GOT_TLS_TYPE)
3003     {
3004     case GOT_TLS_GD:
3005       return indx != 0 ? 2 : 1;
3006
3007     case GOT_TLS_IE:
3008       return 1;
3009
3010     case GOT_TLS_LDM:
3011       return info->shared ? 1 : 0;
3012
3013     default:
3014       return 0;
3015     }
3016 }
3017
3018 /* Add the number of GOT entries and TLS relocations required by ENTRY
3019    to G.  */
3020
3021 static void
3022 mips_elf_count_got_entry (struct bfd_link_info *info,
3023                           struct mips_got_info *g,
3024                           struct mips_got_entry *entry)
3025 {
3026   unsigned char tls_type;
3027
3028   tls_type = entry->tls_type & GOT_TLS_TYPE;
3029   if (tls_type)
3030     {
3031       g->tls_gotno += mips_tls_got_entries (tls_type);
3032       g->relocs += mips_tls_got_relocs (info, tls_type,
3033                                         entry->symndx < 0
3034                                         ? &entry->d.h->root : NULL);
3035     }
3036   else if (entry->symndx >= 0 || entry->d.h->global_got_area == GGA_NONE)
3037     g->local_gotno += 1;
3038   else
3039     g->global_gotno += 1;
3040 }
3041
3042 /* A htab_traverse callback.  Count the number of GOT entries and
3043    TLS relocations required for the GOT entry in *ENTRYP.  DATA points
3044    to a mips_elf_traverse_got_arg structure.  */
3045
3046 static int
3047 mips_elf_count_got_entries (void **entryp, void *data)
3048 {
3049   struct mips_got_entry *entry;
3050   struct mips_elf_traverse_got_arg *arg;
3051
3052   entry = (struct mips_got_entry *) *entryp;
3053   arg = (struct mips_elf_traverse_got_arg *) data;
3054   mips_elf_count_got_entry (arg->info, arg->g, entry);
3055
3056   return 1;
3057 }
3058
3059 /* A htab_traverse callback.  If *SLOT describes a GOT entry for a local
3060    symbol, count the number of GOT entries and TLS relocations that it
3061    requires.  DATA points to a mips_elf_traverse_got_arg structure.  */
3062
3063 static int
3064 mips_elf_count_local_got_entries (void **entryp, void *data)
3065 {
3066   struct mips_got_entry *entry;
3067   struct mips_elf_traverse_got_arg *arg;
3068
3069   entry = (struct mips_got_entry *) *entryp;
3070   arg = (struct mips_elf_traverse_got_arg *) data;
3071   if (entry->abfd != NULL && entry->symndx != -1)
3072     {
3073       if ((entry->tls_type & GOT_TLS_TYPE) == GOT_TLS_LDM)
3074         {
3075           if (arg->g->tls_ldm_offset == MINUS_TWO)
3076             return 1;
3077           arg->g->tls_ldm_offset = MINUS_TWO;
3078         }
3079       mips_elf_count_got_entry (arg->info, arg->g, entry);
3080     }
3081
3082   return 1;
3083 }
3084
3085 /* Count the number of TLS GOT entries and relocationss required for the
3086    global (or forced-local) symbol in ARG1.  */
3087
3088 static int
3089 mips_elf_count_global_tls_entries (void *entry, void *data)
3090 {
3091   struct mips_elf_link_hash_entry *hm;
3092   struct mips_elf_traverse_got_arg *arg;
3093
3094   hm = (struct mips_elf_link_hash_entry *) entry;
3095   if (hm->root.root.type == bfd_link_hash_indirect
3096       || hm->root.root.type == bfd_link_hash_warning)
3097     return 1;
3098
3099   arg = (struct mips_elf_traverse_got_arg *) data;
3100   if (hm->tls_gd_type)
3101     {
3102       arg->g->tls_gotno += 2;
3103       arg->g->relocs += mips_tls_got_relocs (arg->info, hm->tls_gd_type,
3104                                              &hm->root);
3105     }
3106   if (hm->tls_ie_type)
3107     {
3108       arg->g->tls_gotno += 1;
3109       arg->g->relocs += mips_tls_got_relocs (arg->info, hm->tls_ie_type,
3110                                              &hm->root);
3111     }
3112
3113   return 1;
3114 }
3115
3116 /* Output a simple dynamic relocation into SRELOC.  */
3117
3118 static void
3119 mips_elf_output_dynamic_relocation (bfd *output_bfd,
3120                                     asection *sreloc,
3121                                     unsigned long reloc_index,
3122                                     unsigned long indx,
3123                                     int r_type,
3124                                     bfd_vma offset)
3125 {
3126   Elf_Internal_Rela rel[3];
3127
3128   memset (rel, 0, sizeof (rel));
3129
3130   rel[0].r_info = ELF_R_INFO (output_bfd, indx, r_type);
3131   rel[0].r_offset = rel[1].r_offset = rel[2].r_offset = offset;
3132
3133   if (ABI_64_P (output_bfd))
3134     {
3135       (*get_elf_backend_data (output_bfd)->s->swap_reloc_out)
3136         (output_bfd, &rel[0],
3137          (sreloc->contents
3138           + reloc_index * sizeof (Elf64_Mips_External_Rel)));
3139     }
3140   else
3141     bfd_elf32_swap_reloc_out
3142       (output_bfd, &rel[0],
3143        (sreloc->contents
3144         + reloc_index * sizeof (Elf32_External_Rel)));
3145 }
3146
3147 /* Initialize a set of TLS GOT entries for one symbol.  */
3148
3149 static void
3150 mips_elf_initialize_tls_slots (bfd *abfd, bfd_vma got_offset,
3151                                unsigned char *tls_type_p,
3152                                struct bfd_link_info *info,
3153                                struct mips_elf_link_hash_entry *h,
3154                                bfd_vma value)
3155 {
3156   struct mips_elf_link_hash_table *htab;
3157   int indx;
3158   asection *sreloc, *sgot;
3159   bfd_vma got_offset2;
3160   bfd_boolean need_relocs = FALSE;
3161
3162   htab = mips_elf_hash_table (info);
3163   if (htab == NULL)
3164     return;
3165
3166   sgot = htab->sgot;
3167
3168   indx = 0;
3169   if (h != NULL)
3170     {
3171       bfd_boolean dyn = elf_hash_table (info)->dynamic_sections_created;
3172
3173       if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, &h->root)
3174           && (!info->shared || !SYMBOL_REFERENCES_LOCAL (info, &h->root)))
3175         indx = h->root.dynindx;
3176     }
3177
3178   if (*tls_type_p & GOT_TLS_DONE)
3179     return;
3180
3181   if ((info->shared || indx != 0)
3182       && (h == NULL
3183           || ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT
3184           || h->root.type != bfd_link_hash_undefweak))
3185     need_relocs = TRUE;
3186
3187   /* MINUS_ONE means the symbol is not defined in this object.  It may not
3188      be defined at all; assume that the value doesn't matter in that
3189      case.  Otherwise complain if we would use the value.  */
3190   BFD_ASSERT (value != MINUS_ONE || (indx != 0 && need_relocs)
3191               || h->root.root.type == bfd_link_hash_undefweak);
3192
3193   /* Emit necessary relocations.  */
3194   sreloc = mips_elf_rel_dyn_section (info, FALSE);
3195
3196   switch (*tls_type_p & GOT_TLS_TYPE)
3197     {
3198     case GOT_TLS_GD:
3199       /* General Dynamic.  */
3200       got_offset2 = got_offset + MIPS_ELF_GOT_SIZE (abfd);
3201
3202       if (need_relocs)
3203         {
3204           mips_elf_output_dynamic_relocation
3205             (abfd, sreloc, sreloc->reloc_count++, indx,
3206              ABI_64_P (abfd) ? R_MIPS_TLS_DTPMOD64 : R_MIPS_TLS_DTPMOD32,
3207              sgot->output_offset + sgot->output_section->vma + got_offset);
3208
3209           if (indx)
3210             mips_elf_output_dynamic_relocation
3211               (abfd, sreloc, sreloc->reloc_count++, indx,
3212                ABI_64_P (abfd) ? R_MIPS_TLS_DTPREL64 : R_MIPS_TLS_DTPREL32,
3213                sgot->output_offset + sgot->output_section->vma + got_offset2);
3214           else
3215             MIPS_ELF_PUT_WORD (abfd, value - dtprel_base (info),
3216                                sgot->contents + got_offset2);
3217         }
3218       else
3219         {
3220           MIPS_ELF_PUT_WORD (abfd, 1,
3221                              sgot->contents + got_offset);
3222           MIPS_ELF_PUT_WORD (abfd, value - dtprel_base (info),
3223                              sgot->contents + got_offset2);
3224         }
3225       break;
3226
3227     case GOT_TLS_IE:
3228       /* Initial Exec model.  */
3229       if (need_relocs)
3230         {
3231           if (indx == 0)
3232             MIPS_ELF_PUT_WORD (abfd, value - elf_hash_table (info)->tls_sec->vma,
3233                                sgot->contents + got_offset);
3234           else
3235             MIPS_ELF_PUT_WORD (abfd, 0,
3236                                sgot->contents + got_offset);
3237
3238           mips_elf_output_dynamic_relocation
3239             (abfd, sreloc, sreloc->reloc_count++, indx,
3240              ABI_64_P (abfd) ? R_MIPS_TLS_TPREL64 : R_MIPS_TLS_TPREL32,
3241              sgot->output_offset + sgot->output_section->vma + got_offset);
3242         }
3243       else
3244         MIPS_ELF_PUT_WORD (abfd, value - tprel_base (info),
3245                            sgot->contents + got_offset);
3246       break;
3247
3248     case GOT_TLS_LDM:
3249       /* The initial offset is zero, and the LD offsets will include the
3250          bias by DTP_OFFSET.  */
3251       MIPS_ELF_PUT_WORD (abfd, 0,
3252                          sgot->contents + got_offset
3253                          + MIPS_ELF_GOT_SIZE (abfd));
3254
3255       if (!info->shared)
3256         MIPS_ELF_PUT_WORD (abfd, 1,
3257                            sgot->contents + got_offset);
3258       else
3259         mips_elf_output_dynamic_relocation
3260           (abfd, sreloc, sreloc->reloc_count++, indx,
3261            ABI_64_P (abfd) ? R_MIPS_TLS_DTPMOD64 : R_MIPS_TLS_DTPMOD32,
3262            sgot->output_offset + sgot->output_section->vma + got_offset);
3263       break;
3264
3265     default:
3266       abort ();
3267     }
3268
3269   *tls_type_p |= GOT_TLS_DONE;
3270 }
3271
3272 /* Return the GOT index to use for a relocation against H using the
3273    TLS model in *TLS_TYPE.  The GOT entries for this symbol/model
3274    combination start at GOT_INDEX into ABFD's GOT.  This function
3275    initializes the GOT entries and corresponding relocations.  */
3276
3277 static bfd_vma
3278 mips_tls_got_index (bfd *abfd, bfd_vma got_index, unsigned char *tls_type,
3279                     struct bfd_link_info *info,
3280                     struct mips_elf_link_hash_entry *h, bfd_vma symbol)
3281 {
3282   mips_elf_initialize_tls_slots (abfd, got_index, tls_type, info, h, symbol);
3283   return got_index;
3284 }
3285
3286 /* Return the GOT index to use for a relocation of type R_TYPE against H
3287    in ABFD.  */
3288
3289 static bfd_vma
3290 mips_tls_single_got_index (bfd *abfd, int r_type, struct bfd_link_info *info,
3291                            struct mips_elf_link_hash_entry *h, bfd_vma symbol)
3292 {
3293   if (tls_gottprel_reloc_p (r_type))
3294     return mips_tls_got_index (abfd, h->tls_ie_got_offset, &h->tls_ie_type,
3295                                info, h, symbol);
3296   if (tls_gd_reloc_p (r_type))
3297     return mips_tls_got_index (abfd, h->tls_gd_got_offset, &h->tls_gd_type,
3298                                info, h, symbol);
3299   abort ();
3300 }
3301
3302 /* Return the offset from _GLOBAL_OFFSET_TABLE_ of the .got.plt entry
3303    for global symbol H.  .got.plt comes before the GOT, so the offset
3304    will be negative.  */
3305
3306 static bfd_vma
3307 mips_elf_gotplt_index (struct bfd_link_info *info,
3308                        struct elf_link_hash_entry *h)
3309 {
3310   bfd_vma plt_index, got_address, got_value;
3311   struct mips_elf_link_hash_table *htab;
3312
3313   htab = mips_elf_hash_table (info);
3314   BFD_ASSERT (htab != NULL);
3315
3316   BFD_ASSERT (h->plt.offset != (bfd_vma) -1);
3317
3318   /* This function only works for VxWorks, because a non-VxWorks .got.plt
3319      section starts with reserved entries.  */
3320   BFD_ASSERT (htab->is_vxworks);
3321
3322   /* Calculate the index of the symbol's PLT entry.  */
3323   plt_index = (h->plt.offset - htab->plt_header_size) / htab->plt_entry_size;
3324
3325   /* Calculate the address of the associated .got.plt entry.  */
3326   got_address = (htab->sgotplt->output_section->vma
3327                  + htab->sgotplt->output_offset
3328                  + plt_index * 4);
3329
3330   /* Calculate the value of _GLOBAL_OFFSET_TABLE_.  */
3331   got_value = (htab->root.hgot->root.u.def.section->output_section->vma
3332                + htab->root.hgot->root.u.def.section->output_offset
3333                + htab->root.hgot->root.u.def.value);
3334
3335   return got_address - got_value;
3336 }
3337
3338 /* Return the GOT offset for address VALUE.   If there is not yet a GOT
3339    entry for this value, create one.  If R_SYMNDX refers to a TLS symbol,
3340    create a TLS GOT entry instead.  Return -1 if no satisfactory GOT
3341    offset can be found.  */
3342
3343 static bfd_vma
3344 mips_elf_local_got_index (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
3345                           bfd_vma value, unsigned long r_symndx,
3346                           struct mips_elf_link_hash_entry *h, int r_type)
3347 {
3348   struct mips_elf_link_hash_table *htab;
3349   struct mips_got_entry *entry;
3350
3351   htab = mips_elf_hash_table (info);
3352   BFD_ASSERT (htab != NULL);
3353
3354   entry = mips_elf_create_local_got_entry (abfd, info, ibfd, value,
3355                                            r_symndx, h, r_type);
3356   if (!entry)
3357     return MINUS_ONE;
3358
3359   if (entry->tls_type)
3360     {
3361       if (entry->symndx == -1 && htab->got_info->next == NULL)
3362         /* A type (3) entry in the single-GOT case.  We use the symbol's
3363            hash table entry to track the index.  */
3364         return mips_tls_single_got_index (abfd, r_type, info, h, value);
3365       else
3366         return mips_tls_got_index (abfd, entry->gotidx, &entry->tls_type,
3367                                    info, h, value);
3368     }
3369   else
3370     return entry->gotidx;
3371 }
3372
3373 /* Returns the GOT index for the global symbol indicated by H.  */
3374
3375 static bfd_vma
3376 mips_elf_global_got_index (bfd *abfd, bfd *ibfd, struct elf_link_hash_entry *h,
3377                            int r_type, struct bfd_link_info *info)
3378 {
3379   struct mips_elf_link_hash_table *htab;
3380   bfd_vma got_index;
3381   struct mips_got_info *g, *gg;
3382   long global_got_dynindx = 0;
3383
3384   htab = mips_elf_hash_table (info);
3385   BFD_ASSERT (htab != NULL);
3386
3387   gg = g = htab->got_info;
3388   if (g->next && ibfd)
3389     {
3390       struct mips_got_entry e, *p;
3391
3392       BFD_ASSERT (h->dynindx >= 0);
3393
3394       g = mips_elf_bfd_got (ibfd, FALSE);
3395       BFD_ASSERT (g);
3396       if (g->next != gg || TLS_RELOC_P (r_type))
3397         {
3398           e.abfd = ibfd;
3399           e.symndx = -1;
3400           e.d.h = (struct mips_elf_link_hash_entry *)h;
3401           e.tls_type = mips_elf_reloc_tls_type (r_type);
3402
3403           p = htab_find (g->got_entries, &e);
3404
3405           BFD_ASSERT (p && p->gotidx > 0);
3406
3407           if (p->tls_type)
3408             {
3409               bfd_vma value = MINUS_ONE;
3410               if ((h->root.type == bfd_link_hash_defined
3411                    || h->root.type == bfd_link_hash_defweak)
3412                   && h->root.u.def.section->output_section)
3413                 value = (h->root.u.def.value
3414                          + h->root.u.def.section->output_offset
3415                          + h->root.u.def.section->output_section->vma);
3416
3417               return mips_tls_got_index (abfd, p->gotidx, &p->tls_type,
3418                                          info, e.d.h, value);
3419             }
3420           else
3421             return p->gotidx;
3422         }
3423     }
3424
3425   if (htab->global_gotsym != NULL)
3426     global_got_dynindx = htab->global_gotsym->dynindx;
3427
3428   if (TLS_RELOC_P (r_type))
3429     {
3430       struct mips_elf_link_hash_entry *hm
3431         = (struct mips_elf_link_hash_entry *) h;
3432       bfd_vma value = MINUS_ONE;
3433
3434       if ((h->root.type == bfd_link_hash_defined
3435            || h->root.type == bfd_link_hash_defweak)
3436           && h->root.u.def.section->output_section)
3437         value = (h->root.u.def.value
3438                  + h->root.u.def.section->output_offset
3439                  + h->root.u.def.section->output_section->vma);
3440
3441       got_index = mips_tls_single_got_index (abfd, r_type, info, hm, value);
3442     }
3443   else
3444     {
3445       /* Once we determine the global GOT entry with the lowest dynamic
3446          symbol table index, we must put all dynamic symbols with greater
3447          indices into the GOT.  That makes it easy to calculate the GOT
3448          offset.  */
3449       BFD_ASSERT (h->dynindx >= global_got_dynindx);
3450       got_index = ((h->dynindx - global_got_dynindx + g->local_gotno)
3451                    * MIPS_ELF_GOT_SIZE (abfd));
3452     }
3453   BFD_ASSERT (got_index < htab->sgot->size);
3454
3455   return got_index;
3456 }
3457
3458 /* Find a GOT page entry that points to within 32KB of VALUE.  These
3459    entries are supposed to be placed at small offsets in the GOT, i.e.,
3460    within 32KB of GP.  Return the index of the GOT entry, or -1 if no
3461    entry could be created.  If OFFSETP is nonnull, use it to return the
3462    offset of the GOT entry from VALUE.  */
3463
3464 static bfd_vma
3465 mips_elf_got_page (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
3466                    bfd_vma value, bfd_vma *offsetp)
3467 {
3468   bfd_vma page, got_index;
3469   struct mips_got_entry *entry;
3470
3471   page = (value + 0x8000) & ~(bfd_vma) 0xffff;
3472   entry = mips_elf_create_local_got_entry (abfd, info, ibfd, page, 0,
3473                                            NULL, R_MIPS_GOT_PAGE);
3474
3475   if (!entry)
3476     return MINUS_ONE;
3477
3478   got_index = entry->gotidx;
3479
3480   if (offsetp)
3481     *offsetp = value - entry->d.address;
3482
3483   return got_index;
3484 }
3485
3486 /* Find a local GOT entry for an R_MIPS*_GOT16 relocation against VALUE.
3487    EXTERNAL is true if the relocation was originally against a global
3488    symbol that binds locally.  */
3489
3490 static bfd_vma
3491 mips_elf_got16_entry (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
3492                       bfd_vma value, bfd_boolean external)
3493 {
3494   struct mips_got_entry *entry;
3495
3496   /* GOT16 relocations against local symbols are followed by a LO16
3497      relocation; those against global symbols are not.  Thus if the
3498      symbol was originally local, the GOT16 relocation should load the
3499      equivalent of %hi(VALUE), otherwise it should load VALUE itself.  */
3500   if (! external)
3501     value = mips_elf_high (value) << 16;
3502
3503   /* It doesn't matter whether the original relocation was R_MIPS_GOT16,
3504      R_MIPS16_GOT16, R_MIPS_CALL16, etc.  The format of the entry is the
3505      same in all cases.  */
3506   entry = mips_elf_create_local_got_entry (abfd, info, ibfd, value, 0,
3507                                            NULL, R_MIPS_GOT16);
3508   if (entry)
3509     return entry->gotidx;
3510   else
3511     return MINUS_ONE;
3512 }
3513
3514 /* Returns the offset for the entry at the INDEXth position
3515    in the GOT.  */
3516
3517 static bfd_vma
3518 mips_elf_got_offset_from_index (struct bfd_link_info *info, bfd *output_bfd,
3519                                 bfd *input_bfd, bfd_vma got_index)
3520 {
3521   struct mips_elf_link_hash_table *htab;
3522   asection *sgot;
3523   bfd_vma gp;
3524
3525   htab = mips_elf_hash_table (info);
3526   BFD_ASSERT (htab != NULL);
3527
3528   sgot = htab->sgot;
3529   gp = _bfd_get_gp_value (output_bfd)
3530     + mips_elf_adjust_gp (output_bfd, htab->got_info, input_bfd);
3531
3532   return sgot->output_section->vma + sgot->output_offset + got_index - gp;
3533 }
3534
3535 /* Create and return a local GOT entry for VALUE, which was calculated
3536    from a symbol belonging to INPUT_SECTON.  Return NULL if it could not
3537    be created.  If R_SYMNDX refers to a TLS symbol, create a TLS entry
3538    instead.  */
3539
3540 static struct mips_got_entry *
3541 mips_elf_create_local_got_entry (bfd *abfd, struct bfd_link_info *info,
3542                                  bfd *ibfd, bfd_vma value,
3543                                  unsigned long r_symndx,
3544                                  struct mips_elf_link_hash_entry *h,
3545                                  int r_type)
3546 {
3547   struct mips_got_entry entry, **loc;
3548   struct mips_got_info *g;
3549   struct mips_elf_link_hash_table *htab;
3550
3551   htab = mips_elf_hash_table (info);
3552   BFD_ASSERT (htab != NULL);
3553
3554   entry.abfd = NULL;
3555   entry.symndx = -1;
3556   entry.d.address = value;
3557   entry.tls_type = mips_elf_reloc_tls_type (r_type);
3558
3559   g = mips_elf_bfd_got (ibfd, FALSE);
3560   if (g == NULL)
3561     {
3562       g = mips_elf_bfd_got (abfd, FALSE);
3563       BFD_ASSERT (g != NULL);
3564     }
3565
3566   /* This function shouldn't be called for symbols that live in the global
3567      area of the GOT.  */
3568   BFD_ASSERT (h == NULL || h->global_got_area == GGA_NONE);
3569   if (entry.tls_type)
3570     {
3571       struct mips_got_entry *p;
3572
3573       entry.abfd = ibfd;
3574       if (tls_ldm_reloc_p (r_type))
3575         {
3576           entry.symndx = 0;
3577           entry.d.addend = 0;
3578         }
3579       else if (h == NULL)
3580         {
3581           entry.symndx = r_symndx;
3582           entry.d.addend = 0;
3583         }
3584       else
3585         entry.d.h = h;
3586
3587       p = (struct mips_got_entry *)
3588         htab_find (g->got_entries, &entry);
3589
3590       BFD_ASSERT (p);
3591       return p;
3592     }
3593
3594   loc = (struct mips_got_entry **) htab_find_slot (g->got_entries, &entry,
3595                                                    INSERT);
3596   if (*loc)
3597     return *loc;
3598
3599   entry.gotidx = MIPS_ELF_GOT_SIZE (abfd) * g->assigned_gotno++;
3600
3601   *loc = (struct mips_got_entry *)bfd_alloc (abfd, sizeof entry);
3602
3603   if (! *loc)
3604     return NULL;
3605
3606   memcpy (*loc, &entry, sizeof entry);
3607
3608   if (g->assigned_gotno > g->local_gotno)
3609     {
3610       (*loc)->gotidx = -1;
3611       /* We didn't allocate enough space in the GOT.  */
3612       (*_bfd_error_handler)
3613         (_("not enough GOT space for local GOT entries"));
3614       bfd_set_error (bfd_error_bad_value);
3615       return NULL;
3616     }
3617
3618   MIPS_ELF_PUT_WORD (abfd, value,
3619                      (htab->sgot->contents + entry.gotidx));
3620
3621   /* These GOT entries need a dynamic relocation on VxWorks.  */
3622   if (htab->is_vxworks)
3623     {
3624       Elf_Internal_Rela outrel;
3625       asection *s;
3626       bfd_byte *rloc;
3627       bfd_vma got_address;
3628
3629       s = mips_elf_rel_dyn_section (info, FALSE);
3630       got_address = (htab->sgot->output_section->vma
3631                      + htab->sgot->output_offset
3632                      + entry.gotidx);
3633
3634       rloc = s->contents + (s->reloc_count++ * sizeof (Elf32_External_Rela));
3635       outrel.r_offset = got_address;
3636       outrel.r_info = ELF32_R_INFO (STN_UNDEF, R_MIPS_32);
3637       outrel.r_addend = value;
3638       bfd_elf32_swap_reloca_out (abfd, &outrel, rloc);
3639     }
3640
3641   return *loc;
3642 }
3643
3644 /* Return the number of dynamic section symbols required by OUTPUT_BFD.
3645    The number might be exact or a worst-case estimate, depending on how
3646    much information is available to elf_backend_omit_section_dynsym at
3647    the current linking stage.  */
3648
3649 static bfd_size_type
3650 count_section_dynsyms (bfd *output_bfd, struct bfd_link_info *info)
3651 {
3652   bfd_size_type count;
3653
3654   count = 0;
3655   if (info->shared || elf_hash_table (info)->is_relocatable_executable)
3656     {
3657       asection *p;
3658       const struct elf_backend_data *bed;
3659
3660       bed = get_elf_backend_data (output_bfd);
3661       for (p = output_bfd->sections; p ; p = p->next)
3662         if ((p->flags & SEC_EXCLUDE) == 0
3663             && (p->flags & SEC_ALLOC) != 0
3664             && !(*bed->elf_backend_omit_section_dynsym) (output_bfd, info, p))
3665           ++count;
3666     }
3667   return count;
3668 }
3669
3670 /* Sort the dynamic symbol table so that symbols that need GOT entries
3671    appear towards the end.  */
3672
3673 static bfd_boolean
3674 mips_elf_sort_hash_table (bfd *abfd, struct bfd_link_info *info)
3675 {
3676   struct mips_elf_link_hash_table *htab;
3677   struct mips_elf_hash_sort_data hsd;
3678   struct mips_got_info *g;
3679
3680   if (elf_hash_table (info)->dynsymcount == 0)
3681     return TRUE;
3682
3683   htab = mips_elf_hash_table (info);
3684   BFD_ASSERT (htab != NULL);
3685
3686   g = htab->got_info;
3687   if (g == NULL)
3688     return TRUE;
3689
3690   hsd.low = NULL;
3691   hsd.max_unref_got_dynindx
3692     = hsd.min_got_dynindx
3693     = (elf_hash_table (info)->dynsymcount - g->reloc_only_gotno);
3694   hsd.max_non_got_dynindx = count_section_dynsyms (abfd, info) + 1;
3695   mips_elf_link_hash_traverse (((struct mips_elf_link_hash_table *)
3696                                 elf_hash_table (info)),
3697                                mips_elf_sort_hash_table_f,
3698                                &hsd);
3699
3700   /* There should have been enough room in the symbol table to
3701      accommodate both the GOT and non-GOT symbols.  */
3702   BFD_ASSERT (hsd.max_non_got_dynindx <= hsd.min_got_dynindx);
3703   BFD_ASSERT ((unsigned long) hsd.max_unref_got_dynindx
3704               == elf_hash_table (info)->dynsymcount);
3705   BFD_ASSERT (elf_hash_table (info)->dynsymcount - hsd.min_got_dynindx
3706               == g->global_gotno);
3707
3708   /* Now we know which dynamic symbol has the lowest dynamic symbol
3709      table index in the GOT.  */
3710   htab->global_gotsym = hsd.low;
3711
3712   return TRUE;
3713 }
3714
3715 /* If H needs a GOT entry, assign it the highest available dynamic
3716    index.  Otherwise, assign it the lowest available dynamic
3717    index.  */
3718
3719 static bfd_boolean
3720 mips_elf_sort_hash_table_f (struct mips_elf_link_hash_entry *h, void *data)
3721 {
3722   struct mips_elf_hash_sort_data *hsd = data;
3723
3724   /* Symbols without dynamic symbol table entries aren't interesting
3725      at all.  */
3726   if (h->root.dynindx == -1)
3727     return TRUE;
3728
3729   switch (h->global_got_area)
3730     {
3731     case GGA_NONE:
3732       h->root.dynindx = hsd->max_non_got_dynindx++;
3733       break;
3734
3735     case GGA_NORMAL:
3736       h->root.dynindx = --hsd->min_got_dynindx;
3737       hsd->low = (struct elf_link_hash_entry *) h;
3738       break;
3739
3740     case GGA_RELOC_ONLY:
3741       if (hsd->max_unref_got_dynindx == hsd->min_got_dynindx)
3742         hsd->low = (struct elf_link_hash_entry *) h;
3743       h->root.dynindx = hsd->max_unref_got_dynindx++;
3744       break;
3745     }
3746
3747   return TRUE;
3748 }
3749
3750 /* Record that input bfd ABFD requires a GOT entry like *LOOKUP
3751    (which is owned by the caller and shouldn't be added to the
3752    hash table directly).  */
3753
3754 static bfd_boolean
3755 mips_elf_record_got_entry (struct bfd_link_info *info, bfd *abfd,
3756                            struct mips_got_entry *lookup)
3757 {
3758   struct mips_elf_link_hash_table *htab;
3759   struct mips_got_entry *entry;
3760   struct mips_got_info *g;
3761   void **loc, **bfd_loc;
3762
3763   /* Make sure there's a slot for this entry in the master GOT.  */
3764   htab = mips_elf_hash_table (info);
3765   g = htab->got_info;
3766   loc = htab_find_slot (g->got_entries, lookup, INSERT);
3767   if (!loc)
3768     return FALSE;
3769
3770   /* Populate the entry if it isn't already.  */
3771   entry = (struct mips_got_entry *) *loc;
3772   if (!entry)
3773     {
3774       entry = (struct mips_got_entry *) bfd_alloc (abfd, sizeof (*entry));
3775       if (!entry)
3776         return FALSE;
3777
3778       lookup->gotidx = -1;
3779       *entry = *lookup;
3780       *loc = entry;
3781     }
3782
3783   /* Reuse the same GOT entry for the BFD's GOT.  */
3784   g = mips_elf_bfd_got (abfd, TRUE);
3785   if (!g)
3786     return FALSE;
3787
3788   bfd_loc = htab_find_slot (g->got_entries, lookup, INSERT);
3789   if (!bfd_loc)
3790     return FALSE;
3791
3792   if (!*bfd_loc)
3793     *bfd_loc = entry;
3794   return TRUE;
3795 }
3796
3797 /* ABFD has a GOT relocation of type R_TYPE against H.  Reserve a GOT
3798    entry for it.  FOR_CALL is true if the caller is only interested in
3799    using the GOT entry for calls.  */
3800
3801 static bfd_boolean
3802 mips_elf_record_global_got_symbol (struct elf_link_hash_entry *h,
3803                                    bfd *abfd, struct bfd_link_info *info,
3804                                    bfd_boolean for_call, int r_type)
3805 {
3806   struct mips_elf_link_hash_table *htab;
3807   struct mips_elf_link_hash_entry *hmips;
3808   struct mips_got_entry entry;
3809   unsigned char tls_type;
3810
3811   htab = mips_elf_hash_table (info);
3812   BFD_ASSERT (htab != NULL);
3813
3814   hmips = (struct mips_elf_link_hash_entry *) h;
3815   if (!for_call)
3816     hmips->got_only_for_calls = FALSE;
3817
3818   /* A global symbol in the GOT must also be in the dynamic symbol
3819      table.  */
3820   if (h->dynindx == -1)
3821     {
3822       switch (ELF_ST_VISIBILITY (h->other))
3823         {
3824         case STV_INTERNAL:
3825         case STV_HIDDEN:
3826           _bfd_elf_link_hash_hide_symbol (info, h, TRUE);
3827           break;
3828         }
3829       if (!bfd_elf_link_record_dynamic_symbol (info, h))
3830         return FALSE;
3831     }
3832
3833   tls_type = mips_elf_reloc_tls_type (r_type);
3834   if (tls_type == GOT_NORMAL && hmips->global_got_area > GGA_NORMAL)
3835     hmips->global_got_area = GGA_NORMAL;
3836   else if (tls_type == GOT_TLS_IE && hmips->tls_ie_type == 0)
3837     hmips->tls_ie_type = tls_type;
3838   else if (tls_type == GOT_TLS_GD && hmips->tls_gd_type == 0)
3839     hmips->tls_gd_type = tls_type;
3840
3841   entry.abfd = abfd;
3842   entry.symndx = -1;
3843   entry.d.h = (struct mips_elf_link_hash_entry *) h;
3844   entry.tls_type = tls_type;
3845   return mips_elf_record_got_entry (info, abfd, &entry);
3846 }
3847
3848 /* ABFD has a GOT relocation of type R_TYPE against symbol SYMNDX + ADDEND,
3849    where SYMNDX is a local symbol.  Reserve a GOT entry for it.  */
3850
3851 static bfd_boolean
3852 mips_elf_record_local_got_symbol (bfd *abfd, long symndx, bfd_vma addend,
3853                                   struct bfd_link_info *info, int r_type)
3854 {
3855   struct mips_elf_link_hash_table *htab;
3856   struct mips_got_info *g;
3857   struct mips_got_entry entry;
3858
3859   htab = mips_elf_hash_table (info);
3860   BFD_ASSERT (htab != NULL);
3861
3862   g = htab->got_info;
3863   BFD_ASSERT (g != NULL);
3864
3865   entry.abfd = abfd;
3866   entry.symndx = symndx;
3867   entry.d.addend = addend;
3868   entry.tls_type = mips_elf_reloc_tls_type (r_type);
3869   return mips_elf_record_got_entry (info, abfd, &entry);
3870 }
3871
3872 /* Return the maximum number of GOT page entries required for RANGE.  */
3873
3874 static bfd_vma
3875 mips_elf_pages_for_range (const struct mips_got_page_range *range)
3876 {
3877   return (range->max_addend - range->min_addend + 0x1ffff) >> 16;
3878 }
3879
3880 /* Record that ABFD has a page relocation against symbol SYMNDX and
3881    that ADDEND is the addend for that relocation.
3882
3883    This function creates an upper bound on the number of GOT slots
3884    required; no attempt is made to combine references to non-overridable
3885    global symbols across multiple input files.  */
3886
3887 static bfd_boolean
3888 mips_elf_record_got_page_entry (struct bfd_link_info *info, bfd *abfd,
3889                                 long symndx, bfd_signed_vma addend)
3890 {
3891   struct mips_elf_link_hash_table *htab;
3892   struct mips_got_info *g1, *g2;
3893   struct mips_got_page_entry lookup, *entry;
3894   struct mips_got_page_range **range_ptr, *range;
3895   bfd_vma old_pages, new_pages;
3896   void **loc, **bfd_loc;
3897
3898   htab = mips_elf_hash_table (info);
3899   BFD_ASSERT (htab != NULL);
3900
3901   g1 = htab->got_info;
3902   BFD_ASSERT (g1 != NULL);
3903
3904   /* Find the mips_got_page_entry hash table entry for this symbol.  */
3905   lookup.abfd = abfd;
3906   lookup.symndx = symndx;
3907   loc = htab_find_slot (g1->got_page_entries, &lookup, INSERT);
3908   if (loc == NULL)
3909     return FALSE;
3910
3911   /* Create a mips_got_page_entry if this is the first time we've
3912      seen the symbol.  */
3913   entry = (struct mips_got_page_entry *) *loc;
3914   if (!entry)
3915     {
3916       entry = bfd_alloc (abfd, sizeof (*entry));
3917       if (!entry)
3918         return FALSE;
3919
3920       entry->abfd = abfd;
3921       entry->symndx = symndx;
3922       entry->ranges = NULL;
3923       entry->num_pages = 0;
3924       *loc = entry;
3925     }
3926
3927   /* Add the same entry to the BFD's GOT.  */
3928   g2 = mips_elf_bfd_got (abfd, TRUE);
3929   if (!g2)
3930     return FALSE;
3931
3932   bfd_loc = htab_find_slot (g2->got_page_entries, &lookup, INSERT);
3933   if (!bfd_loc)
3934     return FALSE;
3935
3936   if (!*bfd_loc)
3937     *bfd_loc = entry;
3938
3939   /* Skip over ranges whose maximum extent cannot share a page entry
3940      with ADDEND.  */
3941   range_ptr = &entry->ranges;
3942   while (*range_ptr && addend > (*range_ptr)->max_addend + 0xffff)
3943     range_ptr = &(*range_ptr)->next;
3944
3945   /* If we scanned to the end of the list, or found a range whose
3946      minimum extent cannot share a page entry with ADDEND, create
3947      a new singleton range.  */
3948   range = *range_ptr;
3949   if (!range || addend < range->min_addend - 0xffff)
3950     {
3951       range = bfd_alloc (abfd, sizeof (*range));
3952       if (!range)
3953         return FALSE;
3954
3955       range->next = *range_ptr;
3956       range->min_addend = addend;
3957       range->max_addend = addend;
3958
3959       *range_ptr = range;
3960       entry->num_pages++;
3961       g1->page_gotno++;
3962       g2->page_gotno++;
3963       return TRUE;
3964     }
3965
3966   /* Remember how many pages the old range contributed.  */
3967   old_pages = mips_elf_pages_for_range (range);
3968
3969   /* Update the ranges.  */
3970   if (addend < range->min_addend)
3971     range->min_addend = addend;
3972   else if (addend > range->max_addend)
3973     {
3974       if (range->next && addend >= range->next->min_addend - 0xffff)
3975         {
3976           old_pages += mips_elf_pages_for_range (range->next);
3977           range->max_addend = range->next->max_addend;
3978           range->next = range->next->next;
3979         }
3980       else
3981         range->max_addend = addend;
3982     }
3983
3984   /* Record any change in the total estimate.  */
3985   new_pages = mips_elf_pages_for_range (range);
3986   if (old_pages != new_pages)
3987     {
3988       entry->num_pages += new_pages - old_pages;
3989       g1->page_gotno += new_pages - old_pages;
3990       g2->page_gotno += new_pages - old_pages;
3991     }
3992
3993   return TRUE;
3994 }
3995
3996 /* Add room for N relocations to the .rel(a).dyn section in ABFD.  */
3997
3998 static void
3999 mips_elf_allocate_dynamic_relocations (bfd *abfd, struct bfd_link_info *info,
4000                                        unsigned int n)
4001 {
4002   asection *s;
4003   struct mips_elf_link_hash_table *htab;
4004
4005   htab = mips_elf_hash_table (info);
4006   BFD_ASSERT (htab != NULL);
4007
4008   s = mips_elf_rel_dyn_section (info, FALSE);
4009   BFD_ASSERT (s != NULL);
4010
4011   if (htab->is_vxworks)
4012     s->size += n * MIPS_ELF_RELA_SIZE (abfd);
4013   else
4014     {
4015       if (s->size == 0)
4016         {
4017           /* Make room for a null element.  */
4018           s->size += MIPS_ELF_REL_SIZE (abfd);
4019           ++s->reloc_count;
4020         }
4021       s->size += n * MIPS_ELF_REL_SIZE (abfd);
4022     }
4023 }
4024 \f
4025 /* A htab_traverse callback for GOT entries.  Set boolean *DATA to true
4026    if the GOT entry is for an indirect or warning symbol.  */
4027
4028 static int
4029 mips_elf_check_recreate_got (void **entryp, void *data)
4030 {
4031   struct mips_got_entry *entry;
4032   bfd_boolean *must_recreate;
4033
4034   entry = (struct mips_got_entry *) *entryp;
4035   must_recreate = (bfd_boolean *) data;
4036   if (entry->abfd != NULL && entry->symndx == -1)
4037     {
4038       struct mips_elf_link_hash_entry *h;
4039
4040       h = entry->d.h;
4041       if (h->root.root.type == bfd_link_hash_indirect
4042           || h->root.root.type == bfd_link_hash_warning)
4043         {
4044           *must_recreate = TRUE;
4045           return 0;
4046         }
4047     }
4048   return 1;
4049 }
4050
4051 /* A htab_traverse callback for GOT entries.  Add all entries to
4052    hash table *DATA, converting entries for indirect and warning
4053    symbols into entries for the target symbol.  Set *DATA to null
4054    on error.  */
4055
4056 static int
4057 mips_elf_recreate_got (void **entryp, void *data)
4058 {
4059   htab_t *new_got;
4060   struct mips_got_entry new_entry, *entry;
4061   void **slot;
4062
4063   new_got = (htab_t *) data;
4064   entry = (struct mips_got_entry *) *entryp;
4065   if (entry->abfd != NULL
4066       && entry->symndx == -1
4067       && (entry->d.h->root.root.type == bfd_link_hash_indirect
4068           || entry->d.h->root.root.type == bfd_link_hash_warning))
4069     {
4070       struct mips_elf_link_hash_entry *h;
4071
4072       new_entry = *entry;
4073       entry = &new_entry;
4074       h = entry->d.h;
4075       do
4076         {
4077           BFD_ASSERT (h->global_got_area == GGA_NONE);
4078           h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
4079         }
4080       while (h->root.root.type == bfd_link_hash_indirect
4081              || h->root.root.type == bfd_link_hash_warning);
4082       entry->d.h = h;
4083     }
4084   slot = htab_find_slot (*new_got, entry, INSERT);
4085   if (slot == NULL)
4086     {
4087       *new_got = NULL;
4088       return 0;
4089     }
4090   if (*slot == NULL)
4091     {
4092       if (entry == &new_entry)
4093         {
4094           entry = bfd_alloc (entry->abfd, sizeof (*entry));
4095           if (!entry)
4096             {
4097               *new_got = NULL;
4098               return 0;
4099             }
4100           *entry = new_entry;
4101         }
4102       *slot = entry;
4103     }
4104   return 1;
4105 }
4106
4107 /* If any entries in G->got_entries are for indirect or warning symbols,
4108    replace them with entries for the target symbol.  */
4109
4110 static bfd_boolean
4111 mips_elf_resolve_final_got_entries (struct mips_got_info *g)
4112 {
4113   bfd_boolean must_recreate;
4114   htab_t new_got;
4115
4116   must_recreate = FALSE;
4117   htab_traverse (g->got_entries, mips_elf_check_recreate_got, &must_recreate);
4118   if (must_recreate)
4119     {
4120       new_got = htab_create (htab_size (g->got_entries),
4121                              mips_elf_got_entry_hash,
4122                              mips_elf_got_entry_eq, NULL);
4123       htab_traverse (g->got_entries, mips_elf_recreate_got, &new_got);
4124       if (new_got == NULL)
4125         return FALSE;
4126
4127       htab_delete (g->got_entries);
4128       g->got_entries = new_got;
4129     }
4130   return TRUE;
4131 }
4132
4133 /* A mips_elf_link_hash_traverse callback for which DATA points
4134    to the link_info structure.  Count the number of type (3) entries
4135    in the master GOT.  */
4136
4137 static int
4138 mips_elf_count_got_symbols (struct mips_elf_link_hash_entry *h, void *data)
4139 {
4140   struct bfd_link_info *info;
4141   struct mips_elf_link_hash_table *htab;
4142   struct mips_got_info *g;
4143
4144   info = (struct bfd_link_info *) data;
4145   htab = mips_elf_hash_table (info);
4146   g = htab->got_info;
4147   if (h->global_got_area != GGA_NONE)
4148     {
4149       /* Make a final decision about whether the symbol belongs in the
4150          local or global GOT.  Symbols that bind locally can (and in the
4151          case of forced-local symbols, must) live in the local GOT.
4152          Those that are aren't in the dynamic symbol table must also
4153          live in the local GOT.
4154
4155          Note that the former condition does not always imply the
4156          latter: symbols do not bind locally if they are completely
4157          undefined.  We'll report undefined symbols later if appropriate.  */
4158       if (h->root.dynindx == -1
4159           || (h->got_only_for_calls
4160               ? SYMBOL_CALLS_LOCAL (info, &h->root)
4161               : SYMBOL_REFERENCES_LOCAL (info, &h->root)))
4162         {
4163           /* The symbol belongs in the local GOT.  We no longer need this
4164              entry if it was only used for relocations; those relocations
4165              will be against the null or section symbol instead of H.  */
4166           if (h->global_got_area != GGA_RELOC_ONLY)
4167             g->local_gotno++;
4168           h->global_got_area = GGA_NONE;
4169         }
4170       else if (htab->is_vxworks
4171                && h->got_only_for_calls
4172                && h->root.plt.offset != MINUS_ONE)
4173         /* On VxWorks, calls can refer directly to the .got.plt entry;
4174            they don't need entries in the regular GOT.  .got.plt entries
4175            will be allocated by _bfd_mips_elf_adjust_dynamic_symbol.  */
4176         h->global_got_area = GGA_NONE;
4177       else
4178         {
4179           g->global_gotno++;
4180           if (h->global_got_area == GGA_RELOC_ONLY)
4181             g->reloc_only_gotno++;
4182         }
4183     }
4184   return 1;
4185 }
4186 \f
4187 /* A htab_traverse callback for GOT entries.  Add each one to the GOT
4188    given in mips_elf_traverse_got_arg DATA.  Clear DATA->G on error.  */
4189
4190 static int
4191 mips_elf_add_got_entry (void **entryp, void *data)
4192 {
4193   struct mips_got_entry *entry;
4194   struct mips_elf_traverse_got_arg *arg;
4195   void **slot;
4196
4197   entry = (struct mips_got_entry *) *entryp;
4198   arg = (struct mips_elf_traverse_got_arg *) data;
4199   slot = htab_find_slot (arg->g->got_entries, entry, INSERT);
4200   if (!slot)
4201     {
4202       arg->g = NULL;
4203       return 0;
4204     }
4205   if (!*slot)
4206     {
4207       *slot = entry;
4208       mips_elf_count_got_entry (arg->info, arg->g, entry);
4209     }
4210   return 1;
4211 }
4212
4213 /* A htab_traverse callback for GOT page entries.  Add each one to the GOT
4214    given in mips_elf_traverse_got_arg DATA.  Clear DATA->G on error.  */
4215
4216 static int
4217 mips_elf_add_got_page_entry (void **entryp, void *data)
4218 {
4219   struct mips_got_page_entry *entry;
4220   struct mips_elf_traverse_got_arg *arg;
4221   void **slot;
4222
4223   entry = (struct mips_got_page_entry *) *entryp;
4224   arg = (struct mips_elf_traverse_got_arg *) data;
4225   slot = htab_find_slot (arg->g->got_page_entries, entry, INSERT);
4226   if (!slot)
4227     {
4228       arg->g = NULL;
4229       return 0;
4230     }
4231   if (!*slot)
4232     {
4233       *slot = entry;
4234       arg->g->page_gotno += entry->num_pages;
4235     }
4236   return 1;
4237 }
4238
4239 /* Consider merging FROM, which is ABFD's GOT, into TO.  Return -1 if
4240    this would lead to overflow, 1 if they were merged successfully,
4241    and 0 if a merge failed due to lack of memory.  (These values are chosen
4242    so that nonnegative return values can be returned by a htab_traverse
4243    callback.)  */
4244
4245 static int
4246 mips_elf_merge_got_with (bfd *abfd, struct mips_got_info *from,
4247                          struct mips_got_info *to,
4248                          struct mips_elf_got_per_bfd_arg *arg)
4249 {
4250   struct mips_elf_traverse_got_arg tga;
4251   unsigned int estimate;
4252
4253   /* Work out how many page entries we would need for the combined GOT.  */
4254   estimate = arg->max_pages;
4255   if (estimate >= from->page_gotno + to->page_gotno)
4256     estimate = from->page_gotno + to->page_gotno;
4257
4258   /* And conservatively estimate how many local and TLS entries
4259      would be needed.  */
4260   estimate += from->local_gotno + to->local_gotno;
4261   estimate += from->tls_gotno + to->tls_gotno;
4262
4263   /* If we're merging with the primary got, any TLS relocations will
4264      come after the full set of global entries.  Otherwise estimate those
4265      conservatively as well.  */
4266   if (to == arg->primary && from->tls_gotno + to->tls_gotno)
4267     estimate += arg->global_count;
4268   else
4269     estimate += from->global_gotno + to->global_gotno;
4270
4271   /* Bail out if the combined GOT might be too big.  */
4272   if (estimate > arg->max_count)
4273     return -1;
4274
4275   /* Transfer the bfd's got information from FROM to TO.  */
4276   tga.info = arg->info;
4277   tga.g = to;
4278   htab_traverse (from->got_entries, mips_elf_add_got_entry, &tga);
4279   if (!tga.g)
4280     return 0;
4281
4282   htab_traverse (from->got_page_entries, mips_elf_add_got_page_entry, &tga);
4283   if (!tga.g)
4284     return 0;
4285
4286   mips_elf_replace_bfd_got (abfd, to);
4287   return 1;
4288 }
4289
4290 /* Attempt to merge GOT G, which belongs to ABFD.  Try to use as much
4291    as possible of the primary got, since it doesn't require explicit
4292    dynamic relocations, but don't use bfds that would reference global
4293    symbols out of the addressable range.  Failing the primary got,
4294    attempt to merge with the current got, or finish the current got
4295    and then make make the new got current.  */
4296
4297 static bfd_boolean
4298 mips_elf_merge_got (bfd *abfd, struct mips_got_info *g,
4299                     struct mips_elf_got_per_bfd_arg *arg)
4300 {
4301   struct mips_elf_traverse_got_arg tga;
4302   unsigned int estimate;
4303   int result;
4304
4305   if (!mips_elf_resolve_final_got_entries (g))
4306     return FALSE;
4307
4308   tga.info = arg->info;
4309   tga.g = g;
4310   htab_traverse (g->got_entries, mips_elf_count_got_entries, &tga);
4311
4312   /* Work out the number of page, local and TLS entries.  */
4313   estimate = arg->max_pages;
4314   if (estimate > g->page_gotno)
4315     estimate = g->page_gotno;
4316   estimate += g->local_gotno + g->tls_gotno;
4317
4318   /* We place TLS GOT entries after both locals and globals.  The globals
4319      for the primary GOT may overflow the normal GOT size limit, so be
4320      sure not to merge a GOT which requires TLS with the primary GOT in that
4321      case.  This doesn't affect non-primary GOTs.  */
4322   estimate += (g->tls_gotno > 0 ? arg->global_count : g->global_gotno);
4323
4324   if (estimate <= arg->max_count)
4325     {
4326       /* If we don't have a primary GOT, use it as
4327          a starting point for the primary GOT.  */
4328       if (!arg->primary)
4329         {
4330           arg->primary = g;
4331           return TRUE;
4332         }
4333
4334       /* Try merging with the primary GOT.  */
4335       result = mips_elf_merge_got_with (abfd, g, arg->primary, arg);
4336       if (result >= 0)
4337         return result;
4338     }
4339
4340   /* If we can merge with the last-created got, do it.  */
4341   if (arg->current)
4342     {
4343       result = mips_elf_merge_got_with (abfd, g, arg->current, arg);
4344       if (result >= 0)
4345         return result;
4346     }
4347
4348   /* Well, we couldn't merge, so create a new GOT.  Don't check if it
4349      fits; if it turns out that it doesn't, we'll get relocation
4350      overflows anyway.  */
4351   g->next = arg->current;
4352   arg->current = g;
4353
4354   return TRUE;
4355 }
4356
4357 /* ENTRYP is a hash table entry for a mips_got_entry.  Set its gotidx
4358    to GOTIDX, duplicating the entry if it has already been assigned
4359    an index in a different GOT.  */
4360
4361 static bfd_boolean
4362 mips_elf_set_gotidx (void **entryp, long gotidx)
4363 {
4364   struct mips_got_entry *entry;
4365
4366   entry = (struct mips_got_entry *) *entryp;
4367   if (entry->gotidx > 0)
4368     {
4369       struct mips_got_entry *new_entry;
4370
4371       new_entry = bfd_alloc (entry->abfd, sizeof (*entry));
4372       if (!new_entry)
4373         return FALSE;
4374
4375       *new_entry = *entry;
4376       *entryp = new_entry;
4377       entry = new_entry;
4378     }
4379   entry->gotidx = gotidx;
4380   return TRUE;
4381 }
4382
4383 /* Set the TLS GOT index for the GOT entry in ENTRYP.  DATA points to a
4384    mips_elf_traverse_got_arg in which DATA->value is the size of one
4385    GOT entry.  Set DATA->g to null on failure.  */
4386
4387 static int
4388 mips_elf_initialize_tls_index (void **entryp, void *data)
4389 {
4390   struct mips_got_entry *entry;
4391   struct mips_elf_traverse_got_arg *arg;
4392   struct mips_got_info *g;
4393   bfd_vma next_index;
4394   unsigned char tls_type;
4395
4396   /* We're only interested in TLS symbols.  */
4397   entry = (struct mips_got_entry *) *entryp;
4398   tls_type = (entry->tls_type & GOT_TLS_TYPE);
4399   if (tls_type == 0)
4400     return 1;
4401
4402   arg = (struct mips_elf_traverse_got_arg *) data;
4403   g = arg->g;
4404   next_index = arg->value * g->tls_assigned_gotno;
4405
4406   if (entry->symndx == -1 && g->next == NULL)
4407     {
4408       /* A type (3) got entry in the single-GOT case.  We use the symbol's
4409          hash table entry to track its index.  */
4410       if (tls_type == GOT_TLS_IE)
4411         {
4412           if (entry->d.h->tls_ie_type & GOT_TLS_OFFSET_DONE)
4413             return 1;
4414           entry->d.h->tls_ie_type |= GOT_TLS_OFFSET_DONE;
4415           entry->d.h->tls_ie_got_offset = next_index;
4416         }
4417       else
4418         {
4419           BFD_ASSERT (tls_type == GOT_TLS_GD);
4420           if (entry->d.h->tls_gd_type & GOT_TLS_OFFSET_DONE)
4421             return 1;
4422           entry->d.h->tls_gd_type |= GOT_TLS_OFFSET_DONE;
4423           entry->d.h->tls_gd_got_offset = next_index;
4424         }
4425     }
4426   else
4427     {
4428       if (tls_type == GOT_TLS_LDM)
4429         {
4430           /* There are separate mips_got_entry objects for each input bfd
4431              that requires an LDM entry.  Make sure that all LDM entries in
4432              a GOT resolve to the same index.  */
4433           if (g->tls_ldm_offset != MINUS_TWO && g->tls_ldm_offset != MINUS_ONE)
4434             {
4435               entry->gotidx = g->tls_ldm_offset;
4436               return 1;
4437             }
4438           g->tls_ldm_offset = next_index;
4439         }
4440       if (!mips_elf_set_gotidx (entryp, next_index))
4441         {
4442           arg->g = NULL;
4443           return 0;
4444         }
4445     }
4446
4447   /* Account for the entries we've just allocated.  */
4448   g->tls_assigned_gotno += mips_tls_got_entries (tls_type);
4449   return 1;
4450 }
4451
4452 /* A htab_traverse callback for GOT entries, where DATA points to a
4453    mips_elf_traverse_got_arg.  Set the global_got_area of each global
4454    symbol to DATA->value.  */
4455
4456 static int
4457 mips_elf_set_global_got_area (void **entryp, void *data)
4458 {
4459   struct mips_got_entry *entry;
4460   struct mips_elf_traverse_got_arg *arg;
4461
4462   entry = (struct mips_got_entry *) *entryp;
4463   arg = (struct mips_elf_traverse_got_arg *) data;
4464   if (entry->abfd != NULL
4465       && entry->symndx == -1
4466       && entry->d.h->global_got_area != GGA_NONE)
4467     entry->d.h->global_got_area = arg->value;
4468   return 1;
4469 }
4470
4471 /* A htab_traverse callback for secondary GOT entries, where DATA points
4472    to a mips_elf_traverse_got_arg.  Assign GOT indices to global entries
4473    and record the number of relocations they require.  DATA->value is
4474    the size of one GOT entry.  Set DATA->g to null on failure.  */
4475
4476 static int
4477 mips_elf_set_global_gotidx (void **entryp, void *data)
4478 {
4479   struct mips_got_entry *entry;
4480   struct mips_elf_traverse_got_arg *arg;
4481
4482   entry = (struct mips_got_entry *) *entryp;
4483   arg = (struct mips_elf_traverse_got_arg *) data;
4484   if (entry->abfd != NULL
4485       && entry->symndx == -1
4486       && entry->d.h->global_got_area != GGA_NONE)
4487     {
4488       if (!mips_elf_set_gotidx (entryp, arg->value * arg->g->assigned_gotno))
4489         {
4490           arg->g = NULL;
4491           return 0;
4492         }
4493       arg->g->assigned_gotno += 1;
4494
4495       if (arg->info->shared
4496           || (elf_hash_table (arg->info)->dynamic_sections_created
4497               && entry->d.h->root.def_dynamic
4498               && !entry->d.h->root.def_regular))
4499         arg->g->relocs += 1;
4500     }
4501
4502   return 1;
4503 }
4504
4505 /* A htab_traverse callback for GOT entries for which DATA is the
4506    bfd_link_info.  Forbid any global symbols from having traditional
4507    lazy-binding stubs.  */
4508
4509 static int
4510 mips_elf_forbid_lazy_stubs (void **entryp, void *data)
4511 {
4512   struct bfd_link_info *info;
4513   struct mips_elf_link_hash_table *htab;
4514   struct mips_got_entry *entry;
4515
4516   entry = (struct mips_got_entry *) *entryp;
4517   info = (struct bfd_link_info *) data;
4518   htab = mips_elf_hash_table (info);
4519   BFD_ASSERT (htab != NULL);
4520
4521   if (entry->abfd != NULL
4522       && entry->symndx == -1
4523       && entry->d.h->needs_lazy_stub)
4524     {
4525       entry->d.h->needs_lazy_stub = FALSE;
4526       htab->lazy_stub_count--;
4527     }
4528
4529   return 1;
4530 }
4531
4532 /* Return the offset of an input bfd IBFD's GOT from the beginning of
4533    the primary GOT.  */
4534 static bfd_vma
4535 mips_elf_adjust_gp (bfd *abfd, struct mips_got_info *g, bfd *ibfd)
4536 {
4537   if (!g->next)
4538     return 0;
4539
4540   g = mips_elf_bfd_got (ibfd, FALSE);
4541   if (! g)
4542     return 0;
4543
4544   BFD_ASSERT (g->next);
4545
4546   g = g->next;
4547
4548   return (g->local_gotno + g->global_gotno + g->tls_gotno)
4549     * MIPS_ELF_GOT_SIZE (abfd);
4550 }
4551
4552 /* Turn a single GOT that is too big for 16-bit addressing into
4553    a sequence of GOTs, each one 16-bit addressable.  */
4554
4555 static bfd_boolean
4556 mips_elf_multi_got (bfd *abfd, struct bfd_link_info *info,
4557                     asection *got, bfd_size_type pages)
4558 {
4559   struct mips_elf_link_hash_table *htab;
4560   struct mips_elf_got_per_bfd_arg got_per_bfd_arg;
4561   struct mips_elf_traverse_got_arg tga;
4562   struct mips_got_info *g, *gg;
4563   unsigned int assign, needed_relocs;
4564   bfd *dynobj, *ibfd;
4565
4566   dynobj = elf_hash_table (info)->dynobj;
4567   htab = mips_elf_hash_table (info);
4568   BFD_ASSERT (htab != NULL);
4569
4570   g = htab->got_info;
4571
4572   got_per_bfd_arg.obfd = abfd;
4573   got_per_bfd_arg.info = info;
4574   got_per_bfd_arg.current = NULL;
4575   got_per_bfd_arg.primary = NULL;
4576   got_per_bfd_arg.max_count = ((MIPS_ELF_GOT_MAX_SIZE (info)
4577                                 / MIPS_ELF_GOT_SIZE (abfd))
4578                                - htab->reserved_gotno);
4579   got_per_bfd_arg.max_pages = pages;
4580   /* The number of globals that will be included in the primary GOT.
4581      See the calls to mips_elf_set_global_got_area below for more
4582      information.  */
4583   got_per_bfd_arg.global_count = g->global_gotno;
4584
4585   /* Try to merge the GOTs of input bfds together, as long as they
4586      don't seem to exceed the maximum GOT size, choosing one of them
4587      to be the primary GOT.  */
4588   for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link_next)
4589     {
4590       gg = mips_elf_bfd_got (ibfd, FALSE);
4591       if (gg && !mips_elf_merge_got (ibfd, gg, &got_per_bfd_arg))
4592         return FALSE;
4593     }
4594
4595   /* If we do not find any suitable primary GOT, create an empty one.  */
4596   if (got_per_bfd_arg.primary == NULL)
4597     g->next = mips_elf_create_got_info (abfd, FALSE);
4598   else
4599     g->next = got_per_bfd_arg.primary;
4600   g->next->next = got_per_bfd_arg.current;
4601
4602   /* GG is now the master GOT, and G is the primary GOT.  */
4603   gg = g;
4604   g = g->next;
4605
4606   /* Map the output bfd to the primary got.  That's what we're going
4607      to use for bfds that use GOT16 or GOT_PAGE relocations that we
4608      didn't mark in check_relocs, and we want a quick way to find it.
4609      We can't just use gg->next because we're going to reverse the
4610      list.  */
4611   mips_elf_replace_bfd_got (abfd, g);
4612
4613   /* Every symbol that is referenced in a dynamic relocation must be
4614      present in the primary GOT, so arrange for them to appear after
4615      those that are actually referenced.  */
4616   gg->reloc_only_gotno = gg->global_gotno - g->global_gotno;
4617   g->global_gotno = gg->global_gotno;
4618
4619   tga.info = info;
4620   tga.value = GGA_RELOC_ONLY;
4621   htab_traverse (gg->got_entries, mips_elf_set_global_got_area, &tga);
4622   tga.value = GGA_NORMAL;
4623   htab_traverse (g->got_entries, mips_elf_set_global_got_area, &tga);
4624
4625   /* Now go through the GOTs assigning them offset ranges.
4626      [assigned_gotno, local_gotno[ will be set to the range of local
4627      entries in each GOT.  We can then compute the end of a GOT by
4628      adding local_gotno to global_gotno.  We reverse the list and make
4629      it circular since then we'll be able to quickly compute the
4630      beginning of a GOT, by computing the end of its predecessor.  To
4631      avoid special cases for the primary GOT, while still preserving
4632      assertions that are valid for both single- and multi-got links,
4633      we arrange for the main got struct to have the right number of
4634      global entries, but set its local_gotno such that the initial
4635      offset of the primary GOT is zero.  Remember that the primary GOT
4636      will become the last item in the circular linked list, so it
4637      points back to the master GOT.  */
4638   gg->local_gotno = -g->global_gotno;
4639   gg->global_gotno = g->global_gotno;
4640   gg->tls_gotno = 0;
4641   assign = 0;
4642   gg->next = gg;
4643
4644   do
4645     {
4646       struct mips_got_info *gn;
4647
4648       assign += htab->reserved_gotno;
4649       g->assigned_gotno = assign;
4650       g->local_gotno += assign;
4651       g->local_gotno += (pages < g->page_gotno ? pages : g->page_gotno);
4652       assign = g->local_gotno + g->global_gotno + g->tls_gotno;
4653
4654       /* Take g out of the direct list, and push it onto the reversed
4655          list that gg points to.  g->next is guaranteed to be nonnull after
4656          this operation, as required by mips_elf_initialize_tls_index. */
4657       gn = g->next;
4658       g->next = gg->next;
4659       gg->next = g;
4660
4661       /* Set up any TLS entries.  We always place the TLS entries after
4662          all non-TLS entries.  */
4663       g->tls_assigned_gotno = g->local_gotno + g->global_gotno;
4664       tga.g = g;
4665       tga.value = MIPS_ELF_GOT_SIZE (abfd);
4666       htab_traverse (g->got_entries, mips_elf_initialize_tls_index, &tga);
4667       if (!tga.g)
4668         return FALSE;
4669       BFD_ASSERT (g->tls_assigned_gotno == assign);
4670
4671       /* Move onto the next GOT.  It will be a secondary GOT if nonull.  */
4672       g = gn;
4673
4674       /* Forbid global symbols in every non-primary GOT from having
4675          lazy-binding stubs.  */
4676       if (g)
4677         htab_traverse (g->got_entries, mips_elf_forbid_lazy_stubs, info);
4678     }
4679   while (g);
4680
4681   got->size = assign * MIPS_ELF_GOT_SIZE (abfd);
4682
4683   needed_relocs = 0;
4684   for (g = gg->next; g && g->next != gg; g = g->next)
4685     {
4686       unsigned int save_assign;
4687
4688       /* Assign offsets to global GOT entries and count how many
4689          relocations they need.  */
4690       save_assign = g->assigned_gotno;
4691       g->assigned_gotno = g->local_gotno;
4692       tga.info = info;
4693       tga.value = MIPS_ELF_GOT_SIZE (abfd);
4694       tga.g = g;
4695       htab_traverse (g->got_entries, mips_elf_set_global_gotidx, &tga);
4696       if (!tga.g)
4697         return FALSE;
4698       BFD_ASSERT (g->assigned_gotno == g->local_gotno + g->global_gotno);
4699       g->assigned_gotno = save_assign;
4700
4701       if (info->shared)
4702         {
4703           g->relocs += g->local_gotno - g->assigned_gotno;
4704           BFD_ASSERT (g->assigned_gotno == g->next->local_gotno
4705                       + g->next->global_gotno
4706                       + g->next->tls_gotno
4707                       + htab->reserved_gotno);
4708         }
4709       needed_relocs += g->relocs;
4710     }
4711   needed_relocs += g->relocs;
4712
4713   if (needed_relocs)
4714     mips_elf_allocate_dynamic_relocations (dynobj, info,
4715                                            needed_relocs);
4716
4717   return TRUE;
4718 }
4719
4720 \f
4721 /* Returns the first relocation of type r_type found, beginning with
4722    RELOCATION.  RELEND is one-past-the-end of the relocation table.  */
4723
4724 static const Elf_Internal_Rela *
4725 mips_elf_next_relocation (bfd *abfd ATTRIBUTE_UNUSED, unsigned int r_type,
4726                           const Elf_Internal_Rela *relocation,
4727                           const Elf_Internal_Rela *relend)
4728 {
4729   unsigned long r_symndx = ELF_R_SYM (abfd, relocation->r_info);
4730
4731   while (relocation < relend)
4732     {
4733       if (ELF_R_TYPE (abfd, relocation->r_info) == r_type
4734           && ELF_R_SYM (abfd, relocation->r_info) == r_symndx)
4735         return relocation;
4736
4737       ++relocation;
4738     }
4739
4740   /* We didn't find it.  */
4741   return NULL;
4742 }
4743
4744 /* Return whether an input relocation is against a local symbol.  */
4745
4746 static bfd_boolean
4747 mips_elf_local_relocation_p (bfd *input_bfd,
4748                              const Elf_Internal_Rela *relocation,
4749                              asection **local_sections)
4750 {
4751   unsigned long r_symndx;
4752   Elf_Internal_Shdr *symtab_hdr;
4753   size_t extsymoff;
4754
4755   r_symndx = ELF_R_SYM (input_bfd, relocation->r_info);
4756   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
4757   extsymoff = (elf_bad_symtab (input_bfd)) ? 0 : symtab_hdr->sh_info;
4758
4759   if (r_symndx < extsymoff)
4760     return TRUE;
4761   if (elf_bad_symtab (input_bfd) && local_sections[r_symndx] != NULL)
4762     return TRUE;
4763
4764   return FALSE;
4765 }
4766 \f
4767 /* Sign-extend VALUE, which has the indicated number of BITS.  */
4768
4769 bfd_vma
4770 _bfd_mips_elf_sign_extend (bfd_vma value, int bits)
4771 {
4772   if (value & ((bfd_vma) 1 << (bits - 1)))
4773     /* VALUE is negative.  */
4774     value |= ((bfd_vma) - 1) << bits;
4775
4776   return value;
4777 }
4778
4779 /* Return non-zero if the indicated VALUE has overflowed the maximum
4780    range expressible by a signed number with the indicated number of
4781    BITS.  */
4782
4783 static bfd_boolean
4784 mips_elf_overflow_p (bfd_vma value, int bits)
4785 {
4786   bfd_signed_vma svalue = (bfd_signed_vma) value;
4787
4788   if (svalue > (1 << (bits - 1)) - 1)
4789     /* The value is too big.  */
4790     return TRUE;
4791   else if (svalue < -(1 << (bits - 1)))
4792     /* The value is too small.  */
4793     return TRUE;
4794
4795   /* All is well.  */
4796   return FALSE;
4797 }
4798
4799 /* Calculate the %high function.  */
4800
4801 static bfd_vma
4802 mips_elf_high (bfd_vma value)
4803 {
4804   return ((value + (bfd_vma) 0x8000) >> 16) & 0xffff;
4805 }
4806
4807 /* Calculate the %higher function.  */
4808
4809 static bfd_vma
4810 mips_elf_higher (bfd_vma value ATTRIBUTE_UNUSED)
4811 {
4812 #ifdef BFD64
4813   return ((value + (bfd_vma) 0x80008000) >> 32) & 0xffff;
4814 #else
4815   abort ();
4816   return MINUS_ONE;
4817 #endif
4818 }
4819
4820 /* Calculate the %highest function.  */
4821
4822 static bfd_vma
4823 mips_elf_highest (bfd_vma value ATTRIBUTE_UNUSED)
4824 {
4825 #ifdef BFD64
4826   return ((value + (((bfd_vma) 0x8000 << 32) | 0x80008000)) >> 48) & 0xffff;
4827 #else
4828   abort ();
4829   return MINUS_ONE;
4830 #endif
4831 }
4832 \f
4833 /* Create the .compact_rel section.  */
4834
4835 static bfd_boolean
4836 mips_elf_create_compact_rel_section
4837   (bfd *abfd, struct bfd_link_info *info ATTRIBUTE_UNUSED)
4838 {
4839   flagword flags;
4840   register asection *s;
4841
4842   if (bfd_get_linker_section (abfd, ".compact_rel") == NULL)
4843     {
4844       flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED
4845                | SEC_READONLY);
4846
4847       s = bfd_make_section_anyway_with_flags (abfd, ".compact_rel", flags);
4848       if (s == NULL
4849           || ! bfd_set_section_alignment (abfd, s,
4850                                           MIPS_ELF_LOG_FILE_ALIGN (abfd)))
4851         return FALSE;
4852
4853       s->size = sizeof (Elf32_External_compact_rel);
4854     }
4855
4856   return TRUE;
4857 }
4858
4859 /* Create the .got section to hold the global offset table.  */
4860
4861 static bfd_boolean
4862 mips_elf_create_got_section (bfd *abfd, struct bfd_link_info *info)
4863 {
4864   flagword flags;
4865   register asection *s;
4866   struct elf_link_hash_entry *h;
4867   struct bfd_link_hash_entry *bh;
4868   struct mips_elf_link_hash_table *htab;
4869
4870   htab = mips_elf_hash_table (info);
4871   BFD_ASSERT (htab != NULL);
4872
4873   /* This function may be called more than once.  */
4874   if (htab->sgot)
4875     return TRUE;
4876
4877   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
4878            | SEC_LINKER_CREATED);
4879
4880   /* We have to use an alignment of 2**4 here because this is hardcoded
4881      in the function stub generation and in the linker script.  */
4882   s = bfd_make_section_anyway_with_flags (abfd, ".got", flags);
4883   if (s == NULL
4884       || ! bfd_set_section_alignment (abfd, s, 4))
4885     return FALSE;
4886   htab->sgot = s;
4887
4888   /* Define the symbol _GLOBAL_OFFSET_TABLE_.  We don't do this in the
4889      linker script because we don't want to define the symbol if we
4890      are not creating a global offset table.  */
4891   bh = NULL;
4892   if (! (_bfd_generic_link_add_one_symbol
4893          (info, abfd, "_GLOBAL_OFFSET_TABLE_", BSF_GLOBAL, s,
4894           0, NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
4895     return FALSE;
4896
4897   h = (struct elf_link_hash_entry *) bh;
4898   h->non_elf = 0;
4899   h->def_regular = 1;
4900   h->type = STT_OBJECT;
4901   elf_hash_table (info)->hgot = h;
4902
4903   if (info->shared
4904       && ! bfd_elf_link_record_dynamic_symbol (info, h))
4905     return FALSE;
4906
4907   htab->got_info = mips_elf_create_got_info (abfd, TRUE);
4908   mips_elf_section_data (s)->elf.this_hdr.sh_flags
4909     |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL;
4910
4911   /* We also need a .got.plt section when generating PLTs.  */
4912   s = bfd_make_section_anyway_with_flags (abfd, ".got.plt",
4913                                           SEC_ALLOC | SEC_LOAD
4914                                           | SEC_HAS_CONTENTS
4915                                           | SEC_IN_MEMORY
4916                                           | SEC_LINKER_CREATED);
4917   if (s == NULL)
4918     return FALSE;
4919   htab->sgotplt = s;
4920
4921   return TRUE;
4922 }
4923 \f
4924 /* Return true if H refers to the special VxWorks __GOTT_BASE__ or
4925    __GOTT_INDEX__ symbols.  These symbols are only special for
4926    shared objects; they are not used in executables.  */
4927
4928 static bfd_boolean
4929 is_gott_symbol (struct bfd_link_info *info, struct elf_link_hash_entry *h)
4930 {
4931   return (mips_elf_hash_table (info)->is_vxworks
4932           && info->shared
4933           && (strcmp (h->root.root.string, "__GOTT_BASE__") == 0
4934               || strcmp (h->root.root.string, "__GOTT_INDEX__") == 0));
4935 }
4936
4937 /* Return TRUE if a relocation of type R_TYPE from INPUT_BFD might
4938    require an la25 stub.  See also mips_elf_local_pic_function_p,
4939    which determines whether the destination function ever requires a
4940    stub.  */
4941
4942 static bfd_boolean
4943 mips_elf_relocation_needs_la25_stub (bfd *input_bfd, int r_type,
4944                                      bfd_boolean target_is_16_bit_code_p)
4945 {
4946   /* We specifically ignore branches and jumps from EF_PIC objects,
4947      where the onus is on the compiler or programmer to perform any
4948      necessary initialization of $25.  Sometimes such initialization
4949      is unnecessary; for example, -mno-shared functions do not use
4950      the incoming value of $25, and may therefore be called directly.  */
4951   if (PIC_OBJECT_P (input_bfd))
4952     return FALSE;
4953
4954   switch (r_type)
4955     {
4956     case R_MIPS_26:
4957     case R_MIPS_PC16:
4958     case R_MICROMIPS_26_S1:
4959     case R_MICROMIPS_PC7_S1:
4960     case R_MICROMIPS_PC10_S1:
4961     case R_MICROMIPS_PC16_S1:
4962     case R_MICROMIPS_PC23_S2:
4963       return TRUE;
4964
4965     case R_MIPS16_26:
4966       return !target_is_16_bit_code_p;
4967
4968     default:
4969       return FALSE;
4970     }
4971 }
4972 \f
4973 /* Calculate the value produced by the RELOCATION (which comes from
4974    the INPUT_BFD).  The ADDEND is the addend to use for this
4975    RELOCATION; RELOCATION->R_ADDEND is ignored.
4976
4977    The result of the relocation calculation is stored in VALUEP.
4978    On exit, set *CROSS_MODE_JUMP_P to true if the relocation field
4979    is a MIPS16 or microMIPS jump to standard MIPS code, or vice versa.
4980
4981    This function returns bfd_reloc_continue if the caller need take no
4982    further action regarding this relocation, bfd_reloc_notsupported if
4983    something goes dramatically wrong, bfd_reloc_overflow if an
4984    overflow occurs, and bfd_reloc_ok to indicate success.  */
4985
4986 static bfd_reloc_status_type
4987 mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
4988                                asection *input_section,
4989                                struct bfd_link_info *info,
4990                                const Elf_Internal_Rela *relocation,
4991                                bfd_vma addend, reloc_howto_type *howto,
4992                                Elf_Internal_Sym *local_syms,
4993                                asection **local_sections, bfd_vma *valuep,
4994                                const char **namep,
4995                                bfd_boolean *cross_mode_jump_p,
4996                                bfd_boolean save_addend)
4997 {
4998   /* The eventual value we will return.  */
4999   bfd_vma value;
5000   /* The address of the symbol against which the relocation is
5001      occurring.  */
5002   bfd_vma symbol = 0;
5003   /* The final GP value to be used for the relocatable, executable, or
5004      shared object file being produced.  */
5005   bfd_vma gp;
5006   /* The place (section offset or address) of the storage unit being
5007      relocated.  */
5008   bfd_vma p;
5009   /* The value of GP used to create the relocatable object.  */
5010   bfd_vma gp0;
5011   /* The offset into the global offset table at which the address of
5012      the relocation entry symbol, adjusted by the addend, resides
5013      during execution.  */
5014   bfd_vma g = MINUS_ONE;
5015   /* The section in which the symbol referenced by the relocation is
5016      located.  */
5017   asection *sec = NULL;
5018   struct mips_elf_link_hash_entry *h = NULL;
5019   /* TRUE if the symbol referred to by this relocation is a local
5020      symbol.  */
5021   bfd_boolean local_p, was_local_p;
5022   /* TRUE if the symbol referred to by this relocation is "_gp_disp".  */
5023   bfd_boolean gp_disp_p = FALSE;
5024   /* TRUE if the symbol referred to by this relocation is
5025      "__gnu_local_gp".  */
5026   bfd_boolean gnu_local_gp_p = FALSE;
5027   Elf_Internal_Shdr *symtab_hdr;
5028   size_t extsymoff;
5029   unsigned long r_symndx;
5030   int r_type;
5031   /* TRUE if overflow occurred during the calculation of the
5032      relocation value.  */
5033   bfd_boolean overflowed_p;
5034   /* TRUE if this relocation refers to a MIPS16 function.  */
5035   bfd_boolean target_is_16_bit_code_p = FALSE;
5036   bfd_boolean target_is_micromips_code_p = FALSE;
5037   struct mips_elf_link_hash_table *htab;
5038   bfd *dynobj;
5039
5040   dynobj = elf_hash_table (info)->dynobj;
5041   htab = mips_elf_hash_table (info);
5042   BFD_ASSERT (htab != NULL);
5043
5044   /* Parse the relocation.  */
5045   r_symndx = ELF_R_SYM (input_bfd, relocation->r_info);
5046   r_type = ELF_R_TYPE (input_bfd, relocation->r_info);
5047   p = (input_section->output_section->vma
5048        + input_section->output_offset
5049        + relocation->r_offset);
5050
5051   /* Assume that there will be no overflow.  */
5052   overflowed_p = FALSE;
5053
5054   /* Figure out whether or not the symbol is local, and get the offset
5055      used in the array of hash table entries.  */
5056   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
5057   local_p = mips_elf_local_relocation_p (input_bfd, relocation,
5058                                          local_sections);
5059   was_local_p = local_p;
5060   if (! elf_bad_symtab (input_bfd))
5061     extsymoff = symtab_hdr->sh_info;
5062   else
5063     {
5064       /* The symbol table does not follow the rule that local symbols
5065          must come before globals.  */
5066       extsymoff = 0;
5067     }
5068
5069   /* Figure out the value of the symbol.  */
5070   if (local_p)
5071     {
5072       Elf_Internal_Sym *sym;
5073
5074       sym = local_syms + r_symndx;
5075       sec = local_sections[r_symndx];
5076
5077       symbol = sec->output_section->vma + sec->output_offset;
5078       if (ELF_ST_TYPE (sym->st_info) != STT_SECTION
5079           || (sec->flags & SEC_MERGE))
5080         symbol += sym->st_value;
5081       if ((sec->flags & SEC_MERGE)
5082           && ELF_ST_TYPE (sym->st_info) == STT_SECTION)
5083         {
5084           addend = _bfd_elf_rel_local_sym (abfd, sym, &sec, addend);
5085           addend -= symbol;
5086           addend += sec->output_section->vma + sec->output_offset;
5087         }
5088
5089       /* MIPS16/microMIPS text labels should be treated as odd.  */
5090       if (ELF_ST_IS_COMPRESSED (sym->st_other))
5091         ++symbol;
5092
5093       /* Record the name of this symbol, for our caller.  */
5094       *namep = bfd_elf_string_from_elf_section (input_bfd,
5095                                                 symtab_hdr->sh_link,
5096                                                 sym->st_name);
5097       if (*namep == '\0')
5098         *namep = bfd_section_name (input_bfd, sec);
5099
5100       target_is_16_bit_code_p = ELF_ST_IS_MIPS16 (sym->st_other);
5101       target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (sym->st_other);
5102     }
5103   else
5104     {
5105       /* ??? Could we use RELOC_FOR_GLOBAL_SYMBOL here ?  */
5106
5107       /* For global symbols we look up the symbol in the hash-table.  */
5108       h = ((struct mips_elf_link_hash_entry *)
5109            elf_sym_hashes (input_bfd) [r_symndx - extsymoff]);
5110       /* Find the real hash-table entry for this symbol.  */
5111       while (h->root.root.type == bfd_link_hash_indirect
5112              || h->root.root.type == bfd_link_hash_warning)
5113         h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
5114
5115       /* Record the name of this symbol, for our caller.  */
5116       *namep = h->root.root.root.string;
5117
5118       /* See if this is the special _gp_disp symbol.  Note that such a
5119          symbol must always be a global symbol.  */
5120       if (strcmp (*namep, "_gp_disp") == 0
5121           && ! NEWABI_P (input_bfd))
5122         {
5123           /* Relocations against _gp_disp are permitted only with
5124              R_MIPS_HI16 and R_MIPS_LO16 relocations.  */
5125           if (!hi16_reloc_p (r_type) && !lo16_reloc_p (r_type))
5126             return bfd_reloc_notsupported;
5127
5128           gp_disp_p = TRUE;
5129         }
5130       /* See if this is the special _gp symbol.  Note that such a
5131          symbol must always be a global symbol.  */
5132       else if (strcmp (*namep, "__gnu_local_gp") == 0)
5133         gnu_local_gp_p = TRUE;
5134
5135
5136       /* If this symbol is defined, calculate its address.  Note that
5137          _gp_disp is a magic symbol, always implicitly defined by the
5138          linker, so it's inappropriate to check to see whether or not
5139          its defined.  */
5140       else if ((h->root.root.type == bfd_link_hash_defined
5141                 || h->root.root.type == bfd_link_hash_defweak)
5142                && h->root.root.u.def.section)
5143         {
5144           sec = h->root.root.u.def.section;
5145           if (sec->output_section)
5146             symbol = (h->root.root.u.def.value
5147                       + sec->output_section->vma
5148                       + sec->output_offset);
5149           else
5150             symbol = h->root.root.u.def.value;
5151         }
5152       else if (h->root.root.type == bfd_link_hash_undefweak)
5153         /* We allow relocations against undefined weak symbols, giving
5154            it the value zero, so that you can undefined weak functions
5155            and check to see if they exist by looking at their
5156            addresses.  */
5157         symbol = 0;
5158       else if (info->unresolved_syms_in_objects == RM_IGNORE
5159                && ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT)
5160         symbol = 0;
5161       else if (strcmp (*namep, SGI_COMPAT (input_bfd)
5162                        ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING") == 0)
5163         {
5164           /* If this is a dynamic link, we should have created a
5165              _DYNAMIC_LINK symbol or _DYNAMIC_LINKING(for normal mips) symbol
5166              in in _bfd_mips_elf_create_dynamic_sections.
5167              Otherwise, we should define the symbol with a value of 0.
5168              FIXME: It should probably get into the symbol table
5169              somehow as well.  */
5170           BFD_ASSERT (! info->shared);
5171           BFD_ASSERT (bfd_get_section_by_name (abfd, ".dynamic") == NULL);
5172           symbol = 0;
5173         }
5174       else if (ELF_MIPS_IS_OPTIONAL (h->root.other))
5175         {
5176           /* This is an optional symbol - an Irix specific extension to the
5177              ELF spec.  Ignore it for now.
5178              XXX - FIXME - there is more to the spec for OPTIONAL symbols
5179              than simply ignoring them, but we do not handle this for now.
5180              For information see the "64-bit ELF Object File Specification"
5181              which is available from here:
5182              http://techpubs.sgi.com/library/manuals/4000/007-4658-001/pdf/007-4658-001.pdf  */
5183           symbol = 0;
5184         }
5185       else if ((*info->callbacks->undefined_symbol)
5186                (info, h->root.root.root.string, input_bfd,
5187                 input_section, relocation->r_offset,
5188                 (info->unresolved_syms_in_objects == RM_GENERATE_ERROR)
5189                  || ELF_ST_VISIBILITY (h->root.other)))
5190         {
5191           return bfd_reloc_undefined;
5192         }
5193       else
5194         {
5195           return bfd_reloc_notsupported;
5196         }
5197
5198       target_is_16_bit_code_p = ELF_ST_IS_MIPS16 (h->root.other);
5199       /* If the output section is the PLT section,
5200          then the target is not microMIPS.  */
5201       target_is_micromips_code_p = (htab->splt != sec
5202                                     && ELF_ST_IS_MICROMIPS (h->root.other));
5203     }
5204
5205   /* If this is a reference to a 16-bit function with a stub, we need
5206      to redirect the relocation to the stub unless:
5207
5208      (a) the relocation is for a MIPS16 JAL;
5209
5210      (b) the relocation is for a MIPS16 PIC call, and there are no
5211          non-MIPS16 uses of the GOT slot; or
5212
5213      (c) the section allows direct references to MIPS16 functions.  */
5214   if (r_type != R_MIPS16_26
5215       && !info->relocatable
5216       && ((h != NULL
5217            && h->fn_stub != NULL
5218            && (r_type != R_MIPS16_CALL16 || h->need_fn_stub))
5219           || (local_p
5220               && elf_tdata (input_bfd)->local_stubs != NULL
5221               && elf_tdata (input_bfd)->local_stubs[r_symndx] != NULL))
5222       && !section_allows_mips16_refs_p (input_section))
5223     {
5224       /* This is a 32- or 64-bit call to a 16-bit function.  We should
5225          have already noticed that we were going to need the
5226          stub.  */
5227       if (local_p)
5228         {
5229           sec = elf_tdata (input_bfd)->local_stubs[r_symndx];
5230           value = 0;
5231         }
5232       else
5233         {
5234           BFD_ASSERT (h->need_fn_stub);
5235           if (h->la25_stub)
5236             {
5237               /* If a LA25 header for the stub itself exists, point to the
5238                  prepended LUI/ADDIU sequence.  */
5239               sec = h->la25_stub->stub_section;
5240               value = h->la25_stub->offset;
5241             }
5242           else
5243             {
5244               sec = h->fn_stub;
5245               value = 0;
5246             }
5247         }
5248
5249       symbol = sec->output_section->vma + sec->output_offset + value;
5250       /* The target is 16-bit, but the stub isn't.  */
5251       target_is_16_bit_code_p = FALSE;
5252     }
5253   /* If this is a 16-bit call to a 32- or 64-bit function with a stub, we
5254      need to redirect the call to the stub.  Note that we specifically
5255      exclude R_MIPS16_CALL16 from this behavior; indirect calls should
5256      use an indirect stub instead.  */
5257   else if (r_type == R_MIPS16_26 && !info->relocatable
5258            && ((h != NULL && (h->call_stub != NULL || h->call_fp_stub != NULL))
5259                || (local_p
5260                    && elf_tdata (input_bfd)->local_call_stubs != NULL
5261                    && elf_tdata (input_bfd)->local_call_stubs[r_symndx] != NULL))
5262            && !target_is_16_bit_code_p)
5263     {
5264       if (local_p)
5265         sec = elf_tdata (input_bfd)->local_call_stubs[r_symndx];
5266       else
5267         {
5268           /* If both call_stub and call_fp_stub are defined, we can figure
5269              out which one to use by checking which one appears in the input
5270              file.  */
5271           if (h->call_stub != NULL && h->call_fp_stub != NULL)
5272             {
5273               asection *o;
5274
5275               sec = NULL;
5276               for (o = input_bfd->sections; o != NULL; o = o->next)
5277                 {
5278                   if (CALL_FP_STUB_P (bfd_get_section_name (input_bfd, o)))
5279                     {
5280                       sec = h->call_fp_stub;
5281                       break;
5282                     }
5283                 }
5284               if (sec == NULL)
5285                 sec = h->call_stub;
5286             }
5287           else if (h->call_stub != NULL)
5288             sec = h->call_stub;
5289           else
5290             sec = h->call_fp_stub;
5291         }
5292
5293       BFD_ASSERT (sec->size > 0);
5294       symbol = sec->output_section->vma + sec->output_offset;
5295     }
5296   /* If this is a direct call to a PIC function, redirect to the
5297      non-PIC stub.  */
5298   else if (h != NULL && h->la25_stub
5299            && mips_elf_relocation_needs_la25_stub (input_bfd, r_type,
5300                                                    target_is_16_bit_code_p))
5301     symbol = (h->la25_stub->stub_section->output_section->vma
5302               + h->la25_stub->stub_section->output_offset
5303               + h->la25_stub->offset);
5304
5305   /* Make sure MIPS16 and microMIPS are not used together.  */
5306   if ((r_type == R_MIPS16_26 && target_is_micromips_code_p)
5307       || (micromips_branch_reloc_p (r_type) && target_is_16_bit_code_p))
5308    {
5309       (*_bfd_error_handler)
5310         (_("MIPS16 and microMIPS functions cannot call each other"));
5311       return bfd_reloc_notsupported;
5312    }
5313
5314   /* Calls from 16-bit code to 32-bit code and vice versa require the
5315      mode change.  However, we can ignore calls to undefined weak symbols,
5316      which should never be executed at runtime.  This exception is important
5317      because the assembly writer may have "known" that any definition of the
5318      symbol would be 16-bit code, and that direct jumps were therefore
5319      acceptable.  */
5320   *cross_mode_jump_p = (!info->relocatable
5321                         && !(h && h->root.root.type == bfd_link_hash_undefweak)
5322                         && ((r_type == R_MIPS16_26 && !target_is_16_bit_code_p)
5323                             || (r_type == R_MICROMIPS_26_S1
5324                                 && !target_is_micromips_code_p)
5325                             || ((r_type == R_MIPS_26 || r_type == R_MIPS_JALR)
5326                                 && (target_is_16_bit_code_p
5327                                     || target_is_micromips_code_p))));
5328
5329   local_p = (h == NULL
5330              || (h->got_only_for_calls
5331                  ? SYMBOL_CALLS_LOCAL (info, &h->root)
5332                  : SYMBOL_REFERENCES_LOCAL (info, &h->root)));
5333
5334   gp0 = _bfd_get_gp_value (input_bfd);
5335   gp = _bfd_get_gp_value (abfd);
5336   if (htab->got_info)
5337     gp += mips_elf_adjust_gp (abfd, htab->got_info, input_bfd);
5338
5339   if (gnu_local_gp_p)
5340     symbol = gp;
5341
5342   /* Global R_MIPS_GOT_PAGE/R_MICROMIPS_GOT_PAGE relocations are equivalent
5343      to R_MIPS_GOT_DISP/R_MICROMIPS_GOT_DISP.  The addend is applied by the
5344      corresponding R_MIPS_GOT_OFST/R_MICROMIPS_GOT_OFST.  */
5345   if (got_page_reloc_p (r_type) && !local_p)
5346     {
5347       r_type = (micromips_reloc_p (r_type)
5348                 ? R_MICROMIPS_GOT_DISP : R_MIPS_GOT_DISP);
5349       addend = 0;
5350     }
5351
5352   /* If we haven't already determined the GOT offset, and we're going
5353      to need it, get it now.  */
5354   switch (r_type)
5355     {
5356     case R_MIPS16_CALL16:
5357     case R_MIPS16_GOT16:
5358     case R_MIPS_CALL16:
5359     case R_MIPS_GOT16:
5360     case R_MIPS_GOT_DISP:
5361     case R_MIPS_GOT_HI16:
5362     case R_MIPS_CALL_HI16:
5363     case R_MIPS_GOT_LO16:
5364     case R_MIPS_CALL_LO16:
5365     case R_MICROMIPS_CALL16:
5366     case R_MICROMIPS_GOT16:
5367     case R_MICROMIPS_GOT_DISP:
5368     case R_MICROMIPS_GOT_HI16:
5369     case R_MICROMIPS_CALL_HI16:
5370     case R_MICROMIPS_GOT_LO16:
5371     case R_MICROMIPS_CALL_LO16:
5372     case R_MIPS_TLS_GD:
5373     case R_MIPS_TLS_GOTTPREL:
5374     case R_MIPS_TLS_LDM:
5375     case R_MIPS16_TLS_GD:
5376     case R_MIPS16_TLS_GOTTPREL:
5377     case R_MIPS16_TLS_LDM:
5378     case R_MICROMIPS_TLS_GD:
5379     case R_MICROMIPS_TLS_GOTTPREL:
5380     case R_MICROMIPS_TLS_LDM:
5381       /* Find the index into the GOT where this value is located.  */
5382       if (tls_ldm_reloc_p (r_type))
5383         {
5384           g = mips_elf_local_got_index (abfd, input_bfd, info,
5385                                         0, 0, NULL, r_type);
5386           if (g == MINUS_ONE)
5387             return bfd_reloc_outofrange;
5388         }
5389       else if (!local_p)
5390         {
5391           /* On VxWorks, CALL relocations should refer to the .got.plt
5392              entry, which is initialized to point at the PLT stub.  */
5393           if (htab->is_vxworks
5394               && (call_hi16_reloc_p (r_type)
5395                   || call_lo16_reloc_p (r_type)
5396                   || call16_reloc_p (r_type)))
5397             {
5398               BFD_ASSERT (addend == 0);
5399               BFD_ASSERT (h->root.needs_plt);
5400               g = mips_elf_gotplt_index (info, &h->root);
5401             }
5402           else
5403             {
5404               BFD_ASSERT (addend == 0);
5405               g = mips_elf_global_got_index (dynobj, input_bfd,
5406                                              &h->root, r_type, info);
5407               if (!TLS_RELOC_P (r_type)
5408                   && !elf_hash_table (info)->dynamic_sections_created)
5409                 /* This is a static link.  We must initialize the GOT entry.  */
5410                 MIPS_ELF_PUT_WORD (dynobj, symbol, htab->sgot->contents + g);
5411             }
5412         }
5413       else if (!htab->is_vxworks
5414                && (call16_reloc_p (r_type) || got16_reloc_p (r_type)))
5415         /* The calculation below does not involve "g".  */
5416         break;
5417       else
5418         {
5419           g = mips_elf_local_got_index (abfd, input_bfd, info,
5420                                         symbol + addend, r_symndx, h, r_type);
5421           if (g == MINUS_ONE)
5422             return bfd_reloc_outofrange;
5423         }
5424
5425       /* Convert GOT indices to actual offsets.  */
5426       g = mips_elf_got_offset_from_index (info, abfd, input_bfd, g);
5427       break;
5428     }
5429
5430   /* Relocations against the VxWorks __GOTT_BASE__ and __GOTT_INDEX__
5431      symbols are resolved by the loader.  Add them to .rela.dyn.  */
5432   if (h != NULL && is_gott_symbol (info, &h->root))
5433     {
5434       Elf_Internal_Rela outrel;
5435       bfd_byte *loc;
5436       asection *s;
5437
5438       s = mips_elf_rel_dyn_section (info, FALSE);
5439       loc = s->contents + s->reloc_count++ * sizeof (Elf32_External_Rela);
5440
5441       outrel.r_offset = (input_section->output_section->vma
5442                          + input_section->output_offset
5443                          + relocation->r_offset);
5444       outrel.r_info = ELF32_R_INFO (h->root.dynindx, r_type);
5445       outrel.r_addend = addend;
5446       bfd_elf32_swap_reloca_out (abfd, &outrel, loc);
5447
5448       /* If we've written this relocation for a readonly section,
5449          we need to set DF_TEXTREL again, so that we do not delete the
5450          DT_TEXTREL tag.  */
5451       if (MIPS_ELF_READONLY_SECTION (input_section))
5452         info->flags |= DF_TEXTREL;
5453
5454       *valuep = 0;
5455       return bfd_reloc_ok;
5456     }
5457
5458   /* Figure out what kind of relocation is being performed.  */
5459   switch (r_type)
5460     {
5461     case R_MIPS_NONE:
5462       return bfd_reloc_continue;
5463
5464     case R_MIPS_16:
5465       value = symbol + _bfd_mips_elf_sign_extend (addend, 16);
5466       overflowed_p = mips_elf_overflow_p (value, 16);
5467       break;
5468
5469     case R_MIPS_32:
5470     case R_MIPS_REL32:
5471     case R_MIPS_64:
5472       if ((info->shared
5473            || (htab->root.dynamic_sections_created
5474                && h != NULL
5475                && h->root.def_dynamic
5476                && !h->root.def_regular
5477                && !h->has_static_relocs))
5478           && r_symndx != STN_UNDEF
5479           && (h == NULL
5480               || h->root.root.type != bfd_link_hash_undefweak
5481               || ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT)
5482           && (input_section->flags & SEC_ALLOC) != 0)
5483         {
5484           /* If we're creating a shared library, then we can't know
5485              where the symbol will end up.  So, we create a relocation
5486              record in the output, and leave the job up to the dynamic
5487              linker.  We must do the same for executable references to
5488              shared library symbols, unless we've decided to use copy
5489              relocs or PLTs instead.  */
5490           value = addend;
5491           if (!mips_elf_create_dynamic_relocation (abfd,
5492                                                    info,
5493                                                    relocation,
5494                                                    h,
5495                                                    sec,
5496                                                    symbol,
5497                                                    &value,
5498                                                    input_section))
5499             return bfd_reloc_undefined;
5500         }
5501       else
5502         {
5503           if (r_type != R_MIPS_REL32)
5504             value = symbol + addend;
5505           else
5506             value = addend;
5507         }
5508       value &= howto->dst_mask;
5509       break;
5510
5511     case R_MIPS_PC32:
5512       value = symbol + addend - p;
5513       value &= howto->dst_mask;
5514       break;
5515
5516     case R_MIPS16_26:
5517       /* The calculation for R_MIPS16_26 is just the same as for an
5518          R_MIPS_26.  It's only the storage of the relocated field into
5519          the output file that's different.  That's handled in
5520          mips_elf_perform_relocation.  So, we just fall through to the
5521          R_MIPS_26 case here.  */
5522     case R_MIPS_26:
5523     case R_MICROMIPS_26_S1:
5524       {
5525         unsigned int shift;
5526
5527         /* Make sure the target of JALX is word-aligned.  Bit 0 must be
5528            the correct ISA mode selector and bit 1 must be 0.  */
5529         if (*cross_mode_jump_p && (symbol & 3) != (r_type == R_MIPS_26))
5530           return bfd_reloc_outofrange;
5531
5532         /* Shift is 2, unusually, for microMIPS JALX.  */
5533         shift = (!*cross_mode_jump_p && r_type == R_MICROMIPS_26_S1) ? 1 : 2;
5534
5535         if (was_local_p)
5536           value = addend | ((p + 4) & (0xfc000000 << shift));
5537         else
5538           value = _bfd_mips_elf_sign_extend (addend, 26 + shift);
5539         value = (value + symbol) >> shift;
5540         if (!was_local_p && h->root.root.type != bfd_link_hash_undefweak)
5541           overflowed_p = (value >> 26) != ((p + 4) >> (26 + shift));
5542         value &= howto->dst_mask;
5543       }
5544       break;
5545
5546     case R_MIPS_TLS_DTPREL_HI16:
5547     case R_MIPS16_TLS_DTPREL_HI16:
5548     case R_MICROMIPS_TLS_DTPREL_HI16:
5549       value = (mips_elf_high (addend + symbol - dtprel_base (info))
5550                & howto->dst_mask);
5551       break;
5552
5553     case R_MIPS_TLS_DTPREL_LO16:
5554     case R_MIPS_TLS_DTPREL32:
5555     case R_MIPS_TLS_DTPREL64:
5556     case R_MIPS16_TLS_DTPREL_LO16:
5557     case R_MICROMIPS_TLS_DTPREL_LO16:
5558       value = (symbol + addend - dtprel_base (info)) & howto->dst_mask;
5559       break;
5560
5561     case R_MIPS_TLS_TPREL_HI16:
5562     case R_MIPS16_TLS_TPREL_HI16:
5563     case R_MICROMIPS_TLS_TPREL_HI16:
5564       value = (mips_elf_high (addend + symbol - tprel_base (info))
5565                & howto->dst_mask);
5566       break;
5567
5568     case R_MIPS_TLS_TPREL_LO16:
5569     case R_MIPS_TLS_TPREL32:
5570     case R_MIPS_TLS_TPREL64:
5571     case R_MIPS16_TLS_TPREL_LO16:
5572     case R_MICROMIPS_TLS_TPREL_LO16:
5573       value = (symbol + addend - tprel_base (info)) & howto->dst_mask;
5574       break;
5575
5576     case R_MIPS_HI16:
5577     case R_MIPS16_HI16:
5578     case R_MICROMIPS_HI16:
5579       if (!gp_disp_p)
5580         {
5581           value = mips_elf_high (addend + symbol);
5582           value &= howto->dst_mask;
5583         }
5584       else
5585         {
5586           /* For MIPS16 ABI code we generate this sequence
5587                 0: li      $v0,%hi(_gp_disp)
5588                 4: addiupc $v1,%lo(_gp_disp)
5589                 8: sll     $v0,16
5590                12: addu    $v0,$v1
5591                14: move    $gp,$v0
5592              So the offsets of hi and lo relocs are the same, but the
5593              base $pc is that used by the ADDIUPC instruction at $t9 + 4.
5594              ADDIUPC clears the low two bits of the instruction address,
5595              so the base is ($t9 + 4) & ~3.  */
5596           if (r_type == R_MIPS16_HI16)
5597             value = mips_elf_high (addend + gp - ((p + 4) & ~(bfd_vma) 0x3));
5598           /* The microMIPS .cpload sequence uses the same assembly
5599              instructions as the traditional psABI version, but the
5600              incoming $t9 has the low bit set.  */
5601           else if (r_type == R_MICROMIPS_HI16)
5602             value = mips_elf_high (addend + gp - p - 1);
5603           else
5604             value = mips_elf_high (addend + gp - p);
5605           overflowed_p = mips_elf_overflow_p (value, 16);
5606         }
5607       break;
5608
5609     case R_MIPS_LO16:
5610     case R_MIPS16_LO16:
5611     case R_MICROMIPS_LO16:
5612     case R_MICROMIPS_HI0_LO16:
5613       if (!gp_disp_p)
5614         value = (symbol + addend) & howto->dst_mask;
5615       else
5616         {
5617           /* See the comment for R_MIPS16_HI16 above for the reason
5618              for this conditional.  */
5619           if (r_type == R_MIPS16_LO16)
5620             value = addend + gp - (p & ~(bfd_vma) 0x3);
5621           else if (r_type == R_MICROMIPS_LO16
5622                    || r_type == R_MICROMIPS_HI0_LO16)
5623             value = addend + gp - p + 3;
5624           else
5625             value = addend + gp - p + 4;
5626           /* The MIPS ABI requires checking the R_MIPS_LO16 relocation
5627              for overflow.  But, on, say, IRIX5, relocations against
5628              _gp_disp are normally generated from the .cpload
5629              pseudo-op.  It generates code that normally looks like
5630              this:
5631
5632                lui    $gp,%hi(_gp_disp)
5633                addiu  $gp,$gp,%lo(_gp_disp)
5634                addu   $gp,$gp,$t9
5635
5636              Here $t9 holds the address of the function being called,
5637              as required by the MIPS ELF ABI.  The R_MIPS_LO16
5638              relocation can easily overflow in this situation, but the
5639              R_MIPS_HI16 relocation will handle the overflow.
5640              Therefore, we consider this a bug in the MIPS ABI, and do
5641              not check for overflow here.  */
5642         }
5643       break;
5644
5645     case R_MIPS_LITERAL:
5646     case R_MICROMIPS_LITERAL:
5647       /* Because we don't merge literal sections, we can handle this
5648          just like R_MIPS_GPREL16.  In the long run, we should merge
5649          shared literals, and then we will need to additional work
5650          here.  */
5651
5652       /* Fall through.  */
5653
5654     case R_MIPS16_GPREL:
5655       /* The R_MIPS16_GPREL performs the same calculation as
5656          R_MIPS_GPREL16, but stores the relocated bits in a different
5657          order.  We don't need to do anything special here; the
5658          differences are handled in mips_elf_perform_relocation.  */
5659     case R_MIPS_GPREL16:
5660     case R_MICROMIPS_GPREL7_S2:
5661     case R_MICROMIPS_GPREL16:
5662       /* Only sign-extend the addend if it was extracted from the
5663          instruction.  If the addend was separate, leave it alone,
5664          otherwise we may lose significant bits.  */
5665       if (howto->partial_inplace)
5666         addend = _bfd_mips_elf_sign_extend (addend, 16);
5667       value = symbol + addend - gp;
5668       /* If the symbol was local, any earlier relocatable links will
5669          have adjusted its addend with the gp offset, so compensate
5670          for that now.  Don't do it for symbols forced local in this
5671          link, though, since they won't have had the gp offset applied
5672          to them before.  */
5673       if (was_local_p)
5674         value += gp0;
5675       overflowed_p = mips_elf_overflow_p (value, 16);
5676       break;
5677
5678     case R_MIPS16_GOT16:
5679     case R_MIPS16_CALL16:
5680     case R_MIPS_GOT16:
5681     case R_MIPS_CALL16:
5682     case R_MICROMIPS_GOT16:
5683     case R_MICROMIPS_CALL16:
5684       /* VxWorks does not have separate local and global semantics for
5685          R_MIPS*_GOT16; every relocation evaluates to "G".  */
5686       if (!htab->is_vxworks && local_p)
5687         {
5688           value = mips_elf_got16_entry (abfd, input_bfd, info,
5689                                         symbol + addend, !was_local_p);
5690           if (value == MINUS_ONE)
5691             return bfd_reloc_outofrange;
5692           value
5693             = mips_elf_got_offset_from_index (info, abfd, input_bfd, value);
5694           overflowed_p = mips_elf_overflow_p (value, 16);
5695           break;
5696         }
5697
5698       /* Fall through.  */
5699
5700     case R_MIPS_TLS_GD:
5701     case R_MIPS_TLS_GOTTPREL:
5702     case R_MIPS_TLS_LDM:
5703     case R_MIPS_GOT_DISP:
5704     case R_MIPS16_TLS_GD:
5705     case R_MIPS16_TLS_GOTTPREL:
5706     case R_MIPS16_TLS_LDM:
5707     case R_MICROMIPS_TLS_GD:
5708     case R_MICROMIPS_TLS_GOTTPREL:
5709     case R_MICROMIPS_TLS_LDM:
5710     case R_MICROMIPS_GOT_DISP:
5711       value = g;
5712       overflowed_p = mips_elf_overflow_p (value, 16);
5713       break;
5714
5715     case R_MIPS_GPREL32:
5716       value = (addend + symbol + gp0 - gp);
5717       if (!save_addend)
5718         value &= howto->dst_mask;
5719       break;
5720
5721     case R_MIPS_PC16:
5722     case R_MIPS_GNU_REL16_S2:
5723       value = symbol + _bfd_mips_elf_sign_extend (addend, 18) - p;
5724       overflowed_p = mips_elf_overflow_p (value, 18);
5725       value >>= howto->rightshift;
5726       value &= howto->dst_mask;
5727       break;
5728
5729     case R_MICROMIPS_PC7_S1:
5730       value = symbol + _bfd_mips_elf_sign_extend (addend, 8) - p;
5731       overflowed_p = mips_elf_overflow_p (value, 8);
5732       value >>= howto->rightshift;
5733       value &= howto->dst_mask;
5734       break;
5735
5736     case R_MICROMIPS_PC10_S1:
5737       value = symbol + _bfd_mips_elf_sign_extend (addend, 11) - p;
5738       overflowed_p = mips_elf_overflow_p (value, 11);
5739       value >>= howto->rightshift;
5740       value &= howto->dst_mask;
5741       break;
5742
5743     case R_MICROMIPS_PC16_S1:
5744       value = symbol + _bfd_mips_elf_sign_extend (addend, 17) - p;
5745       overflowed_p = mips_elf_overflow_p (value, 17);
5746       value >>= howto->rightshift;
5747       value &= howto->dst_mask;
5748       break;
5749
5750     case R_MICROMIPS_PC23_S2:
5751       value = symbol + _bfd_mips_elf_sign_extend (addend, 25) - ((p | 3) ^ 3);
5752       overflowed_p = mips_elf_overflow_p (value, 25);
5753       value >>= howto->rightshift;
5754       value &= howto->dst_mask;
5755       break;
5756
5757     case R_MIPS_GOT_HI16:
5758     case R_MIPS_CALL_HI16:
5759     case R_MICROMIPS_GOT_HI16:
5760     case R_MICROMIPS_CALL_HI16:
5761       /* We're allowed to handle these two relocations identically.
5762          The dynamic linker is allowed to handle the CALL relocations
5763          differently by creating a lazy evaluation stub.  */
5764       value = g;
5765       value = mips_elf_high (value);
5766       value &= howto->dst_mask;
5767       break;
5768
5769     case R_MIPS_GOT_LO16:
5770     case R_MIPS_CALL_LO16:
5771     case R_MICROMIPS_GOT_LO16:
5772     case R_MICROMIPS_CALL_LO16:
5773       value = g & howto->dst_mask;
5774       break;
5775
5776     case R_MIPS_GOT_PAGE:
5777     case R_MICROMIPS_GOT_PAGE:
5778       value = mips_elf_got_page (abfd, input_bfd, info, symbol + addend, NULL);
5779       if (value == MINUS_ONE)
5780         return bfd_reloc_outofrange;
5781       value = mips_elf_got_offset_from_index (info, abfd, input_bfd, value);
5782       overflowed_p = mips_elf_overflow_p (value, 16);
5783       break;
5784
5785     case R_MIPS_GOT_OFST:
5786     case R_MICROMIPS_GOT_OFST:
5787       if (local_p)
5788         mips_elf_got_page (abfd, input_bfd, info, symbol + addend, &value);
5789       else
5790         value = addend;
5791       overflowed_p = mips_elf_overflow_p (value, 16);
5792       break;
5793
5794     case R_MIPS_SUB:
5795     case R_MICROMIPS_SUB:
5796       value = symbol - addend;
5797       value &= howto->dst_mask;
5798       break;
5799
5800     case R_MIPS_HIGHER:
5801     case R_MICROMIPS_HIGHER:
5802       value = mips_elf_higher (addend + symbol);
5803       value &= howto->dst_mask;
5804       break;
5805
5806     case R_MIPS_HIGHEST:
5807     case R_MICROMIPS_HIGHEST:
5808       value = mips_elf_highest (addend + symbol);
5809       value &= howto->dst_mask;
5810       break;
5811
5812     case R_MIPS_SCN_DISP:
5813     case R_MICROMIPS_SCN_DISP:
5814       value = symbol + addend - sec->output_offset;
5815       value &= howto->dst_mask;
5816       break;
5817
5818     case R_MIPS_JALR:
5819     case R_MICROMIPS_JALR:
5820       /* This relocation is only a hint.  In some cases, we optimize
5821          it into a bal instruction.  But we don't try to optimize
5822          when the symbol does not resolve locally.  */
5823       if (h != NULL && !SYMBOL_CALLS_LOCAL (info, &h->root))
5824         return bfd_reloc_continue;
5825       value = symbol + addend;
5826       break;
5827
5828     case R_MIPS_PJUMP:
5829     case R_MIPS_GNU_VTINHERIT:
5830     case R_MIPS_GNU_VTENTRY:
5831       /* We don't do anything with these at present.  */
5832       return bfd_reloc_continue;
5833
5834     default:
5835       /* An unrecognized relocation type.  */
5836       return bfd_reloc_notsupported;
5837     }
5838
5839   /* Store the VALUE for our caller.  */
5840   *valuep = value;
5841   return overflowed_p ? bfd_reloc_overflow : bfd_reloc_ok;
5842 }
5843
5844 /* Obtain the field relocated by RELOCATION.  */
5845
5846 static bfd_vma
5847 mips_elf_obtain_contents (reloc_howto_type *howto,
5848                           const Elf_Internal_Rela *relocation,
5849                           bfd *input_bfd, bfd_byte *contents)
5850 {
5851   bfd_vma x;
5852   bfd_byte *location = contents + relocation->r_offset;
5853
5854   /* Obtain the bytes.  */
5855   x = bfd_get ((8 * bfd_get_reloc_size (howto)), input_bfd, location);
5856
5857   return x;
5858 }
5859
5860 /* It has been determined that the result of the RELOCATION is the
5861    VALUE.  Use HOWTO to place VALUE into the output file at the
5862    appropriate position.  The SECTION is the section to which the
5863    relocation applies.
5864    CROSS_MODE_JUMP_P is true if the relocation field
5865    is a MIPS16 or microMIPS jump to standard MIPS code, or vice versa.
5866
5867    Returns FALSE if anything goes wrong.  */
5868
5869 static bfd_boolean
5870 mips_elf_perform_relocation (struct bfd_link_info *info,
5871                              reloc_howto_type *howto,
5872                              const Elf_Internal_Rela *relocation,
5873                              bfd_vma value, bfd *input_bfd,
5874                              asection *input_section, bfd_byte *contents,
5875                              bfd_boolean cross_mode_jump_p)
5876 {
5877   bfd_vma x;
5878   bfd_byte *location;
5879   int r_type = ELF_R_TYPE (input_bfd, relocation->r_info);
5880
5881   /* Figure out where the relocation is occurring.  */
5882   location = contents + relocation->r_offset;
5883
5884   _bfd_mips_elf_reloc_unshuffle (input_bfd, r_type, FALSE, location);
5885
5886   /* Obtain the current value.  */
5887   x = mips_elf_obtain_contents (howto, relocation, input_bfd, contents);
5888
5889   /* Clear the field we are setting.  */
5890   x &= ~howto->dst_mask;
5891
5892   /* Set the field.  */
5893   x |= (value & howto->dst_mask);
5894
5895   /* If required, turn JAL into JALX.  */
5896   if (cross_mode_jump_p && jal_reloc_p (r_type))
5897     {
5898       bfd_boolean ok;
5899       bfd_vma opcode = x >> 26;
5900       bfd_vma jalx_opcode;
5901
5902       /* Check to see if the opcode is already JAL or JALX.  */
5903       if (r_type == R_MIPS16_26)
5904         {
5905           ok = ((opcode == 0x6) || (opcode == 0x7));
5906           jalx_opcode = 0x7;
5907         }
5908       else if (r_type == R_MICROMIPS_26_S1)
5909         {
5910           ok = ((opcode == 0x3d) || (opcode == 0x3c));
5911           jalx_opcode = 0x3c;
5912         }
5913       else
5914         {
5915           ok = ((opcode == 0x3) || (opcode == 0x1d));
5916           jalx_opcode = 0x1d;
5917         }
5918
5919       /* If the opcode is not JAL or JALX, there's a problem.  We cannot
5920          convert J or JALS to JALX.  */
5921       if (!ok)
5922         {
5923           (*_bfd_error_handler)
5924             (_("%B: %A+0x%lx: Unsupported jump between ISA modes; consider recompiling with interlinking enabled."),
5925              input_bfd,
5926              input_section,
5927              (unsigned long) relocation->r_offset);
5928           bfd_set_error (bfd_error_bad_value);
5929           return FALSE;
5930         }
5931
5932       /* Make this the JALX opcode.  */
5933       x = (x & ~(0x3f << 26)) | (jalx_opcode << 26);
5934     }
5935
5936   /* Try converting JAL to BAL and J(AL)R to B(AL), if the target is in
5937      range.  */
5938   if (!info->relocatable
5939       && !cross_mode_jump_p
5940       && ((JAL_TO_BAL_P (input_bfd)
5941            && r_type == R_MIPS_26
5942            && (x >> 26) == 0x3)         /* jal addr */
5943           || (JALR_TO_BAL_P (input_bfd)
5944               && r_type == R_MIPS_JALR
5945               && x == 0x0320f809)       /* jalr t9 */
5946           || (JR_TO_B_P (input_bfd)
5947               && r_type == R_MIPS_JALR
5948               && x == 0x03200008)))     /* jr t9 */
5949     {
5950       bfd_vma addr;
5951       bfd_vma dest;
5952       bfd_signed_vma off;
5953
5954       addr = (input_section->output_section->vma
5955               + input_section->output_offset
5956               + relocation->r_offset
5957               + 4);
5958       if (r_type == R_MIPS_26)
5959         dest = (value << 2) | ((addr >> 28) << 28);
5960       else
5961         dest = value;
5962       off = dest - addr;
5963       if (off <= 0x1ffff && off >= -0x20000)
5964         {
5965           if (x == 0x03200008)  /* jr t9 */
5966             x = 0x10000000 | (((bfd_vma) off >> 2) & 0xffff);   /* b addr */
5967           else
5968             x = 0x04110000 | (((bfd_vma) off >> 2) & 0xffff);   /* bal addr */
5969         }
5970     }
5971
5972   /* Put the value into the output.  */
5973   bfd_put (8 * bfd_get_reloc_size (howto), input_bfd, x, location);
5974
5975   _bfd_mips_elf_reloc_shuffle (input_bfd, r_type, !info->relocatable,
5976                                location);
5977
5978   return TRUE;
5979 }
5980 \f
5981 /* Create a rel.dyn relocation for the dynamic linker to resolve.  REL
5982    is the original relocation, which is now being transformed into a
5983    dynamic relocation.  The ADDENDP is adjusted if necessary; the
5984    caller should store the result in place of the original addend.  */
5985
5986 static bfd_boolean
5987 mips_elf_create_dynamic_relocation (bfd *output_bfd,
5988                                     struct bfd_link_info *info,
5989                                     const Elf_Internal_Rela *rel,
5990                                     struct mips_elf_link_hash_entry *h,
5991                                     asection *sec, bfd_vma symbol,
5992                                     bfd_vma *addendp, asection *input_section)
5993 {
5994   Elf_Internal_Rela outrel[3];
5995   asection *sreloc;
5996   bfd *dynobj;
5997   int r_type;
5998   long indx;
5999   bfd_boolean defined_p;
6000   struct mips_elf_link_hash_table *htab;
6001
6002   htab = mips_elf_hash_table (info);
6003   BFD_ASSERT (htab != NULL);
6004
6005   r_type = ELF_R_TYPE (output_bfd, rel->r_info);
6006   dynobj = elf_hash_table (info)->dynobj;
6007   sreloc = mips_elf_rel_dyn_section (info, FALSE);
6008   BFD_ASSERT (sreloc != NULL);
6009   BFD_ASSERT (sreloc->contents != NULL);
6010   BFD_ASSERT (sreloc->reloc_count * MIPS_ELF_REL_SIZE (output_bfd)
6011               < sreloc->size);
6012
6013   outrel[0].r_offset =
6014     _bfd_elf_section_offset (output_bfd, info, input_section, rel[0].r_offset);
6015   if (ABI_64_P (output_bfd))
6016     {
6017       outrel[1].r_offset =
6018         _bfd_elf_section_offset (output_bfd, info, input_section, rel[1].r_offset);
6019       outrel[2].r_offset =
6020         _bfd_elf_section_offset (output_bfd, info, input_section, rel[2].r_offset);
6021     }
6022
6023   if (outrel[0].r_offset == MINUS_ONE)
6024     /* The relocation field has been deleted.  */
6025     return TRUE;
6026
6027   if (outrel[0].r_offset == MINUS_TWO)
6028     {
6029       /* The relocation field has been converted into a relative value of
6030          some sort.  Functions like _bfd_elf_write_section_eh_frame expect
6031          the field to be fully relocated, so add in the symbol's value.  */
6032       *addendp += symbol;
6033       return TRUE;
6034     }
6035
6036   /* We must now calculate the dynamic symbol table index to use
6037      in the relocation.  */
6038   if (h != NULL && ! SYMBOL_REFERENCES_LOCAL (info, &h->root))
6039     {
6040       BFD_ASSERT (htab->is_vxworks || h->global_got_area != GGA_NONE);
6041       indx = h->root.dynindx;
6042       if (SGI_COMPAT (output_bfd))
6043         defined_p = h->root.def_regular;
6044       else
6045         /* ??? glibc's ld.so just adds the final GOT entry to the
6046            relocation field.  It therefore treats relocs against
6047            defined symbols in the same way as relocs against
6048            undefined symbols.  */
6049         defined_p = FALSE;
6050     }
6051   else
6052     {
6053       if (sec != NULL && bfd_is_abs_section (sec))
6054         indx = 0;
6055       else if (sec == NULL || sec->owner == NULL)
6056         {
6057           bfd_set_error (bfd_error_bad_value);
6058           return FALSE;
6059         }
6060       else
6061         {
6062           indx = elf_section_data (sec->output_section)->dynindx;
6063           if (indx == 0)
6064             {
6065               asection *osec = htab->root.text_index_section;
6066               indx = elf_section_data (osec)->dynindx;
6067             }
6068           if (indx == 0)
6069             abort ();
6070         }
6071
6072       /* Instead of generating a relocation using the section
6073          symbol, we may as well make it a fully relative
6074          relocation.  We want to avoid generating relocations to
6075          local symbols because we used to generate them
6076          incorrectly, without adding the original symbol value,
6077          which is mandated by the ABI for section symbols.  In
6078          order to give dynamic loaders and applications time to
6079          phase out the incorrect use, we refrain from emitting
6080          section-relative relocations.  It's not like they're
6081          useful, after all.  This should be a bit more efficient
6082          as well.  */
6083       /* ??? Although this behavior is compatible with glibc's ld.so,
6084          the ABI says that relocations against STN_UNDEF should have
6085          a symbol value of 0.  Irix rld honors this, so relocations
6086          against STN_UNDEF have no effect.  */
6087       if (!SGI_COMPAT (output_bfd))
6088         indx = 0;
6089       defined_p = TRUE;
6090     }
6091
6092   /* If the relocation was previously an absolute relocation and
6093      this symbol will not be referred to by the relocation, we must
6094      adjust it by the value we give it in the dynamic symbol table.
6095      Otherwise leave the job up to the dynamic linker.  */
6096   if (defined_p && r_type != R_MIPS_REL32)
6097     *addendp += symbol;
6098
6099   if (htab->is_vxworks)
6100     /* VxWorks uses non-relative relocations for this.  */
6101     outrel[0].r_info = ELF32_R_INFO (indx, R_MIPS_32);
6102   else
6103     /* The relocation is always an REL32 relocation because we don't
6104        know where the shared library will wind up at load-time.  */
6105     outrel[0].r_info = ELF_R_INFO (output_bfd, (unsigned long) indx,
6106                                    R_MIPS_REL32);
6107
6108   /* For strict adherence to the ABI specification, we should
6109      generate a R_MIPS_64 relocation record by itself before the
6110      _REL32/_64 record as well, such that the addend is read in as
6111      a 64-bit value (REL32 is a 32-bit relocation, after all).
6112      However, since none of the existing ELF64 MIPS dynamic
6113      loaders seems to care, we don't waste space with these
6114      artificial relocations.  If this turns out to not be true,
6115      mips_elf_allocate_dynamic_relocation() should be tweaked so
6116      as to make room for a pair of dynamic relocations per
6117      invocation if ABI_64_P, and here we should generate an
6118      additional relocation record with R_MIPS_64 by itself for a
6119      NULL symbol before this relocation record.  */
6120   outrel[1].r_info = ELF_R_INFO (output_bfd, 0,
6121                                  ABI_64_P (output_bfd)
6122                                  ? R_MIPS_64
6123                                  : R_MIPS_NONE);
6124   outrel[2].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_NONE);
6125
6126   /* Adjust the output offset of the relocation to reference the
6127      correct location in the output file.  */
6128   outrel[0].r_offset += (input_section->output_section->vma
6129                          + input_section->output_offset);
6130   outrel[1].r_offset += (input_section->output_section->vma
6131                          + input_section->output_offset);
6132   outrel[2].r_offset += (input_section->output_section->vma
6133                          + input_section->output_offset);
6134
6135   /* Put the relocation back out.  We have to use the special
6136      relocation outputter in the 64-bit case since the 64-bit
6137      relocation format is non-standard.  */
6138   if (ABI_64_P (output_bfd))
6139     {
6140       (*get_elf_backend_data (output_bfd)->s->swap_reloc_out)
6141         (output_bfd, &outrel[0],
6142          (sreloc->contents
6143           + sreloc->reloc_count * sizeof (Elf64_Mips_External_Rel)));
6144     }
6145   else if (htab->is_vxworks)
6146     {
6147       /* VxWorks uses RELA rather than REL dynamic relocations.  */
6148       outrel[0].r_addend = *addendp;
6149       bfd_elf32_swap_reloca_out
6150         (output_bfd, &outrel[0],
6151          (sreloc->contents
6152           + sreloc->reloc_count * sizeof (Elf32_External_Rela)));
6153     }
6154   else
6155     bfd_elf32_swap_reloc_out
6156       (output_bfd, &outrel[0],
6157        (sreloc->contents + sreloc->reloc_count * sizeof (Elf32_External_Rel)));
6158
6159   /* We've now added another relocation.  */
6160   ++sreloc->reloc_count;
6161
6162   /* Make sure the output section is writable.  The dynamic linker
6163      will be writing to it.  */
6164   elf_section_data (input_section->output_section)->this_hdr.sh_flags
6165     |= SHF_WRITE;
6166
6167   /* On IRIX5, make an entry of compact relocation info.  */
6168   if (IRIX_COMPAT (output_bfd) == ict_irix5)
6169     {
6170       asection *scpt = bfd_get_linker_section (dynobj, ".compact_rel");
6171       bfd_byte *cr;
6172
6173       if (scpt)
6174         {
6175           Elf32_crinfo cptrel;
6176
6177           mips_elf_set_cr_format (cptrel, CRF_MIPS_LONG);
6178           cptrel.vaddr = (rel->r_offset
6179                           + input_section->output_section->vma
6180                           + input_section->output_offset);
6181           if (r_type == R_MIPS_REL32)
6182             mips_elf_set_cr_type (cptrel, CRT_MIPS_REL32);
6183           else
6184             mips_elf_set_cr_type (cptrel, CRT_MIPS_WORD);
6185           mips_elf_set_cr_dist2to (cptrel, 0);
6186           cptrel.konst = *addendp;
6187
6188           cr = (scpt->contents
6189                 + sizeof (Elf32_External_compact_rel));
6190           mips_elf_set_cr_relvaddr (cptrel, 0);
6191           bfd_elf32_swap_crinfo_out (output_bfd, &cptrel,
6192                                      ((Elf32_External_crinfo *) cr
6193                                       + scpt->reloc_count));
6194           ++scpt->reloc_count;
6195         }
6196     }
6197
6198   /* If we've written this relocation for a readonly section,
6199      we need to set DF_TEXTREL again, so that we do not delete the
6200      DT_TEXTREL tag.  */
6201   if (MIPS_ELF_READONLY_SECTION (input_section))
6202     info->flags |= DF_TEXTREL;
6203
6204   return TRUE;
6205 }
6206 \f
6207 /* Return the MACH for a MIPS e_flags value.  */
6208
6209 unsigned long
6210 _bfd_elf_mips_mach (flagword flags)
6211 {
6212   switch (flags & EF_MIPS_MACH)
6213     {
6214     case E_MIPS_MACH_3900:
6215       return bfd_mach_mips3900;
6216
6217     case E_MIPS_MACH_4010:
6218       return bfd_mach_mips4010;
6219
6220     case E_MIPS_MACH_4100:
6221       return bfd_mach_mips4100;
6222
6223     case E_MIPS_MACH_4111:
6224       return bfd_mach_mips4111;
6225
6226     case E_MIPS_MACH_4120:
6227       return bfd_mach_mips4120;
6228
6229     case E_MIPS_MACH_4650:
6230       return bfd_mach_mips4650;
6231
6232     case E_MIPS_MACH_5400:
6233       return bfd_mach_mips5400;
6234
6235     case E_MIPS_MACH_5500:
6236       return bfd_mach_mips5500;
6237
6238     case E_MIPS_MACH_5900:
6239       return bfd_mach_mips5900;
6240
6241     case E_MIPS_MACH_9000:
6242       return bfd_mach_mips9000;
6243
6244     case E_MIPS_MACH_SB1:
6245       return bfd_mach_mips_sb1;
6246
6247     case E_MIPS_MACH_LS2E:
6248       return bfd_mach_mips_loongson_2e;
6249
6250     case E_MIPS_MACH_LS2F:
6251       return bfd_mach_mips_loongson_2f;
6252
6253     case E_MIPS_MACH_LS3A:
6254       return bfd_mach_mips_loongson_3a;
6255
6256     case E_MIPS_MACH_OCTEON2:
6257       return bfd_mach_mips_octeon2;
6258
6259     case E_MIPS_MACH_OCTEON:
6260       return bfd_mach_mips_octeon;
6261
6262     case E_MIPS_MACH_XLR:
6263       return bfd_mach_mips_xlr;
6264
6265     default:
6266       switch (flags & EF_MIPS_ARCH)
6267         {
6268         default:
6269         case E_MIPS_ARCH_1:
6270           return bfd_mach_mips3000;
6271
6272         case E_MIPS_ARCH_2:
6273           return bfd_mach_mips6000;
6274
6275         case E_MIPS_ARCH_3:
6276           return bfd_mach_mips4000;
6277
6278         case E_MIPS_ARCH_4:
6279           return bfd_mach_mips8000;
6280
6281         case E_MIPS_ARCH_5:
6282           return bfd_mach_mips5;
6283
6284         case E_MIPS_ARCH_32:
6285           return bfd_mach_mipsisa32;
6286
6287         case E_MIPS_ARCH_64:
6288           return bfd_mach_mipsisa64;
6289
6290         case E_MIPS_ARCH_32R2:
6291           return bfd_mach_mipsisa32r2;
6292
6293         case E_MIPS_ARCH_64R2:
6294           return bfd_mach_mipsisa64r2;
6295         }
6296     }
6297
6298   return 0;
6299 }
6300
6301 /* Return printable name for ABI.  */
6302
6303 static INLINE char *
6304 elf_mips_abi_name (bfd *abfd)
6305 {
6306   flagword flags;
6307
6308   flags = elf_elfheader (abfd)->e_flags;
6309   switch (flags & EF_MIPS_ABI)
6310     {
6311     case 0:
6312       if (ABI_N32_P (abfd))
6313         return "N32";
6314       else if (ABI_64_P (abfd))
6315         return "64";
6316       else
6317         return "none";
6318     case E_MIPS_ABI_O32:
6319       return "O32";
6320     case E_MIPS_ABI_O64:
6321       return "O64";
6322     case E_MIPS_ABI_EABI32:
6323       return "EABI32";
6324     case E_MIPS_ABI_EABI64:
6325       return "EABI64";
6326     default:
6327       return "unknown abi";
6328     }
6329 }
6330 \f
6331 /* MIPS ELF uses two common sections.  One is the usual one, and the
6332    other is for small objects.  All the small objects are kept
6333    together, and then referenced via the gp pointer, which yields
6334    faster assembler code.  This is what we use for the small common
6335    section.  This approach is copied from ecoff.c.  */
6336 static asection mips_elf_scom_section;
6337 static asymbol mips_elf_scom_symbol;
6338 static asymbol *mips_elf_scom_symbol_ptr;
6339
6340 /* MIPS ELF also uses an acommon section, which represents an
6341    allocated common symbol which may be overridden by a
6342    definition in a shared library.  */
6343 static asection mips_elf_acom_section;
6344 static asymbol mips_elf_acom_symbol;
6345 static asymbol *mips_elf_acom_symbol_ptr;
6346
6347 /* This is used for both the 32-bit and the 64-bit ABI.  */
6348
6349 void
6350 _bfd_mips_elf_symbol_processing (bfd *abfd, asymbol *asym)
6351 {
6352   elf_symbol_type *elfsym;
6353
6354   /* Handle the special MIPS section numbers that a symbol may use.  */
6355   elfsym = (elf_symbol_type *) asym;
6356   switch (elfsym->internal_elf_sym.st_shndx)
6357     {
6358     case SHN_MIPS_ACOMMON:
6359       /* This section is used in a dynamically linked executable file.
6360          It is an allocated common section.  The dynamic linker can
6361          either resolve these symbols to something in a shared
6362          library, or it can just leave them here.  For our purposes,
6363          we can consider these symbols to be in a new section.  */
6364       if (mips_elf_acom_section.name == NULL)
6365         {
6366           /* Initialize the acommon section.  */
6367           mips_elf_acom_section.name = ".acommon";
6368           mips_elf_acom_section.flags = SEC_ALLOC;
6369           mips_elf_acom_section.output_section = &mips_elf_acom_section;
6370           mips_elf_acom_section.symbol = &mips_elf_acom_symbol;
6371           mips_elf_acom_section.symbol_ptr_ptr = &mips_elf_acom_symbol_ptr;
6372           mips_elf_acom_symbol.name = ".acommon";
6373           mips_elf_acom_symbol.flags = BSF_SECTION_SYM;
6374           mips_elf_acom_symbol.section = &mips_elf_acom_section;
6375           mips_elf_acom_symbol_ptr = &mips_elf_acom_symbol;
6376         }
6377       asym->section = &mips_elf_acom_section;
6378       break;
6379
6380     case SHN_COMMON:
6381       /* Common symbols less than the GP size are automatically
6382          treated as SHN_MIPS_SCOMMON symbols on IRIX5.  */
6383       if (asym->value > elf_gp_size (abfd)
6384           || ELF_ST_TYPE (elfsym->internal_elf_sym.st_info) == STT_TLS
6385           || IRIX_COMPAT (abfd) == ict_irix6)
6386         break;
6387       /* Fall through.  */
6388     case SHN_MIPS_SCOMMON:
6389       if (mips_elf_scom_section.name == NULL)
6390         {
6391           /* Initialize the small common section.  */
6392           mips_elf_scom_section.name = ".scommon";
6393           mips_elf_scom_section.flags = SEC_IS_COMMON;
6394           mips_elf_scom_section.output_section = &mips_elf_scom_section;
6395           mips_elf_scom_section.symbol = &mips_elf_scom_symbol;
6396           mips_elf_scom_section.symbol_ptr_ptr = &mips_elf_scom_symbol_ptr;
6397           mips_elf_scom_symbol.name = ".scommon";
6398           mips_elf_scom_symbol.flags = BSF_SECTION_SYM;
6399           mips_elf_scom_symbol.section = &mips_elf_scom_section;
6400           mips_elf_scom_symbol_ptr = &mips_elf_scom_symbol;
6401         }
6402       asym->section = &mips_elf_scom_section;
6403       asym->value = elfsym->internal_elf_sym.st_size;
6404       break;
6405
6406     case SHN_MIPS_SUNDEFINED:
6407       asym->section = bfd_und_section_ptr;
6408       break;
6409
6410     case SHN_MIPS_TEXT:
6411       {
6412         asection *section = bfd_get_section_by_name (abfd, ".text");
6413
6414         if (section != NULL)
6415           {
6416             asym->section = section;
6417             /* MIPS_TEXT is a bit special, the address is not an offset
6418                to the base of the .text section.  So substract the section
6419                base address to make it an offset.  */
6420             asym->value -= section->vma;
6421           }
6422       }
6423       break;
6424
6425     case SHN_MIPS_DATA:
6426       {
6427         asection *section = bfd_get_section_by_name (abfd, ".data");
6428
6429         if (section != NULL)
6430           {
6431             asym->section = section;
6432             /* MIPS_DATA is a bit special, the address is not an offset
6433                to the base of the .data section.  So substract the section
6434                base address to make it an offset.  */
6435             asym->value -= section->vma;
6436           }
6437       }
6438       break;
6439     }
6440
6441   /* If this is an odd-valued function symbol, assume it's a MIPS16
6442      or microMIPS one.  */
6443   if (ELF_ST_TYPE (elfsym->internal_elf_sym.st_info) == STT_FUNC
6444       && (asym->value & 1) != 0)
6445     {
6446       asym->value--;
6447       if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MICROMIPS)
6448         elfsym->internal_elf_sym.st_other
6449           = ELF_ST_SET_MICROMIPS (elfsym->internal_elf_sym.st_other);
6450       else
6451         elfsym->internal_elf_sym.st_other
6452           = ELF_ST_SET_MIPS16 (elfsym->internal_elf_sym.st_other);
6453     }
6454 }
6455 \f
6456 /* Implement elf_backend_eh_frame_address_size.  This differs from
6457    the default in the way it handles EABI64.
6458
6459    EABI64 was originally specified as an LP64 ABI, and that is what
6460    -mabi=eabi normally gives on a 64-bit target.  However, gcc has
6461    historically accepted the combination of -mabi=eabi and -mlong32,
6462    and this ILP32 variation has become semi-official over time.
6463    Both forms use elf32 and have pointer-sized FDE addresses.
6464
6465    If an EABI object was generated by GCC 4.0 or above, it will have
6466    an empty .gcc_compiled_longXX section, where XX is the size of longs
6467    in bits.  Unfortunately, ILP32 objects generated by earlier compilers
6468    have no special marking to distinguish them from LP64 objects.
6469
6470    We don't want users of the official LP64 ABI to be punished for the
6471    existence of the ILP32 variant, but at the same time, we don't want
6472    to mistakenly interpret pre-4.0 ILP32 objects as being LP64 objects.
6473    We therefore take the following approach:
6474
6475       - If ABFD contains a .gcc_compiled_longXX section, use it to
6476         determine the pointer size.
6477
6478       - Otherwise check the type of the first relocation.  Assume that
6479         the LP64 ABI is being used if the relocation is of type R_MIPS_64.
6480
6481       - Otherwise punt.
6482
6483    The second check is enough to detect LP64 objects generated by pre-4.0
6484    compilers because, in the kind of output generated by those compilers,
6485    the first relocation will be associated with either a CIE personality
6486    routine or an FDE start address.  Furthermore, the compilers never
6487    used a special (non-pointer) encoding for this ABI.
6488
6489    Checking the relocation type should also be safe because there is no
6490    reason to use R_MIPS_64 in an ILP32 object.  Pre-4.0 compilers never
6491    did so.  */
6492
6493 unsigned int
6494 _bfd_mips_elf_eh_frame_address_size (bfd *abfd, asection *sec)
6495 {
6496   if (elf_elfheader (abfd)->e_ident[EI_CLASS] == ELFCLASS64)
6497     return 8;
6498   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI64)
6499     {
6500       bfd_boolean long32_p, long64_p;
6501
6502       long32_p = bfd_get_section_by_name (abfd, ".gcc_compiled_long32") != 0;
6503       long64_p = bfd_get_section_by_name (abfd, ".gcc_compiled_long64") != 0;
6504       if (long32_p && long64_p)
6505         return 0;
6506       if (long32_p)
6507         return 4;
6508       if (long64_p)
6509         return 8;
6510
6511       if (sec->reloc_count > 0
6512           && elf_section_data (sec)->relocs != NULL
6513           && (ELF32_R_TYPE (elf_section_data (sec)->relocs[0].r_info)
6514               == R_MIPS_64))
6515         return 8;
6516
6517       return 0;
6518     }
6519   return 4;
6520 }
6521 \f
6522 /* There appears to be a bug in the MIPSpro linker that causes GOT_DISP
6523    relocations against two unnamed section symbols to resolve to the
6524    same address.  For example, if we have code like:
6525
6526         lw      $4,%got_disp(.data)($gp)
6527         lw      $25,%got_disp(.text)($gp)
6528         jalr    $25
6529
6530    then the linker will resolve both relocations to .data and the program
6531    will jump there rather than to .text.
6532
6533    We can work around this problem by giving names to local section symbols.
6534    This is also what the MIPSpro tools do.  */
6535
6536 bfd_boolean
6537 _bfd_mips_elf_name_local_section_symbols (bfd *abfd)
6538 {
6539   return SGI_COMPAT (abfd);
6540 }
6541 \f
6542 /* Work over a section just before writing it out.  This routine is
6543    used by both the 32-bit and the 64-bit ABI.  FIXME: We recognize
6544    sections that need the SHF_MIPS_GPREL flag by name; there has to be
6545    a better way.  */
6546
6547 bfd_boolean
6548 _bfd_mips_elf_section_processing (bfd *abfd, Elf_Internal_Shdr *hdr)
6549 {
6550   if (hdr->sh_type == SHT_MIPS_REGINFO
6551       && hdr->sh_size > 0)
6552     {
6553       bfd_byte buf[4];
6554
6555       BFD_ASSERT (hdr->sh_size == sizeof (Elf32_External_RegInfo));
6556       BFD_ASSERT (hdr->contents == NULL);
6557
6558       if (bfd_seek (abfd,
6559                     hdr->sh_offset + sizeof (Elf32_External_RegInfo) - 4,
6560                     SEEK_SET) != 0)
6561         return FALSE;
6562       H_PUT_32 (abfd, elf_gp (abfd), buf);
6563       if (bfd_bwrite (buf, 4, abfd) != 4)
6564         return FALSE;
6565     }
6566
6567   if (hdr->sh_type == SHT_MIPS_OPTIONS
6568       && hdr->bfd_section != NULL
6569       && mips_elf_section_data (hdr->bfd_section) != NULL
6570       && mips_elf_section_data (hdr->bfd_section)->u.tdata != NULL)
6571     {
6572       bfd_byte *contents, *l, *lend;
6573
6574       /* We stored the section contents in the tdata field in the
6575          set_section_contents routine.  We save the section contents
6576          so that we don't have to read them again.
6577          At this point we know that elf_gp is set, so we can look
6578          through the section contents to see if there is an
6579          ODK_REGINFO structure.  */
6580
6581       contents = mips_elf_section_data (hdr->bfd_section)->u.tdata;
6582       l = contents;
6583       lend = contents + hdr->sh_size;
6584       while (l + sizeof (Elf_External_Options) <= lend)
6585         {
6586           Elf_Internal_Options intopt;
6587
6588           bfd_mips_elf_swap_options_in (abfd, (Elf_External_Options *) l,
6589                                         &intopt);
6590           if (intopt.size < sizeof (Elf_External_Options))
6591             {
6592               (*_bfd_error_handler)
6593                 (_("%B: Warning: bad `%s' option size %u smaller than its header"),
6594                 abfd, MIPS_ELF_OPTIONS_SECTION_NAME (abfd), intopt.size);
6595               break;
6596             }
6597           if (ABI_64_P (abfd) && intopt.kind == ODK_REGINFO)
6598             {
6599               bfd_byte buf[8];
6600
6601               if (bfd_seek (abfd,
6602                             (hdr->sh_offset
6603                              + (l - contents)
6604                              + sizeof (Elf_External_Options)
6605                              + (sizeof (Elf64_External_RegInfo) - 8)),
6606                              SEEK_SET) != 0)
6607                 return FALSE;
6608               H_PUT_64 (abfd, elf_gp (abfd), buf);
6609               if (bfd_bwrite (buf, 8, abfd) != 8)
6610                 return FALSE;
6611             }
6612           else if (intopt.kind == ODK_REGINFO)
6613             {
6614               bfd_byte buf[4];
6615
6616               if (bfd_seek (abfd,
6617                             (hdr->sh_offset
6618                              + (l - contents)
6619                              + sizeof (Elf_External_Options)
6620                              + (sizeof (Elf32_External_RegInfo) - 4)),
6621                             SEEK_SET) != 0)
6622                 return FALSE;
6623               H_PUT_32 (abfd, elf_gp (abfd), buf);
6624               if (bfd_bwrite (buf, 4, abfd) != 4)
6625                 return FALSE;
6626             }
6627           l += intopt.size;
6628         }
6629     }
6630
6631   if (hdr->bfd_section != NULL)
6632     {
6633       const char *name = bfd_get_section_name (abfd, hdr->bfd_section);
6634
6635       /* .sbss is not handled specially here because the GNU/Linux
6636          prelinker can convert .sbss from NOBITS to PROGBITS and
6637          changing it back to NOBITS breaks the binary.  The entry in
6638          _bfd_mips_elf_special_sections will ensure the correct flags
6639          are set on .sbss if BFD creates it without reading it from an
6640          input file, and without special handling here the flags set
6641          on it in an input file will be followed.  */
6642       if (strcmp (name, ".sdata") == 0
6643           || strcmp (name, ".lit8") == 0
6644           || strcmp (name, ".lit4") == 0)
6645         {
6646           hdr->sh_flags |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL;
6647           hdr->sh_type = SHT_PROGBITS;
6648         }
6649       else if (strcmp (name, ".srdata") == 0)
6650         {
6651           hdr->sh_flags |= SHF_ALLOC | SHF_MIPS_GPREL;
6652           hdr->sh_type = SHT_PROGBITS;
6653         }
6654       else if (strcmp (name, ".compact_rel") == 0)
6655         {
6656           hdr->sh_flags = 0;
6657           hdr->sh_type = SHT_PROGBITS;
6658         }
6659       else if (strcmp (name, ".rtproc") == 0)
6660         {
6661           if (hdr->sh_addralign != 0 && hdr->sh_entsize == 0)
6662             {
6663               unsigned int adjust;
6664
6665               adjust = hdr->sh_size % hdr->sh_addralign;
6666               if (adjust != 0)
6667                 hdr->sh_size += hdr->sh_addralign - adjust;
6668             }
6669         }
6670     }
6671
6672   return TRUE;
6673 }
6674
6675 /* Handle a MIPS specific section when reading an object file.  This
6676    is called when elfcode.h finds a section with an unknown type.
6677    This routine supports both the 32-bit and 64-bit ELF ABI.
6678
6679    FIXME: We need to handle the SHF_MIPS_GPREL flag, but I'm not sure
6680    how to.  */
6681
6682 bfd_boolean
6683 _bfd_mips_elf_section_from_shdr (bfd *abfd,
6684                                  Elf_Internal_Shdr *hdr,
6685                                  const char *name,
6686                                  int shindex)
6687 {
6688   flagword flags = 0;
6689
6690   /* There ought to be a place to keep ELF backend specific flags, but
6691      at the moment there isn't one.  We just keep track of the
6692      sections by their name, instead.  Fortunately, the ABI gives
6693      suggested names for all the MIPS specific sections, so we will
6694      probably get away with this.  */
6695   switch (hdr->sh_type)
6696     {
6697     case SHT_MIPS_LIBLIST:
6698       if (strcmp (name, ".liblist") != 0)
6699         return FALSE;
6700       break;
6701     case SHT_MIPS_MSYM:
6702       if (strcmp (name, ".msym") != 0)
6703         return FALSE;
6704       break;
6705     case SHT_MIPS_CONFLICT:
6706       if (strcmp (name, ".conflict") != 0)
6707         return FALSE;
6708       break;
6709     case SHT_MIPS_GPTAB:
6710       if (! CONST_STRNEQ (name, ".gptab."))
6711         return FALSE;
6712       break;
6713     case SHT_MIPS_UCODE:
6714       if (strcmp (name, ".ucode") != 0)
6715         return FALSE;
6716       break;
6717     case SHT_MIPS_DEBUG:
6718       if (strcmp (name, ".mdebug") != 0)
6719         return FALSE;
6720       flags = SEC_DEBUGGING;
6721       break;
6722     case SHT_MIPS_REGINFO:
6723       if (strcmp (name, ".reginfo") != 0
6724           || hdr->sh_size != sizeof (Elf32_External_RegInfo))
6725         return FALSE;
6726       flags = (SEC_LINK_ONCE | SEC_LINK_DUPLICATES_SAME_SIZE);
6727       break;
6728     case SHT_MIPS_IFACE:
6729       if (strcmp (name, ".MIPS.interfaces") != 0)
6730         return FALSE;
6731       break;
6732     case SHT_MIPS_CONTENT:
6733       if (! CONST_STRNEQ (name, ".MIPS.content"))
6734         return FALSE;
6735       break;
6736     case SHT_MIPS_OPTIONS:
6737       if (!MIPS_ELF_OPTIONS_SECTION_NAME_P (name))
6738         return FALSE;
6739       break;
6740     case SHT_MIPS_DWARF:
6741       if (! CONST_STRNEQ (name, ".debug_")
6742           && ! CONST_STRNEQ (name, ".zdebug_"))
6743         return FALSE;
6744       break;
6745     case SHT_MIPS_SYMBOL_LIB:
6746       if (strcmp (name, ".MIPS.symlib") != 0)
6747         return FALSE;
6748       break;
6749     case SHT_MIPS_EVENTS:
6750       if (! CONST_STRNEQ (name, ".MIPS.events")
6751           && ! CONST_STRNEQ (name, ".MIPS.post_rel"))
6752         return FALSE;
6753       break;
6754     default:
6755       break;
6756     }
6757
6758   if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
6759     return FALSE;
6760
6761   if (flags)
6762     {
6763       if (! bfd_set_section_flags (abfd, hdr->bfd_section,
6764                                    (bfd_get_section_flags (abfd,
6765                                                            hdr->bfd_section)
6766                                     | flags)))
6767         return FALSE;
6768     }
6769
6770   /* FIXME: We should record sh_info for a .gptab section.  */
6771
6772   /* For a .reginfo section, set the gp value in the tdata information
6773      from the contents of this section.  We need the gp value while
6774      processing relocs, so we just get it now.  The .reginfo section
6775      is not used in the 64-bit MIPS ELF ABI.  */
6776   if (hdr->sh_type == SHT_MIPS_REGINFO)
6777     {
6778       Elf32_External_RegInfo ext;
6779       Elf32_RegInfo s;
6780
6781       if (! bfd_get_section_contents (abfd, hdr->bfd_section,
6782                                       &ext, 0, sizeof ext))
6783         return FALSE;
6784       bfd_mips_elf32_swap_reginfo_in (abfd, &ext, &s);
6785       elf_gp (abfd) = s.ri_gp_value;
6786     }
6787
6788   /* For a SHT_MIPS_OPTIONS section, look for a ODK_REGINFO entry, and
6789      set the gp value based on what we find.  We may see both
6790      SHT_MIPS_REGINFO and SHT_MIPS_OPTIONS/ODK_REGINFO; in that case,
6791      they should agree.  */
6792   if (hdr->sh_type == SHT_MIPS_OPTIONS)
6793     {
6794       bfd_byte *contents, *l, *lend;
6795
6796       contents = bfd_malloc (hdr->sh_size);
6797       if (contents == NULL)
6798         return FALSE;
6799       if (! bfd_get_section_contents (abfd, hdr->bfd_section, contents,
6800                                       0, hdr->sh_size))
6801         {
6802           free (contents);
6803           return FALSE;
6804         }
6805       l = contents;
6806       lend = contents + hdr->sh_size;
6807       while (l + sizeof (Elf_External_Options) <= lend)
6808         {
6809           Elf_Internal_Options intopt;
6810
6811           bfd_mips_elf_swap_options_in (abfd, (Elf_External_Options *) l,
6812                                         &intopt);
6813           if (intopt.size < sizeof (Elf_External_Options))
6814             {
6815               (*_bfd_error_handler)
6816                 (_("%B: Warning: bad `%s' option size %u smaller than its header"),
6817                 abfd, MIPS_ELF_OPTIONS_SECTION_NAME (abfd), intopt.size);
6818               break;
6819             }
6820           if (ABI_64_P (abfd) && intopt.kind == ODK_REGINFO)
6821             {
6822               Elf64_Internal_RegInfo intreg;
6823
6824               bfd_mips_elf64_swap_reginfo_in
6825                 (abfd,
6826                  ((Elf64_External_RegInfo *)
6827                   (l + sizeof (Elf_External_Options))),
6828                  &intreg);
6829               elf_gp (abfd) = intreg.ri_gp_value;
6830             }
6831           else if (intopt.kind == ODK_REGINFO)
6832             {
6833               Elf32_RegInfo intreg;
6834
6835               bfd_mips_elf32_swap_reginfo_in
6836                 (abfd,
6837                  ((Elf32_External_RegInfo *)
6838                   (l + sizeof (Elf_External_Options))),
6839                  &intreg);
6840               elf_gp (abfd) = intreg.ri_gp_value;
6841             }
6842           l += intopt.size;
6843         }
6844       free (contents);
6845     }
6846
6847   return TRUE;
6848 }
6849
6850 /* Set the correct type for a MIPS ELF section.  We do this by the
6851    section name, which is a hack, but ought to work.  This routine is
6852    used by both the 32-bit and the 64-bit ABI.  */
6853
6854 bfd_boolean
6855 _bfd_mips_elf_fake_sections (bfd *abfd, Elf_Internal_Shdr *hdr, asection *sec)
6856 {
6857   const char *name = bfd_get_section_name (abfd, sec);
6858
6859   if (strcmp (name, ".liblist") == 0)
6860     {
6861       hdr->sh_type = SHT_MIPS_LIBLIST;
6862       hdr->sh_info = sec->size / sizeof (Elf32_Lib);
6863       /* The sh_link field is set in final_write_processing.  */
6864     }
6865   else if (strcmp (name, ".conflict") == 0)
6866     hdr->sh_type = SHT_MIPS_CONFLICT;
6867   else if (CONST_STRNEQ (name, ".gptab."))
6868     {
6869       hdr->sh_type = SHT_MIPS_GPTAB;
6870       hdr->sh_entsize = sizeof (Elf32_External_gptab);
6871       /* The sh_info field is set in final_write_processing.  */
6872     }
6873   else if (strcmp (name, ".ucode") == 0)
6874     hdr->sh_type = SHT_MIPS_UCODE;
6875   else if (strcmp (name, ".mdebug") == 0)
6876     {
6877       hdr->sh_type = SHT_MIPS_DEBUG;
6878       /* In a shared object on IRIX 5.3, the .mdebug section has an
6879          entsize of 0.  FIXME: Does this matter?  */
6880       if (SGI_COMPAT (abfd) && (abfd->flags & DYNAMIC) != 0)
6881         hdr->sh_entsize = 0;
6882       else
6883         hdr->sh_entsize = 1;
6884     }
6885   else if (strcmp (name, ".reginfo") == 0)
6886     {
6887       hdr->sh_type = SHT_MIPS_REGINFO;
6888       /* In a shared object on IRIX 5.3, the .reginfo section has an
6889          entsize of 0x18.  FIXME: Does this matter?  */
6890       if (SGI_COMPAT (abfd))
6891         {
6892           if ((abfd->flags & DYNAMIC) != 0)
6893             hdr->sh_entsize = sizeof (Elf32_External_RegInfo);
6894           else
6895             hdr->sh_entsize = 1;
6896         }
6897       else
6898         hdr->sh_entsize = sizeof (Elf32_External_RegInfo);
6899     }
6900   else if (SGI_COMPAT (abfd)
6901            && (strcmp (name, ".hash") == 0
6902                || strcmp (name, ".dynamic") == 0
6903                || strcmp (name, ".dynstr") == 0))
6904     {
6905       if (SGI_COMPAT (abfd))
6906         hdr->sh_entsize = 0;
6907 #if 0
6908       /* This isn't how the IRIX6 linker behaves.  */
6909       hdr->sh_info = SIZEOF_MIPS_DYNSYM_SECNAMES;
6910 #endif
6911     }
6912   else if (strcmp (name, ".got") == 0
6913            || strcmp (name, ".srdata") == 0
6914            || strcmp (name, ".sdata") == 0
6915            || strcmp (name, ".sbss") == 0
6916            || strcmp (name, ".lit4") == 0
6917            || strcmp (name, ".lit8") == 0)
6918     hdr->sh_flags |= SHF_MIPS_GPREL;
6919   else if (strcmp (name, ".MIPS.interfaces") == 0)
6920     {
6921       hdr->sh_type = SHT_MIPS_IFACE;
6922       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
6923     }
6924   else if (CONST_STRNEQ (name, ".MIPS.content"))
6925     {
6926       hdr->sh_type = SHT_MIPS_CONTENT;
6927       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
6928       /* The sh_info field is set in final_write_processing.  */
6929     }
6930   else if (MIPS_ELF_OPTIONS_SECTION_NAME_P (name))
6931     {
6932       hdr->sh_type = SHT_MIPS_OPTIONS;
6933       hdr->sh_entsize = 1;
6934       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
6935     }
6936   else if (CONST_STRNEQ (name, ".debug_")
6937            || CONST_STRNEQ (name, ".zdebug_"))
6938     {
6939       hdr->sh_type = SHT_MIPS_DWARF;
6940
6941       /* Irix facilities such as libexc expect a single .debug_frame
6942          per executable, the system ones have NOSTRIP set and the linker
6943          doesn't merge sections with different flags so ...  */
6944       if (SGI_COMPAT (abfd) && CONST_STRNEQ (name, ".debug_frame"))
6945         hdr->sh_flags |= SHF_MIPS_NOSTRIP;
6946     }
6947   else if (strcmp (name, ".MIPS.symlib") == 0)
6948     {
6949       hdr->sh_type = SHT_MIPS_SYMBOL_LIB;
6950       /* The sh_link and sh_info fields are set in
6951          final_write_processing.  */
6952     }
6953   else if (CONST_STRNEQ (name, ".MIPS.events")
6954            || CONST_STRNEQ (name, ".MIPS.post_rel"))
6955     {
6956       hdr->sh_type = SHT_MIPS_EVENTS;
6957       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
6958       /* The sh_link field is set in final_write_processing.  */
6959     }
6960   else if (strcmp (name, ".msym") == 0)
6961     {
6962       hdr->sh_type = SHT_MIPS_MSYM;
6963       hdr->sh_flags |= SHF_ALLOC;
6964       hdr->sh_entsize = 8;
6965     }
6966
6967   /* The generic elf_fake_sections will set up REL_HDR using the default
6968    kind of relocations.  We used to set up a second header for the
6969    non-default kind of relocations here, but only NewABI would use
6970    these, and the IRIX ld doesn't like resulting empty RELA sections.
6971    Thus we create those header only on demand now.  */
6972
6973   return TRUE;
6974 }
6975
6976 /* Given a BFD section, try to locate the corresponding ELF section
6977    index.  This is used by both the 32-bit and the 64-bit ABI.
6978    Actually, it's not clear to me that the 64-bit ABI supports these,
6979    but for non-PIC objects we will certainly want support for at least
6980    the .scommon section.  */
6981
6982 bfd_boolean
6983 _bfd_mips_elf_section_from_bfd_section (bfd *abfd ATTRIBUTE_UNUSED,
6984                                         asection *sec, int *retval)
6985 {
6986   if (strcmp (bfd_get_section_name (abfd, sec), ".scommon") == 0)
6987     {
6988       *retval = SHN_MIPS_SCOMMON;
6989       return TRUE;
6990     }
6991   if (strcmp (bfd_get_section_name (abfd, sec), ".acommon") == 0)
6992     {
6993       *retval = SHN_MIPS_ACOMMON;
6994       return TRUE;
6995     }
6996   return FALSE;
6997 }
6998 \f
6999 /* Hook called by the linker routine which adds symbols from an object
7000    file.  We must handle the special MIPS section numbers here.  */
7001
7002 bfd_boolean
7003 _bfd_mips_elf_add_symbol_hook (bfd *abfd, struct bfd_link_info *info,
7004                                Elf_Internal_Sym *sym, const char **namep,
7005                                flagword *flagsp ATTRIBUTE_UNUSED,
7006                                asection **secp, bfd_vma *valp)
7007 {
7008   if (SGI_COMPAT (abfd)
7009       && (abfd->flags & DYNAMIC) != 0
7010       && strcmp (*namep, "_rld_new_interface") == 0)
7011     {
7012       /* Skip IRIX5 rld entry name.  */
7013       *namep = NULL;
7014       return TRUE;
7015     }
7016
7017   /* Shared objects may have a dynamic symbol '_gp_disp' defined as
7018      a SECTION *ABS*.  This causes ld to think it can resolve _gp_disp
7019      by setting a DT_NEEDED for the shared object.  Since _gp_disp is
7020      a magic symbol resolved by the linker, we ignore this bogus definition
7021      of _gp_disp.  New ABI objects do not suffer from this problem so this
7022      is not done for them. */
7023   if (!NEWABI_P(abfd)
7024       && (sym->st_shndx == SHN_ABS)
7025       && (strcmp (*namep, "_gp_disp") == 0))
7026     {
7027       *namep = NULL;
7028       return TRUE;
7029     }
7030
7031   switch (sym->st_shndx)
7032     {
7033     case SHN_COMMON:
7034       /* Common symbols less than the GP size are automatically
7035          treated as SHN_MIPS_SCOMMON symbols.  */
7036       if (sym->st_size > elf_gp_size (abfd)
7037           || ELF_ST_TYPE (sym->st_info) == STT_TLS
7038           || IRIX_COMPAT (abfd) == ict_irix6)
7039         break;
7040       /* Fall through.  */
7041     case SHN_MIPS_SCOMMON:
7042       *secp = bfd_make_section_old_way (abfd, ".scommon");
7043       (*secp)->flags |= SEC_IS_COMMON;
7044       *valp = sym->st_size;
7045       break;
7046
7047     case SHN_MIPS_TEXT:
7048       /* This section is used in a shared object.  */
7049       if (elf_tdata (abfd)->elf_text_section == NULL)
7050         {
7051           asymbol *elf_text_symbol;
7052           asection *elf_text_section;
7053           bfd_size_type amt = sizeof (asection);
7054
7055           elf_text_section = bfd_zalloc (abfd, amt);
7056           if (elf_text_section == NULL)
7057             return FALSE;
7058
7059           amt = sizeof (asymbol);
7060           elf_text_symbol = bfd_zalloc (abfd, amt);
7061           if (elf_text_symbol == NULL)
7062             return FALSE;
7063
7064           /* Initialize the section.  */
7065
7066           elf_tdata (abfd)->elf_text_section = elf_text_section;
7067           elf_tdata (abfd)->elf_text_symbol = elf_text_symbol;
7068
7069           elf_text_section->symbol = elf_text_symbol;
7070           elf_text_section->symbol_ptr_ptr = &elf_tdata (abfd)->elf_text_symbol;
7071
7072           elf_text_section->name = ".text";
7073           elf_text_section->flags = SEC_NO_FLAGS;
7074           elf_text_section->output_section = NULL;
7075           elf_text_section->owner = abfd;
7076           elf_text_symbol->name = ".text";
7077           elf_text_symbol->flags = BSF_SECTION_SYM | BSF_DYNAMIC;
7078           elf_text_symbol->section = elf_text_section;
7079         }
7080       /* This code used to do *secp = bfd_und_section_ptr if
7081          info->shared.  I don't know why, and that doesn't make sense,
7082          so I took it out.  */
7083       *secp = elf_tdata (abfd)->elf_text_section;
7084       break;
7085
7086     case SHN_MIPS_ACOMMON:
7087       /* Fall through. XXX Can we treat this as allocated data?  */
7088     case SHN_MIPS_DATA:
7089       /* This section is used in a shared object.  */
7090       if (elf_tdata (abfd)->elf_data_section == NULL)
7091         {
7092           asymbol *elf_data_symbol;
7093           asection *elf_data_section;
7094           bfd_size_type amt = sizeof (asection);
7095
7096           elf_data_section = bfd_zalloc (abfd, amt);
7097           if (elf_data_section == NULL)
7098             return FALSE;
7099
7100           amt = sizeof (asymbol);
7101           elf_data_symbol = bfd_zalloc (abfd, amt);
7102           if (elf_data_symbol == NULL)
7103             return FALSE;
7104
7105           /* Initialize the section.  */
7106
7107           elf_tdata (abfd)->elf_data_section = elf_data_section;
7108           elf_tdata (abfd)->elf_data_symbol = elf_data_symbol;
7109
7110           elf_data_section->symbol = elf_data_symbol;
7111           elf_data_section->symbol_ptr_ptr = &elf_tdata (abfd)->elf_data_symbol;
7112
7113           elf_data_section->name = ".data";
7114           elf_data_section->flags = SEC_NO_FLAGS;
7115           elf_data_section->output_section = NULL;
7116           elf_data_section->owner = abfd;
7117           elf_data_symbol->name = ".data";
7118           elf_data_symbol->flags = BSF_SECTION_SYM | BSF_DYNAMIC;
7119           elf_data_symbol->section = elf_data_section;
7120         }
7121       /* This code used to do *secp = bfd_und_section_ptr if
7122          info->shared.  I don't know why, and that doesn't make sense,
7123          so I took it out.  */
7124       *secp = elf_tdata (abfd)->elf_data_section;
7125       break;
7126
7127     case SHN_MIPS_SUNDEFINED:
7128       *secp = bfd_und_section_ptr;
7129       break;
7130     }
7131
7132   if (SGI_COMPAT (abfd)
7133       && ! info->shared
7134       && info->output_bfd->xvec == abfd->xvec
7135       && strcmp (*namep, "__rld_obj_head") == 0)
7136     {
7137       struct elf_link_hash_entry *h;
7138       struct bfd_link_hash_entry *bh;
7139
7140       /* Mark __rld_obj_head as dynamic.  */
7141       bh = NULL;
7142       if (! (_bfd_generic_link_add_one_symbol
7143              (info, abfd, *namep, BSF_GLOBAL, *secp, *valp, NULL, FALSE,
7144               get_elf_backend_data (abfd)->collect, &bh)))
7145         return FALSE;
7146
7147       h = (struct elf_link_hash_entry *) bh;
7148       h->non_elf = 0;
7149       h->def_regular = 1;
7150       h->type = STT_OBJECT;
7151
7152       if (! bfd_elf_link_record_dynamic_symbol (info, h))
7153         return FALSE;
7154
7155       mips_elf_hash_table (info)->use_rld_obj_head = TRUE;
7156       mips_elf_hash_table (info)->rld_symbol = h;
7157     }
7158
7159   /* If this is a mips16 text symbol, add 1 to the value to make it
7160      odd.  This will cause something like .word SYM to come up with
7161      the right value when it is loaded into the PC.  */
7162   if (ELF_ST_IS_COMPRESSED (sym->st_other))
7163     ++*valp;
7164
7165   return TRUE;
7166 }
7167
7168 /* This hook function is called before the linker writes out a global
7169    symbol.  We mark symbols as small common if appropriate.  This is
7170    also where we undo the increment of the value for a mips16 symbol.  */
7171
7172 int
7173 _bfd_mips_elf_link_output_symbol_hook
7174   (struct bfd_link_info *info ATTRIBUTE_UNUSED,
7175    const char *name ATTRIBUTE_UNUSED, Elf_Internal_Sym *sym,
7176    asection *input_sec, struct elf_link_hash_entry *h ATTRIBUTE_UNUSED)
7177 {
7178   /* If we see a common symbol, which implies a relocatable link, then
7179      if a symbol was small common in an input file, mark it as small
7180      common in the output file.  */
7181   if (sym->st_shndx == SHN_COMMON
7182       && strcmp (input_sec->name, ".scommon") == 0)
7183     sym->st_shndx = SHN_MIPS_SCOMMON;
7184
7185   if (ELF_ST_IS_COMPRESSED (sym->st_other))
7186     sym->st_value &= ~1;
7187
7188   return 1;
7189 }
7190 \f
7191 /* Functions for the dynamic linker.  */
7192
7193 /* Create dynamic sections when linking against a dynamic object.  */
7194
7195 bfd_boolean
7196 _bfd_mips_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
7197 {
7198   struct elf_link_hash_entry *h;
7199   struct bfd_link_hash_entry *bh;
7200   flagword flags;
7201   register asection *s;
7202   const char * const *namep;
7203   struct mips_elf_link_hash_table *htab;
7204
7205   htab = mips_elf_hash_table (info);
7206   BFD_ASSERT (htab != NULL);
7207
7208   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
7209            | SEC_LINKER_CREATED | SEC_READONLY);
7210
7211   /* The psABI requires a read-only .dynamic section, but the VxWorks
7212      EABI doesn't.  */
7213   if (!htab->is_vxworks)
7214     {
7215       s = bfd_get_linker_section (abfd, ".dynamic");
7216       if (s != NULL)
7217         {
7218           if (! bfd_set_section_flags (abfd, s, flags))
7219             return FALSE;
7220         }
7221     }
7222
7223   /* We need to create .got section.  */
7224   if (!mips_elf_create_got_section (abfd, info))
7225     return FALSE;
7226
7227   if (! mips_elf_rel_dyn_section (info, TRUE))
7228     return FALSE;
7229
7230   /* Create .stub section.  */
7231   s = bfd_make_section_anyway_with_flags (abfd,
7232                                           MIPS_ELF_STUB_SECTION_NAME (abfd),
7233                                           flags | SEC_CODE);
7234   if (s == NULL
7235       || ! bfd_set_section_alignment (abfd, s,
7236                                       MIPS_ELF_LOG_FILE_ALIGN (abfd)))
7237     return FALSE;
7238   htab->sstubs = s;
7239
7240   if (!mips_elf_hash_table (info)->use_rld_obj_head
7241       && !info->shared
7242       && bfd_get_linker_section (abfd, ".rld_map") == NULL)
7243     {
7244       s = bfd_make_section_anyway_with_flags (abfd, ".rld_map",
7245                                               flags &~ (flagword) SEC_READONLY);
7246       if (s == NULL
7247           || ! bfd_set_section_alignment (abfd, s,
7248                                           MIPS_ELF_LOG_FILE_ALIGN (abfd)))
7249         return FALSE;
7250     }
7251
7252   /* On IRIX5, we adjust add some additional symbols and change the
7253      alignments of several sections.  There is no ABI documentation
7254      indicating that this is necessary on IRIX6, nor any evidence that
7255      the linker takes such action.  */
7256   if (IRIX_COMPAT (abfd) == ict_irix5)
7257     {
7258       for (namep = mips_elf_dynsym_rtproc_names; *namep != NULL; namep++)
7259         {
7260           bh = NULL;
7261           if (! (_bfd_generic_link_add_one_symbol
7262                  (info, abfd, *namep, BSF_GLOBAL, bfd_und_section_ptr, 0,
7263                   NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
7264             return FALSE;
7265
7266           h = (struct elf_link_hash_entry *) bh;
7267           h->non_elf = 0;
7268           h->def_regular = 1;
7269           h->type = STT_SECTION;
7270
7271           if (! bfd_elf_link_record_dynamic_symbol (info, h))
7272             return FALSE;
7273         }
7274
7275       /* We need to create a .compact_rel section.  */
7276       if (SGI_COMPAT (abfd))
7277         {
7278           if (!mips_elf_create_compact_rel_section (abfd, info))
7279             return FALSE;
7280         }
7281
7282       /* Change alignments of some sections.  */
7283       s = bfd_get_linker_section (abfd, ".hash");
7284       if (s != NULL)
7285         bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7286       s = bfd_get_linker_section (abfd, ".dynsym");
7287       if (s != NULL)
7288         bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7289       s = bfd_get_linker_section (abfd, ".dynstr");
7290       if (s != NULL)
7291         bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7292       /* ??? */
7293       s = bfd_get_section_by_name (abfd, ".reginfo");
7294       if (s != NULL)
7295         bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7296       s = bfd_get_linker_section (abfd, ".dynamic");
7297       if (s != NULL)
7298         bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7299     }
7300
7301   if (!info->shared)
7302     {
7303       const char *name;
7304
7305       name = SGI_COMPAT (abfd) ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING";
7306       bh = NULL;
7307       if (!(_bfd_generic_link_add_one_symbol
7308             (info, abfd, name, BSF_GLOBAL, bfd_abs_section_ptr, 0,
7309              NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
7310         return FALSE;
7311
7312       h = (struct elf_link_hash_entry *) bh;
7313       h->non_elf = 0;
7314       h->def_regular = 1;
7315       h->type = STT_SECTION;
7316
7317       if (! bfd_elf_link_record_dynamic_symbol (info, h))
7318         return FALSE;
7319
7320       if (! mips_elf_hash_table (info)->use_rld_obj_head)
7321         {
7322           /* __rld_map is a four byte word located in the .data section
7323              and is filled in by the rtld to contain a pointer to
7324              the _r_debug structure. Its symbol value will be set in
7325              _bfd_mips_elf_finish_dynamic_symbol.  */
7326           s = bfd_get_linker_section (abfd, ".rld_map");
7327           BFD_ASSERT (s != NULL);
7328
7329           name = SGI_COMPAT (abfd) ? "__rld_map" : "__RLD_MAP";
7330           bh = NULL;
7331           if (!(_bfd_generic_link_add_one_symbol
7332                 (info, abfd, name, BSF_GLOBAL, s, 0, NULL, FALSE,
7333                  get_elf_backend_data (abfd)->collect, &bh)))
7334             return FALSE;
7335
7336           h = (struct elf_link_hash_entry *) bh;
7337           h->non_elf = 0;
7338           h->def_regular = 1;
7339           h->type = STT_OBJECT;
7340
7341           if (! bfd_elf_link_record_dynamic_symbol (info, h))
7342             return FALSE;
7343           mips_elf_hash_table (info)->rld_symbol = h;
7344         }
7345     }
7346
7347   /* Create the .plt, .rel(a).plt, .dynbss and .rel(a).bss sections.
7348      Also create the _PROCEDURE_LINKAGE_TABLE symbol.  */
7349   if (!_bfd_elf_create_dynamic_sections (abfd, info))
7350     return FALSE;
7351
7352   /* Cache the sections created above.  */
7353   htab->splt = bfd_get_linker_section (abfd, ".plt");
7354   htab->sdynbss = bfd_get_linker_section (abfd, ".dynbss");
7355   if (htab->is_vxworks)
7356     {
7357       htab->srelbss = bfd_get_linker_section (abfd, ".rela.bss");
7358       htab->srelplt = bfd_get_linker_section (abfd, ".rela.plt");
7359     }
7360   else
7361     htab->srelplt = bfd_get_linker_section (abfd, ".rel.plt");
7362   if (!htab->sdynbss
7363       || (htab->is_vxworks && !htab->srelbss && !info->shared)
7364       || !htab->srelplt
7365       || !htab->splt)
7366     abort ();
7367
7368   if (htab->is_vxworks)
7369     {
7370       /* Do the usual VxWorks handling.  */
7371       if (!elf_vxworks_create_dynamic_sections (abfd, info, &htab->srelplt2))
7372         return FALSE;
7373
7374       /* Work out the PLT sizes.  */
7375       if (info->shared)
7376         {
7377           htab->plt_header_size
7378             = 4 * ARRAY_SIZE (mips_vxworks_shared_plt0_entry);
7379           htab->plt_entry_size
7380             = 4 * ARRAY_SIZE (mips_vxworks_shared_plt_entry);
7381         }
7382       else
7383         {
7384           htab->plt_header_size
7385             = 4 * ARRAY_SIZE (mips_vxworks_exec_plt0_entry);
7386           htab->plt_entry_size
7387             = 4 * ARRAY_SIZE (mips_vxworks_exec_plt_entry);
7388         }
7389     }
7390   else if (!info->shared)
7391     {
7392       /* All variants of the plt0 entry are the same size.  */
7393       htab->plt_header_size = 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry);
7394       htab->plt_entry_size = 4 * ARRAY_SIZE (mips_exec_plt_entry);
7395     }
7396
7397   return TRUE;
7398 }
7399 \f
7400 /* Return true if relocation REL against section SEC is a REL rather than
7401    RELA relocation.  RELOCS is the first relocation in the section and
7402    ABFD is the bfd that contains SEC.  */
7403
7404 static bfd_boolean
7405 mips_elf_rel_relocation_p (bfd *abfd, asection *sec,
7406                            const Elf_Internal_Rela *relocs,
7407                            const Elf_Internal_Rela *rel)
7408 {
7409   Elf_Internal_Shdr *rel_hdr;
7410   const struct elf_backend_data *bed;
7411
7412   /* To determine which flavor of relocation this is, we depend on the
7413      fact that the INPUT_SECTION's REL_HDR is read before RELA_HDR.  */
7414   rel_hdr = elf_section_data (sec)->rel.hdr;
7415   if (rel_hdr == NULL)
7416     return FALSE;
7417   bed = get_elf_backend_data (abfd);
7418   return ((size_t) (rel - relocs)
7419           < NUM_SHDR_ENTRIES (rel_hdr) * bed->s->int_rels_per_ext_rel);
7420 }
7421
7422 /* Read the addend for REL relocation REL, which belongs to bfd ABFD.
7423    HOWTO is the relocation's howto and CONTENTS points to the contents
7424    of the section that REL is against.  */
7425
7426 static bfd_vma
7427 mips_elf_read_rel_addend (bfd *abfd, const Elf_Internal_Rela *rel,
7428                           reloc_howto_type *howto, bfd_byte *contents)
7429 {
7430   bfd_byte *location;
7431   unsigned int r_type;
7432   bfd_vma addend;
7433
7434   r_type = ELF_R_TYPE (abfd, rel->r_info);
7435   location = contents + rel->r_offset;
7436
7437   /* Get the addend, which is stored in the input file.  */
7438   _bfd_mips_elf_reloc_unshuffle (abfd, r_type, FALSE, location);
7439   addend = mips_elf_obtain_contents (howto, rel, abfd, contents);
7440   _bfd_mips_elf_reloc_shuffle (abfd, r_type, FALSE, location);
7441
7442   return addend & howto->src_mask;
7443 }
7444
7445 /* REL is a relocation in ABFD that needs a partnering LO16 relocation
7446    and *ADDEND is the addend for REL itself.  Look for the LO16 relocation
7447    and update *ADDEND with the final addend.  Return true on success
7448    or false if the LO16 could not be found.  RELEND is the exclusive
7449    upper bound on the relocations for REL's section.  */
7450
7451 static bfd_boolean
7452 mips_elf_add_lo16_rel_addend (bfd *abfd,
7453                               const Elf_Internal_Rela *rel,
7454                               const Elf_Internal_Rela *relend,
7455                               bfd_byte *contents, bfd_vma *addend)
7456 {
7457   unsigned int r_type, lo16_type;
7458   const Elf_Internal_Rela *lo16_relocation;
7459   reloc_howto_type *lo16_howto;
7460   bfd_vma l;
7461
7462   r_type = ELF_R_TYPE (abfd, rel->r_info);
7463   if (mips16_reloc_p (r_type))
7464     lo16_type = R_MIPS16_LO16;
7465   else if (micromips_reloc_p (r_type))
7466     lo16_type = R_MICROMIPS_LO16;
7467   else
7468     lo16_type = R_MIPS_LO16;
7469
7470   /* The combined value is the sum of the HI16 addend, left-shifted by
7471      sixteen bits, and the LO16 addend, sign extended.  (Usually, the
7472      code does a `lui' of the HI16 value, and then an `addiu' of the
7473      LO16 value.)
7474
7475      Scan ahead to find a matching LO16 relocation.
7476
7477      According to the MIPS ELF ABI, the R_MIPS_LO16 relocation must
7478      be immediately following.  However, for the IRIX6 ABI, the next
7479      relocation may be a composed relocation consisting of several
7480      relocations for the same address.  In that case, the R_MIPS_LO16
7481      relocation may occur as one of these.  We permit a similar
7482      extension in general, as that is useful for GCC.
7483
7484      In some cases GCC dead code elimination removes the LO16 but keeps
7485      the corresponding HI16.  This is strictly speaking a violation of
7486      the ABI but not immediately harmful.  */
7487   lo16_relocation = mips_elf_next_relocation (abfd, lo16_type, rel, relend);
7488   if (lo16_relocation == NULL)
7489     return FALSE;
7490
7491   /* Obtain the addend kept there.  */
7492   lo16_howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, lo16_type, FALSE);
7493   l = mips_elf_read_rel_addend (abfd, lo16_relocation, lo16_howto, contents);
7494
7495   l <<= lo16_howto->rightshift;
7496   l = _bfd_mips_elf_sign_extend (l, 16);
7497
7498   *addend <<= 16;
7499   *addend += l;
7500   return TRUE;
7501 }
7502
7503 /* Try to read the contents of section SEC in bfd ABFD.  Return true and
7504    store the contents in *CONTENTS on success.  Assume that *CONTENTS
7505    already holds the contents if it is nonull on entry.  */
7506
7507 static bfd_boolean
7508 mips_elf_get_section_contents (bfd *abfd, asection *sec, bfd_byte **contents)
7509 {
7510   if (*contents)
7511     return TRUE;
7512
7513   /* Get cached copy if it exists.  */
7514   if (elf_section_data (sec)->this_hdr.contents != NULL)
7515     {
7516       *contents = elf_section_data (sec)->this_hdr.contents;
7517       return TRUE;
7518     }
7519
7520   return bfd_malloc_and_get_section (abfd, sec, contents);
7521 }
7522
7523 /* Look through the relocs for a section during the first phase, and
7524    allocate space in the global offset table.  */
7525
7526 bfd_boolean
7527 _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
7528                             asection *sec, const Elf_Internal_Rela *relocs)
7529 {
7530   const char *name;
7531   bfd *dynobj;
7532   Elf_Internal_Shdr *symtab_hdr;
7533   struct elf_link_hash_entry **sym_hashes;
7534   size_t extsymoff;
7535   const Elf_Internal_Rela *rel;
7536   const Elf_Internal_Rela *rel_end;
7537   asection *sreloc;
7538   const struct elf_backend_data *bed;
7539   struct mips_elf_link_hash_table *htab;
7540   bfd_byte *contents;
7541   bfd_vma addend;
7542   reloc_howto_type *howto;
7543
7544   if (info->relocatable)
7545     return TRUE;
7546
7547   htab = mips_elf_hash_table (info);
7548   BFD_ASSERT (htab != NULL);
7549
7550   dynobj = elf_hash_table (info)->dynobj;
7551   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
7552   sym_hashes = elf_sym_hashes (abfd);
7553   extsymoff = (elf_bad_symtab (abfd)) ? 0 : symtab_hdr->sh_info;
7554
7555   bed = get_elf_backend_data (abfd);
7556   rel_end = relocs + sec->reloc_count * bed->s->int_rels_per_ext_rel;
7557
7558   /* Check for the mips16 stub sections.  */
7559
7560   name = bfd_get_section_name (abfd, sec);
7561   if (FN_STUB_P (name))
7562     {
7563       unsigned long r_symndx;
7564
7565       /* Look at the relocation information to figure out which symbol
7566          this is for.  */
7567
7568       r_symndx = mips16_stub_symndx (bed, sec, relocs, rel_end);
7569       if (r_symndx == 0)
7570         {
7571           (*_bfd_error_handler)
7572             (_("%B: Warning: cannot determine the target function for"
7573                " stub section `%s'"),
7574              abfd, name);
7575           bfd_set_error (bfd_error_bad_value);
7576           return FALSE;
7577         }
7578
7579       if (r_symndx < extsymoff
7580           || sym_hashes[r_symndx - extsymoff] == NULL)
7581         {
7582           asection *o;
7583
7584           /* This stub is for a local symbol.  This stub will only be
7585              needed if there is some relocation in this BFD, other
7586              than a 16 bit function call, which refers to this symbol.  */
7587           for (o = abfd->sections; o != NULL; o = o->next)
7588             {
7589               Elf_Internal_Rela *sec_relocs;
7590               const Elf_Internal_Rela *r, *rend;
7591
7592               /* We can ignore stub sections when looking for relocs.  */
7593               if ((o->flags & SEC_RELOC) == 0
7594                   || o->reloc_count == 0
7595                   || section_allows_mips16_refs_p (o))
7596                 continue;
7597
7598               sec_relocs
7599                 = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
7600                                              info->keep_memory);
7601               if (sec_relocs == NULL)
7602                 return FALSE;
7603
7604               rend = sec_relocs + o->reloc_count;
7605               for (r = sec_relocs; r < rend; r++)
7606                 if (ELF_R_SYM (abfd, r->r_info) == r_symndx
7607                     && !mips16_call_reloc_p (ELF_R_TYPE (abfd, r->r_info)))
7608                   break;
7609
7610               if (elf_section_data (o)->relocs != sec_relocs)
7611                 free (sec_relocs);
7612
7613               if (r < rend)
7614                 break;
7615             }
7616
7617           if (o == NULL)
7618             {
7619               /* There is no non-call reloc for this stub, so we do
7620                  not need it.  Since this function is called before
7621                  the linker maps input sections to output sections, we
7622                  can easily discard it by setting the SEC_EXCLUDE
7623                  flag.  */
7624               sec->flags |= SEC_EXCLUDE;
7625               return TRUE;
7626             }
7627
7628           /* Record this stub in an array of local symbol stubs for
7629              this BFD.  */
7630           if (elf_tdata (abfd)->local_stubs == NULL)
7631             {
7632               unsigned long symcount;
7633               asection **n;
7634               bfd_size_type amt;
7635
7636               if (elf_bad_symtab (abfd))
7637                 symcount = NUM_SHDR_ENTRIES (symtab_hdr);
7638               else
7639                 symcount = symtab_hdr->sh_info;
7640               amt = symcount * sizeof (asection *);
7641               n = bfd_zalloc (abfd, amt);
7642               if (n == NULL)
7643                 return FALSE;
7644               elf_tdata (abfd)->local_stubs = n;
7645             }
7646
7647           sec->flags |= SEC_KEEP;
7648           elf_tdata (abfd)->local_stubs[r_symndx] = sec;
7649
7650           /* We don't need to set mips16_stubs_seen in this case.
7651              That flag is used to see whether we need to look through
7652              the global symbol table for stubs.  We don't need to set
7653              it here, because we just have a local stub.  */
7654         }
7655       else
7656         {
7657           struct mips_elf_link_hash_entry *h;
7658
7659           h = ((struct mips_elf_link_hash_entry *)
7660                sym_hashes[r_symndx - extsymoff]);
7661
7662           while (h->root.root.type == bfd_link_hash_indirect
7663                  || h->root.root.type == bfd_link_hash_warning)
7664             h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
7665
7666           /* H is the symbol this stub is for.  */
7667
7668           /* If we already have an appropriate stub for this function, we
7669              don't need another one, so we can discard this one.  Since
7670              this function is called before the linker maps input sections
7671              to output sections, we can easily discard it by setting the
7672              SEC_EXCLUDE flag.  */
7673           if (h->fn_stub != NULL)
7674             {
7675               sec->flags |= SEC_EXCLUDE;
7676               return TRUE;
7677             }
7678
7679           sec->flags |= SEC_KEEP;
7680           h->fn_stub = sec;
7681           mips_elf_hash_table (info)->mips16_stubs_seen = TRUE;
7682         }
7683     }
7684   else if (CALL_STUB_P (name) || CALL_FP_STUB_P (name))
7685     {
7686       unsigned long r_symndx;
7687       struct mips_elf_link_hash_entry *h;
7688       asection **loc;
7689
7690       /* Look at the relocation information to figure out which symbol
7691          this is for.  */
7692
7693       r_symndx = mips16_stub_symndx (bed, sec, relocs, rel_end);
7694       if (r_symndx == 0)
7695         {
7696           (*_bfd_error_handler)
7697             (_("%B: Warning: cannot determine the target function for"
7698                " stub section `%s'"),
7699              abfd, name);
7700           bfd_set_error (bfd_error_bad_value);
7701           return FALSE;
7702         }
7703
7704       if (r_symndx < extsymoff
7705           || sym_hashes[r_symndx - extsymoff] == NULL)
7706         {
7707           asection *o;
7708
7709           /* This stub is for a local symbol.  This stub will only be
7710              needed if there is some relocation (R_MIPS16_26) in this BFD
7711              that refers to this symbol.  */
7712           for (o = abfd->sections; o != NULL; o = o->next)
7713             {
7714               Elf_Internal_Rela *sec_relocs;
7715               const Elf_Internal_Rela *r, *rend;
7716
7717               /* We can ignore stub sections when looking for relocs.  */
7718               if ((o->flags & SEC_RELOC) == 0
7719                   || o->reloc_count == 0
7720                   || section_allows_mips16_refs_p (o))
7721                 continue;
7722
7723               sec_relocs
7724                 = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
7725                                              info->keep_memory);
7726               if (sec_relocs == NULL)
7727                 return FALSE;
7728
7729               rend = sec_relocs + o->reloc_count;
7730               for (r = sec_relocs; r < rend; r++)
7731                 if (ELF_R_SYM (abfd, r->r_info) == r_symndx
7732                     && ELF_R_TYPE (abfd, r->r_info) == R_MIPS16_26)
7733                     break;
7734
7735               if (elf_section_data (o)->relocs != sec_relocs)
7736                 free (sec_relocs);
7737
7738               if (r < rend)
7739                 break;
7740             }
7741
7742           if (o == NULL)
7743             {
7744               /* There is no non-call reloc for this stub, so we do
7745                  not need it.  Since this function is called before
7746                  the linker maps input sections to output sections, we
7747                  can easily discard it by setting the SEC_EXCLUDE
7748                  flag.  */
7749               sec->flags |= SEC_EXCLUDE;
7750               return TRUE;
7751             }
7752
7753           /* Record this stub in an array of local symbol call_stubs for
7754              this BFD.  */
7755           if (elf_tdata (abfd)->local_call_stubs == NULL)
7756             {
7757               unsigned long symcount;
7758               asection **n;
7759               bfd_size_type amt;
7760
7761               if (elf_bad_symtab (abfd))
7762                 symcount = NUM_SHDR_ENTRIES (symtab_hdr);
7763               else
7764                 symcount = symtab_hdr->sh_info;
7765               amt = symcount * sizeof (asection *);
7766               n = bfd_zalloc (abfd, amt);
7767               if (n == NULL)
7768                 return FALSE;
7769               elf_tdata (abfd)->local_call_stubs = n;
7770             }
7771
7772           sec->flags |= SEC_KEEP;
7773           elf_tdata (abfd)->local_call_stubs[r_symndx] = sec;
7774
7775           /* We don't need to set mips16_stubs_seen in this case.
7776              That flag is used to see whether we need to look through
7777              the global symbol table for stubs.  We don't need to set
7778              it here, because we just have a local stub.  */
7779         }
7780       else
7781         {
7782           h = ((struct mips_elf_link_hash_entry *)
7783                sym_hashes[r_symndx - extsymoff]);
7784
7785           /* H is the symbol this stub is for.  */
7786
7787           if (CALL_FP_STUB_P (name))
7788             loc = &h->call_fp_stub;
7789           else
7790             loc = &h->call_stub;
7791
7792           /* If we already have an appropriate stub for this function, we
7793              don't need another one, so we can discard this one.  Since
7794              this function is called before the linker maps input sections
7795              to output sections, we can easily discard it by setting the
7796              SEC_EXCLUDE flag.  */
7797           if (*loc != NULL)
7798             {
7799               sec->flags |= SEC_EXCLUDE;
7800               return TRUE;
7801             }
7802
7803           sec->flags |= SEC_KEEP;
7804           *loc = sec;
7805           mips_elf_hash_table (info)->mips16_stubs_seen = TRUE;
7806         }
7807     }
7808
7809   sreloc = NULL;
7810   contents = NULL;
7811   for (rel = relocs; rel < rel_end; ++rel)
7812     {
7813       unsigned long r_symndx;
7814       unsigned int r_type;
7815       struct elf_link_hash_entry *h;
7816       bfd_boolean can_make_dynamic_p;
7817
7818       r_symndx = ELF_R_SYM (abfd, rel->r_info);
7819       r_type = ELF_R_TYPE (abfd, rel->r_info);
7820
7821       if (r_symndx < extsymoff)
7822         h = NULL;
7823       else if (r_symndx >= extsymoff + NUM_SHDR_ENTRIES (symtab_hdr))
7824         {
7825           (*_bfd_error_handler)
7826             (_("%B: Malformed reloc detected for section %s"),
7827              abfd, name);
7828           bfd_set_error (bfd_error_bad_value);
7829           return FALSE;
7830         }
7831       else
7832         {
7833           h = sym_hashes[r_symndx - extsymoff];
7834           while (h != NULL
7835                  && (h->root.type == bfd_link_hash_indirect
7836                      || h->root.type == bfd_link_hash_warning))
7837             h = (struct elf_link_hash_entry *) h->root.u.i.link;
7838         }
7839
7840       /* Set CAN_MAKE_DYNAMIC_P to true if we can convert this
7841          relocation into a dynamic one.  */
7842       can_make_dynamic_p = FALSE;
7843       switch (r_type)
7844         {
7845         case R_MIPS_GOT16:
7846         case R_MIPS_CALL16:
7847         case R_MIPS_CALL_HI16:
7848         case R_MIPS_CALL_LO16:
7849         case R_MIPS_GOT_HI16:
7850         case R_MIPS_GOT_LO16:
7851         case R_MIPS_GOT_PAGE:
7852         case R_MIPS_GOT_OFST:
7853         case R_MIPS_GOT_DISP:
7854         case R_MIPS_TLS_GOTTPREL:
7855         case R_MIPS_TLS_GD:
7856         case R_MIPS_TLS_LDM:
7857         case R_MIPS16_GOT16:
7858         case R_MIPS16_CALL16:
7859         case R_MIPS16_TLS_GOTTPREL:
7860         case R_MIPS16_TLS_GD:
7861         case R_MIPS16_TLS_LDM:
7862         case R_MICROMIPS_GOT16:
7863         case R_MICROMIPS_CALL16:
7864         case R_MICROMIPS_CALL_HI16:
7865         case R_MICROMIPS_CALL_LO16:
7866         case R_MICROMIPS_GOT_HI16:
7867         case R_MICROMIPS_GOT_LO16:
7868         case R_MICROMIPS_GOT_PAGE:
7869         case R_MICROMIPS_GOT_OFST:
7870         case R_MICROMIPS_GOT_DISP:
7871         case R_MICROMIPS_TLS_GOTTPREL:
7872         case R_MICROMIPS_TLS_GD:
7873         case R_MICROMIPS_TLS_LDM:
7874           if (dynobj == NULL)
7875             elf_hash_table (info)->dynobj = dynobj = abfd;
7876           if (!mips_elf_create_got_section (dynobj, info))
7877             return FALSE;
7878           if (htab->is_vxworks && !info->shared)
7879             {
7880               (*_bfd_error_handler)
7881                 (_("%B: GOT reloc at 0x%lx not expected in executables"),
7882                  abfd, (unsigned long) rel->r_offset);
7883               bfd_set_error (bfd_error_bad_value);
7884               return FALSE;
7885             }
7886           break;
7887
7888           /* This is just a hint; it can safely be ignored.  Don't set
7889              has_static_relocs for the corresponding symbol.  */
7890         case R_MIPS_JALR:
7891         case R_MICROMIPS_JALR:
7892           break;
7893
7894         case R_MIPS_32:
7895         case R_MIPS_REL32:
7896         case R_MIPS_64:
7897           /* In VxWorks executables, references to external symbols
7898              must be handled using copy relocs or PLT entries; it is not
7899              possible to convert this relocation into a dynamic one.
7900
7901              For executables that use PLTs and copy-relocs, we have a
7902              choice between converting the relocation into a dynamic
7903              one or using copy relocations or PLT entries.  It is
7904              usually better to do the former, unless the relocation is
7905              against a read-only section.  */
7906           if ((info->shared
7907                || (h != NULL
7908                    && !htab->is_vxworks
7909                    && strcmp (h->root.root.string, "__gnu_local_gp") != 0
7910                    && !(!info->nocopyreloc
7911                         && !PIC_OBJECT_P (abfd)
7912                         && MIPS_ELF_READONLY_SECTION (sec))))
7913               && (sec->flags & SEC_ALLOC) != 0)
7914             {
7915               can_make_dynamic_p = TRUE;
7916               if (dynobj == NULL)
7917                 elf_hash_table (info)->dynobj = dynobj = abfd;
7918               break;
7919             }
7920           /* For sections that are not SEC_ALLOC a copy reloc would be
7921              output if possible (implying questionable semantics for
7922              read-only data objects) or otherwise the final link would
7923              fail as ld.so will not process them and could not therefore
7924              handle any outstanding dynamic relocations.
7925
7926              For such sections that are also SEC_DEBUGGING, we can avoid
7927              these problems by simply ignoring any relocs as these
7928              sections have a predefined use and we know it is safe to do
7929              so.
7930
7931              This is needed in cases such as a global symbol definition
7932              in a shared library causing a common symbol from an object
7933              file to be converted to an undefined reference.  If that
7934              happens, then all the relocations against this symbol from
7935              SEC_DEBUGGING sections in the object file will resolve to
7936              nil.  */
7937           if ((sec->flags & SEC_DEBUGGING) != 0)
7938             break;
7939           /* Fall through.  */
7940
7941         default:
7942           /* Most static relocations require pointer equality, except
7943              for branches.  */
7944           if (h)
7945             h->pointer_equality_needed = TRUE;
7946           /* Fall through.  */
7947
7948         case R_MIPS_26:
7949         case R_MIPS_PC16:
7950         case R_MIPS16_26:
7951         case R_MICROMIPS_26_S1:
7952         case R_MICROMIPS_PC7_S1:
7953         case R_MICROMIPS_PC10_S1:
7954         case R_MICROMIPS_PC16_S1:
7955         case R_MICROMIPS_PC23_S2:
7956           if (h)
7957             ((struct mips_elf_link_hash_entry *) h)->has_static_relocs = TRUE;
7958           break;
7959         }
7960
7961       if (h)
7962         {
7963           /* Relocations against the special VxWorks __GOTT_BASE__ and
7964              __GOTT_INDEX__ symbols must be left to the loader.  Allocate
7965              room for them in .rela.dyn.  */
7966           if (is_gott_symbol (info, h))
7967             {
7968               if (sreloc == NULL)
7969                 {
7970                   sreloc = mips_elf_rel_dyn_section (info, TRUE);
7971                   if (sreloc == NULL)
7972                     return FALSE;
7973                 }
7974               mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
7975               if (MIPS_ELF_READONLY_SECTION (sec))
7976                 /* We tell the dynamic linker that there are
7977                    relocations against the text segment.  */
7978                 info->flags |= DF_TEXTREL;
7979             }
7980         }
7981       else if (call_lo16_reloc_p (r_type)
7982                || got_lo16_reloc_p (r_type)
7983                || got_disp_reloc_p (r_type)
7984                || (got16_reloc_p (r_type) && htab->is_vxworks))
7985         {
7986           /* We may need a local GOT entry for this relocation.  We
7987              don't count R_MIPS_GOT_PAGE because we can estimate the
7988              maximum number of pages needed by looking at the size of
7989              the segment.  Similar comments apply to R_MIPS*_GOT16 and
7990              R_MIPS*_CALL16, except on VxWorks, where GOT relocations
7991              always evaluate to "G".  We don't count R_MIPS_GOT_HI16, or
7992              R_MIPS_CALL_HI16 because these are always followed by an
7993              R_MIPS_GOT_LO16 or R_MIPS_CALL_LO16.  */
7994           if (!mips_elf_record_local_got_symbol (abfd, r_symndx,
7995                                                  rel->r_addend, info, r_type))
7996             return FALSE;
7997         }
7998
7999       if (h != NULL
8000           && mips_elf_relocation_needs_la25_stub (abfd, r_type,
8001                                                   ELF_ST_IS_MIPS16 (h->other)))
8002         ((struct mips_elf_link_hash_entry *) h)->has_nonpic_branches = TRUE;
8003
8004       switch (r_type)
8005         {
8006         case R_MIPS_CALL16:
8007         case R_MIPS16_CALL16:
8008         case R_MICROMIPS_CALL16:
8009           if (h == NULL)
8010             {
8011               (*_bfd_error_handler)
8012                 (_("%B: CALL16 reloc at 0x%lx not against global symbol"),
8013                  abfd, (unsigned long) rel->r_offset);
8014               bfd_set_error (bfd_error_bad_value);
8015               return FALSE;
8016             }
8017           /* Fall through.  */
8018
8019         case R_MIPS_CALL_HI16:
8020         case R_MIPS_CALL_LO16:
8021         case R_MICROMIPS_CALL_HI16:
8022         case R_MICROMIPS_CALL_LO16:
8023           if (h != NULL)
8024             {
8025               /* Make sure there is room in the regular GOT to hold the
8026                  function's address.  We may eliminate it in favour of
8027                  a .got.plt entry later; see mips_elf_count_got_symbols.  */
8028               if (!mips_elf_record_global_got_symbol (h, abfd, info, TRUE,
8029                                                       r_type))
8030                 return FALSE;
8031
8032               /* We need a stub, not a plt entry for the undefined
8033                  function.  But we record it as if it needs plt.  See
8034                  _bfd_elf_adjust_dynamic_symbol.  */
8035               h->needs_plt = 1;
8036               h->type = STT_FUNC;
8037             }
8038           break;
8039
8040         case R_MIPS_GOT_PAGE:
8041         case R_MICROMIPS_GOT_PAGE:
8042           /* If this is a global, overridable symbol, GOT_PAGE will
8043              decay to GOT_DISP, so we'll need a GOT entry for it.  */
8044           if (h)
8045             {
8046               struct mips_elf_link_hash_entry *hmips =
8047                 (struct mips_elf_link_hash_entry *) h;
8048
8049               /* This symbol is definitely not overridable.  */
8050               if (hmips->root.def_regular
8051                   && ! (info->shared && ! info->symbolic
8052                         && ! hmips->root.forced_local))
8053                 h = NULL;
8054             }
8055           /* Fall through.  */
8056
8057         case R_MIPS16_GOT16:
8058         case R_MIPS_GOT16:
8059         case R_MIPS_GOT_HI16:
8060         case R_MIPS_GOT_LO16:
8061         case R_MICROMIPS_GOT16:
8062         case R_MICROMIPS_GOT_HI16:
8063         case R_MICROMIPS_GOT_LO16:
8064           if (!h || got_page_reloc_p (r_type))
8065             {
8066               /* This relocation needs (or may need, if h != NULL) a
8067                  page entry in the GOT.  For R_MIPS_GOT_PAGE we do not
8068                  know for sure until we know whether the symbol is
8069                  preemptible.  */
8070               if (mips_elf_rel_relocation_p (abfd, sec, relocs, rel))
8071                 {
8072                   if (!mips_elf_get_section_contents (abfd, sec, &contents))
8073                     return FALSE;
8074                   howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, FALSE);
8075                   addend = mips_elf_read_rel_addend (abfd, rel,
8076                                                      howto, contents);
8077                   if (got16_reloc_p (r_type))
8078                     mips_elf_add_lo16_rel_addend (abfd, rel, rel_end,
8079                                                   contents, &addend);
8080                   else
8081                     addend <<= howto->rightshift;
8082                 }
8083               else
8084                 addend = rel->r_addend;
8085               if (!mips_elf_record_got_page_entry (info, abfd, r_symndx,
8086                                                    addend))
8087                 return FALSE;
8088             }
8089           /* Fall through.  */
8090
8091         case R_MIPS_GOT_DISP:
8092         case R_MICROMIPS_GOT_DISP:
8093           if (h && !mips_elf_record_global_got_symbol (h, abfd, info,
8094                                                        FALSE, r_type))
8095             return FALSE;
8096           break;
8097
8098         case R_MIPS_TLS_GOTTPREL:
8099         case R_MIPS16_TLS_GOTTPREL:
8100         case R_MICROMIPS_TLS_GOTTPREL:
8101           if (info->shared)
8102             info->flags |= DF_STATIC_TLS;
8103           /* Fall through */
8104
8105         case R_MIPS_TLS_LDM:
8106         case R_MIPS16_TLS_LDM:
8107         case R_MICROMIPS_TLS_LDM:
8108           if (tls_ldm_reloc_p (r_type))
8109             {
8110               r_symndx = STN_UNDEF;
8111               h = NULL;
8112             }
8113           /* Fall through */
8114
8115         case R_MIPS_TLS_GD:
8116         case R_MIPS16_TLS_GD:
8117         case R_MICROMIPS_TLS_GD:
8118           /* This symbol requires a global offset table entry, or two
8119              for TLS GD relocations.  */
8120           if (h != NULL)
8121             {
8122               if (!mips_elf_record_global_got_symbol (h, abfd, info,
8123                                                       FALSE, r_type))
8124                 return FALSE;
8125             }
8126           else
8127             {
8128               if (!mips_elf_record_local_got_symbol (abfd, r_symndx,
8129                                                      rel->r_addend,
8130                                                      info, r_type))
8131                 return FALSE;
8132             }
8133           break;
8134
8135         case R_MIPS_32:
8136         case R_MIPS_REL32:
8137         case R_MIPS_64:
8138           /* In VxWorks executables, references to external symbols
8139              are handled using copy relocs or PLT stubs, so there's
8140              no need to add a .rela.dyn entry for this relocation.  */
8141           if (can_make_dynamic_p)
8142             {
8143               if (sreloc == NULL)
8144                 {
8145                   sreloc = mips_elf_rel_dyn_section (info, TRUE);
8146                   if (sreloc == NULL)
8147                     return FALSE;
8148                 }
8149               if (info->shared && h == NULL)
8150                 {
8151                   /* When creating a shared object, we must copy these
8152                      reloc types into the output file as R_MIPS_REL32
8153                      relocs.  Make room for this reloc in .rel(a).dyn.  */
8154                   mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
8155                   if (MIPS_ELF_READONLY_SECTION (sec))
8156                     /* We tell the dynamic linker that there are
8157                        relocations against the text segment.  */
8158                     info->flags |= DF_TEXTREL;
8159                 }
8160               else
8161                 {
8162                   struct mips_elf_link_hash_entry *hmips;
8163
8164                   /* For a shared object, we must copy this relocation
8165                      unless the symbol turns out to be undefined and
8166                      weak with non-default visibility, in which case
8167                      it will be left as zero.
8168
8169                      We could elide R_MIPS_REL32 for locally binding symbols
8170                      in shared libraries, but do not yet do so.
8171
8172                      For an executable, we only need to copy this
8173                      reloc if the symbol is defined in a dynamic
8174                      object.  */
8175                   hmips = (struct mips_elf_link_hash_entry *) h;
8176                   ++hmips->possibly_dynamic_relocs;
8177                   if (MIPS_ELF_READONLY_SECTION (sec))
8178                     /* We need it to tell the dynamic linker if there
8179                        are relocations against the text segment.  */
8180                     hmips->readonly_reloc = TRUE;
8181                 }
8182             }
8183
8184           if (SGI_COMPAT (abfd))
8185             mips_elf_hash_table (info)->compact_rel_size +=
8186               sizeof (Elf32_External_crinfo);
8187           break;
8188
8189         case R_MIPS_26:
8190         case R_MIPS_GPREL16:
8191         case R_MIPS_LITERAL:
8192         case R_MIPS_GPREL32:
8193         case R_MICROMIPS_26_S1:
8194         case R_MICROMIPS_GPREL16:
8195         case R_MICROMIPS_LITERAL:
8196         case R_MICROMIPS_GPREL7_S2:
8197           if (SGI_COMPAT (abfd))
8198             mips_elf_hash_table (info)->compact_rel_size +=
8199               sizeof (Elf32_External_crinfo);
8200           break;
8201
8202           /* This relocation describes the C++ object vtable hierarchy.
8203              Reconstruct it for later use during GC.  */
8204         case R_MIPS_GNU_VTINHERIT:
8205           if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
8206             return FALSE;
8207           break;
8208
8209           /* This relocation describes which C++ vtable entries are actually
8210              used.  Record for later use during GC.  */
8211         case R_MIPS_GNU_VTENTRY:
8212           BFD_ASSERT (h != NULL);
8213           if (h != NULL
8214               && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset))
8215             return FALSE;
8216           break;
8217
8218         default:
8219           break;
8220         }
8221
8222       /* We must not create a stub for a symbol that has relocations
8223          related to taking the function's address.  This doesn't apply to
8224          VxWorks, where CALL relocs refer to a .got.plt entry instead of
8225          a normal .got entry.  */
8226       if (!htab->is_vxworks && h != NULL)
8227         switch (r_type)
8228           {
8229           default:
8230             ((struct mips_elf_link_hash_entry *) h)->no_fn_stub = TRUE;
8231             break;
8232           case R_MIPS16_CALL16:
8233           case R_MIPS_CALL16:
8234           case R_MIPS_CALL_HI16:
8235           case R_MIPS_CALL_LO16:
8236           case R_MIPS_JALR:
8237           case R_MICROMIPS_CALL16:
8238           case R_MICROMIPS_CALL_HI16:
8239           case R_MICROMIPS_CALL_LO16:
8240           case R_MICROMIPS_JALR:
8241             break;
8242           }
8243
8244       /* See if this reloc would need to refer to a MIPS16 hard-float stub,
8245          if there is one.  We only need to handle global symbols here;
8246          we decide whether to keep or delete stubs for local symbols
8247          when processing the stub's relocations.  */
8248       if (h != NULL
8249           && !mips16_call_reloc_p (r_type)
8250           && !section_allows_mips16_refs_p (sec))
8251         {
8252           struct mips_elf_link_hash_entry *mh;
8253
8254           mh = (struct mips_elf_link_hash_entry *) h;
8255           mh->need_fn_stub = TRUE;
8256         }
8257
8258       /* Refuse some position-dependent relocations when creating a
8259          shared library.  Do not refuse R_MIPS_32 / R_MIPS_64; they're
8260          not PIC, but we can create dynamic relocations and the result
8261          will be fine.  Also do not refuse R_MIPS_LO16, which can be
8262          combined with R_MIPS_GOT16.  */
8263       if (info->shared)
8264         {
8265           switch (r_type)
8266             {
8267             case R_MIPS16_HI16:
8268             case R_MIPS_HI16:
8269             case R_MIPS_HIGHER:
8270             case R_MIPS_HIGHEST:
8271             case R_MICROMIPS_HI16:
8272             case R_MICROMIPS_HIGHER:
8273             case R_MICROMIPS_HIGHEST:
8274               /* Don't refuse a high part relocation if it's against
8275                  no symbol (e.g. part of a compound relocation).  */
8276               if (r_symndx == STN_UNDEF)
8277                 break;
8278
8279               /* R_MIPS_HI16 against _gp_disp is used for $gp setup,
8280                  and has a special meaning.  */
8281               if (!NEWABI_P (abfd) && h != NULL
8282                   && strcmp (h->root.root.string, "_gp_disp") == 0)
8283                 break;
8284
8285               /* Likewise __GOTT_BASE__ and __GOTT_INDEX__ on VxWorks.  */
8286               if (is_gott_symbol (info, h))
8287                 break;
8288
8289               /* FALLTHROUGH */
8290
8291             case R_MIPS16_26:
8292             case R_MIPS_26:
8293             case R_MICROMIPS_26_S1:
8294               howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, FALSE);
8295               (*_bfd_error_handler)
8296                 (_("%B: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC"),
8297                  abfd, howto->name,
8298                  (h) ? h->root.root.string : "a local symbol");
8299               bfd_set_error (bfd_error_bad_value);
8300               return FALSE;
8301             default:
8302               break;
8303             }
8304         }
8305     }
8306
8307   return TRUE;
8308 }
8309 \f
8310 bfd_boolean
8311 _bfd_mips_relax_section (bfd *abfd, asection *sec,
8312                          struct bfd_link_info *link_info,
8313                          bfd_boolean *again)
8314 {
8315   Elf_Internal_Rela *internal_relocs;
8316   Elf_Internal_Rela *irel, *irelend;
8317   Elf_Internal_Shdr *symtab_hdr;
8318   bfd_byte *contents = NULL;
8319   size_t extsymoff;
8320   bfd_boolean changed_contents = FALSE;
8321   bfd_vma sec_start = sec->output_section->vma + sec->output_offset;
8322   Elf_Internal_Sym *isymbuf = NULL;
8323
8324   /* We are not currently changing any sizes, so only one pass.  */
8325   *again = FALSE;
8326
8327   if (link_info->relocatable)
8328     return TRUE;
8329
8330   internal_relocs = _bfd_elf_link_read_relocs (abfd, sec, NULL, NULL,
8331                                                link_info->keep_memory);
8332   if (internal_relocs == NULL)
8333     return TRUE;
8334
8335   irelend = internal_relocs + sec->reloc_count
8336     * get_elf_backend_data (abfd)->s->int_rels_per_ext_rel;
8337   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
8338   extsymoff = (elf_bad_symtab (abfd)) ? 0 : symtab_hdr->sh_info;
8339
8340   for (irel = internal_relocs; irel < irelend; irel++)
8341     {
8342       bfd_vma symval;
8343       bfd_signed_vma sym_offset;
8344       unsigned int r_type;
8345       unsigned long r_symndx;
8346       asection *sym_sec;
8347       unsigned long instruction;
8348
8349       /* Turn jalr into bgezal, and jr into beq, if they're marked
8350          with a JALR relocation, that indicate where they jump to.
8351          This saves some pipeline bubbles.  */
8352       r_type = ELF_R_TYPE (abfd, irel->r_info);
8353       if (r_type != R_MIPS_JALR)
8354         continue;
8355
8356       r_symndx = ELF_R_SYM (abfd, irel->r_info);
8357       /* Compute the address of the jump target.  */
8358       if (r_symndx >= extsymoff)
8359         {
8360           struct mips_elf_link_hash_entry *h
8361             = ((struct mips_elf_link_hash_entry *)
8362                elf_sym_hashes (abfd) [r_symndx - extsymoff]);
8363
8364           while (h->root.root.type == bfd_link_hash_indirect
8365                  || h->root.root.type == bfd_link_hash_warning)
8366             h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
8367
8368           /* If a symbol is undefined, or if it may be overridden,
8369              skip it.  */
8370           if (! ((h->root.root.type == bfd_link_hash_defined
8371                   || h->root.root.type == bfd_link_hash_defweak)
8372                  && h->root.root.u.def.section)
8373               || (link_info->shared && ! link_info->symbolic
8374                   && !h->root.forced_local))
8375             continue;
8376
8377           sym_sec = h->root.root.u.def.section;
8378           if (sym_sec->output_section)
8379             symval = (h->root.root.u.def.value
8380                       + sym_sec->output_section->vma
8381                       + sym_sec->output_offset);
8382           else
8383             symval = h->root.root.u.def.value;
8384         }
8385       else
8386         {
8387           Elf_Internal_Sym *isym;
8388
8389           /* Read this BFD's symbols if we haven't done so already.  */
8390           if (isymbuf == NULL && symtab_hdr->sh_info != 0)
8391             {
8392               isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
8393               if (isymbuf == NULL)
8394                 isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
8395                                                 symtab_hdr->sh_info, 0,
8396                                                 NULL, NULL, NULL);
8397               if (isymbuf == NULL)
8398                 goto relax_return;
8399             }
8400
8401           isym = isymbuf + r_symndx;
8402           if (isym->st_shndx == SHN_UNDEF)
8403             continue;
8404           else if (isym->st_shndx == SHN_ABS)
8405             sym_sec = bfd_abs_section_ptr;
8406           else if (isym->st_shndx == SHN_COMMON)
8407             sym_sec = bfd_com_section_ptr;
8408           else
8409             sym_sec
8410               = bfd_section_from_elf_index (abfd, isym->st_shndx);
8411           symval = isym->st_value
8412             + sym_sec->output_section->vma
8413             + sym_sec->output_offset;
8414         }
8415
8416       /* Compute branch offset, from delay slot of the jump to the
8417          branch target.  */
8418       sym_offset = (symval + irel->r_addend)
8419         - (sec_start + irel->r_offset + 4);
8420
8421       /* Branch offset must be properly aligned.  */
8422       if ((sym_offset & 3) != 0)
8423         continue;
8424
8425       sym_offset >>= 2;
8426
8427       /* Check that it's in range.  */
8428       if (sym_offset < -0x8000 || sym_offset >= 0x8000)
8429         continue;
8430
8431       /* Get the section contents if we haven't done so already.  */
8432       if (!mips_elf_get_section_contents (abfd, sec, &contents))
8433         goto relax_return;
8434
8435       instruction = bfd_get_32 (abfd, contents + irel->r_offset);
8436
8437       /* If it was jalr <reg>, turn it into bgezal $zero, <target>.  */
8438       if ((instruction & 0xfc1fffff) == 0x0000f809)
8439         instruction = 0x04110000;
8440       /* If it was jr <reg>, turn it into b <target>.  */
8441       else if ((instruction & 0xfc1fffff) == 0x00000008)
8442         instruction = 0x10000000;
8443       else
8444         continue;
8445
8446       instruction |= (sym_offset & 0xffff);
8447       bfd_put_32 (abfd, instruction, contents + irel->r_offset);
8448       changed_contents = TRUE;
8449     }
8450
8451   if (contents != NULL
8452       && elf_section_data (sec)->this_hdr.contents != contents)
8453     {
8454       if (!changed_contents && !link_info->keep_memory)
8455         free (contents);
8456       else
8457         {
8458           /* Cache the section contents for elf_link_input_bfd.  */
8459           elf_section_data (sec)->this_hdr.contents = contents;
8460         }
8461     }
8462   return TRUE;
8463
8464  relax_return:
8465   if (contents != NULL
8466       && elf_section_data (sec)->this_hdr.contents != contents)
8467     free (contents);
8468   return FALSE;
8469 }
8470 \f
8471 /* Allocate space for global sym dynamic relocs.  */
8472
8473 static bfd_boolean
8474 allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
8475 {
8476   struct bfd_link_info *info = inf;
8477   bfd *dynobj;
8478   struct mips_elf_link_hash_entry *hmips;
8479   struct mips_elf_link_hash_table *htab;
8480
8481   htab = mips_elf_hash_table (info);
8482   BFD_ASSERT (htab != NULL);
8483
8484   dynobj = elf_hash_table (info)->dynobj;
8485   hmips = (struct mips_elf_link_hash_entry *) h;
8486
8487   /* VxWorks executables are handled elsewhere; we only need to
8488      allocate relocations in shared objects.  */
8489   if (htab->is_vxworks && !info->shared)
8490     return TRUE;
8491
8492   /* Ignore indirect symbols.  All relocations against such symbols
8493      will be redirected to the target symbol.  */
8494   if (h->root.type == bfd_link_hash_indirect)
8495     return TRUE;
8496
8497   /* If this symbol is defined in a dynamic object, or we are creating
8498      a shared library, we will need to copy any R_MIPS_32 or
8499      R_MIPS_REL32 relocs against it into the output file.  */
8500   if (! info->relocatable
8501       && hmips->possibly_dynamic_relocs != 0
8502       && (h->root.type == bfd_link_hash_defweak
8503           || (!h->def_regular && !ELF_COMMON_DEF_P (h))
8504           || info->shared))
8505     {
8506       bfd_boolean do_copy = TRUE;
8507
8508       if (h->root.type == bfd_link_hash_undefweak)
8509         {
8510           /* Do not copy relocations for undefined weak symbols with
8511              non-default visibility.  */
8512           if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
8513             do_copy = FALSE;
8514
8515           /* Make sure undefined weak symbols are output as a dynamic
8516              symbol in PIEs.  */
8517           else if (h->dynindx == -1 && !h->forced_local)
8518             {
8519               if (! bfd_elf_link_record_dynamic_symbol (info, h))
8520                 return FALSE;
8521             }
8522         }
8523
8524       if (do_copy)
8525         {
8526           /* Even though we don't directly need a GOT entry for this symbol,
8527              the SVR4 psABI requires it to have a dynamic symbol table
8528              index greater that DT_MIPS_GOTSYM if there are dynamic
8529              relocations against it.
8530
8531              VxWorks does not enforce the same mapping between the GOT
8532              and the symbol table, so the same requirement does not
8533              apply there.  */
8534           if (!htab->is_vxworks)
8535             {
8536               if (hmips->global_got_area > GGA_RELOC_ONLY)
8537                 hmips->global_got_area = GGA_RELOC_ONLY;
8538               hmips->got_only_for_calls = FALSE;
8539             }
8540
8541           mips_elf_allocate_dynamic_relocations
8542             (dynobj, info, hmips->possibly_dynamic_relocs);
8543           if (hmips->readonly_reloc)
8544             /* We tell the dynamic linker that there are relocations
8545                against the text segment.  */
8546             info->flags |= DF_TEXTREL;
8547         }
8548     }
8549
8550   return TRUE;
8551 }
8552
8553 /* Adjust a symbol defined by a dynamic object and referenced by a
8554    regular object.  The current definition is in some section of the
8555    dynamic object, but we're not including those sections.  We have to
8556    change the definition to something the rest of the link can
8557    understand.  */
8558
8559 bfd_boolean
8560 _bfd_mips_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
8561                                      struct elf_link_hash_entry *h)
8562 {
8563   bfd *dynobj;
8564   struct mips_elf_link_hash_entry *hmips;
8565   struct mips_elf_link_hash_table *htab;
8566
8567   htab = mips_elf_hash_table (info);
8568   BFD_ASSERT (htab != NULL);
8569
8570   dynobj = elf_hash_table (info)->dynobj;
8571   hmips = (struct mips_elf_link_hash_entry *) h;
8572
8573   /* Make sure we know what is going on here.  */
8574   BFD_ASSERT (dynobj != NULL
8575               && (h->needs_plt
8576                   || h->u.weakdef != NULL
8577                   || (h->def_dynamic
8578                       && h->ref_regular
8579                       && !h->def_regular)));
8580
8581   hmips = (struct mips_elf_link_hash_entry *) h;
8582
8583   /* If there are call relocations against an externally-defined symbol,
8584      see whether we can create a MIPS lazy-binding stub for it.  We can
8585      only do this if all references to the function are through call
8586      relocations, and in that case, the traditional lazy-binding stubs
8587      are much more efficient than PLT entries.
8588
8589      Traditional stubs are only available on SVR4 psABI-based systems;
8590      VxWorks always uses PLTs instead.  */
8591   if (!htab->is_vxworks && h->needs_plt && !hmips->no_fn_stub)
8592     {
8593       if (! elf_hash_table (info)->dynamic_sections_created)
8594         return TRUE;
8595
8596       /* If this symbol is not defined in a regular file, then set
8597          the symbol to the stub location.  This is required to make
8598          function pointers compare as equal between the normal
8599          executable and the shared library.  */
8600       if (!h->def_regular)
8601         {
8602           hmips->needs_lazy_stub = TRUE;
8603           htab->lazy_stub_count++;
8604           return TRUE;
8605         }
8606     }
8607   /* As above, VxWorks requires PLT entries for externally-defined
8608      functions that are only accessed through call relocations.
8609
8610      Both VxWorks and non-VxWorks targets also need PLT entries if there
8611      are static-only relocations against an externally-defined function.
8612      This can technically occur for shared libraries if there are
8613      branches to the symbol, although it is unlikely that this will be
8614      used in practice due to the short ranges involved.  It can occur
8615      for any relative or absolute relocation in executables; in that
8616      case, the PLT entry becomes the function's canonical address.  */
8617   else if (((h->needs_plt && !hmips->no_fn_stub)
8618             || (h->type == STT_FUNC && hmips->has_static_relocs))
8619            && htab->use_plts_and_copy_relocs
8620            && !SYMBOL_CALLS_LOCAL (info, h)
8621            && !(ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
8622                 && h->root.type == bfd_link_hash_undefweak))
8623     {
8624       /* If this is the first symbol to need a PLT entry, allocate room
8625          for the header.  */
8626       if (htab->splt->size == 0)
8627         {
8628           BFD_ASSERT (htab->sgotplt->size == 0);
8629
8630           /* If we're using the PLT additions to the psABI, each PLT
8631              entry is 16 bytes and the PLT0 entry is 32 bytes.
8632              Encourage better cache usage by aligning.  We do this
8633              lazily to avoid pessimizing traditional objects.  */
8634           if (!htab->is_vxworks
8635               && !bfd_set_section_alignment (dynobj, htab->splt, 5))
8636             return FALSE;
8637
8638           /* Make sure that .got.plt is word-aligned.  We do this lazily
8639              for the same reason as above.  */
8640           if (!bfd_set_section_alignment (dynobj, htab->sgotplt,
8641                                           MIPS_ELF_LOG_FILE_ALIGN (dynobj)))
8642             return FALSE;
8643
8644           htab->splt->size += htab->plt_header_size;
8645
8646           /* On non-VxWorks targets, the first two entries in .got.plt
8647              are reserved.  */
8648           if (!htab->is_vxworks)
8649             htab->sgotplt->size
8650               += get_elf_backend_data (dynobj)->got_header_size;
8651
8652           /* On VxWorks, also allocate room for the header's
8653              .rela.plt.unloaded entries.  */
8654           if (htab->is_vxworks && !info->shared)
8655             htab->srelplt2->size += 2 * sizeof (Elf32_External_Rela);
8656         }
8657
8658       /* Assign the next .plt entry to this symbol.  */
8659       h->plt.offset = htab->splt->size;
8660       htab->splt->size += htab->plt_entry_size;
8661
8662       /* If the output file has no definition of the symbol, set the
8663          symbol's value to the address of the stub.  */
8664       if (!info->shared && !h->def_regular)
8665         {
8666           h->root.u.def.section = htab->splt;
8667           h->root.u.def.value = h->plt.offset;
8668           /* For VxWorks, point at the PLT load stub rather than the
8669              lazy resolution stub; this stub will become the canonical
8670              function address.  */
8671           if (htab->is_vxworks)
8672             h->root.u.def.value += 8;
8673         }
8674
8675       /* Make room for the .got.plt entry and the R_MIPS_JUMP_SLOT
8676          relocation.  */
8677       htab->sgotplt->size += MIPS_ELF_GOT_SIZE (dynobj);
8678       htab->srelplt->size += (htab->is_vxworks
8679                               ? MIPS_ELF_RELA_SIZE (dynobj)
8680                               : MIPS_ELF_REL_SIZE (dynobj));
8681
8682       /* Make room for the .rela.plt.unloaded relocations.  */
8683       if (htab->is_vxworks && !info->shared)
8684         htab->srelplt2->size += 3 * sizeof (Elf32_External_Rela);
8685
8686       /* All relocations against this symbol that could have been made
8687          dynamic will now refer to the PLT entry instead.  */
8688       hmips->possibly_dynamic_relocs = 0;
8689
8690       return TRUE;
8691     }
8692
8693   /* If this is a weak symbol, and there is a real definition, the
8694      processor independent code will have arranged for us to see the
8695      real definition first, and we can just use the same value.  */
8696   if (h->u.weakdef != NULL)
8697     {
8698       BFD_ASSERT (h->u.weakdef->root.type == bfd_link_hash_defined
8699                   || h->u.weakdef->root.type == bfd_link_hash_defweak);
8700       h->root.u.def.section = h->u.weakdef->root.u.def.section;
8701       h->root.u.def.value = h->u.weakdef->root.u.def.value;
8702       return TRUE;
8703     }
8704
8705   /* Otherwise, there is nothing further to do for symbols defined
8706      in regular objects.  */
8707   if (h->def_regular)
8708     return TRUE;
8709
8710   /* There's also nothing more to do if we'll convert all relocations
8711      against this symbol into dynamic relocations.  */
8712   if (!hmips->has_static_relocs)
8713     return TRUE;
8714
8715   /* We're now relying on copy relocations.  Complain if we have
8716      some that we can't convert.  */
8717   if (!htab->use_plts_and_copy_relocs || info->shared)
8718     {
8719       (*_bfd_error_handler) (_("non-dynamic relocations refer to "
8720                                "dynamic symbol %s"),
8721                              h->root.root.string);
8722       bfd_set_error (bfd_error_bad_value);
8723       return FALSE;
8724     }
8725
8726   /* We must allocate the symbol in our .dynbss section, which will
8727      become part of the .bss section of the executable.  There will be
8728      an entry for this symbol in the .dynsym section.  The dynamic
8729      object will contain position independent code, so all references
8730      from the dynamic object to this symbol will go through the global
8731      offset table.  The dynamic linker will use the .dynsym entry to
8732      determine the address it must put in the global offset table, so
8733      both the dynamic object and the regular object will refer to the
8734      same memory location for the variable.  */
8735
8736   if ((h->root.u.def.section->flags & SEC_ALLOC) != 0)
8737     {
8738       if (htab->is_vxworks)
8739         htab->srelbss->size += sizeof (Elf32_External_Rela);
8740       else
8741         mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
8742       h->needs_copy = 1;
8743     }
8744
8745   /* All relocations against this symbol that could have been made
8746      dynamic will now refer to the local copy instead.  */
8747   hmips->possibly_dynamic_relocs = 0;
8748
8749   return _bfd_elf_adjust_dynamic_copy (h, htab->sdynbss);
8750 }
8751 \f
8752 /* This function is called after all the input files have been read,
8753    and the input sections have been assigned to output sections.  We
8754    check for any mips16 stub sections that we can discard.  */
8755
8756 bfd_boolean
8757 _bfd_mips_elf_always_size_sections (bfd *output_bfd,
8758                                     struct bfd_link_info *info)
8759 {
8760   asection *ri;
8761   struct mips_elf_link_hash_table *htab;
8762   struct mips_htab_traverse_info hti;
8763
8764   htab = mips_elf_hash_table (info);
8765   BFD_ASSERT (htab != NULL);
8766
8767   /* The .reginfo section has a fixed size.  */
8768   ri = bfd_get_section_by_name (output_bfd, ".reginfo");
8769   if (ri != NULL)
8770     bfd_set_section_size (output_bfd, ri, sizeof (Elf32_External_RegInfo));
8771
8772   hti.info = info;
8773   hti.output_bfd = output_bfd;
8774   hti.error = FALSE;
8775   mips_elf_link_hash_traverse (mips_elf_hash_table (info),
8776                                mips_elf_check_symbols, &hti);
8777   if (hti.error)
8778     return FALSE;
8779
8780   return TRUE;
8781 }
8782
8783 /* If the link uses a GOT, lay it out and work out its size.  */
8784
8785 static bfd_boolean
8786 mips_elf_lay_out_got (bfd *output_bfd, struct bfd_link_info *info)
8787 {
8788   bfd *dynobj;
8789   asection *s;
8790   struct mips_got_info *g;
8791   bfd_size_type loadable_size = 0;
8792   bfd_size_type page_gotno;
8793   bfd *ibfd;
8794   struct mips_elf_traverse_got_arg tga;
8795   struct mips_elf_link_hash_table *htab;
8796
8797   htab = mips_elf_hash_table (info);
8798   BFD_ASSERT (htab != NULL);
8799
8800   s = htab->sgot;
8801   if (s == NULL)
8802     return TRUE;
8803
8804   dynobj = elf_hash_table (info)->dynobj;
8805   g = htab->got_info;
8806
8807   /* Allocate room for the reserved entries.  VxWorks always reserves
8808      3 entries; other objects only reserve 2 entries.  */
8809   BFD_ASSERT (g->assigned_gotno == 0);
8810   if (htab->is_vxworks)
8811     htab->reserved_gotno = 3;
8812   else
8813     htab->reserved_gotno = 2;
8814   g->local_gotno += htab->reserved_gotno;
8815   g->assigned_gotno = htab->reserved_gotno;
8816
8817   /* Replace entries for indirect and warning symbols with entries for
8818      the target symbol.  */
8819   if (!mips_elf_resolve_final_got_entries (g))
8820     return FALSE;
8821
8822   /* Count the number of GOT symbols.  */
8823   mips_elf_link_hash_traverse (htab, mips_elf_count_got_symbols, info);
8824
8825   /* Calculate the total loadable size of the output.  That
8826      will give us the maximum number of GOT_PAGE entries
8827      required.  */
8828   for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link_next)
8829     {
8830       asection *subsection;
8831
8832       for (subsection = ibfd->sections;
8833            subsection;
8834            subsection = subsection->next)
8835         {
8836           if ((subsection->flags & SEC_ALLOC) == 0)
8837             continue;
8838           loadable_size += ((subsection->size + 0xf)
8839                             &~ (bfd_size_type) 0xf);
8840         }
8841     }
8842
8843   if (htab->is_vxworks)
8844     /* There's no need to allocate page entries for VxWorks; R_MIPS*_GOT16
8845        relocations against local symbols evaluate to "G", and the EABI does
8846        not include R_MIPS_GOT_PAGE.  */
8847     page_gotno = 0;
8848   else
8849     /* Assume there are two loadable segments consisting of contiguous
8850        sections.  Is 5 enough?  */
8851     page_gotno = (loadable_size >> 16) + 5;
8852
8853   /* Choose the smaller of the two estimates; both are intended to be
8854      conservative.  */
8855   if (page_gotno > g->page_gotno)
8856     page_gotno = g->page_gotno;
8857
8858   g->local_gotno += page_gotno;
8859
8860   /* Count the number of local GOT entries and TLS relocs.  */
8861   tga.info = info;
8862   tga.g = g;
8863   htab_traverse (g->got_entries, mips_elf_count_local_got_entries, &tga);
8864
8865   /* We need to calculate tls_gotno for global symbols at this point
8866      instead of building it up earlier, to avoid doublecounting
8867      entries for one global symbol from multiple input files.  */
8868   elf_link_hash_traverse (elf_hash_table (info),
8869                           mips_elf_count_global_tls_entries,
8870                           &tga);
8871
8872   s->size += g->local_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
8873   s->size += g->global_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
8874   s->size += g->tls_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
8875
8876   /* VxWorks does not support multiple GOTs.  It initializes $gp to
8877      __GOTT_BASE__[__GOTT_INDEX__], the value of which is set by the
8878      dynamic loader.  */
8879   if (htab->is_vxworks)
8880     {
8881       /* VxWorks executables do not need a GOT.  */
8882       if (info->shared)
8883         {
8884           /* Each VxWorks GOT entry needs an explicit relocation.  */
8885           unsigned int count;
8886
8887           count = g->global_gotno + g->local_gotno - htab->reserved_gotno;
8888           if (count)
8889             mips_elf_allocate_dynamic_relocations (dynobj, info, count);
8890         }
8891     }
8892   else if (s->size > MIPS_ELF_GOT_MAX_SIZE (info))
8893     {
8894       if (!mips_elf_multi_got (output_bfd, info, s, page_gotno))
8895         return FALSE;
8896     }
8897   else
8898     {
8899       /* Record that all bfds use G.  This also has the effect of freeing
8900          the per-bfd GOTs, which we no longer need.  */
8901       for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link_next)
8902         if (mips_elf_bfd_got (ibfd, FALSE))
8903           mips_elf_replace_bfd_got (ibfd, g);
8904       mips_elf_replace_bfd_got (output_bfd, g);
8905
8906       /* Set up TLS entries.  */
8907       g->tls_assigned_gotno = g->global_gotno + g->local_gotno;
8908       tga.info = info;
8909       tga.g = g;
8910       tga.value = MIPS_ELF_GOT_SIZE (output_bfd);
8911       htab_traverse (g->got_entries, mips_elf_initialize_tls_index, &tga);
8912       if (!tga.g)
8913         return FALSE;
8914       BFD_ASSERT (g->tls_assigned_gotno
8915                   == g->global_gotno + g->local_gotno + g->tls_gotno);
8916
8917       /* Allocate room for the TLS relocations.  */
8918       if (g->relocs)
8919         mips_elf_allocate_dynamic_relocations (dynobj, info, g->relocs);
8920     }
8921
8922   return TRUE;
8923 }
8924
8925 /* Estimate the size of the .MIPS.stubs section.  */
8926
8927 static void
8928 mips_elf_estimate_stub_size (bfd *output_bfd, struct bfd_link_info *info)
8929 {
8930   struct mips_elf_link_hash_table *htab;
8931   bfd_size_type dynsymcount;
8932
8933   htab = mips_elf_hash_table (info);
8934   BFD_ASSERT (htab != NULL);
8935
8936   if (htab->lazy_stub_count == 0)
8937     return;
8938
8939   /* IRIX rld assumes that a function stub isn't at the end of the .text
8940      section, so add a dummy entry to the end.  */
8941   htab->lazy_stub_count++;
8942
8943   /* Get a worst-case estimate of the number of dynamic symbols needed.
8944      At this point, dynsymcount does not account for section symbols
8945      and count_section_dynsyms may overestimate the number that will
8946      be needed.  */
8947   dynsymcount = (elf_hash_table (info)->dynsymcount
8948                  + count_section_dynsyms (output_bfd, info));
8949
8950   /* Determine the size of one stub entry.  */
8951   htab->function_stub_size = (dynsymcount > 0x10000
8952                               ? MIPS_FUNCTION_STUB_BIG_SIZE
8953                               : MIPS_FUNCTION_STUB_NORMAL_SIZE);
8954
8955   htab->sstubs->size = htab->lazy_stub_count * htab->function_stub_size;
8956 }
8957
8958 /* A mips_elf_link_hash_traverse callback for which DATA points to the
8959    MIPS hash table.  If H needs a traditional MIPS lazy-binding stub,
8960    allocate an entry in the stubs section.  */
8961
8962 static bfd_boolean
8963 mips_elf_allocate_lazy_stub (struct mips_elf_link_hash_entry *h, void **data)
8964 {
8965   struct mips_elf_link_hash_table *htab;
8966
8967   htab = (struct mips_elf_link_hash_table *) data;
8968   if (h->needs_lazy_stub)
8969     {
8970       h->root.root.u.def.section = htab->sstubs;
8971       h->root.root.u.def.value = htab->sstubs->size;
8972       h->root.plt.offset = htab->sstubs->size;
8973       htab->sstubs->size += htab->function_stub_size;
8974     }
8975   return TRUE;
8976 }
8977
8978 /* Allocate offsets in the stubs section to each symbol that needs one.
8979    Set the final size of the .MIPS.stub section.  */
8980
8981 static void
8982 mips_elf_lay_out_lazy_stubs (struct bfd_link_info *info)
8983 {
8984   struct mips_elf_link_hash_table *htab;
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   htab->sstubs->size = 0;
8993   mips_elf_link_hash_traverse (htab, mips_elf_allocate_lazy_stub, htab);
8994   htab->sstubs->size += htab->function_stub_size;
8995   BFD_ASSERT (htab->sstubs->size
8996               == htab->lazy_stub_count * htab->function_stub_size);
8997 }
8998
8999 /* Set the sizes of the dynamic sections.  */
9000
9001 bfd_boolean
9002 _bfd_mips_elf_size_dynamic_sections (bfd *output_bfd,
9003                                      struct bfd_link_info *info)
9004 {
9005   bfd *dynobj;
9006   asection *s, *sreldyn;
9007   bfd_boolean reltext;
9008   struct mips_elf_link_hash_table *htab;
9009
9010   htab = mips_elf_hash_table (info);
9011   BFD_ASSERT (htab != NULL);
9012   dynobj = elf_hash_table (info)->dynobj;
9013   BFD_ASSERT (dynobj != NULL);
9014
9015   if (elf_hash_table (info)->dynamic_sections_created)
9016     {
9017       /* Set the contents of the .interp section to the interpreter.  */
9018       if (info->executable)
9019         {
9020           s = bfd_get_linker_section (dynobj, ".interp");
9021           BFD_ASSERT (s != NULL);
9022           s->size
9023             = strlen (ELF_DYNAMIC_INTERPRETER (output_bfd)) + 1;
9024           s->contents
9025             = (bfd_byte *) ELF_DYNAMIC_INTERPRETER (output_bfd);
9026         }
9027
9028       /* Create a symbol for the PLT, if we know that we are using it.  */
9029       if (htab->splt && htab->splt->size > 0 && htab->root.hplt == NULL)
9030         {
9031           struct elf_link_hash_entry *h;
9032
9033           BFD_ASSERT (htab->use_plts_and_copy_relocs);
9034
9035           h = _bfd_elf_define_linkage_sym (dynobj, info, htab->splt,
9036                                            "_PROCEDURE_LINKAGE_TABLE_");
9037           htab->root.hplt = h;
9038           if (h == NULL)
9039             return FALSE;
9040           h->type = STT_FUNC;
9041         }
9042     }
9043
9044   /* Allocate space for global sym dynamic relocs.  */
9045   elf_link_hash_traverse (&htab->root, allocate_dynrelocs, info);
9046
9047   mips_elf_estimate_stub_size (output_bfd, info);
9048
9049   if (!mips_elf_lay_out_got (output_bfd, info))
9050     return FALSE;
9051
9052   mips_elf_lay_out_lazy_stubs (info);
9053
9054   /* The check_relocs and adjust_dynamic_symbol entry points have
9055      determined the sizes of the various dynamic sections.  Allocate
9056      memory for them.  */
9057   reltext = FALSE;
9058   for (s = dynobj->sections; s != NULL; s = s->next)
9059     {
9060       const char *name;
9061
9062       /* It's OK to base decisions on the section name, because none
9063          of the dynobj section names depend upon the input files.  */
9064       name = bfd_get_section_name (dynobj, s);
9065
9066       if ((s->flags & SEC_LINKER_CREATED) == 0)
9067         continue;
9068
9069       if (CONST_STRNEQ (name, ".rel"))
9070         {
9071           if (s->size != 0)
9072             {
9073               const char *outname;
9074               asection *target;
9075
9076               /* If this relocation section applies to a read only
9077                  section, then we probably need a DT_TEXTREL entry.
9078                  If the relocation section is .rel(a).dyn, we always
9079                  assert a DT_TEXTREL entry rather than testing whether
9080                  there exists a relocation to a read only section or
9081                  not.  */
9082               outname = bfd_get_section_name (output_bfd,
9083                                               s->output_section);
9084               target = bfd_get_section_by_name (output_bfd, outname + 4);
9085               if ((target != NULL
9086                    && (target->flags & SEC_READONLY) != 0
9087                    && (target->flags & SEC_ALLOC) != 0)
9088                   || strcmp (outname, MIPS_ELF_REL_DYN_NAME (info)) == 0)
9089                 reltext = TRUE;
9090
9091               /* We use the reloc_count field as a counter if we need
9092                  to copy relocs into the output file.  */
9093               if (strcmp (name, MIPS_ELF_REL_DYN_NAME (info)) != 0)
9094                 s->reloc_count = 0;
9095
9096               /* If combreloc is enabled, elf_link_sort_relocs() will
9097                  sort relocations, but in a different way than we do,
9098                  and before we're done creating relocations.  Also, it
9099                  will move them around between input sections'
9100                  relocation's contents, so our sorting would be
9101                  broken, so don't let it run.  */
9102               info->combreloc = 0;
9103             }
9104         }
9105       else if (! info->shared
9106                && ! mips_elf_hash_table (info)->use_rld_obj_head
9107                && CONST_STRNEQ (name, ".rld_map"))
9108         {
9109           /* We add a room for __rld_map.  It will be filled in by the
9110              rtld to contain a pointer to the _r_debug structure.  */
9111           s->size += MIPS_ELF_RLD_MAP_SIZE (output_bfd);
9112         }
9113       else if (SGI_COMPAT (output_bfd)
9114                && CONST_STRNEQ (name, ".compact_rel"))
9115         s->size += mips_elf_hash_table (info)->compact_rel_size;
9116       else if (s == htab->splt)
9117         {
9118           /* If the last PLT entry has a branch delay slot, allocate
9119              room for an extra nop to fill the delay slot.  This is
9120              for CPUs without load interlocking.  */
9121           if (! LOAD_INTERLOCKS_P (output_bfd)
9122               && ! htab->is_vxworks && s->size > 0)
9123             s->size += 4;
9124         }
9125       else if (! CONST_STRNEQ (name, ".init")
9126                && s != htab->sgot
9127                && s != htab->sgotplt
9128                && s != htab->sstubs
9129                && s != htab->sdynbss)
9130         {
9131           /* It's not one of our sections, so don't allocate space.  */
9132           continue;
9133         }
9134
9135       if (s->size == 0)
9136         {
9137           s->flags |= SEC_EXCLUDE;
9138           continue;
9139         }
9140
9141       if ((s->flags & SEC_HAS_CONTENTS) == 0)
9142         continue;
9143
9144       /* Allocate memory for the section contents.  */
9145       s->contents = bfd_zalloc (dynobj, s->size);
9146       if (s->contents == NULL)
9147         {
9148           bfd_set_error (bfd_error_no_memory);
9149           return FALSE;
9150         }
9151     }
9152
9153   if (elf_hash_table (info)->dynamic_sections_created)
9154     {
9155       /* Add some entries to the .dynamic section.  We fill in the
9156          values later, in _bfd_mips_elf_finish_dynamic_sections, but we
9157          must add the entries now so that we get the correct size for
9158          the .dynamic section.  */
9159
9160       /* SGI object has the equivalence of DT_DEBUG in the
9161          DT_MIPS_RLD_MAP entry.  This must come first because glibc
9162          only fills in DT_MIPS_RLD_MAP (not DT_DEBUG) and some tools
9163          may only look at the first one they see.  */
9164       if (!info->shared
9165           && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_MAP, 0))
9166         return FALSE;
9167
9168       /* The DT_DEBUG entry may be filled in by the dynamic linker and
9169          used by the debugger.  */
9170       if (info->executable
9171           && !SGI_COMPAT (output_bfd)
9172           && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_DEBUG, 0))
9173         return FALSE;
9174
9175       if (reltext && (SGI_COMPAT (output_bfd) || htab->is_vxworks))
9176         info->flags |= DF_TEXTREL;
9177
9178       if ((info->flags & DF_TEXTREL) != 0)
9179         {
9180           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_TEXTREL, 0))
9181             return FALSE;
9182
9183           /* Clear the DF_TEXTREL flag.  It will be set again if we
9184              write out an actual text relocation; we may not, because
9185              at this point we do not know whether e.g. any .eh_frame
9186              absolute relocations have been converted to PC-relative.  */
9187           info->flags &= ~DF_TEXTREL;
9188         }
9189
9190       if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTGOT, 0))
9191         return FALSE;
9192
9193       sreldyn = mips_elf_rel_dyn_section (info, FALSE);
9194       if (htab->is_vxworks)
9195         {
9196           /* VxWorks uses .rela.dyn instead of .rel.dyn.  It does not
9197              use any of the DT_MIPS_* tags.  */
9198           if (sreldyn && sreldyn->size > 0)
9199             {
9200               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELA, 0))
9201                 return FALSE;
9202
9203               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELASZ, 0))
9204                 return FALSE;
9205
9206               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELAENT, 0))
9207                 return FALSE;
9208             }
9209         }
9210       else
9211         {
9212           if (sreldyn && sreldyn->size > 0)
9213             {
9214               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_REL, 0))
9215                 return FALSE;
9216
9217               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELSZ, 0))
9218                 return FALSE;
9219
9220               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELENT, 0))
9221                 return FALSE;
9222             }
9223
9224           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_VERSION, 0))
9225             return FALSE;
9226
9227           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_FLAGS, 0))
9228             return FALSE;
9229
9230           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_BASE_ADDRESS, 0))
9231             return FALSE;
9232
9233           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_LOCAL_GOTNO, 0))
9234             return FALSE;
9235
9236           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_SYMTABNO, 0))
9237             return FALSE;
9238
9239           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_UNREFEXTNO, 0))
9240             return FALSE;
9241
9242           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_GOTSYM, 0))
9243             return FALSE;
9244
9245           if (IRIX_COMPAT (dynobj) == ict_irix5
9246               && ! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_HIPAGENO, 0))
9247             return FALSE;
9248
9249           if (IRIX_COMPAT (dynobj) == ict_irix6
9250               && (bfd_get_section_by_name
9251                   (output_bfd, MIPS_ELF_OPTIONS_SECTION_NAME (dynobj)))
9252               && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_OPTIONS, 0))
9253             return FALSE;
9254         }
9255       if (htab->splt->size > 0)
9256         {
9257           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTREL, 0))
9258             return FALSE;
9259
9260           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_JMPREL, 0))
9261             return FALSE;
9262
9263           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTRELSZ, 0))
9264             return FALSE;
9265
9266           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_PLTGOT, 0))
9267             return FALSE;
9268         }
9269       if (htab->is_vxworks
9270           && !elf_vxworks_add_dynamic_entries (output_bfd, info))
9271         return FALSE;
9272     }
9273
9274   return TRUE;
9275 }
9276 \f
9277 /* REL is a relocation in INPUT_BFD that is being copied to OUTPUT_BFD.
9278    Adjust its R_ADDEND field so that it is correct for the output file.
9279    LOCAL_SYMS and LOCAL_SECTIONS are arrays of INPUT_BFD's local symbols
9280    and sections respectively; both use symbol indexes.  */
9281
9282 static void
9283 mips_elf_adjust_addend (bfd *output_bfd, struct bfd_link_info *info,
9284                         bfd *input_bfd, Elf_Internal_Sym *local_syms,
9285                         asection **local_sections, Elf_Internal_Rela *rel)
9286 {
9287   unsigned int r_type, r_symndx;
9288   Elf_Internal_Sym *sym;
9289   asection *sec;
9290
9291   if (mips_elf_local_relocation_p (input_bfd, rel, local_sections))
9292     {
9293       r_type = ELF_R_TYPE (output_bfd, rel->r_info);
9294       if (gprel16_reloc_p (r_type)
9295           || r_type == R_MIPS_GPREL32
9296           || literal_reloc_p (r_type))
9297         {
9298           rel->r_addend += _bfd_get_gp_value (input_bfd);
9299           rel->r_addend -= _bfd_get_gp_value (output_bfd);
9300         }
9301
9302       r_symndx = ELF_R_SYM (output_bfd, rel->r_info);
9303       sym = local_syms + r_symndx;
9304
9305       /* Adjust REL's addend to account for section merging.  */
9306       if (!info->relocatable)
9307         {
9308           sec = local_sections[r_symndx];
9309           _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
9310         }
9311
9312       /* This would normally be done by the rela_normal code in elflink.c.  */
9313       if (ELF_ST_TYPE (sym->st_info) == STT_SECTION)
9314         rel->r_addend += local_sections[r_symndx]->output_offset;
9315     }
9316 }
9317
9318 /* Handle relocations against symbols from removed linkonce sections,
9319    or sections discarded by a linker script.  We use this wrapper around
9320    RELOC_AGAINST_DISCARDED_SECTION to handle triplets of compound relocs
9321    on 64-bit ELF targets.  In this case for any relocation handled, which
9322    always be the first in a triplet, the remaining two have to be processed
9323    together with the first, even if they are R_MIPS_NONE.  It is the symbol
9324    index referred by the first reloc that applies to all the three and the
9325    remaining two never refer to an object symbol.  And it is the final
9326    relocation (the last non-null one) that determines the output field of
9327    the whole relocation so retrieve the corresponding howto structure for
9328    the relocatable field to be cleared by RELOC_AGAINST_DISCARDED_SECTION.
9329
9330    Note that RELOC_AGAINST_DISCARDED_SECTION is a macro that uses "continue"
9331    and therefore requires to be pasted in a loop.  It also defines a block
9332    and does not protect any of its arguments, hence the extra brackets.  */
9333
9334 static void
9335 mips_reloc_against_discarded_section (bfd *output_bfd,
9336                                       struct bfd_link_info *info,
9337                                       bfd *input_bfd, asection *input_section,
9338                                       Elf_Internal_Rela **rel,
9339                                       const Elf_Internal_Rela **relend,
9340                                       bfd_boolean rel_reloc,
9341                                       reloc_howto_type *howto,
9342                                       bfd_byte *contents)
9343 {
9344   const struct elf_backend_data *bed = get_elf_backend_data (output_bfd);
9345   int count = bed->s->int_rels_per_ext_rel;
9346   unsigned int r_type;
9347   int i;
9348
9349   for (i = count - 1; i > 0; i--)
9350     {
9351       r_type = ELF_R_TYPE (output_bfd, (*rel)[i].r_info);
9352       if (r_type != R_MIPS_NONE)
9353         {
9354           howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, r_type, !rel_reloc);
9355           break;
9356         }
9357     }
9358   do
9359     {
9360        RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
9361                                         (*rel), count, (*relend),
9362                                         howto, i, contents);
9363     }
9364   while (0);
9365 }
9366
9367 /* Relocate a MIPS ELF section.  */
9368
9369 bfd_boolean
9370 _bfd_mips_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
9371                                 bfd *input_bfd, asection *input_section,
9372                                 bfd_byte *contents, Elf_Internal_Rela *relocs,
9373                                 Elf_Internal_Sym *local_syms,
9374                                 asection **local_sections)
9375 {
9376   Elf_Internal_Rela *rel;
9377   const Elf_Internal_Rela *relend;
9378   bfd_vma addend = 0;
9379   bfd_boolean use_saved_addend_p = FALSE;
9380   const struct elf_backend_data *bed;
9381
9382   bed = get_elf_backend_data (output_bfd);
9383   relend = relocs + input_section->reloc_count * bed->s->int_rels_per_ext_rel;
9384   for (rel = relocs; rel < relend; ++rel)
9385     {
9386       const char *name;
9387       bfd_vma value = 0;
9388       reloc_howto_type *howto;
9389       bfd_boolean cross_mode_jump_p;
9390       /* TRUE if the relocation is a RELA relocation, rather than a
9391          REL relocation.  */
9392       bfd_boolean rela_relocation_p = TRUE;
9393       unsigned int r_type = ELF_R_TYPE (output_bfd, rel->r_info);
9394       const char *msg;
9395       unsigned long r_symndx;
9396       asection *sec;
9397       Elf_Internal_Shdr *symtab_hdr;
9398       struct elf_link_hash_entry *h;
9399       bfd_boolean rel_reloc;
9400
9401       rel_reloc = (NEWABI_P (input_bfd)
9402                    && mips_elf_rel_relocation_p (input_bfd, input_section,
9403                                                  relocs, rel));
9404       /* Find the relocation howto for this relocation.  */
9405       howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, r_type, !rel_reloc);
9406
9407       r_symndx = ELF_R_SYM (input_bfd, rel->r_info);
9408       symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
9409       if (mips_elf_local_relocation_p (input_bfd, rel, local_sections))
9410         {
9411           sec = local_sections[r_symndx];
9412           h = NULL;
9413         }
9414       else
9415         {
9416           unsigned long extsymoff;
9417
9418           extsymoff = 0;
9419           if (!elf_bad_symtab (input_bfd))
9420             extsymoff = symtab_hdr->sh_info;
9421           h = elf_sym_hashes (input_bfd) [r_symndx - extsymoff];
9422           while (h->root.type == bfd_link_hash_indirect
9423                  || h->root.type == bfd_link_hash_warning)
9424             h = (struct elf_link_hash_entry *) h->root.u.i.link;
9425
9426           sec = NULL;
9427           if (h->root.type == bfd_link_hash_defined
9428               || h->root.type == bfd_link_hash_defweak)
9429             sec = h->root.u.def.section;
9430         }
9431
9432       if (sec != NULL && discarded_section (sec))
9433         {
9434           mips_reloc_against_discarded_section (output_bfd, info, input_bfd,
9435                                                 input_section, &rel, &relend,
9436                                                 rel_reloc, howto, contents);
9437           continue;
9438         }
9439
9440       if (r_type == R_MIPS_64 && ! NEWABI_P (input_bfd))
9441         {
9442           /* Some 32-bit code uses R_MIPS_64.  In particular, people use
9443              64-bit code, but make sure all their addresses are in the
9444              lowermost or uppermost 32-bit section of the 64-bit address
9445              space.  Thus, when they use an R_MIPS_64 they mean what is
9446              usually meant by R_MIPS_32, with the exception that the
9447              stored value is sign-extended to 64 bits.  */
9448           howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, R_MIPS_32, FALSE);
9449
9450           /* On big-endian systems, we need to lie about the position
9451              of the reloc.  */
9452           if (bfd_big_endian (input_bfd))
9453             rel->r_offset += 4;
9454         }
9455
9456       if (!use_saved_addend_p)
9457         {
9458           /* If these relocations were originally of the REL variety,
9459              we must pull the addend out of the field that will be
9460              relocated.  Otherwise, we simply use the contents of the
9461              RELA relocation.  */
9462           if (mips_elf_rel_relocation_p (input_bfd, input_section,
9463                                          relocs, rel))
9464             {
9465               rela_relocation_p = FALSE;
9466               addend = mips_elf_read_rel_addend (input_bfd, rel,
9467                                                  howto, contents);
9468               if (hi16_reloc_p (r_type)
9469                   || (got16_reloc_p (r_type)
9470                       && mips_elf_local_relocation_p (input_bfd, rel,
9471                                                       local_sections)))
9472                 {
9473                   if (!mips_elf_add_lo16_rel_addend (input_bfd, rel, relend,
9474                                                      contents, &addend))
9475                     {
9476                       if (h)
9477                         name = h->root.root.string;
9478                       else
9479                         name = bfd_elf_sym_name (input_bfd, symtab_hdr,
9480                                                  local_syms + r_symndx,
9481                                                  sec);
9482                       (*_bfd_error_handler)
9483                         (_("%B: Can't find matching LO16 reloc against `%s' for %s at 0x%lx in section `%A'"),
9484                          input_bfd, input_section, name, howto->name,
9485                          rel->r_offset);
9486                     }
9487                 }
9488               else
9489                 addend <<= howto->rightshift;
9490             }
9491           else
9492             addend = rel->r_addend;
9493           mips_elf_adjust_addend (output_bfd, info, input_bfd,
9494                                   local_syms, local_sections, rel);
9495         }
9496
9497       if (info->relocatable)
9498         {
9499           if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd)
9500               && bfd_big_endian (input_bfd))
9501             rel->r_offset -= 4;
9502
9503           if (!rela_relocation_p && rel->r_addend)
9504             {
9505               addend += rel->r_addend;
9506               if (hi16_reloc_p (r_type) || got16_reloc_p (r_type))
9507                 addend = mips_elf_high (addend);
9508               else if (r_type == R_MIPS_HIGHER)
9509                 addend = mips_elf_higher (addend);
9510               else if (r_type == R_MIPS_HIGHEST)
9511                 addend = mips_elf_highest (addend);
9512               else
9513                 addend >>= howto->rightshift;
9514
9515               /* We use the source mask, rather than the destination
9516                  mask because the place to which we are writing will be
9517                  source of the addend in the final link.  */
9518               addend &= howto->src_mask;
9519
9520               if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd))
9521                 /* See the comment above about using R_MIPS_64 in the 32-bit
9522                    ABI.  Here, we need to update the addend.  It would be
9523                    possible to get away with just using the R_MIPS_32 reloc
9524                    but for endianness.  */
9525                 {
9526                   bfd_vma sign_bits;
9527                   bfd_vma low_bits;
9528                   bfd_vma high_bits;
9529
9530                   if (addend & ((bfd_vma) 1 << 31))
9531 #ifdef BFD64
9532                     sign_bits = ((bfd_vma) 1 << 32) - 1;
9533 #else
9534                     sign_bits = -1;
9535 #endif
9536                   else
9537                     sign_bits = 0;
9538
9539                   /* If we don't know that we have a 64-bit type,
9540                      do two separate stores.  */
9541                   if (bfd_big_endian (input_bfd))
9542                     {
9543                       /* Store the sign-bits (which are most significant)
9544                          first.  */
9545                       low_bits = sign_bits;
9546                       high_bits = addend;
9547                     }
9548                   else
9549                     {
9550                       low_bits = addend;
9551                       high_bits = sign_bits;
9552                     }
9553                   bfd_put_32 (input_bfd, low_bits,
9554                               contents + rel->r_offset);
9555                   bfd_put_32 (input_bfd, high_bits,
9556                               contents + rel->r_offset + 4);
9557                   continue;
9558                 }
9559
9560               if (! mips_elf_perform_relocation (info, howto, rel, addend,
9561                                                  input_bfd, input_section,
9562                                                  contents, FALSE))
9563                 return FALSE;
9564             }
9565
9566           /* Go on to the next relocation.  */
9567           continue;
9568         }
9569
9570       /* In the N32 and 64-bit ABIs there may be multiple consecutive
9571          relocations for the same offset.  In that case we are
9572          supposed to treat the output of each relocation as the addend
9573          for the next.  */
9574       if (rel + 1 < relend
9575           && rel->r_offset == rel[1].r_offset
9576           && ELF_R_TYPE (input_bfd, rel[1].r_info) != R_MIPS_NONE)
9577         use_saved_addend_p = TRUE;
9578       else
9579         use_saved_addend_p = FALSE;
9580
9581       /* Figure out what value we are supposed to relocate.  */
9582       switch (mips_elf_calculate_relocation (output_bfd, input_bfd,
9583                                              input_section, info, rel,
9584                                              addend, howto, local_syms,
9585                                              local_sections, &value,
9586                                              &name, &cross_mode_jump_p,
9587                                              use_saved_addend_p))
9588         {
9589         case bfd_reloc_continue:
9590           /* There's nothing to do.  */
9591           continue;
9592
9593         case bfd_reloc_undefined:
9594           /* mips_elf_calculate_relocation already called the
9595              undefined_symbol callback.  There's no real point in
9596              trying to perform the relocation at this point, so we
9597              just skip ahead to the next relocation.  */
9598           continue;
9599
9600         case bfd_reloc_notsupported:
9601           msg = _("internal error: unsupported relocation error");
9602           info->callbacks->warning
9603             (info, msg, name, input_bfd, input_section, rel->r_offset);
9604           return FALSE;
9605
9606         case bfd_reloc_overflow:
9607           if (use_saved_addend_p)
9608             /* Ignore overflow until we reach the last relocation for
9609                a given location.  */
9610             ;
9611           else
9612             {
9613               struct mips_elf_link_hash_table *htab;
9614
9615               htab = mips_elf_hash_table (info);
9616               BFD_ASSERT (htab != NULL);
9617               BFD_ASSERT (name != NULL);
9618               if (!htab->small_data_overflow_reported
9619                   && (gprel16_reloc_p (howto->type)
9620                       || literal_reloc_p (howto->type)))
9621                 {
9622                   msg = _("small-data section exceeds 64KB;"
9623                           " lower small-data size limit (see option -G)");
9624
9625                   htab->small_data_overflow_reported = TRUE;
9626                   (*info->callbacks->einfo) ("%P: %s\n", msg);
9627                 }
9628               if (! ((*info->callbacks->reloc_overflow)
9629                      (info, NULL, name, howto->name, (bfd_vma) 0,
9630                       input_bfd, input_section, rel->r_offset)))
9631                 return FALSE;
9632             }
9633           break;
9634
9635         case bfd_reloc_ok:
9636           break;
9637
9638         case bfd_reloc_outofrange:
9639           if (jal_reloc_p (howto->type))
9640             {
9641               msg = _("JALX to a non-word-aligned address");
9642               info->callbacks->warning
9643                 (info, msg, name, input_bfd, input_section, rel->r_offset);
9644               return FALSE;
9645             }
9646           /* Fall through.  */
9647
9648         default:
9649           abort ();
9650           break;
9651         }
9652
9653       /* If we've got another relocation for the address, keep going
9654          until we reach the last one.  */
9655       if (use_saved_addend_p)
9656         {
9657           addend = value;
9658           continue;
9659         }
9660
9661       if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd))
9662         /* See the comment above about using R_MIPS_64 in the 32-bit
9663            ABI.  Until now, we've been using the HOWTO for R_MIPS_32;
9664            that calculated the right value.  Now, however, we
9665            sign-extend the 32-bit result to 64-bits, and store it as a
9666            64-bit value.  We are especially generous here in that we
9667            go to extreme lengths to support this usage on systems with
9668            only a 32-bit VMA.  */
9669         {
9670           bfd_vma sign_bits;
9671           bfd_vma low_bits;
9672           bfd_vma high_bits;
9673
9674           if (value & ((bfd_vma) 1 << 31))
9675 #ifdef BFD64
9676             sign_bits = ((bfd_vma) 1 << 32) - 1;
9677 #else
9678             sign_bits = -1;
9679 #endif
9680           else
9681             sign_bits = 0;
9682
9683           /* If we don't know that we have a 64-bit type,
9684              do two separate stores.  */
9685           if (bfd_big_endian (input_bfd))
9686             {
9687               /* Undo what we did above.  */
9688               rel->r_offset -= 4;
9689               /* Store the sign-bits (which are most significant)
9690                  first.  */
9691               low_bits = sign_bits;
9692               high_bits = value;
9693             }
9694           else
9695             {
9696               low_bits = value;
9697               high_bits = sign_bits;
9698             }
9699           bfd_put_32 (input_bfd, low_bits,
9700                       contents + rel->r_offset);
9701           bfd_put_32 (input_bfd, high_bits,
9702                       contents + rel->r_offset + 4);
9703           continue;
9704         }
9705
9706       /* Actually perform the relocation.  */
9707       if (! mips_elf_perform_relocation (info, howto, rel, value,
9708                                          input_bfd, input_section,
9709                                          contents, cross_mode_jump_p))
9710         return FALSE;
9711     }
9712
9713   return TRUE;
9714 }
9715 \f
9716 /* A function that iterates over each entry in la25_stubs and fills
9717    in the code for each one.  DATA points to a mips_htab_traverse_info.  */
9718
9719 static int
9720 mips_elf_create_la25_stub (void **slot, void *data)
9721 {
9722   struct mips_htab_traverse_info *hti;
9723   struct mips_elf_link_hash_table *htab;
9724   struct mips_elf_la25_stub *stub;
9725   asection *s;
9726   bfd_byte *loc;
9727   bfd_vma offset, target, target_high, target_low;
9728
9729   stub = (struct mips_elf_la25_stub *) *slot;
9730   hti = (struct mips_htab_traverse_info *) data;
9731   htab = mips_elf_hash_table (hti->info);
9732   BFD_ASSERT (htab != NULL);
9733
9734   /* Create the section contents, if we haven't already.  */
9735   s = stub->stub_section;
9736   loc = s->contents;
9737   if (loc == NULL)
9738     {
9739       loc = bfd_malloc (s->size);
9740       if (loc == NULL)
9741         {
9742           hti->error = TRUE;
9743           return FALSE;
9744         }
9745       s->contents = loc;
9746     }
9747
9748   /* Work out where in the section this stub should go.  */
9749   offset = stub->offset;
9750
9751   /* Work out the target address.  */
9752   target = mips_elf_get_la25_target (stub, &s);
9753   target += s->output_section->vma + s->output_offset;
9754
9755   target_high = ((target + 0x8000) >> 16) & 0xffff;
9756   target_low = (target & 0xffff);
9757
9758   if (stub->stub_section != htab->strampoline)
9759     {
9760       /* This is a simple LUI/ADDIU stub.  Zero out the beginning
9761          of the section and write the two instructions at the end.  */
9762       memset (loc, 0, offset);
9763       loc += offset;
9764       if (ELF_ST_IS_MICROMIPS (stub->h->root.other))
9765         {
9766           bfd_put_micromips_32 (hti->output_bfd,
9767                                 LA25_LUI_MICROMIPS (target_high),
9768                                 loc);
9769           bfd_put_micromips_32 (hti->output_bfd,
9770                                 LA25_ADDIU_MICROMIPS (target_low),
9771                                 loc + 4);
9772         }
9773       else
9774         {
9775           bfd_put_32 (hti->output_bfd, LA25_LUI (target_high), loc);
9776           bfd_put_32 (hti->output_bfd, LA25_ADDIU (target_low), loc + 4);
9777         }
9778     }
9779   else
9780     {
9781       /* This is trampoline.  */
9782       loc += offset;
9783       if (ELF_ST_IS_MICROMIPS (stub->h->root.other))
9784         {
9785           bfd_put_micromips_32 (hti->output_bfd,
9786                                 LA25_LUI_MICROMIPS (target_high), loc);
9787           bfd_put_micromips_32 (hti->output_bfd,
9788                                 LA25_J_MICROMIPS (target), loc + 4);
9789           bfd_put_micromips_32 (hti->output_bfd,
9790                                 LA25_ADDIU_MICROMIPS (target_low), loc + 8);
9791           bfd_put_32 (hti->output_bfd, 0, loc + 12);
9792         }
9793       else
9794         {
9795           bfd_put_32 (hti->output_bfd, LA25_LUI (target_high), loc);
9796           bfd_put_32 (hti->output_bfd, LA25_J (target), loc + 4);
9797           bfd_put_32 (hti->output_bfd, LA25_ADDIU (target_low), loc + 8);
9798           bfd_put_32 (hti->output_bfd, 0, loc + 12);
9799         }
9800     }
9801   return TRUE;
9802 }
9803
9804 /* If NAME is one of the special IRIX6 symbols defined by the linker,
9805    adjust it appropriately now.  */
9806
9807 static void
9808 mips_elf_irix6_finish_dynamic_symbol (bfd *abfd ATTRIBUTE_UNUSED,
9809                                       const char *name, Elf_Internal_Sym *sym)
9810 {
9811   /* The linker script takes care of providing names and values for
9812      these, but we must place them into the right sections.  */
9813   static const char* const text_section_symbols[] = {
9814     "_ftext",
9815     "_etext",
9816     "__dso_displacement",
9817     "__elf_header",
9818     "__program_header_table",
9819     NULL
9820   };
9821
9822   static const char* const data_section_symbols[] = {
9823     "_fdata",
9824     "_edata",
9825     "_end",
9826     "_fbss",
9827     NULL
9828   };
9829
9830   const char* const *p;
9831   int i;
9832
9833   for (i = 0; i < 2; ++i)
9834     for (p = (i == 0) ? text_section_symbols : data_section_symbols;
9835          *p;
9836          ++p)
9837       if (strcmp (*p, name) == 0)
9838         {
9839           /* All of these symbols are given type STT_SECTION by the
9840              IRIX6 linker.  */
9841           sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
9842           sym->st_other = STO_PROTECTED;
9843
9844           /* The IRIX linker puts these symbols in special sections.  */
9845           if (i == 0)
9846             sym->st_shndx = SHN_MIPS_TEXT;
9847           else
9848             sym->st_shndx = SHN_MIPS_DATA;
9849
9850           break;
9851         }
9852 }
9853
9854 /* Finish up dynamic symbol handling.  We set the contents of various
9855    dynamic sections here.  */
9856
9857 bfd_boolean
9858 _bfd_mips_elf_finish_dynamic_symbol (bfd *output_bfd,
9859                                      struct bfd_link_info *info,
9860                                      struct elf_link_hash_entry *h,
9861                                      Elf_Internal_Sym *sym)
9862 {
9863   bfd *dynobj;
9864   asection *sgot;
9865   struct mips_got_info *g, *gg;
9866   const char *name;
9867   int idx;
9868   struct mips_elf_link_hash_table *htab;
9869   struct mips_elf_link_hash_entry *hmips;
9870
9871   htab = mips_elf_hash_table (info);
9872   BFD_ASSERT (htab != NULL);
9873   dynobj = elf_hash_table (info)->dynobj;
9874   hmips = (struct mips_elf_link_hash_entry *) h;
9875
9876   BFD_ASSERT (!htab->is_vxworks);
9877
9878   if (h->plt.offset != MINUS_ONE && hmips->no_fn_stub)
9879     {
9880       /* We've decided to create a PLT entry for this symbol.  */
9881       bfd_byte *loc;
9882       bfd_vma header_address, plt_index, got_address;
9883       bfd_vma got_address_high, got_address_low, load;
9884       const bfd_vma *plt_entry;
9885
9886       BFD_ASSERT (htab->use_plts_and_copy_relocs);
9887       BFD_ASSERT (h->dynindx != -1);
9888       BFD_ASSERT (htab->splt != NULL);
9889       BFD_ASSERT (h->plt.offset <= htab->splt->size);
9890       BFD_ASSERT (!h->def_regular);
9891
9892       /* Calculate the address of the PLT header.  */
9893       header_address = (htab->splt->output_section->vma
9894                         + htab->splt->output_offset);
9895
9896       /* Calculate the index of the entry.  */
9897       plt_index = ((h->plt.offset - htab->plt_header_size)
9898                    / htab->plt_entry_size);
9899
9900       /* Calculate the address of the .got.plt entry.  */
9901       got_address = (htab->sgotplt->output_section->vma
9902                      + htab->sgotplt->output_offset
9903                      + (2 + plt_index) * MIPS_ELF_GOT_SIZE (dynobj));
9904       got_address_high = ((got_address + 0x8000) >> 16) & 0xffff;
9905       got_address_low = got_address & 0xffff;
9906
9907       /* Initially point the .got.plt entry at the PLT header.  */
9908       loc = (htab->sgotplt->contents
9909              + (2 + plt_index) * MIPS_ELF_GOT_SIZE (dynobj));
9910       if (ABI_64_P (output_bfd))
9911         bfd_put_64 (output_bfd, header_address, loc);
9912       else
9913         bfd_put_32 (output_bfd, header_address, loc);
9914
9915       /* Find out where the .plt entry should go.  */
9916       loc = htab->splt->contents + h->plt.offset;
9917
9918       /* Pick the load opcode.  */
9919       load = MIPS_ELF_LOAD_WORD (output_bfd);
9920
9921       /* Fill in the PLT entry itself.  */
9922       plt_entry = mips_exec_plt_entry;
9923       bfd_put_32 (output_bfd, plt_entry[0] | got_address_high, loc);
9924       bfd_put_32 (output_bfd, plt_entry[1] | got_address_low | load, loc + 4);
9925
9926       if (! LOAD_INTERLOCKS_P (output_bfd))
9927         {
9928           bfd_put_32 (output_bfd, plt_entry[2] | got_address_low, loc + 8);
9929           bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
9930         }
9931       else
9932         {
9933           bfd_put_32 (output_bfd, plt_entry[3], loc + 8);
9934           bfd_put_32 (output_bfd, plt_entry[2] | got_address_low, loc + 12);
9935         }
9936
9937       /* Emit an R_MIPS_JUMP_SLOT relocation against the .got.plt entry.  */
9938       mips_elf_output_dynamic_relocation (output_bfd, htab->srelplt,
9939                                           plt_index, h->dynindx,
9940                                           R_MIPS_JUMP_SLOT, got_address);
9941
9942       /* We distinguish between PLT entries and lazy-binding stubs by
9943          giving the former an st_other value of STO_MIPS_PLT.  Set the
9944          flag and leave the value if there are any relocations in the
9945          binary where pointer equality matters.  */
9946       sym->st_shndx = SHN_UNDEF;
9947       if (h->pointer_equality_needed)
9948         sym->st_other = STO_MIPS_PLT;
9949       else
9950         sym->st_value = 0;
9951     }
9952   else if (h->plt.offset != MINUS_ONE)
9953     {
9954       /* We've decided to create a lazy-binding stub.  */
9955       bfd_byte stub[MIPS_FUNCTION_STUB_BIG_SIZE];
9956
9957       /* This symbol has a stub.  Set it up.  */
9958
9959       BFD_ASSERT (h->dynindx != -1);
9960
9961       BFD_ASSERT ((htab->function_stub_size == MIPS_FUNCTION_STUB_BIG_SIZE)
9962                   || (h->dynindx <= 0xffff));
9963
9964       /* Values up to 2^31 - 1 are allowed.  Larger values would cause
9965          sign extension at runtime in the stub, resulting in a negative
9966          index value.  */
9967       if (h->dynindx & ~0x7fffffff)
9968         return FALSE;
9969
9970       /* Fill the stub.  */
9971       idx = 0;
9972       bfd_put_32 (output_bfd, STUB_LW (output_bfd), stub + idx);
9973       idx += 4;
9974       bfd_put_32 (output_bfd, STUB_MOVE (output_bfd), stub + idx);
9975       idx += 4;
9976       if (htab->function_stub_size == MIPS_FUNCTION_STUB_BIG_SIZE)
9977         {
9978           bfd_put_32 (output_bfd, STUB_LUI ((h->dynindx >> 16) & 0x7fff),
9979                       stub + idx);
9980           idx += 4;
9981         }
9982       bfd_put_32 (output_bfd, STUB_JALR, stub + idx);
9983       idx += 4;
9984
9985       /* If a large stub is not required and sign extension is not a
9986          problem, then use legacy code in the stub.  */
9987       if (htab->function_stub_size == MIPS_FUNCTION_STUB_BIG_SIZE)
9988         bfd_put_32 (output_bfd, STUB_ORI (h->dynindx & 0xffff), stub + idx);
9989       else if (h->dynindx & ~0x7fff)
9990         bfd_put_32 (output_bfd, STUB_LI16U (h->dynindx & 0xffff), stub + idx);
9991       else
9992         bfd_put_32 (output_bfd, STUB_LI16S (output_bfd, h->dynindx),
9993                     stub + idx);
9994
9995       BFD_ASSERT (h->plt.offset <= htab->sstubs->size);
9996       memcpy (htab->sstubs->contents + h->plt.offset,
9997               stub, htab->function_stub_size);
9998
9999       /* Mark the symbol as undefined.  plt.offset != -1 occurs
10000          only for the referenced symbol.  */
10001       sym->st_shndx = SHN_UNDEF;
10002
10003       /* The run-time linker uses the st_value field of the symbol
10004          to reset the global offset table entry for this external
10005          to its stub address when unlinking a shared object.  */
10006       sym->st_value = (htab->sstubs->output_section->vma
10007                        + htab->sstubs->output_offset
10008                        + h->plt.offset);
10009     }
10010
10011   /* If we have a MIPS16 function with a stub, the dynamic symbol must
10012      refer to the stub, since only the stub uses the standard calling
10013      conventions.  */
10014   if (h->dynindx != -1 && hmips->fn_stub != NULL)
10015     {
10016       BFD_ASSERT (hmips->need_fn_stub);
10017       sym->st_value = (hmips->fn_stub->output_section->vma
10018                        + hmips->fn_stub->output_offset);
10019       sym->st_size = hmips->fn_stub->size;
10020       sym->st_other = ELF_ST_VISIBILITY (sym->st_other);
10021     }
10022
10023   BFD_ASSERT (h->dynindx != -1
10024               || h->forced_local);
10025
10026   sgot = htab->sgot;
10027   g = htab->got_info;
10028   BFD_ASSERT (g != NULL);
10029
10030   /* Run through the global symbol table, creating GOT entries for all
10031      the symbols that need them.  */
10032   if (hmips->global_got_area != GGA_NONE)
10033     {
10034       bfd_vma offset;
10035       bfd_vma value;
10036
10037       value = sym->st_value;
10038       offset = mips_elf_global_got_index (dynobj, output_bfd, h,
10039                                           R_MIPS_GOT16, info);
10040       MIPS_ELF_PUT_WORD (output_bfd, value, sgot->contents + offset);
10041     }
10042
10043   if (hmips->global_got_area != GGA_NONE && g->next)
10044     {
10045       struct mips_got_entry e, *p;
10046       bfd_vma entry;
10047       bfd_vma offset;
10048
10049       gg = g;
10050
10051       e.abfd = output_bfd;
10052       e.symndx = -1;
10053       e.d.h = hmips;
10054       e.tls_type = 0;
10055
10056       for (g = g->next; g->next != gg; g = g->next)
10057         {
10058           if (g->got_entries
10059               && (p = (struct mips_got_entry *) htab_find (g->got_entries,
10060                                                            &e)))
10061             {
10062               offset = p->gotidx;
10063               if (info->shared
10064                   || (elf_hash_table (info)->dynamic_sections_created
10065                       && p->d.h != NULL
10066                       && p->d.h->root.def_dynamic
10067                       && !p->d.h->root.def_regular))
10068                 {
10069                   /* Create an R_MIPS_REL32 relocation for this entry.  Due to
10070                      the various compatibility problems, it's easier to mock
10071                      up an R_MIPS_32 or R_MIPS_64 relocation and leave
10072                      mips_elf_create_dynamic_relocation to calculate the
10073                      appropriate addend.  */
10074                   Elf_Internal_Rela rel[3];
10075
10076                   memset (rel, 0, sizeof (rel));
10077                   if (ABI_64_P (output_bfd))
10078                     rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_64);
10079                   else
10080                     rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_32);
10081                   rel[0].r_offset = rel[1].r_offset = rel[2].r_offset = offset;
10082
10083                   entry = 0;
10084                   if (! (mips_elf_create_dynamic_relocation
10085                          (output_bfd, info, rel,
10086                           e.d.h, NULL, sym->st_value, &entry, sgot)))
10087                     return FALSE;
10088                 }
10089               else
10090                 entry = sym->st_value;
10091               MIPS_ELF_PUT_WORD (output_bfd, entry, sgot->contents + offset);
10092             }
10093         }
10094     }
10095
10096   /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute.  */
10097   name = h->root.root.string;
10098   if (h == elf_hash_table (info)->hdynamic
10099       || h == elf_hash_table (info)->hgot)
10100     sym->st_shndx = SHN_ABS;
10101   else if (strcmp (name, "_DYNAMIC_LINK") == 0
10102            || strcmp (name, "_DYNAMIC_LINKING") == 0)
10103     {
10104       sym->st_shndx = SHN_ABS;
10105       sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10106       sym->st_value = 1;
10107     }
10108   else if (strcmp (name, "_gp_disp") == 0 && ! NEWABI_P (output_bfd))
10109     {
10110       sym->st_shndx = SHN_ABS;
10111       sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10112       sym->st_value = elf_gp (output_bfd);
10113     }
10114   else if (SGI_COMPAT (output_bfd))
10115     {
10116       if (strcmp (name, mips_elf_dynsym_rtproc_names[0]) == 0
10117           || strcmp (name, mips_elf_dynsym_rtproc_names[1]) == 0)
10118         {
10119           sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10120           sym->st_other = STO_PROTECTED;
10121           sym->st_value = 0;
10122           sym->st_shndx = SHN_MIPS_DATA;
10123         }
10124       else if (strcmp (name, mips_elf_dynsym_rtproc_names[2]) == 0)
10125         {
10126           sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10127           sym->st_other = STO_PROTECTED;
10128           sym->st_value = mips_elf_hash_table (info)->procedure_count;
10129           sym->st_shndx = SHN_ABS;
10130         }
10131       else if (sym->st_shndx != SHN_UNDEF && sym->st_shndx != SHN_ABS)
10132         {
10133           if (h->type == STT_FUNC)
10134             sym->st_shndx = SHN_MIPS_TEXT;
10135           else if (h->type == STT_OBJECT)
10136             sym->st_shndx = SHN_MIPS_DATA;
10137         }
10138     }
10139
10140   /* Emit a copy reloc, if needed.  */
10141   if (h->needs_copy)
10142     {
10143       asection *s;
10144       bfd_vma symval;
10145
10146       BFD_ASSERT (h->dynindx != -1);
10147       BFD_ASSERT (htab->use_plts_and_copy_relocs);
10148
10149       s = mips_elf_rel_dyn_section (info, FALSE);
10150       symval = (h->root.u.def.section->output_section->vma
10151                 + h->root.u.def.section->output_offset
10152                 + h->root.u.def.value);
10153       mips_elf_output_dynamic_relocation (output_bfd, s, s->reloc_count++,
10154                                           h->dynindx, R_MIPS_COPY, symval);
10155     }
10156
10157   /* Handle the IRIX6-specific symbols.  */
10158   if (IRIX_COMPAT (output_bfd) == ict_irix6)
10159     mips_elf_irix6_finish_dynamic_symbol (output_bfd, name, sym);
10160
10161   /* Keep dynamic MIPS16 symbols odd.  This allows the dynamic linker to
10162      treat MIPS16 symbols like any other.  */
10163   if (ELF_ST_IS_MIPS16 (sym->st_other))
10164     {
10165       BFD_ASSERT (sym->st_value & 1);
10166       sym->st_other -= STO_MIPS16;
10167     }
10168
10169   return TRUE;
10170 }
10171
10172 /* Likewise, for VxWorks.  */
10173
10174 bfd_boolean
10175 _bfd_mips_vxworks_finish_dynamic_symbol (bfd *output_bfd,
10176                                          struct bfd_link_info *info,
10177                                          struct elf_link_hash_entry *h,
10178                                          Elf_Internal_Sym *sym)
10179 {
10180   bfd *dynobj;
10181   asection *sgot;
10182   struct mips_got_info *g;
10183   struct mips_elf_link_hash_table *htab;
10184   struct mips_elf_link_hash_entry *hmips;
10185
10186   htab = mips_elf_hash_table (info);
10187   BFD_ASSERT (htab != NULL);
10188   dynobj = elf_hash_table (info)->dynobj;
10189   hmips = (struct mips_elf_link_hash_entry *) h;
10190
10191   if (h->plt.offset != (bfd_vma) -1)
10192     {
10193       bfd_byte *loc;
10194       bfd_vma plt_address, plt_index, got_address, got_offset, branch_offset;
10195       Elf_Internal_Rela rel;
10196       static const bfd_vma *plt_entry;
10197
10198       BFD_ASSERT (h->dynindx != -1);
10199       BFD_ASSERT (htab->splt != NULL);
10200       BFD_ASSERT (h->plt.offset <= htab->splt->size);
10201
10202       /* Calculate the address of the .plt entry.  */
10203       plt_address = (htab->splt->output_section->vma
10204                      + htab->splt->output_offset
10205                      + h->plt.offset);
10206
10207       /* Calculate the index of the entry.  */
10208       plt_index = ((h->plt.offset - htab->plt_header_size)
10209                    / htab->plt_entry_size);
10210
10211       /* Calculate the address of the .got.plt entry.  */
10212       got_address = (htab->sgotplt->output_section->vma
10213                      + htab->sgotplt->output_offset
10214                      + plt_index * 4);
10215
10216       /* Calculate the offset of the .got.plt entry from
10217          _GLOBAL_OFFSET_TABLE_.  */
10218       got_offset = mips_elf_gotplt_index (info, h);
10219
10220       /* Calculate the offset for the branch at the start of the PLT
10221          entry.  The branch jumps to the beginning of .plt.  */
10222       branch_offset = -(h->plt.offset / 4 + 1) & 0xffff;
10223
10224       /* Fill in the initial value of the .got.plt entry.  */
10225       bfd_put_32 (output_bfd, plt_address,
10226                   htab->sgotplt->contents + plt_index * 4);
10227
10228       /* Find out where the .plt entry should go.  */
10229       loc = htab->splt->contents + h->plt.offset;
10230
10231       if (info->shared)
10232         {
10233           plt_entry = mips_vxworks_shared_plt_entry;
10234           bfd_put_32 (output_bfd, plt_entry[0] | branch_offset, loc);
10235           bfd_put_32 (output_bfd, plt_entry[1] | plt_index, loc + 4);
10236         }
10237       else
10238         {
10239           bfd_vma got_address_high, got_address_low;
10240
10241           plt_entry = mips_vxworks_exec_plt_entry;
10242           got_address_high = ((got_address + 0x8000) >> 16) & 0xffff;
10243           got_address_low = got_address & 0xffff;
10244
10245           bfd_put_32 (output_bfd, plt_entry[0] | branch_offset, loc);
10246           bfd_put_32 (output_bfd, plt_entry[1] | plt_index, loc + 4);
10247           bfd_put_32 (output_bfd, plt_entry[2] | got_address_high, loc + 8);
10248           bfd_put_32 (output_bfd, plt_entry[3] | got_address_low, loc + 12);
10249           bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
10250           bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
10251           bfd_put_32 (output_bfd, plt_entry[6], loc + 24);
10252           bfd_put_32 (output_bfd, plt_entry[7], loc + 28);
10253
10254           loc = (htab->srelplt2->contents
10255                  + (plt_index * 3 + 2) * sizeof (Elf32_External_Rela));
10256
10257           /* Emit a relocation for the .got.plt entry.  */
10258           rel.r_offset = got_address;
10259           rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_MIPS_32);
10260           rel.r_addend = h->plt.offset;
10261           bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10262
10263           /* Emit a relocation for the lui of %hi(<.got.plt slot>).  */
10264           loc += sizeof (Elf32_External_Rela);
10265           rel.r_offset = plt_address + 8;
10266           rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
10267           rel.r_addend = got_offset;
10268           bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10269
10270           /* Emit a relocation for the addiu of %lo(<.got.plt slot>).  */
10271           loc += sizeof (Elf32_External_Rela);
10272           rel.r_offset += 4;
10273           rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
10274           bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10275         }
10276
10277       /* Emit an R_MIPS_JUMP_SLOT relocation against the .got.plt entry.  */
10278       loc = htab->srelplt->contents + plt_index * sizeof (Elf32_External_Rela);
10279       rel.r_offset = got_address;
10280       rel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_JUMP_SLOT);
10281       rel.r_addend = 0;
10282       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10283
10284       if (!h->def_regular)
10285         sym->st_shndx = SHN_UNDEF;
10286     }
10287
10288   BFD_ASSERT (h->dynindx != -1 || h->forced_local);
10289
10290   sgot = htab->sgot;
10291   g = htab->got_info;
10292   BFD_ASSERT (g != NULL);
10293
10294   /* See if this symbol has an entry in the GOT.  */
10295   if (hmips->global_got_area != GGA_NONE)
10296     {
10297       bfd_vma offset;
10298       Elf_Internal_Rela outrel;
10299       bfd_byte *loc;
10300       asection *s;
10301
10302       /* Install the symbol value in the GOT.   */
10303       offset = mips_elf_global_got_index (dynobj, output_bfd, h,
10304                                           R_MIPS_GOT16, info);
10305       MIPS_ELF_PUT_WORD (output_bfd, sym->st_value, sgot->contents + offset);
10306
10307       /* Add a dynamic relocation for it.  */
10308       s = mips_elf_rel_dyn_section (info, FALSE);
10309       loc = s->contents + (s->reloc_count++ * sizeof (Elf32_External_Rela));
10310       outrel.r_offset = (sgot->output_section->vma
10311                          + sgot->output_offset
10312                          + offset);
10313       outrel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_32);
10314       outrel.r_addend = 0;
10315       bfd_elf32_swap_reloca_out (dynobj, &outrel, loc);
10316     }
10317
10318   /* Emit a copy reloc, if needed.  */
10319   if (h->needs_copy)
10320     {
10321       Elf_Internal_Rela rel;
10322
10323       BFD_ASSERT (h->dynindx != -1);
10324
10325       rel.r_offset = (h->root.u.def.section->output_section->vma
10326                       + h->root.u.def.section->output_offset
10327                       + h->root.u.def.value);
10328       rel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_COPY);
10329       rel.r_addend = 0;
10330       bfd_elf32_swap_reloca_out (output_bfd, &rel,
10331                                  htab->srelbss->contents
10332                                  + (htab->srelbss->reloc_count
10333                                     * sizeof (Elf32_External_Rela)));
10334       ++htab->srelbss->reloc_count;
10335     }
10336
10337   /* If this is a mips16/microMIPS symbol, force the value to be even.  */
10338   if (ELF_ST_IS_COMPRESSED (sym->st_other))
10339     sym->st_value &= ~1;
10340
10341   return TRUE;
10342 }
10343
10344 /* Write out a plt0 entry to the beginning of .plt.  */
10345
10346 static void
10347 mips_finish_exec_plt (bfd *output_bfd, struct bfd_link_info *info)
10348 {
10349   bfd_byte *loc;
10350   bfd_vma gotplt_value, gotplt_value_high, gotplt_value_low;
10351   static const bfd_vma *plt_entry;
10352   struct mips_elf_link_hash_table *htab;
10353
10354   htab = mips_elf_hash_table (info);
10355   BFD_ASSERT (htab != NULL);
10356
10357   if (ABI_64_P (output_bfd))
10358     plt_entry = mips_n64_exec_plt0_entry;
10359   else if (ABI_N32_P (output_bfd))
10360     plt_entry = mips_n32_exec_plt0_entry;
10361   else
10362     plt_entry = mips_o32_exec_plt0_entry;
10363
10364   /* Calculate the value of .got.plt.  */
10365   gotplt_value = (htab->sgotplt->output_section->vma
10366                   + htab->sgotplt->output_offset);
10367   gotplt_value_high = ((gotplt_value + 0x8000) >> 16) & 0xffff;
10368   gotplt_value_low = gotplt_value & 0xffff;
10369
10370   /* The PLT sequence is not safe for N64 if .got.plt's address can
10371      not be loaded in two instructions.  */
10372   BFD_ASSERT ((gotplt_value & ~(bfd_vma) 0x7fffffff) == 0
10373               || ~(gotplt_value | 0x7fffffff) == 0);
10374
10375   /* Install the PLT header.  */
10376   loc = htab->splt->contents;
10377   bfd_put_32 (output_bfd, plt_entry[0] | gotplt_value_high, loc);
10378   bfd_put_32 (output_bfd, plt_entry[1] | gotplt_value_low, loc + 4);
10379   bfd_put_32 (output_bfd, plt_entry[2] | gotplt_value_low, loc + 8);
10380   bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
10381   bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
10382   bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
10383   bfd_put_32 (output_bfd, plt_entry[6], loc + 24);
10384   bfd_put_32 (output_bfd, plt_entry[7], loc + 28);
10385 }
10386
10387 /* Install the PLT header for a VxWorks executable and finalize the
10388    contents of .rela.plt.unloaded.  */
10389
10390 static void
10391 mips_vxworks_finish_exec_plt (bfd *output_bfd, struct bfd_link_info *info)
10392 {
10393   Elf_Internal_Rela rela;
10394   bfd_byte *loc;
10395   bfd_vma got_value, got_value_high, got_value_low, plt_address;
10396   static const bfd_vma *plt_entry;
10397   struct mips_elf_link_hash_table *htab;
10398
10399   htab = mips_elf_hash_table (info);
10400   BFD_ASSERT (htab != NULL);
10401
10402   plt_entry = mips_vxworks_exec_plt0_entry;
10403
10404   /* Calculate the value of _GLOBAL_OFFSET_TABLE_.  */
10405   got_value = (htab->root.hgot->root.u.def.section->output_section->vma
10406                + htab->root.hgot->root.u.def.section->output_offset
10407                + htab->root.hgot->root.u.def.value);
10408
10409   got_value_high = ((got_value + 0x8000) >> 16) & 0xffff;
10410   got_value_low = got_value & 0xffff;
10411
10412   /* Calculate the address of the PLT header.  */
10413   plt_address = htab->splt->output_section->vma + htab->splt->output_offset;
10414
10415   /* Install the PLT header.  */
10416   loc = htab->splt->contents;
10417   bfd_put_32 (output_bfd, plt_entry[0] | got_value_high, loc);
10418   bfd_put_32 (output_bfd, plt_entry[1] | got_value_low, loc + 4);
10419   bfd_put_32 (output_bfd, plt_entry[2], loc + 8);
10420   bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
10421   bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
10422   bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
10423
10424   /* Output the relocation for the lui of %hi(_GLOBAL_OFFSET_TABLE_).  */
10425   loc = htab->srelplt2->contents;
10426   rela.r_offset = plt_address;
10427   rela.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
10428   rela.r_addend = 0;
10429   bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
10430   loc += sizeof (Elf32_External_Rela);
10431
10432   /* Output the relocation for the following addiu of
10433      %lo(_GLOBAL_OFFSET_TABLE_).  */
10434   rela.r_offset += 4;
10435   rela.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
10436   bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
10437   loc += sizeof (Elf32_External_Rela);
10438
10439   /* Fix up the remaining relocations.  They may have the wrong
10440      symbol index for _G_O_T_ or _P_L_T_ depending on the order
10441      in which symbols were output.  */
10442   while (loc < htab->srelplt2->contents + htab->srelplt2->size)
10443     {
10444       Elf_Internal_Rela rel;
10445
10446       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
10447       rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_MIPS_32);
10448       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10449       loc += sizeof (Elf32_External_Rela);
10450
10451       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
10452       rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
10453       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10454       loc += sizeof (Elf32_External_Rela);
10455
10456       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
10457       rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
10458       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10459       loc += sizeof (Elf32_External_Rela);
10460     }
10461 }
10462
10463 /* Install the PLT header for a VxWorks shared library.  */
10464
10465 static void
10466 mips_vxworks_finish_shared_plt (bfd *output_bfd, struct bfd_link_info *info)
10467 {
10468   unsigned int i;
10469   struct mips_elf_link_hash_table *htab;
10470
10471   htab = mips_elf_hash_table (info);
10472   BFD_ASSERT (htab != NULL);
10473
10474   /* We just need to copy the entry byte-by-byte.  */
10475   for (i = 0; i < ARRAY_SIZE (mips_vxworks_shared_plt0_entry); i++)
10476     bfd_put_32 (output_bfd, mips_vxworks_shared_plt0_entry[i],
10477                 htab->splt->contents + i * 4);
10478 }
10479
10480 /* Finish up the dynamic sections.  */
10481
10482 bfd_boolean
10483 _bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd,
10484                                        struct bfd_link_info *info)
10485 {
10486   bfd *dynobj;
10487   asection *sdyn;
10488   asection *sgot;
10489   struct mips_got_info *gg, *g;
10490   struct mips_elf_link_hash_table *htab;
10491
10492   htab = mips_elf_hash_table (info);
10493   BFD_ASSERT (htab != NULL);
10494
10495   dynobj = elf_hash_table (info)->dynobj;
10496
10497   sdyn = bfd_get_linker_section (dynobj, ".dynamic");
10498
10499   sgot = htab->sgot;
10500   gg = htab->got_info;
10501
10502   if (elf_hash_table (info)->dynamic_sections_created)
10503     {
10504       bfd_byte *b;
10505       int dyn_to_skip = 0, dyn_skipped = 0;
10506
10507       BFD_ASSERT (sdyn != NULL);
10508       BFD_ASSERT (gg != NULL);
10509
10510       g = mips_elf_bfd_got (output_bfd, FALSE);
10511       BFD_ASSERT (g != NULL);
10512
10513       for (b = sdyn->contents;
10514            b < sdyn->contents + sdyn->size;
10515            b += MIPS_ELF_DYN_SIZE (dynobj))
10516         {
10517           Elf_Internal_Dyn dyn;
10518           const char *name;
10519           size_t elemsize;
10520           asection *s;
10521           bfd_boolean swap_out_p;
10522
10523           /* Read in the current dynamic entry.  */
10524           (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
10525
10526           /* Assume that we're going to modify it and write it out.  */
10527           swap_out_p = TRUE;
10528
10529           switch (dyn.d_tag)
10530             {
10531             case DT_RELENT:
10532               dyn.d_un.d_val = MIPS_ELF_REL_SIZE (dynobj);
10533               break;
10534
10535             case DT_RELAENT:
10536               BFD_ASSERT (htab->is_vxworks);
10537               dyn.d_un.d_val = MIPS_ELF_RELA_SIZE (dynobj);
10538               break;
10539
10540             case DT_STRSZ:
10541               /* Rewrite DT_STRSZ.  */
10542               dyn.d_un.d_val =
10543                 _bfd_elf_strtab_size (elf_hash_table (info)->dynstr);
10544               break;
10545
10546             case DT_PLTGOT:
10547               s = htab->sgot;
10548               dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
10549               break;
10550
10551             case DT_MIPS_PLTGOT:
10552               s = htab->sgotplt;
10553               dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
10554               break;
10555
10556             case DT_MIPS_RLD_VERSION:
10557               dyn.d_un.d_val = 1; /* XXX */
10558               break;
10559
10560             case DT_MIPS_FLAGS:
10561               dyn.d_un.d_val = RHF_NOTPOT; /* XXX */
10562               break;
10563
10564             case DT_MIPS_TIME_STAMP:
10565               {
10566                 time_t t;
10567                 time (&t);
10568                 dyn.d_un.d_val = t;
10569               }
10570               break;
10571
10572             case DT_MIPS_ICHECKSUM:
10573               /* XXX FIXME: */
10574               swap_out_p = FALSE;
10575               break;
10576
10577             case DT_MIPS_IVERSION:
10578               /* XXX FIXME: */
10579               swap_out_p = FALSE;
10580               break;
10581
10582             case DT_MIPS_BASE_ADDRESS:
10583               s = output_bfd->sections;
10584               BFD_ASSERT (s != NULL);
10585               dyn.d_un.d_ptr = s->vma & ~(bfd_vma) 0xffff;
10586               break;
10587
10588             case DT_MIPS_LOCAL_GOTNO:
10589               dyn.d_un.d_val = g->local_gotno;
10590               break;
10591
10592             case DT_MIPS_UNREFEXTNO:
10593               /* The index into the dynamic symbol table which is the
10594                  entry of the first external symbol that is not
10595                  referenced within the same object.  */
10596               dyn.d_un.d_val = bfd_count_sections (output_bfd) + 1;
10597               break;
10598
10599             case DT_MIPS_GOTSYM:
10600               if (htab->global_gotsym)
10601                 {
10602                   dyn.d_un.d_val = htab->global_gotsym->dynindx;
10603                   break;
10604                 }
10605               /* In case if we don't have global got symbols we default
10606                  to setting DT_MIPS_GOTSYM to the same value as
10607                  DT_MIPS_SYMTABNO, so we just fall through.  */
10608
10609             case DT_MIPS_SYMTABNO:
10610               name = ".dynsym";
10611               elemsize = MIPS_ELF_SYM_SIZE (output_bfd);
10612               s = bfd_get_section_by_name (output_bfd, name);
10613               BFD_ASSERT (s != NULL);
10614
10615               dyn.d_un.d_val = s->size / elemsize;
10616               break;
10617
10618             case DT_MIPS_HIPAGENO:
10619               dyn.d_un.d_val = g->local_gotno - htab->reserved_gotno;
10620               break;
10621
10622             case DT_MIPS_RLD_MAP:
10623               {
10624                 struct elf_link_hash_entry *h;
10625                 h = mips_elf_hash_table (info)->rld_symbol;
10626                 if (!h)
10627                   {
10628                     dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
10629                     swap_out_p = FALSE;
10630                     break;
10631                   }
10632                 s = h->root.u.def.section;
10633                 dyn.d_un.d_ptr = (s->output_section->vma + s->output_offset
10634                                   + h->root.u.def.value);
10635               }
10636               break;
10637
10638             case DT_MIPS_OPTIONS:
10639               s = (bfd_get_section_by_name
10640                    (output_bfd, MIPS_ELF_OPTIONS_SECTION_NAME (output_bfd)));
10641               dyn.d_un.d_ptr = s->vma;
10642               break;
10643
10644             case DT_RELASZ:
10645               BFD_ASSERT (htab->is_vxworks);
10646               /* The count does not include the JUMP_SLOT relocations.  */
10647               if (htab->srelplt)
10648                 dyn.d_un.d_val -= htab->srelplt->size;
10649               break;
10650
10651             case DT_PLTREL:
10652               BFD_ASSERT (htab->use_plts_and_copy_relocs);
10653               if (htab->is_vxworks)
10654                 dyn.d_un.d_val = DT_RELA;
10655               else
10656                 dyn.d_un.d_val = DT_REL;
10657               break;
10658
10659             case DT_PLTRELSZ:
10660               BFD_ASSERT (htab->use_plts_and_copy_relocs);
10661               dyn.d_un.d_val = htab->srelplt->size;
10662               break;
10663
10664             case DT_JMPREL:
10665               BFD_ASSERT (htab->use_plts_and_copy_relocs);
10666               dyn.d_un.d_ptr = (htab->srelplt->output_section->vma
10667                                 + htab->srelplt->output_offset);
10668               break;
10669
10670             case DT_TEXTREL:
10671               /* If we didn't need any text relocations after all, delete
10672                  the dynamic tag.  */
10673               if (!(info->flags & DF_TEXTREL))
10674                 {
10675                   dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
10676                   swap_out_p = FALSE;
10677                 }
10678               break;
10679
10680             case DT_FLAGS:
10681               /* If we didn't need any text relocations after all, clear
10682                  DF_TEXTREL from DT_FLAGS.  */
10683               if (!(info->flags & DF_TEXTREL))
10684                 dyn.d_un.d_val &= ~DF_TEXTREL;
10685               else
10686                 swap_out_p = FALSE;
10687               break;
10688
10689             default:
10690               swap_out_p = FALSE;
10691               if (htab->is_vxworks
10692                   && elf_vxworks_finish_dynamic_entry (output_bfd, &dyn))
10693                 swap_out_p = TRUE;
10694               break;
10695             }
10696
10697           if (swap_out_p || dyn_skipped)
10698             (*get_elf_backend_data (dynobj)->s->swap_dyn_out)
10699               (dynobj, &dyn, b - dyn_skipped);
10700
10701           if (dyn_to_skip)
10702             {
10703               dyn_skipped += dyn_to_skip;
10704               dyn_to_skip = 0;
10705             }
10706         }
10707
10708       /* Wipe out any trailing entries if we shifted down a dynamic tag.  */
10709       if (dyn_skipped > 0)
10710         memset (b - dyn_skipped, 0, dyn_skipped);
10711     }
10712
10713   if (sgot != NULL && sgot->size > 0
10714       && !bfd_is_abs_section (sgot->output_section))
10715     {
10716       if (htab->is_vxworks)
10717         {
10718           /* The first entry of the global offset table points to the
10719              ".dynamic" section.  The second is initialized by the
10720              loader and contains the shared library identifier.
10721              The third is also initialized by the loader and points
10722              to the lazy resolution stub.  */
10723           MIPS_ELF_PUT_WORD (output_bfd,
10724                              sdyn->output_offset + sdyn->output_section->vma,
10725                              sgot->contents);
10726           MIPS_ELF_PUT_WORD (output_bfd, 0,
10727                              sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd));
10728           MIPS_ELF_PUT_WORD (output_bfd, 0,
10729                              sgot->contents
10730                              + 2 * MIPS_ELF_GOT_SIZE (output_bfd));
10731         }
10732       else
10733         {
10734           /* The first entry of the global offset table will be filled at
10735              runtime. The second entry will be used by some runtime loaders.
10736              This isn't the case of IRIX rld.  */
10737           MIPS_ELF_PUT_WORD (output_bfd, (bfd_vma) 0, sgot->contents);
10738           MIPS_ELF_PUT_WORD (output_bfd, MIPS_ELF_GNU_GOT1_MASK (output_bfd),
10739                              sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd));
10740         }
10741
10742       elf_section_data (sgot->output_section)->this_hdr.sh_entsize
10743          = MIPS_ELF_GOT_SIZE (output_bfd);
10744     }
10745
10746   /* Generate dynamic relocations for the non-primary gots.  */
10747   if (gg != NULL && gg->next)
10748     {
10749       Elf_Internal_Rela rel[3];
10750       bfd_vma addend = 0;
10751
10752       memset (rel, 0, sizeof (rel));
10753       rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_REL32);
10754
10755       for (g = gg->next; g->next != gg; g = g->next)
10756         {
10757           bfd_vma got_index = g->next->local_gotno + g->next->global_gotno
10758             + g->next->tls_gotno;
10759
10760           MIPS_ELF_PUT_WORD (output_bfd, 0, sgot->contents
10761                              + got_index++ * MIPS_ELF_GOT_SIZE (output_bfd));
10762           MIPS_ELF_PUT_WORD (output_bfd, MIPS_ELF_GNU_GOT1_MASK (output_bfd),
10763                              sgot->contents
10764                              + got_index++ * MIPS_ELF_GOT_SIZE (output_bfd));
10765
10766           if (! info->shared)
10767             continue;
10768
10769           while (got_index < g->assigned_gotno)
10770             {
10771               rel[0].r_offset = rel[1].r_offset = rel[2].r_offset
10772                 = got_index++ * MIPS_ELF_GOT_SIZE (output_bfd);
10773               if (!(mips_elf_create_dynamic_relocation
10774                     (output_bfd, info, rel, NULL,
10775                      bfd_abs_section_ptr,
10776                      0, &addend, sgot)))
10777                 return FALSE;
10778               BFD_ASSERT (addend == 0);
10779             }
10780         }
10781     }
10782
10783   /* The generation of dynamic relocations for the non-primary gots
10784      adds more dynamic relocations.  We cannot count them until
10785      here.  */
10786
10787   if (elf_hash_table (info)->dynamic_sections_created)
10788     {
10789       bfd_byte *b;
10790       bfd_boolean swap_out_p;
10791
10792       BFD_ASSERT (sdyn != NULL);
10793
10794       for (b = sdyn->contents;
10795            b < sdyn->contents + sdyn->size;
10796            b += MIPS_ELF_DYN_SIZE (dynobj))
10797         {
10798           Elf_Internal_Dyn dyn;
10799           asection *s;
10800
10801           /* Read in the current dynamic entry.  */
10802           (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
10803
10804           /* Assume that we're going to modify it and write it out.  */
10805           swap_out_p = TRUE;
10806
10807           switch (dyn.d_tag)
10808             {
10809             case DT_RELSZ:
10810               /* Reduce DT_RELSZ to account for any relocations we
10811                  decided not to make.  This is for the n64 irix rld,
10812                  which doesn't seem to apply any relocations if there
10813                  are trailing null entries.  */
10814               s = mips_elf_rel_dyn_section (info, FALSE);
10815               dyn.d_un.d_val = (s->reloc_count
10816                                 * (ABI_64_P (output_bfd)
10817                                    ? sizeof (Elf64_Mips_External_Rel)
10818                                    : sizeof (Elf32_External_Rel)));
10819               /* Adjust the section size too.  Tools like the prelinker
10820                  can reasonably expect the values to the same.  */
10821               elf_section_data (s->output_section)->this_hdr.sh_size
10822                 = dyn.d_un.d_val;
10823               break;
10824
10825             default:
10826               swap_out_p = FALSE;
10827               break;
10828             }
10829
10830           if (swap_out_p)
10831             (*get_elf_backend_data (dynobj)->s->swap_dyn_out)
10832               (dynobj, &dyn, b);
10833         }
10834     }
10835
10836   {
10837     asection *s;
10838     Elf32_compact_rel cpt;
10839
10840     if (SGI_COMPAT (output_bfd))
10841       {
10842         /* Write .compact_rel section out.  */
10843         s = bfd_get_linker_section (dynobj, ".compact_rel");
10844         if (s != NULL)
10845           {
10846             cpt.id1 = 1;
10847             cpt.num = s->reloc_count;
10848             cpt.id2 = 2;
10849             cpt.offset = (s->output_section->filepos
10850                           + sizeof (Elf32_External_compact_rel));
10851             cpt.reserved0 = 0;
10852             cpt.reserved1 = 0;
10853             bfd_elf32_swap_compact_rel_out (output_bfd, &cpt,
10854                                             ((Elf32_External_compact_rel *)
10855                                              s->contents));
10856
10857             /* Clean up a dummy stub function entry in .text.  */
10858             if (htab->sstubs != NULL)
10859               {
10860                 file_ptr dummy_offset;
10861
10862                 BFD_ASSERT (htab->sstubs->size >= htab->function_stub_size);
10863                 dummy_offset = htab->sstubs->size - htab->function_stub_size;
10864                 memset (htab->sstubs->contents + dummy_offset, 0,
10865                         htab->function_stub_size);
10866               }
10867           }
10868       }
10869
10870     /* The psABI says that the dynamic relocations must be sorted in
10871        increasing order of r_symndx.  The VxWorks EABI doesn't require
10872        this, and because the code below handles REL rather than RELA
10873        relocations, using it for VxWorks would be outright harmful.  */
10874     if (!htab->is_vxworks)
10875       {
10876         s = mips_elf_rel_dyn_section (info, FALSE);
10877         if (s != NULL
10878             && s->size > (bfd_vma)2 * MIPS_ELF_REL_SIZE (output_bfd))
10879           {
10880             reldyn_sorting_bfd = output_bfd;
10881
10882             if (ABI_64_P (output_bfd))
10883               qsort ((Elf64_External_Rel *) s->contents + 1,
10884                      s->reloc_count - 1, sizeof (Elf64_Mips_External_Rel),
10885                      sort_dynamic_relocs_64);
10886             else
10887               qsort ((Elf32_External_Rel *) s->contents + 1,
10888                      s->reloc_count - 1, sizeof (Elf32_External_Rel),
10889                      sort_dynamic_relocs);
10890           }
10891       }
10892   }
10893
10894   if (htab->splt && htab->splt->size > 0)
10895     {
10896       if (htab->is_vxworks)
10897         {
10898           if (info->shared)
10899             mips_vxworks_finish_shared_plt (output_bfd, info);
10900           else
10901             mips_vxworks_finish_exec_plt (output_bfd, info);
10902         }
10903       else
10904         {
10905           BFD_ASSERT (!info->shared);
10906           mips_finish_exec_plt (output_bfd, info);
10907         }
10908     }
10909   return TRUE;
10910 }
10911
10912
10913 /* Set ABFD's EF_MIPS_ARCH and EF_MIPS_MACH flags.  */
10914
10915 static void
10916 mips_set_isa_flags (bfd *abfd)
10917 {
10918   flagword val;
10919
10920   switch (bfd_get_mach (abfd))
10921     {
10922     default:
10923     case bfd_mach_mips3000:
10924       val = E_MIPS_ARCH_1;
10925       break;
10926
10927     case bfd_mach_mips3900:
10928       val = E_MIPS_ARCH_1 | E_MIPS_MACH_3900;
10929       break;
10930
10931     case bfd_mach_mips6000:
10932       val = E_MIPS_ARCH_2;
10933       break;
10934
10935     case bfd_mach_mips4000:
10936     case bfd_mach_mips4300:
10937     case bfd_mach_mips4400:
10938     case bfd_mach_mips4600:
10939       val = E_MIPS_ARCH_3;
10940       break;
10941
10942     case bfd_mach_mips4010:
10943       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4010;
10944       break;
10945
10946     case bfd_mach_mips4100:
10947       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4100;
10948       break;
10949
10950     case bfd_mach_mips4111:
10951       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4111;
10952       break;
10953
10954     case bfd_mach_mips4120:
10955       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4120;
10956       break;
10957
10958     case bfd_mach_mips4650:
10959       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4650;
10960       break;
10961
10962     case bfd_mach_mips5400:
10963       val = E_MIPS_ARCH_4 | E_MIPS_MACH_5400;
10964       break;
10965
10966     case bfd_mach_mips5500:
10967       val = E_MIPS_ARCH_4 | E_MIPS_MACH_5500;
10968       break;
10969
10970     case bfd_mach_mips5900:
10971       val = E_MIPS_ARCH_3 | E_MIPS_MACH_5900;
10972       break;
10973
10974     case bfd_mach_mips9000:
10975       val = E_MIPS_ARCH_4 | E_MIPS_MACH_9000;
10976       break;
10977
10978     case bfd_mach_mips5000:
10979     case bfd_mach_mips7000:
10980     case bfd_mach_mips8000:
10981     case bfd_mach_mips10000:
10982     case bfd_mach_mips12000:
10983     case bfd_mach_mips14000:
10984     case bfd_mach_mips16000:
10985       val = E_MIPS_ARCH_4;
10986       break;
10987
10988     case bfd_mach_mips5:
10989       val = E_MIPS_ARCH_5;
10990       break;
10991
10992     case bfd_mach_mips_loongson_2e:
10993       val = E_MIPS_ARCH_3 | E_MIPS_MACH_LS2E;
10994       break;
10995
10996     case bfd_mach_mips_loongson_2f:
10997       val = E_MIPS_ARCH_3 | E_MIPS_MACH_LS2F;
10998       break;
10999
11000     case bfd_mach_mips_sb1:
11001       val = E_MIPS_ARCH_64 | E_MIPS_MACH_SB1;
11002       break;
11003
11004     case bfd_mach_mips_loongson_3a:
11005       val = E_MIPS_ARCH_64 | E_MIPS_MACH_LS3A;
11006       break;
11007
11008     case bfd_mach_mips_octeon:
11009     case bfd_mach_mips_octeonp:
11010       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON;
11011       break;
11012
11013     case bfd_mach_mips_xlr:
11014       val = E_MIPS_ARCH_64 | E_MIPS_MACH_XLR;
11015       break;
11016
11017     case bfd_mach_mips_octeon2:
11018       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON2;
11019       break;
11020
11021     case bfd_mach_mipsisa32:
11022       val = E_MIPS_ARCH_32;
11023       break;
11024
11025     case bfd_mach_mipsisa64:
11026       val = E_MIPS_ARCH_64;
11027       break;
11028
11029     case bfd_mach_mipsisa32r2:
11030       val = E_MIPS_ARCH_32R2;
11031       break;
11032
11033     case bfd_mach_mipsisa64r2:
11034       val = E_MIPS_ARCH_64R2;
11035       break;
11036     }
11037   elf_elfheader (abfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH);
11038   elf_elfheader (abfd)->e_flags |= val;
11039
11040 }
11041
11042
11043 /* The final processing done just before writing out a MIPS ELF object
11044    file.  This gets the MIPS architecture right based on the machine
11045    number.  This is used by both the 32-bit and the 64-bit ABI.  */
11046
11047 void
11048 _bfd_mips_elf_final_write_processing (bfd *abfd,
11049                                       bfd_boolean linker ATTRIBUTE_UNUSED)
11050 {
11051   unsigned int i;
11052   Elf_Internal_Shdr **hdrpp;
11053   const char *name;
11054   asection *sec;
11055
11056   /* Keep the existing EF_MIPS_MACH and EF_MIPS_ARCH flags if the former
11057      is nonzero.  This is for compatibility with old objects, which used
11058      a combination of a 32-bit EF_MIPS_ARCH and a 64-bit EF_MIPS_MACH.  */
11059   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == 0)
11060     mips_set_isa_flags (abfd);
11061
11062   /* Set the sh_info field for .gptab sections and other appropriate
11063      info for each special section.  */
11064   for (i = 1, hdrpp = elf_elfsections (abfd) + 1;
11065        i < elf_numsections (abfd);
11066        i++, hdrpp++)
11067     {
11068       switch ((*hdrpp)->sh_type)
11069         {
11070         case SHT_MIPS_MSYM:
11071         case SHT_MIPS_LIBLIST:
11072           sec = bfd_get_section_by_name (abfd, ".dynstr");
11073           if (sec != NULL)
11074             (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
11075           break;
11076
11077         case SHT_MIPS_GPTAB:
11078           BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
11079           name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
11080           BFD_ASSERT (name != NULL
11081                       && CONST_STRNEQ (name, ".gptab."));
11082           sec = bfd_get_section_by_name (abfd, name + sizeof ".gptab" - 1);
11083           BFD_ASSERT (sec != NULL);
11084           (*hdrpp)->sh_info = elf_section_data (sec)->this_idx;
11085           break;
11086
11087         case SHT_MIPS_CONTENT:
11088           BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
11089           name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
11090           BFD_ASSERT (name != NULL
11091                       && CONST_STRNEQ (name, ".MIPS.content"));
11092           sec = bfd_get_section_by_name (abfd,
11093                                          name + sizeof ".MIPS.content" - 1);
11094           BFD_ASSERT (sec != NULL);
11095           (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
11096           break;
11097
11098         case SHT_MIPS_SYMBOL_LIB:
11099           sec = bfd_get_section_by_name (abfd, ".dynsym");
11100           if (sec != NULL)
11101             (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
11102           sec = bfd_get_section_by_name (abfd, ".liblist");
11103           if (sec != NULL)
11104             (*hdrpp)->sh_info = elf_section_data (sec)->this_idx;
11105           break;
11106
11107         case SHT_MIPS_EVENTS:
11108           BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
11109           name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
11110           BFD_ASSERT (name != NULL);
11111           if (CONST_STRNEQ (name, ".MIPS.events"))
11112             sec = bfd_get_section_by_name (abfd,
11113                                            name + sizeof ".MIPS.events" - 1);
11114           else
11115             {
11116               BFD_ASSERT (CONST_STRNEQ (name, ".MIPS.post_rel"));
11117               sec = bfd_get_section_by_name (abfd,
11118                                              (name
11119                                               + sizeof ".MIPS.post_rel" - 1));
11120             }
11121           BFD_ASSERT (sec != NULL);
11122           (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
11123           break;
11124
11125         }
11126     }
11127 }
11128 \f
11129 /* When creating an IRIX5 executable, we need REGINFO and RTPROC
11130    segments.  */
11131
11132 int
11133 _bfd_mips_elf_additional_program_headers (bfd *abfd,
11134                                           struct bfd_link_info *info ATTRIBUTE_UNUSED)
11135 {
11136   asection *s;
11137   int ret = 0;
11138
11139   /* See if we need a PT_MIPS_REGINFO segment.  */
11140   s = bfd_get_section_by_name (abfd, ".reginfo");
11141   if (s && (s->flags & SEC_LOAD))
11142     ++ret;
11143
11144   /* See if we need a PT_MIPS_OPTIONS segment.  */
11145   if (IRIX_COMPAT (abfd) == ict_irix6
11146       && bfd_get_section_by_name (abfd,
11147                                   MIPS_ELF_OPTIONS_SECTION_NAME (abfd)))
11148     ++ret;
11149
11150   /* See if we need a PT_MIPS_RTPROC segment.  */
11151   if (IRIX_COMPAT (abfd) == ict_irix5
11152       && bfd_get_section_by_name (abfd, ".dynamic")
11153       && bfd_get_section_by_name (abfd, ".mdebug"))
11154     ++ret;
11155
11156   /* Allocate a PT_NULL header in dynamic objects.  See
11157      _bfd_mips_elf_modify_segment_map for details.  */
11158   if (!SGI_COMPAT (abfd)
11159       && bfd_get_section_by_name (abfd, ".dynamic"))
11160     ++ret;
11161
11162   return ret;
11163 }
11164
11165 /* Modify the segment map for an IRIX5 executable.  */
11166
11167 bfd_boolean
11168 _bfd_mips_elf_modify_segment_map (bfd *abfd,
11169                                   struct bfd_link_info *info)
11170 {
11171   asection *s;
11172   struct elf_segment_map *m, **pm;
11173   bfd_size_type amt;
11174
11175   /* If there is a .reginfo section, we need a PT_MIPS_REGINFO
11176      segment.  */
11177   s = bfd_get_section_by_name (abfd, ".reginfo");
11178   if (s != NULL && (s->flags & SEC_LOAD) != 0)
11179     {
11180       for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
11181         if (m->p_type == PT_MIPS_REGINFO)
11182           break;
11183       if (m == NULL)
11184         {
11185           amt = sizeof *m;
11186           m = bfd_zalloc (abfd, amt);
11187           if (m == NULL)
11188             return FALSE;
11189
11190           m->p_type = PT_MIPS_REGINFO;
11191           m->count = 1;
11192           m->sections[0] = s;
11193
11194           /* We want to put it after the PHDR and INTERP segments.  */
11195           pm = &elf_tdata (abfd)->segment_map;
11196           while (*pm != NULL
11197                  && ((*pm)->p_type == PT_PHDR
11198                      || (*pm)->p_type == PT_INTERP))
11199             pm = &(*pm)->next;
11200
11201           m->next = *pm;
11202           *pm = m;
11203         }
11204     }
11205
11206   /* For IRIX 6, we don't have .mdebug sections, nor does anything but
11207      .dynamic end up in PT_DYNAMIC.  However, we do have to insert a
11208      PT_MIPS_OPTIONS segment immediately following the program header
11209      table.  */
11210   if (NEWABI_P (abfd)
11211       /* On non-IRIX6 new abi, we'll have already created a segment
11212          for this section, so don't create another.  I'm not sure this
11213          is not also the case for IRIX 6, but I can't test it right
11214          now.  */
11215       && IRIX_COMPAT (abfd) == ict_irix6)
11216     {
11217       for (s = abfd->sections; s; s = s->next)
11218         if (elf_section_data (s)->this_hdr.sh_type == SHT_MIPS_OPTIONS)
11219           break;
11220
11221       if (s)
11222         {
11223           struct elf_segment_map *options_segment;
11224
11225           pm = &elf_tdata (abfd)->segment_map;
11226           while (*pm != NULL
11227                  && ((*pm)->p_type == PT_PHDR
11228                      || (*pm)->p_type == PT_INTERP))
11229             pm = &(*pm)->next;
11230
11231           if (*pm == NULL || (*pm)->p_type != PT_MIPS_OPTIONS)
11232             {
11233               amt = sizeof (struct elf_segment_map);
11234               options_segment = bfd_zalloc (abfd, amt);
11235               options_segment->next = *pm;
11236               options_segment->p_type = PT_MIPS_OPTIONS;
11237               options_segment->p_flags = PF_R;
11238               options_segment->p_flags_valid = TRUE;
11239               options_segment->count = 1;
11240               options_segment->sections[0] = s;
11241               *pm = options_segment;
11242             }
11243         }
11244     }
11245   else
11246     {
11247       if (IRIX_COMPAT (abfd) == ict_irix5)
11248         {
11249           /* If there are .dynamic and .mdebug sections, we make a room
11250              for the RTPROC header.  FIXME: Rewrite without section names.  */
11251           if (bfd_get_section_by_name (abfd, ".interp") == NULL
11252               && bfd_get_section_by_name (abfd, ".dynamic") != NULL
11253               && bfd_get_section_by_name (abfd, ".mdebug") != NULL)
11254             {
11255               for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
11256                 if (m->p_type == PT_MIPS_RTPROC)
11257                   break;
11258               if (m == NULL)
11259                 {
11260                   amt = sizeof *m;
11261                   m = bfd_zalloc (abfd, amt);
11262                   if (m == NULL)
11263                     return FALSE;
11264
11265                   m->p_type = PT_MIPS_RTPROC;
11266
11267                   s = bfd_get_section_by_name (abfd, ".rtproc");
11268                   if (s == NULL)
11269                     {
11270                       m->count = 0;
11271                       m->p_flags = 0;
11272                       m->p_flags_valid = 1;
11273                     }
11274                   else
11275                     {
11276                       m->count = 1;
11277                       m->sections[0] = s;
11278                     }
11279
11280                   /* We want to put it after the DYNAMIC segment.  */
11281                   pm = &elf_tdata (abfd)->segment_map;
11282                   while (*pm != NULL && (*pm)->p_type != PT_DYNAMIC)
11283                     pm = &(*pm)->next;
11284                   if (*pm != NULL)
11285                     pm = &(*pm)->next;
11286
11287                   m->next = *pm;
11288                   *pm = m;
11289                 }
11290             }
11291         }
11292       /* On IRIX5, the PT_DYNAMIC segment includes the .dynamic,
11293          .dynstr, .dynsym, and .hash sections, and everything in
11294          between.  */
11295       for (pm = &elf_tdata (abfd)->segment_map; *pm != NULL;
11296            pm = &(*pm)->next)
11297         if ((*pm)->p_type == PT_DYNAMIC)
11298           break;
11299       m = *pm;
11300       if (m != NULL && IRIX_COMPAT (abfd) == ict_none)
11301         {
11302           /* For a normal mips executable the permissions for the PT_DYNAMIC
11303              segment are read, write and execute. We do that here since
11304              the code in elf.c sets only the read permission. This matters
11305              sometimes for the dynamic linker.  */
11306           if (bfd_get_section_by_name (abfd, ".dynamic") != NULL)
11307             {
11308               m->p_flags = PF_R | PF_W | PF_X;
11309               m->p_flags_valid = 1;
11310             }
11311         }
11312       /* GNU/Linux binaries do not need the extended PT_DYNAMIC section.
11313          glibc's dynamic linker has traditionally derived the number of
11314          tags from the p_filesz field, and sometimes allocates stack
11315          arrays of that size.  An overly-big PT_DYNAMIC segment can
11316          be actively harmful in such cases.  Making PT_DYNAMIC contain
11317          other sections can also make life hard for the prelinker,
11318          which might move one of the other sections to a different
11319          PT_LOAD segment.  */
11320       if (SGI_COMPAT (abfd)
11321           && m != NULL
11322           && m->count == 1
11323           && strcmp (m->sections[0]->name, ".dynamic") == 0)
11324         {
11325           static const char *sec_names[] =
11326           {
11327             ".dynamic", ".dynstr", ".dynsym", ".hash"
11328           };
11329           bfd_vma low, high;
11330           unsigned int i, c;
11331           struct elf_segment_map *n;
11332
11333           low = ~(bfd_vma) 0;
11334           high = 0;
11335           for (i = 0; i < sizeof sec_names / sizeof sec_names[0]; i++)
11336             {
11337               s = bfd_get_section_by_name (abfd, sec_names[i]);
11338               if (s != NULL && (s->flags & SEC_LOAD) != 0)
11339                 {
11340                   bfd_size_type sz;
11341
11342                   if (low > s->vma)
11343                     low = s->vma;
11344                   sz = s->size;
11345                   if (high < s->vma + sz)
11346                     high = s->vma + sz;
11347                 }
11348             }
11349
11350           c = 0;
11351           for (s = abfd->sections; s != NULL; s = s->next)
11352             if ((s->flags & SEC_LOAD) != 0
11353                 && s->vma >= low
11354                 && s->vma + s->size <= high)
11355               ++c;
11356
11357           amt = sizeof *n + (bfd_size_type) (c - 1) * sizeof (asection *);
11358           n = bfd_zalloc (abfd, amt);
11359           if (n == NULL)
11360             return FALSE;
11361           *n = *m;
11362           n->count = c;
11363
11364           i = 0;
11365           for (s = abfd->sections; s != NULL; s = s->next)
11366             {
11367               if ((s->flags & SEC_LOAD) != 0
11368                   && s->vma >= low
11369                   && s->vma + s->size <= high)
11370                 {
11371                   n->sections[i] = s;
11372                   ++i;
11373                 }
11374             }
11375
11376           *pm = n;
11377         }
11378     }
11379
11380   /* Allocate a spare program header in dynamic objects so that tools
11381      like the prelinker can add an extra PT_LOAD entry.
11382
11383      If the prelinker needs to make room for a new PT_LOAD entry, its
11384      standard procedure is to move the first (read-only) sections into
11385      the new (writable) segment.  However, the MIPS ABI requires
11386      .dynamic to be in a read-only segment, and the section will often
11387      start within sizeof (ElfNN_Phdr) bytes of the last program header.
11388
11389      Although the prelinker could in principle move .dynamic to a
11390      writable segment, it seems better to allocate a spare program
11391      header instead, and avoid the need to move any sections.
11392      There is a long tradition of allocating spare dynamic tags,
11393      so allocating a spare program header seems like a natural
11394      extension.
11395
11396      If INFO is NULL, we may be copying an already prelinked binary
11397      with objcopy or strip, so do not add this header.  */
11398   if (info != NULL
11399       && !SGI_COMPAT (abfd)
11400       && bfd_get_section_by_name (abfd, ".dynamic"))
11401     {
11402       for (pm = &elf_tdata (abfd)->segment_map; *pm != NULL; pm = &(*pm)->next)
11403         if ((*pm)->p_type == PT_NULL)
11404           break;
11405       if (*pm == NULL)
11406         {
11407           m = bfd_zalloc (abfd, sizeof (*m));
11408           if (m == NULL)
11409             return FALSE;
11410
11411           m->p_type = PT_NULL;
11412           *pm = m;
11413         }
11414     }
11415
11416   return TRUE;
11417 }
11418 \f
11419 /* Return the section that should be marked against GC for a given
11420    relocation.  */
11421
11422 asection *
11423 _bfd_mips_elf_gc_mark_hook (asection *sec,
11424                             struct bfd_link_info *info,
11425                             Elf_Internal_Rela *rel,
11426                             struct elf_link_hash_entry *h,
11427                             Elf_Internal_Sym *sym)
11428 {
11429   /* ??? Do mips16 stub sections need to be handled special?  */
11430
11431   if (h != NULL)
11432     switch (ELF_R_TYPE (sec->owner, rel->r_info))
11433       {
11434       case R_MIPS_GNU_VTINHERIT:
11435       case R_MIPS_GNU_VTENTRY:
11436         return NULL;
11437       }
11438
11439   return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
11440 }
11441
11442 /* Update the got entry reference counts for the section being removed.  */
11443
11444 bfd_boolean
11445 _bfd_mips_elf_gc_sweep_hook (bfd *abfd ATTRIBUTE_UNUSED,
11446                              struct bfd_link_info *info ATTRIBUTE_UNUSED,
11447                              asection *sec ATTRIBUTE_UNUSED,
11448                              const Elf_Internal_Rela *relocs ATTRIBUTE_UNUSED)
11449 {
11450 #if 0
11451   Elf_Internal_Shdr *symtab_hdr;
11452   struct elf_link_hash_entry **sym_hashes;
11453   bfd_signed_vma *local_got_refcounts;
11454   const Elf_Internal_Rela *rel, *relend;
11455   unsigned long r_symndx;
11456   struct elf_link_hash_entry *h;
11457
11458   if (info->relocatable)
11459     return TRUE;
11460
11461   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
11462   sym_hashes = elf_sym_hashes (abfd);
11463   local_got_refcounts = elf_local_got_refcounts (abfd);
11464
11465   relend = relocs + sec->reloc_count;
11466   for (rel = relocs; rel < relend; rel++)
11467     switch (ELF_R_TYPE (abfd, rel->r_info))
11468       {
11469       case R_MIPS16_GOT16:
11470       case R_MIPS16_CALL16:
11471       case R_MIPS_GOT16:
11472       case R_MIPS_CALL16:
11473       case R_MIPS_CALL_HI16:
11474       case R_MIPS_CALL_LO16:
11475       case R_MIPS_GOT_HI16:
11476       case R_MIPS_GOT_LO16:
11477       case R_MIPS_GOT_DISP:
11478       case R_MIPS_GOT_PAGE:
11479       case R_MIPS_GOT_OFST:
11480       case R_MICROMIPS_GOT16:
11481       case R_MICROMIPS_CALL16:
11482       case R_MICROMIPS_CALL_HI16:
11483       case R_MICROMIPS_CALL_LO16:
11484       case R_MICROMIPS_GOT_HI16:
11485       case R_MICROMIPS_GOT_LO16:
11486       case R_MICROMIPS_GOT_DISP:
11487       case R_MICROMIPS_GOT_PAGE:
11488       case R_MICROMIPS_GOT_OFST:
11489         /* ??? It would seem that the existing MIPS code does no sort
11490            of reference counting or whatnot on its GOT and PLT entries,
11491            so it is not possible to garbage collect them at this time.  */
11492         break;
11493
11494       default:
11495         break;
11496       }
11497 #endif
11498
11499   return TRUE;
11500 }
11501 \f
11502 /* Copy data from a MIPS ELF indirect symbol to its direct symbol,
11503    hiding the old indirect symbol.  Process additional relocation
11504    information.  Also called for weakdefs, in which case we just let
11505    _bfd_elf_link_hash_copy_indirect copy the flags for us.  */
11506
11507 void
11508 _bfd_mips_elf_copy_indirect_symbol (struct bfd_link_info *info,
11509                                     struct elf_link_hash_entry *dir,
11510                                     struct elf_link_hash_entry *ind)
11511 {
11512   struct mips_elf_link_hash_entry *dirmips, *indmips;
11513
11514   _bfd_elf_link_hash_copy_indirect (info, dir, ind);
11515
11516   dirmips = (struct mips_elf_link_hash_entry *) dir;
11517   indmips = (struct mips_elf_link_hash_entry *) ind;
11518   /* Any absolute non-dynamic relocations against an indirect or weak
11519      definition will be against the target symbol.  */
11520   if (indmips->has_static_relocs)
11521     dirmips->has_static_relocs = TRUE;
11522
11523   if (ind->root.type != bfd_link_hash_indirect)
11524     return;
11525
11526   dirmips->possibly_dynamic_relocs += indmips->possibly_dynamic_relocs;
11527   if (indmips->readonly_reloc)
11528     dirmips->readonly_reloc = TRUE;
11529   if (indmips->no_fn_stub)
11530     dirmips->no_fn_stub = TRUE;
11531   if (indmips->fn_stub)
11532     {
11533       dirmips->fn_stub = indmips->fn_stub;
11534       indmips->fn_stub = NULL;
11535     }
11536   if (indmips->need_fn_stub)
11537     {
11538       dirmips->need_fn_stub = TRUE;
11539       indmips->need_fn_stub = FALSE;
11540     }
11541   if (indmips->call_stub)
11542     {
11543       dirmips->call_stub = indmips->call_stub;
11544       indmips->call_stub = NULL;
11545     }
11546   if (indmips->call_fp_stub)
11547     {
11548       dirmips->call_fp_stub = indmips->call_fp_stub;
11549       indmips->call_fp_stub = NULL;
11550     }
11551   if (indmips->global_got_area < dirmips->global_got_area)
11552     dirmips->global_got_area = indmips->global_got_area;
11553   if (indmips->global_got_area < GGA_NONE)
11554     indmips->global_got_area = GGA_NONE;
11555   if (indmips->has_nonpic_branches)
11556     dirmips->has_nonpic_branches = TRUE;
11557
11558   if (dirmips->tls_ie_type == 0)
11559     dirmips->tls_ie_type = indmips->tls_ie_type;
11560   if (dirmips->tls_gd_type == 0)
11561     dirmips->tls_gd_type = indmips->tls_gd_type;
11562 }
11563 \f
11564 #define PDR_SIZE 32
11565
11566 bfd_boolean
11567 _bfd_mips_elf_discard_info (bfd *abfd, struct elf_reloc_cookie *cookie,
11568                             struct bfd_link_info *info)
11569 {
11570   asection *o;
11571   bfd_boolean ret = FALSE;
11572   unsigned char *tdata;
11573   size_t i, skip;
11574
11575   o = bfd_get_section_by_name (abfd, ".pdr");
11576   if (! o)
11577     return FALSE;
11578   if (o->size == 0)
11579     return FALSE;
11580   if (o->size % PDR_SIZE != 0)
11581     return FALSE;
11582   if (o->output_section != NULL
11583       && bfd_is_abs_section (o->output_section))
11584     return FALSE;
11585
11586   tdata = bfd_zmalloc (o->size / PDR_SIZE);
11587   if (! tdata)
11588     return FALSE;
11589
11590   cookie->rels = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
11591                                             info->keep_memory);
11592   if (!cookie->rels)
11593     {
11594       free (tdata);
11595       return FALSE;
11596     }
11597
11598   cookie->rel = cookie->rels;
11599   cookie->relend = cookie->rels + o->reloc_count;
11600
11601   for (i = 0, skip = 0; i < o->size / PDR_SIZE; i ++)
11602     {
11603       if (bfd_elf_reloc_symbol_deleted_p (i * PDR_SIZE, cookie))
11604         {
11605           tdata[i] = 1;
11606           skip ++;
11607         }
11608     }
11609
11610   if (skip != 0)
11611     {
11612       mips_elf_section_data (o)->u.tdata = tdata;
11613       o->size -= skip * PDR_SIZE;
11614       ret = TRUE;
11615     }
11616   else
11617     free (tdata);
11618
11619   if (! info->keep_memory)
11620     free (cookie->rels);
11621
11622   return ret;
11623 }
11624
11625 bfd_boolean
11626 _bfd_mips_elf_ignore_discarded_relocs (asection *sec)
11627 {
11628   if (strcmp (sec->name, ".pdr") == 0)
11629     return TRUE;
11630   return FALSE;
11631 }
11632
11633 bfd_boolean
11634 _bfd_mips_elf_write_section (bfd *output_bfd,
11635                              struct bfd_link_info *link_info ATTRIBUTE_UNUSED,
11636                              asection *sec, bfd_byte *contents)
11637 {
11638   bfd_byte *to, *from, *end;
11639   int i;
11640
11641   if (strcmp (sec->name, ".pdr") != 0)
11642     return FALSE;
11643
11644   if (mips_elf_section_data (sec)->u.tdata == NULL)
11645     return FALSE;
11646
11647   to = contents;
11648   end = contents + sec->size;
11649   for (from = contents, i = 0;
11650        from < end;
11651        from += PDR_SIZE, i++)
11652     {
11653       if ((mips_elf_section_data (sec)->u.tdata)[i] == 1)
11654         continue;
11655       if (to != from)
11656         memcpy (to, from, PDR_SIZE);
11657       to += PDR_SIZE;
11658     }
11659   bfd_set_section_contents (output_bfd, sec->output_section, contents,
11660                             sec->output_offset, sec->size);
11661   return TRUE;
11662 }
11663 \f
11664 /* microMIPS code retains local labels for linker relaxation.  Omit them
11665    from output by default for clarity.  */
11666
11667 bfd_boolean
11668 _bfd_mips_elf_is_target_special_symbol (bfd *abfd, asymbol *sym)
11669 {
11670   return _bfd_elf_is_local_label_name (abfd, sym->name);
11671 }
11672
11673 /* MIPS ELF uses a special find_nearest_line routine in order the
11674    handle the ECOFF debugging information.  */
11675
11676 struct mips_elf_find_line
11677 {
11678   struct ecoff_debug_info d;
11679   struct ecoff_find_line i;
11680 };
11681
11682 bfd_boolean
11683 _bfd_mips_elf_find_nearest_line (bfd *abfd, asection *section,
11684                                  asymbol **symbols, bfd_vma offset,
11685                                  const char **filename_ptr,
11686                                  const char **functionname_ptr,
11687                                  unsigned int *line_ptr)
11688 {
11689   asection *msec;
11690
11691   if (_bfd_dwarf1_find_nearest_line (abfd, section, symbols, offset,
11692                                      filename_ptr, functionname_ptr,
11693                                      line_ptr))
11694     return TRUE;
11695
11696   if (_bfd_dwarf2_find_nearest_line (abfd, dwarf_debug_sections,
11697                                      section, symbols, offset,
11698                                      filename_ptr, functionname_ptr,
11699                                      line_ptr, NULL, ABI_64_P (abfd) ? 8 : 0,
11700                                      &elf_tdata (abfd)->dwarf2_find_line_info))
11701     return TRUE;
11702
11703   msec = bfd_get_section_by_name (abfd, ".mdebug");
11704   if (msec != NULL)
11705     {
11706       flagword origflags;
11707       struct mips_elf_find_line *fi;
11708       const struct ecoff_debug_swap * const swap =
11709         get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
11710
11711       /* If we are called during a link, mips_elf_final_link may have
11712          cleared the SEC_HAS_CONTENTS field.  We force it back on here
11713          if appropriate (which it normally will be).  */
11714       origflags = msec->flags;
11715       if (elf_section_data (msec)->this_hdr.sh_type != SHT_NOBITS)
11716         msec->flags |= SEC_HAS_CONTENTS;
11717
11718       fi = elf_tdata (abfd)->find_line_info;
11719       if (fi == NULL)
11720         {
11721           bfd_size_type external_fdr_size;
11722           char *fraw_src;
11723           char *fraw_end;
11724           struct fdr *fdr_ptr;
11725           bfd_size_type amt = sizeof (struct mips_elf_find_line);
11726
11727           fi = bfd_zalloc (abfd, amt);
11728           if (fi == NULL)
11729             {
11730               msec->flags = origflags;
11731               return FALSE;
11732             }
11733
11734           if (! _bfd_mips_elf_read_ecoff_info (abfd, msec, &fi->d))
11735             {
11736               msec->flags = origflags;
11737               return FALSE;
11738             }
11739
11740           /* Swap in the FDR information.  */
11741           amt = fi->d.symbolic_header.ifdMax * sizeof (struct fdr);
11742           fi->d.fdr = bfd_alloc (abfd, amt);
11743           if (fi->d.fdr == NULL)
11744             {
11745               msec->flags = origflags;
11746               return FALSE;
11747             }
11748           external_fdr_size = swap->external_fdr_size;
11749           fdr_ptr = fi->d.fdr;
11750           fraw_src = (char *) fi->d.external_fdr;
11751           fraw_end = (fraw_src
11752                       + fi->d.symbolic_header.ifdMax * external_fdr_size);
11753           for (; fraw_src < fraw_end; fraw_src += external_fdr_size, fdr_ptr++)
11754             (*swap->swap_fdr_in) (abfd, fraw_src, fdr_ptr);
11755
11756           elf_tdata (abfd)->find_line_info = fi;
11757
11758           /* Note that we don't bother to ever free this information.
11759              find_nearest_line is either called all the time, as in
11760              objdump -l, so the information should be saved, or it is
11761              rarely called, as in ld error messages, so the memory
11762              wasted is unimportant.  Still, it would probably be a
11763              good idea for free_cached_info to throw it away.  */
11764         }
11765
11766       if (_bfd_ecoff_locate_line (abfd, section, offset, &fi->d, swap,
11767                                   &fi->i, filename_ptr, functionname_ptr,
11768                                   line_ptr))
11769         {
11770           msec->flags = origflags;
11771           return TRUE;
11772         }
11773
11774       msec->flags = origflags;
11775     }
11776
11777   /* Fall back on the generic ELF find_nearest_line routine.  */
11778
11779   return _bfd_elf_find_nearest_line (abfd, section, symbols, offset,
11780                                      filename_ptr, functionname_ptr,
11781                                      line_ptr);
11782 }
11783
11784 bfd_boolean
11785 _bfd_mips_elf_find_inliner_info (bfd *abfd,
11786                                  const char **filename_ptr,
11787                                  const char **functionname_ptr,
11788                                  unsigned int *line_ptr)
11789 {
11790   bfd_boolean found;
11791   found = _bfd_dwarf2_find_inliner_info (abfd, filename_ptr,
11792                                          functionname_ptr, line_ptr,
11793                                          & elf_tdata (abfd)->dwarf2_find_line_info);
11794   return found;
11795 }
11796
11797 \f
11798 /* When are writing out the .options or .MIPS.options section,
11799    remember the bytes we are writing out, so that we can install the
11800    GP value in the section_processing routine.  */
11801
11802 bfd_boolean
11803 _bfd_mips_elf_set_section_contents (bfd *abfd, sec_ptr section,
11804                                     const void *location,
11805                                     file_ptr offset, bfd_size_type count)
11806 {
11807   if (MIPS_ELF_OPTIONS_SECTION_NAME_P (section->name))
11808     {
11809       bfd_byte *c;
11810
11811       if (elf_section_data (section) == NULL)
11812         {
11813           bfd_size_type amt = sizeof (struct bfd_elf_section_data);
11814           section->used_by_bfd = bfd_zalloc (abfd, amt);
11815           if (elf_section_data (section) == NULL)
11816             return FALSE;
11817         }
11818       c = mips_elf_section_data (section)->u.tdata;
11819       if (c == NULL)
11820         {
11821           c = bfd_zalloc (abfd, section->size);
11822           if (c == NULL)
11823             return FALSE;
11824           mips_elf_section_data (section)->u.tdata = c;
11825         }
11826
11827       memcpy (c + offset, location, count);
11828     }
11829
11830   return _bfd_elf_set_section_contents (abfd, section, location, offset,
11831                                         count);
11832 }
11833
11834 /* This is almost identical to bfd_generic_get_... except that some
11835    MIPS relocations need to be handled specially.  Sigh.  */
11836
11837 bfd_byte *
11838 _bfd_elf_mips_get_relocated_section_contents
11839   (bfd *abfd,
11840    struct bfd_link_info *link_info,
11841    struct bfd_link_order *link_order,
11842    bfd_byte *data,
11843    bfd_boolean relocatable,
11844    asymbol **symbols)
11845 {
11846   /* Get enough memory to hold the stuff */
11847   bfd *input_bfd = link_order->u.indirect.section->owner;
11848   asection *input_section = link_order->u.indirect.section;
11849   bfd_size_type sz;
11850
11851   long reloc_size = bfd_get_reloc_upper_bound (input_bfd, input_section);
11852   arelent **reloc_vector = NULL;
11853   long reloc_count;
11854
11855   if (reloc_size < 0)
11856     goto error_return;
11857
11858   reloc_vector = bfd_malloc (reloc_size);
11859   if (reloc_vector == NULL && reloc_size != 0)
11860     goto error_return;
11861
11862   /* read in the section */
11863   sz = input_section->rawsize ? input_section->rawsize : input_section->size;
11864   if (!bfd_get_section_contents (input_bfd, input_section, data, 0, sz))
11865     goto error_return;
11866
11867   reloc_count = bfd_canonicalize_reloc (input_bfd,
11868                                         input_section,
11869                                         reloc_vector,
11870                                         symbols);
11871   if (reloc_count < 0)
11872     goto error_return;
11873
11874   if (reloc_count > 0)
11875     {
11876       arelent **parent;
11877       /* for mips */
11878       int gp_found;
11879       bfd_vma gp = 0x12345678;  /* initialize just to shut gcc up */
11880
11881       {
11882         struct bfd_hash_entry *h;
11883         struct bfd_link_hash_entry *lh;
11884         /* Skip all this stuff if we aren't mixing formats.  */
11885         if (abfd && input_bfd
11886             && abfd->xvec == input_bfd->xvec)
11887           lh = 0;
11888         else
11889           {
11890             h = bfd_hash_lookup (&link_info->hash->table, "_gp", FALSE, FALSE);
11891             lh = (struct bfd_link_hash_entry *) h;
11892           }
11893       lookup:
11894         if (lh)
11895           {
11896             switch (lh->type)
11897               {
11898               case bfd_link_hash_undefined:
11899               case bfd_link_hash_undefweak:
11900               case bfd_link_hash_common:
11901                 gp_found = 0;
11902                 break;
11903               case bfd_link_hash_defined:
11904               case bfd_link_hash_defweak:
11905                 gp_found = 1;
11906                 gp = lh->u.def.value;
11907                 break;
11908               case bfd_link_hash_indirect:
11909               case bfd_link_hash_warning:
11910                 lh = lh->u.i.link;
11911                 /* @@FIXME  ignoring warning for now */
11912                 goto lookup;
11913               case bfd_link_hash_new:
11914               default:
11915                 abort ();
11916               }
11917           }
11918         else
11919           gp_found = 0;
11920       }
11921       /* end mips */
11922       for (parent = reloc_vector; *parent != NULL; parent++)
11923         {
11924           char *error_message = NULL;
11925           bfd_reloc_status_type r;
11926
11927           /* Specific to MIPS: Deal with relocation types that require
11928              knowing the gp of the output bfd.  */
11929           asymbol *sym = *(*parent)->sym_ptr_ptr;
11930
11931           /* If we've managed to find the gp and have a special
11932              function for the relocation then go ahead, else default
11933              to the generic handling.  */
11934           if (gp_found
11935               && (*parent)->howto->special_function
11936               == _bfd_mips_elf32_gprel16_reloc)
11937             r = _bfd_mips_elf_gprel16_with_gp (input_bfd, sym, *parent,
11938                                                input_section, relocatable,
11939                                                data, gp);
11940           else
11941             r = bfd_perform_relocation (input_bfd, *parent, data,
11942                                         input_section,
11943                                         relocatable ? abfd : NULL,
11944                                         &error_message);
11945
11946           if (relocatable)
11947             {
11948               asection *os = input_section->output_section;
11949
11950               /* A partial link, so keep the relocs */
11951               os->orelocation[os->reloc_count] = *parent;
11952               os->reloc_count++;
11953             }
11954
11955           if (r != bfd_reloc_ok)
11956             {
11957               switch (r)
11958                 {
11959                 case bfd_reloc_undefined:
11960                   if (!((*link_info->callbacks->undefined_symbol)
11961                         (link_info, bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
11962                          input_bfd, input_section, (*parent)->address, TRUE)))
11963                     goto error_return;
11964                   break;
11965                 case bfd_reloc_dangerous:
11966                   BFD_ASSERT (error_message != NULL);
11967                   if (!((*link_info->callbacks->reloc_dangerous)
11968                         (link_info, error_message, input_bfd, input_section,
11969                          (*parent)->address)))
11970                     goto error_return;
11971                   break;
11972                 case bfd_reloc_overflow:
11973                   if (!((*link_info->callbacks->reloc_overflow)
11974                         (link_info, NULL,
11975                          bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
11976                          (*parent)->howto->name, (*parent)->addend,
11977                          input_bfd, input_section, (*parent)->address)))
11978                     goto error_return;
11979                   break;
11980                 case bfd_reloc_outofrange:
11981                 default:
11982                   abort ();
11983                   break;
11984                 }
11985
11986             }
11987         }
11988     }
11989   if (reloc_vector != NULL)
11990     free (reloc_vector);
11991   return data;
11992
11993 error_return:
11994   if (reloc_vector != NULL)
11995     free (reloc_vector);
11996   return NULL;
11997 }
11998 \f
11999 static bfd_boolean
12000 mips_elf_relax_delete_bytes (bfd *abfd,
12001                              asection *sec, bfd_vma addr, int count)
12002 {
12003   Elf_Internal_Shdr *symtab_hdr;
12004   unsigned int sec_shndx;
12005   bfd_byte *contents;
12006   Elf_Internal_Rela *irel, *irelend;
12007   Elf_Internal_Sym *isym;
12008   Elf_Internal_Sym *isymend;
12009   struct elf_link_hash_entry **sym_hashes;
12010   struct elf_link_hash_entry **end_hashes;
12011   struct elf_link_hash_entry **start_hashes;
12012   unsigned int symcount;
12013
12014   sec_shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
12015   contents = elf_section_data (sec)->this_hdr.contents;
12016
12017   irel = elf_section_data (sec)->relocs;
12018   irelend = irel + sec->reloc_count;
12019
12020   /* Actually delete the bytes.  */
12021   memmove (contents + addr, contents + addr + count,
12022            (size_t) (sec->size - addr - count));
12023   sec->size -= count;
12024
12025   /* Adjust all the relocs.  */
12026   for (irel = elf_section_data (sec)->relocs; irel < irelend; irel++)
12027     {
12028       /* Get the new reloc address.  */
12029       if (irel->r_offset > addr)
12030         irel->r_offset -= count;
12031     }
12032
12033   BFD_ASSERT (addr % 2 == 0);
12034   BFD_ASSERT (count % 2 == 0);
12035
12036   /* Adjust the local symbols defined in this section.  */
12037   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
12038   isym = (Elf_Internal_Sym *) symtab_hdr->contents;
12039   for (isymend = isym + symtab_hdr->sh_info; isym < isymend; isym++)
12040     if (isym->st_shndx == sec_shndx && isym->st_value > addr)
12041       isym->st_value -= count;
12042
12043   /* Now adjust the global symbols defined in this section.  */
12044   symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym)
12045               - symtab_hdr->sh_info);
12046   sym_hashes = start_hashes = elf_sym_hashes (abfd);
12047   end_hashes = sym_hashes + symcount;
12048
12049   for (; sym_hashes < end_hashes; sym_hashes++)
12050     {
12051       struct elf_link_hash_entry *sym_hash = *sym_hashes;
12052
12053       if ((sym_hash->root.type == bfd_link_hash_defined
12054            || sym_hash->root.type == bfd_link_hash_defweak)
12055           && sym_hash->root.u.def.section == sec)
12056         {
12057           bfd_vma value = sym_hash->root.u.def.value;
12058
12059           if (ELF_ST_IS_MICROMIPS (sym_hash->other))
12060             value &= MINUS_TWO;
12061           if (value > addr)
12062             sym_hash->root.u.def.value -= count;
12063         }
12064     }
12065
12066   return TRUE;
12067 }
12068
12069
12070 /* Opcodes needed for microMIPS relaxation as found in
12071    opcodes/micromips-opc.c.  */
12072
12073 struct opcode_descriptor {
12074   unsigned long match;
12075   unsigned long mask;
12076 };
12077
12078 /* The $ra register aka $31.  */
12079
12080 #define RA 31
12081
12082 /* 32-bit instruction format register fields.  */
12083
12084 #define OP32_SREG(opcode) (((opcode) >> 16) & 0x1f)
12085 #define OP32_TREG(opcode) (((opcode) >> 21) & 0x1f)
12086
12087 /* Check if a 5-bit register index can be abbreviated to 3 bits.  */
12088
12089 #define OP16_VALID_REG(r) \
12090   ((2 <= (r) && (r) <= 7) || (16 <= (r) && (r) <= 17))
12091
12092
12093 /* 32-bit and 16-bit branches.  */
12094
12095 static const struct opcode_descriptor b_insns_32[] = {
12096   { /* "b",     "p",            */ 0x40400000, 0xffff0000 }, /* bgez 0 */
12097   { /* "b",     "p",            */ 0x94000000, 0xffff0000 }, /* beq 0, 0 */
12098   { 0, 0 }  /* End marker for find_match().  */
12099 };
12100
12101 static const struct opcode_descriptor bc_insn_32 =
12102   { /* "bc(1|2)(ft)", "N,p",    */ 0x42800000, 0xfec30000 };
12103
12104 static const struct opcode_descriptor bz_insn_32 =
12105   { /* "b(g|l)(e|t)z", "s,p",   */ 0x40000000, 0xff200000 };
12106
12107 static const struct opcode_descriptor bzal_insn_32 =
12108   { /* "b(ge|lt)zal", "s,p",    */ 0x40200000, 0xffa00000 };
12109
12110 static const struct opcode_descriptor beq_insn_32 =
12111   { /* "b(eq|ne)", "s,t,p",     */ 0x94000000, 0xdc000000 };
12112
12113 static const struct opcode_descriptor b_insn_16 =
12114   { /* "b",     "mD",           */ 0xcc00,     0xfc00 };
12115
12116 static const struct opcode_descriptor bz_insn_16 =
12117   { /* "b(eq|ne)z", "md,mE",    */ 0x8c00,     0xdc00 };
12118
12119
12120 /* 32-bit and 16-bit branch EQ and NE zero.  */
12121
12122 /* NOTE: All opcode tables have BEQ/BNE in the same order: first the
12123    eq and second the ne.  This convention is used when replacing a
12124    32-bit BEQ/BNE with the 16-bit version.  */
12125
12126 #define BZC32_REG_FIELD(r) (((r) & 0x1f) << 16)
12127
12128 static const struct opcode_descriptor bz_rs_insns_32[] = {
12129   { /* "beqz",  "s,p",          */ 0x94000000, 0xffe00000 },
12130   { /* "bnez",  "s,p",          */ 0xb4000000, 0xffe00000 },
12131   { 0, 0 }  /* End marker for find_match().  */
12132 };
12133
12134 static const struct opcode_descriptor bz_rt_insns_32[] = {
12135   { /* "beqz",  "t,p",          */ 0x94000000, 0xfc01f000 },
12136   { /* "bnez",  "t,p",          */ 0xb4000000, 0xfc01f000 },
12137   { 0, 0 }  /* End marker for find_match().  */
12138 };
12139
12140 static const struct opcode_descriptor bzc_insns_32[] = {
12141   { /* "beqzc", "s,p",          */ 0x40e00000, 0xffe00000 },
12142   { /* "bnezc", "s,p",          */ 0x40a00000, 0xffe00000 },
12143   { 0, 0 }  /* End marker for find_match().  */
12144 };
12145
12146 static const struct opcode_descriptor bz_insns_16[] = {
12147   { /* "beqz",  "md,mE",        */ 0x8c00,     0xfc00 },
12148   { /* "bnez",  "md,mE",        */ 0xac00,     0xfc00 },
12149   { 0, 0 }  /* End marker for find_match().  */
12150 };
12151
12152 /* Switch between a 5-bit register index and its 3-bit shorthand.  */
12153
12154 #define BZ16_REG(opcode) ((((((opcode) >> 7) & 7) + 0x1e) & 0x17) + 2)
12155 #define BZ16_REG_FIELD(r) \
12156   (((2 <= (r) && (r) <= 7) ? (r) : ((r) - 16)) << 7)
12157
12158
12159 /* 32-bit instructions with a delay slot.  */
12160
12161 static const struct opcode_descriptor jal_insn_32_bd16 =
12162   { /* "jals",  "a",            */ 0x74000000, 0xfc000000 };
12163
12164 static const struct opcode_descriptor jal_insn_32_bd32 =
12165   { /* "jal",   "a",            */ 0xf4000000, 0xfc000000 };
12166
12167 static const struct opcode_descriptor jal_x_insn_32_bd32 =
12168   { /* "jal[x]", "a",           */ 0xf0000000, 0xf8000000 };
12169
12170 static const struct opcode_descriptor j_insn_32 =
12171   { /* "j",     "a",            */ 0xd4000000, 0xfc000000 };
12172
12173 static const struct opcode_descriptor jalr_insn_32 =
12174   { /* "jalr[.hb]", "t,s",      */ 0x00000f3c, 0xfc00efff };
12175
12176 /* This table can be compacted, because no opcode replacement is made.  */
12177
12178 static const struct opcode_descriptor ds_insns_32_bd16[] = {
12179   { /* "jals",  "a",            */ 0x74000000, 0xfc000000 },
12180
12181   { /* "jalrs[.hb]", "t,s",     */ 0x00004f3c, 0xfc00efff },
12182   { /* "b(ge|lt)zals", "s,p",   */ 0x42200000, 0xffa00000 },
12183
12184   { /* "b(g|l)(e|t)z", "s,p",   */ 0x40000000, 0xff200000 },
12185   { /* "b(eq|ne)", "s,t,p",     */ 0x94000000, 0xdc000000 },
12186   { /* "j",     "a",            */ 0xd4000000, 0xfc000000 },
12187   { 0, 0 }  /* End marker for find_match().  */
12188 };
12189
12190 /* This table can be compacted, because no opcode replacement is made.  */
12191
12192 static const struct opcode_descriptor ds_insns_32_bd32[] = {
12193   { /* "jal[x]", "a",           */ 0xf0000000, 0xf8000000 },
12194
12195   { /* "jalr[.hb]", "t,s",      */ 0x00000f3c, 0xfc00efff },
12196   { /* "b(ge|lt)zal", "s,p",    */ 0x40200000, 0xffa00000 },
12197   { 0, 0 }  /* End marker for find_match().  */
12198 };
12199
12200
12201 /* 16-bit instructions with a delay slot.  */
12202
12203 static const struct opcode_descriptor jalr_insn_16_bd16 =
12204   { /* "jalrs", "my,mj",        */ 0x45e0,     0xffe0 };
12205
12206 static const struct opcode_descriptor jalr_insn_16_bd32 =
12207   { /* "jalr",  "my,mj",        */ 0x45c0,     0xffe0 };
12208
12209 static const struct opcode_descriptor jr_insn_16 =
12210   { /* "jr",    "mj",           */ 0x4580,     0xffe0 };
12211
12212 #define JR16_REG(opcode) ((opcode) & 0x1f)
12213
12214 /* This table can be compacted, because no opcode replacement is made.  */
12215
12216 static const struct opcode_descriptor ds_insns_16_bd16[] = {
12217   { /* "jalrs", "my,mj",        */ 0x45e0,     0xffe0 },
12218
12219   { /* "b",     "mD",           */ 0xcc00,     0xfc00 },
12220   { /* "b(eq|ne)z", "md,mE",    */ 0x8c00,     0xdc00 },
12221   { /* "jr",    "mj",           */ 0x4580,     0xffe0 },
12222   { 0, 0 }  /* End marker for find_match().  */
12223 };
12224
12225
12226 /* LUI instruction.  */
12227
12228 static const struct opcode_descriptor lui_insn =
12229  { /* "lui",    "s,u",          */ 0x41a00000, 0xffe00000 };
12230
12231
12232 /* ADDIU instruction.  */
12233
12234 static const struct opcode_descriptor addiu_insn =
12235   { /* "addiu", "t,r,j",        */ 0x30000000, 0xfc000000 };
12236
12237 static const struct opcode_descriptor addiupc_insn =
12238   { /* "addiu", "mb,$pc,mQ",    */ 0x78000000, 0xfc000000 };
12239
12240 #define ADDIUPC_REG_FIELD(r) \
12241   (((2 <= (r) && (r) <= 7) ? (r) : ((r) - 16)) << 23)
12242
12243
12244 /* Relaxable instructions in a JAL delay slot: MOVE.  */
12245
12246 /* The 16-bit move has rd in 9:5 and rs in 4:0.  The 32-bit moves
12247    (ADDU, OR) have rd in 15:11 and rs in 10:16.  */
12248 #define MOVE32_RD(opcode) (((opcode) >> 11) & 0x1f)
12249 #define MOVE32_RS(opcode) (((opcode) >> 16) & 0x1f)
12250
12251 #define MOVE16_RD_FIELD(r) (((r) & 0x1f) << 5)
12252 #define MOVE16_RS_FIELD(r) (((r) & 0x1f)     )
12253
12254 static const struct opcode_descriptor move_insns_32[] = {
12255   { /* "move",  "d,s",          */ 0x00000150, 0xffe007ff }, /* addu d,s,$0 */
12256   { /* "move",  "d,s",          */ 0x00000290, 0xffe007ff }, /* or   d,s,$0 */
12257   { 0, 0 }  /* End marker for find_match().  */
12258 };
12259
12260 static const struct opcode_descriptor move_insn_16 =
12261   { /* "move",  "mp,mj",        */ 0x0c00,     0xfc00 };
12262
12263
12264 /* NOP instructions.  */
12265
12266 static const struct opcode_descriptor nop_insn_32 =
12267   { /* "nop",   "",             */ 0x00000000, 0xffffffff };
12268
12269 static const struct opcode_descriptor nop_insn_16 =
12270   { /* "nop",   "",             */ 0x0c00,     0xffff };
12271
12272
12273 /* Instruction match support.  */
12274
12275 #define MATCH(opcode, insn) ((opcode & insn.mask) == insn.match)
12276
12277 static int
12278 find_match (unsigned long opcode, const struct opcode_descriptor insn[])
12279 {
12280   unsigned long indx;
12281
12282   for (indx = 0; insn[indx].mask != 0; indx++)
12283     if (MATCH (opcode, insn[indx]))
12284       return indx;
12285
12286   return -1;
12287 }
12288
12289
12290 /* Branch and delay slot decoding support.  */
12291
12292 /* If PTR points to what *might* be a 16-bit branch or jump, then
12293    return the minimum length of its delay slot, otherwise return 0.
12294    Non-zero results are not definitive as we might be checking against
12295    the second half of another instruction.  */
12296
12297 static int
12298 check_br16_dslot (bfd *abfd, bfd_byte *ptr)
12299 {
12300   unsigned long opcode;
12301   int bdsize;
12302
12303   opcode = bfd_get_16 (abfd, ptr);
12304   if (MATCH (opcode, jalr_insn_16_bd32) != 0)
12305     /* 16-bit branch/jump with a 32-bit delay slot.  */
12306     bdsize = 4;
12307   else if (MATCH (opcode, jalr_insn_16_bd16) != 0
12308            || find_match (opcode, ds_insns_16_bd16) >= 0)
12309     /* 16-bit branch/jump with a 16-bit delay slot.  */
12310     bdsize = 2;
12311   else
12312     /* No delay slot.  */
12313     bdsize = 0;
12314
12315   return bdsize;
12316 }
12317
12318 /* If PTR points to what *might* be a 32-bit branch or jump, then
12319    return the minimum length of its delay slot, otherwise return 0.
12320    Non-zero results are not definitive as we might be checking against
12321    the second half of another instruction.  */
12322
12323 static int
12324 check_br32_dslot (bfd *abfd, bfd_byte *ptr)
12325 {
12326   unsigned long opcode;
12327   int bdsize;
12328
12329   opcode = bfd_get_micromips_32 (abfd, ptr);
12330   if (find_match (opcode, ds_insns_32_bd32) >= 0)
12331     /* 32-bit branch/jump with a 32-bit delay slot.  */
12332     bdsize = 4;
12333   else if (find_match (opcode, ds_insns_32_bd16) >= 0)
12334     /* 32-bit branch/jump with a 16-bit delay slot.  */
12335     bdsize = 2;
12336   else
12337     /* No delay slot.  */
12338     bdsize = 0;
12339
12340   return bdsize;
12341 }
12342
12343 /* If PTR points to a 16-bit branch or jump with a 32-bit delay slot
12344    that doesn't fiddle with REG, then return TRUE, otherwise FALSE.  */
12345
12346 static bfd_boolean
12347 check_br16 (bfd *abfd, bfd_byte *ptr, unsigned long reg)
12348 {
12349   unsigned long opcode;
12350
12351   opcode = bfd_get_16 (abfd, ptr);
12352   if (MATCH (opcode, b_insn_16)
12353                                                 /* B16  */
12354       || (MATCH (opcode, jr_insn_16) && reg != JR16_REG (opcode))
12355                                                 /* JR16  */
12356       || (MATCH (opcode, bz_insn_16) && reg != BZ16_REG (opcode))
12357                                                 /* BEQZ16, BNEZ16  */
12358       || (MATCH (opcode, jalr_insn_16_bd32)
12359                                                 /* JALR16  */
12360           && reg != JR16_REG (opcode) && reg != RA))
12361     return TRUE;
12362
12363   return FALSE;
12364 }
12365
12366 /* If PTR points to a 32-bit branch or jump that doesn't fiddle with REG,
12367    then return TRUE, otherwise FALSE.  */
12368
12369 static bfd_boolean
12370 check_br32 (bfd *abfd, bfd_byte *ptr, unsigned long reg)
12371 {
12372   unsigned long opcode;
12373
12374   opcode = bfd_get_micromips_32 (abfd, ptr);
12375   if (MATCH (opcode, j_insn_32)
12376                                                 /* J  */
12377       || MATCH (opcode, bc_insn_32)
12378                                                 /* BC1F, BC1T, BC2F, BC2T  */
12379       || (MATCH (opcode, jal_x_insn_32_bd32) && reg != RA)
12380                                                 /* JAL, JALX  */
12381       || (MATCH (opcode, bz_insn_32) && reg != OP32_SREG (opcode))
12382                                                 /* BGEZ, BGTZ, BLEZ, BLTZ  */
12383       || (MATCH (opcode, bzal_insn_32)
12384                                                 /* BGEZAL, BLTZAL  */
12385           && reg != OP32_SREG (opcode) && reg != RA)
12386       || ((MATCH (opcode, jalr_insn_32) || MATCH (opcode, beq_insn_32))
12387                                                 /* JALR, JALR.HB, BEQ, BNE  */
12388           && reg != OP32_SREG (opcode) && reg != OP32_TREG (opcode)))
12389     return TRUE;
12390
12391   return FALSE;
12392 }
12393
12394 /* If the instruction encoding at PTR and relocations [INTERNAL_RELOCS,
12395    IRELEND) at OFFSET indicate that there must be a compact branch there,
12396    then return TRUE, otherwise FALSE.  */
12397
12398 static bfd_boolean
12399 check_relocated_bzc (bfd *abfd, const bfd_byte *ptr, bfd_vma offset,
12400                      const Elf_Internal_Rela *internal_relocs,
12401                      const Elf_Internal_Rela *irelend)
12402 {
12403   const Elf_Internal_Rela *irel;
12404   unsigned long opcode;
12405
12406   opcode = bfd_get_micromips_32 (abfd, ptr);
12407   if (find_match (opcode, bzc_insns_32) < 0)
12408     return FALSE;
12409
12410   for (irel = internal_relocs; irel < irelend; irel++)
12411     if (irel->r_offset == offset
12412         && ELF32_R_TYPE (irel->r_info) == R_MICROMIPS_PC16_S1)
12413       return TRUE;
12414
12415   return FALSE;
12416 }
12417
12418 /* Bitsize checking.  */
12419 #define IS_BITSIZE(val, N)                                              \
12420   (((((val) & ((1ULL << (N)) - 1)) ^ (1ULL << ((N) - 1)))               \
12421     - (1ULL << ((N) - 1))) == (val))
12422
12423 \f
12424 bfd_boolean
12425 _bfd_mips_elf_relax_section (bfd *abfd, asection *sec,
12426                              struct bfd_link_info *link_info,
12427                              bfd_boolean *again)
12428 {
12429   Elf_Internal_Shdr *symtab_hdr;
12430   Elf_Internal_Rela *internal_relocs;
12431   Elf_Internal_Rela *irel, *irelend;
12432   bfd_byte *contents = NULL;
12433   Elf_Internal_Sym *isymbuf = NULL;
12434
12435   /* Assume nothing changes.  */
12436   *again = FALSE;
12437
12438   /* We don't have to do anything for a relocatable link, if
12439      this section does not have relocs, or if this is not a
12440      code section.  */
12441
12442   if (link_info->relocatable
12443       || (sec->flags & SEC_RELOC) == 0
12444       || sec->reloc_count == 0
12445       || (sec->flags & SEC_CODE) == 0)
12446     return TRUE;
12447
12448   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
12449
12450   /* Get a copy of the native relocations.  */
12451   internal_relocs = (_bfd_elf_link_read_relocs
12452                      (abfd, sec, NULL, (Elf_Internal_Rela *) NULL,
12453                       link_info->keep_memory));
12454   if (internal_relocs == NULL)
12455     goto error_return;
12456
12457   /* Walk through them looking for relaxing opportunities.  */
12458   irelend = internal_relocs + sec->reloc_count;
12459   for (irel = internal_relocs; irel < irelend; irel++)
12460     {
12461       unsigned long r_symndx = ELF32_R_SYM (irel->r_info);
12462       unsigned int r_type = ELF32_R_TYPE (irel->r_info);
12463       bfd_boolean target_is_micromips_code_p;
12464       unsigned long opcode;
12465       bfd_vma symval;
12466       bfd_vma pcrval;
12467       bfd_byte *ptr;
12468       int fndopc;
12469
12470       /* The number of bytes to delete for relaxation and from where
12471          to delete these bytes starting at irel->r_offset.  */
12472       int delcnt = 0;
12473       int deloff = 0;
12474
12475       /* If this isn't something that can be relaxed, then ignore
12476          this reloc.  */
12477       if (r_type != R_MICROMIPS_HI16
12478           && r_type != R_MICROMIPS_PC16_S1
12479           && r_type != R_MICROMIPS_26_S1)
12480         continue;
12481
12482       /* Get the section contents if we haven't done so already.  */
12483       if (contents == NULL)
12484         {
12485           /* Get cached copy if it exists.  */
12486           if (elf_section_data (sec)->this_hdr.contents != NULL)
12487             contents = elf_section_data (sec)->this_hdr.contents;
12488           /* Go get them off disk.  */
12489           else if (!bfd_malloc_and_get_section (abfd, sec, &contents))
12490             goto error_return;
12491         }
12492       ptr = contents + irel->r_offset;
12493
12494       /* Read this BFD's local symbols if we haven't done so already.  */
12495       if (isymbuf == NULL && symtab_hdr->sh_info != 0)
12496         {
12497           isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
12498           if (isymbuf == NULL)
12499             isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
12500                                             symtab_hdr->sh_info, 0,
12501                                             NULL, NULL, NULL);
12502           if (isymbuf == NULL)
12503             goto error_return;
12504         }
12505
12506       /* Get the value of the symbol referred to by the reloc.  */
12507       if (r_symndx < symtab_hdr->sh_info)
12508         {
12509           /* A local symbol.  */
12510           Elf_Internal_Sym *isym;
12511           asection *sym_sec;
12512
12513           isym = isymbuf + r_symndx;
12514           if (isym->st_shndx == SHN_UNDEF)
12515             sym_sec = bfd_und_section_ptr;
12516           else if (isym->st_shndx == SHN_ABS)
12517             sym_sec = bfd_abs_section_ptr;
12518           else if (isym->st_shndx == SHN_COMMON)
12519             sym_sec = bfd_com_section_ptr;
12520           else
12521             sym_sec = bfd_section_from_elf_index (abfd, isym->st_shndx);
12522           symval = (isym->st_value
12523                     + sym_sec->output_section->vma
12524                     + sym_sec->output_offset);
12525           target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (isym->st_other);
12526         }
12527       else
12528         {
12529           unsigned long indx;
12530           struct elf_link_hash_entry *h;
12531
12532           /* An external symbol.  */
12533           indx = r_symndx - symtab_hdr->sh_info;
12534           h = elf_sym_hashes (abfd)[indx];
12535           BFD_ASSERT (h != NULL);
12536
12537           if (h->root.type != bfd_link_hash_defined
12538               && h->root.type != bfd_link_hash_defweak)
12539             /* This appears to be a reference to an undefined
12540                symbol.  Just ignore it -- it will be caught by the
12541                regular reloc processing.  */
12542             continue;
12543
12544           symval = (h->root.u.def.value
12545                     + h->root.u.def.section->output_section->vma
12546                     + h->root.u.def.section->output_offset);
12547           target_is_micromips_code_p = (!h->needs_plt
12548                                         && ELF_ST_IS_MICROMIPS (h->other));
12549         }
12550
12551
12552       /* For simplicity of coding, we are going to modify the
12553          section contents, the section relocs, and the BFD symbol
12554          table.  We must tell the rest of the code not to free up this
12555          information.  It would be possible to instead create a table
12556          of changes which have to be made, as is done in coff-mips.c;
12557          that would be more work, but would require less memory when
12558          the linker is run.  */
12559
12560       /* Only 32-bit instructions relaxed.  */
12561       if (irel->r_offset + 4 > sec->size)
12562         continue;
12563
12564       opcode = bfd_get_micromips_32 (abfd, ptr);
12565
12566       /* This is the pc-relative distance from the instruction the
12567          relocation is applied to, to the symbol referred.  */
12568       pcrval = (symval
12569                 - (sec->output_section->vma + sec->output_offset)
12570                 - irel->r_offset);
12571
12572       /* R_MICROMIPS_HI16 / LUI relaxation to nil, performing relaxation
12573          of corresponding R_MICROMIPS_LO16 to R_MICROMIPS_HI0_LO16 or
12574          R_MICROMIPS_PC23_S2.  The R_MICROMIPS_PC23_S2 condition is
12575
12576            (symval % 4 == 0 && IS_BITSIZE (pcrval, 25))
12577
12578          where pcrval has first to be adjusted to apply against the LO16
12579          location (we make the adjustment later on, when we have figured
12580          out the offset).  */
12581       if (r_type == R_MICROMIPS_HI16 && MATCH (opcode, lui_insn))
12582         {
12583           bfd_boolean bzc = FALSE;
12584           unsigned long nextopc;
12585           unsigned long reg;
12586           bfd_vma offset;
12587
12588           /* Give up if the previous reloc was a HI16 against this symbol
12589              too.  */
12590           if (irel > internal_relocs
12591               && ELF32_R_TYPE (irel[-1].r_info) == R_MICROMIPS_HI16
12592               && ELF32_R_SYM (irel[-1].r_info) == r_symndx)
12593             continue;
12594
12595           /* Or if the next reloc is not a LO16 against this symbol.  */
12596           if (irel + 1 >= irelend
12597               || ELF32_R_TYPE (irel[1].r_info) != R_MICROMIPS_LO16
12598               || ELF32_R_SYM (irel[1].r_info) != r_symndx)
12599             continue;
12600
12601           /* Or if the second next reloc is a LO16 against this symbol too.  */
12602           if (irel + 2 >= irelend
12603               && ELF32_R_TYPE (irel[2].r_info) == R_MICROMIPS_LO16
12604               && ELF32_R_SYM (irel[2].r_info) == r_symndx)
12605             continue;
12606
12607           /* See if the LUI instruction *might* be in a branch delay slot.
12608              We check whether what looks like a 16-bit branch or jump is
12609              actually an immediate argument to a compact branch, and let
12610              it through if so.  */
12611           if (irel->r_offset >= 2
12612               && check_br16_dslot (abfd, ptr - 2)
12613               && !(irel->r_offset >= 4
12614                    && (bzc = check_relocated_bzc (abfd,
12615                                                   ptr - 4, irel->r_offset - 4,
12616                                                   internal_relocs, irelend))))
12617             continue;
12618           if (irel->r_offset >= 4
12619               && !bzc
12620               && check_br32_dslot (abfd, ptr - 4))
12621             continue;
12622
12623           reg = OP32_SREG (opcode);
12624
12625           /* We only relax adjacent instructions or ones separated with
12626              a branch or jump that has a delay slot.  The branch or jump
12627              must not fiddle with the register used to hold the address.
12628              Subtract 4 for the LUI itself.  */
12629           offset = irel[1].r_offset - irel[0].r_offset;
12630           switch (offset - 4)
12631             {
12632             case 0:
12633               break;
12634             case 2:
12635               if (check_br16 (abfd, ptr + 4, reg))
12636                 break;
12637               continue;
12638             case 4:
12639               if (check_br32 (abfd, ptr + 4, reg))
12640                 break;
12641               continue;
12642             default:
12643               continue;
12644             }
12645
12646           nextopc = bfd_get_micromips_32 (abfd, contents + irel[1].r_offset);
12647
12648           /* Give up unless the same register is used with both
12649              relocations.  */
12650           if (OP32_SREG (nextopc) != reg)
12651             continue;
12652
12653           /* Now adjust pcrval, subtracting the offset to the LO16 reloc
12654              and rounding up to take masking of the two LSBs into account.  */
12655           pcrval = ((pcrval - offset + 3) | 3) ^ 3;
12656
12657           /* R_MICROMIPS_LO16 relaxation to R_MICROMIPS_HI0_LO16.  */
12658           if (IS_BITSIZE (symval, 16))
12659             {
12660               /* Fix the relocation's type.  */
12661               irel[1].r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_HI0_LO16);
12662
12663               /* Instructions using R_MICROMIPS_LO16 have the base or
12664                  source register in bits 20:16.  This register becomes $0
12665                  (zero) as the result of the R_MICROMIPS_HI16 being 0.  */
12666               nextopc &= ~0x001f0000;
12667               bfd_put_16 (abfd, (nextopc >> 16) & 0xffff,
12668                           contents + irel[1].r_offset);
12669             }
12670
12671           /* R_MICROMIPS_LO16 / ADDIU relaxation to R_MICROMIPS_PC23_S2.
12672              We add 4 to take LUI deletion into account while checking
12673              the PC-relative distance.  */
12674           else if (symval % 4 == 0
12675                    && IS_BITSIZE (pcrval + 4, 25)
12676                    && MATCH (nextopc, addiu_insn)
12677                    && OP32_TREG (nextopc) == OP32_SREG (nextopc)
12678                    && OP16_VALID_REG (OP32_TREG (nextopc)))
12679             {
12680               /* Fix the relocation's type.  */
12681               irel[1].r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC23_S2);
12682
12683               /* Replace ADDIU with the ADDIUPC version.  */
12684               nextopc = (addiupc_insn.match
12685                          | ADDIUPC_REG_FIELD (OP32_TREG (nextopc)));
12686
12687               bfd_put_micromips_32 (abfd, nextopc,
12688                                     contents + irel[1].r_offset);
12689             }
12690
12691           /* Can't do anything, give up, sigh...  */
12692           else
12693             continue;
12694
12695           /* Fix the relocation's type.  */
12696           irel->r_info = ELF32_R_INFO (r_symndx, R_MIPS_NONE);
12697
12698           /* Delete the LUI instruction: 4 bytes at irel->r_offset.  */
12699           delcnt = 4;
12700           deloff = 0;
12701         }
12702
12703       /* Compact branch relaxation -- due to the multitude of macros
12704          employed by the compiler/assembler, compact branches are not
12705          always generated.  Obviously, this can/will be fixed elsewhere,
12706          but there is no drawback in double checking it here.  */
12707       else if (r_type == R_MICROMIPS_PC16_S1
12708                && irel->r_offset + 5 < sec->size
12709                && ((fndopc = find_match (opcode, bz_rs_insns_32)) >= 0
12710                    || (fndopc = find_match (opcode, bz_rt_insns_32)) >= 0)
12711                && MATCH (bfd_get_16 (abfd, ptr + 4), nop_insn_16))
12712         {
12713           unsigned long reg;
12714
12715           reg = OP32_SREG (opcode) ? OP32_SREG (opcode) : OP32_TREG (opcode);
12716
12717           /* Replace BEQZ/BNEZ with the compact version.  */
12718           opcode = (bzc_insns_32[fndopc].match
12719                     | BZC32_REG_FIELD (reg)
12720                     | (opcode & 0xffff));               /* Addend value.  */
12721
12722           bfd_put_micromips_32 (abfd, opcode, ptr);
12723
12724           /* Delete the 16-bit delay slot NOP: two bytes from
12725              irel->offset + 4.  */
12726           delcnt = 2;
12727           deloff = 4;
12728         }
12729
12730       /* R_MICROMIPS_PC16_S1 relaxation to R_MICROMIPS_PC10_S1.  We need
12731          to check the distance from the next instruction, so subtract 2.  */
12732       else if (r_type == R_MICROMIPS_PC16_S1
12733                && IS_BITSIZE (pcrval - 2, 11)
12734                && find_match (opcode, b_insns_32) >= 0)
12735         {
12736           /* Fix the relocation's type.  */
12737           irel->r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC10_S1);
12738
12739           /* Replace the 32-bit opcode with a 16-bit opcode.  */
12740           bfd_put_16 (abfd,
12741                       (b_insn_16.match
12742                        | (opcode & 0x3ff)),             /* Addend value.  */
12743                       ptr);
12744
12745           /* Delete 2 bytes from irel->r_offset + 2.  */
12746           delcnt = 2;
12747           deloff = 2;
12748         }
12749
12750       /* R_MICROMIPS_PC16_S1 relaxation to R_MICROMIPS_PC7_S1.  We need
12751          to check the distance from the next instruction, so subtract 2.  */
12752       else if (r_type == R_MICROMIPS_PC16_S1
12753                && IS_BITSIZE (pcrval - 2, 8)
12754                && (((fndopc = find_match (opcode, bz_rs_insns_32)) >= 0
12755                     && OP16_VALID_REG (OP32_SREG (opcode)))
12756                    || ((fndopc = find_match (opcode, bz_rt_insns_32)) >= 0
12757                        && OP16_VALID_REG (OP32_TREG (opcode)))))
12758         {
12759           unsigned long reg;
12760
12761           reg = OP32_SREG (opcode) ? OP32_SREG (opcode) : OP32_TREG (opcode);
12762
12763           /* Fix the relocation's type.  */
12764           irel->r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC7_S1);
12765
12766           /* Replace the 32-bit opcode with a 16-bit opcode.  */
12767           bfd_put_16 (abfd,
12768                       (bz_insns_16[fndopc].match
12769                        | BZ16_REG_FIELD (reg)
12770                        | (opcode & 0x7f)),              /* Addend value.  */
12771                       ptr);
12772
12773           /* Delete 2 bytes from irel->r_offset + 2.  */
12774           delcnt = 2;
12775           deloff = 2;
12776         }
12777
12778       /* R_MICROMIPS_26_S1 -- JAL to JALS relaxation for microMIPS targets.  */
12779       else if (r_type == R_MICROMIPS_26_S1
12780                && target_is_micromips_code_p
12781                && irel->r_offset + 7 < sec->size
12782                && MATCH (opcode, jal_insn_32_bd32))
12783         {
12784           unsigned long n32opc;
12785           bfd_boolean relaxed = FALSE;
12786
12787           n32opc = bfd_get_micromips_32 (abfd, ptr + 4);
12788
12789           if (MATCH (n32opc, nop_insn_32))
12790             {
12791               /* Replace delay slot 32-bit NOP with a 16-bit NOP.  */
12792               bfd_put_16 (abfd, nop_insn_16.match, ptr + 4);
12793
12794               relaxed = TRUE;
12795             }
12796           else if (find_match (n32opc, move_insns_32) >= 0)
12797             {
12798               /* Replace delay slot 32-bit MOVE with 16-bit MOVE.  */
12799               bfd_put_16 (abfd,
12800                           (move_insn_16.match
12801                            | MOVE16_RD_FIELD (MOVE32_RD (n32opc))
12802                            | MOVE16_RS_FIELD (MOVE32_RS (n32opc))),
12803                           ptr + 4);
12804
12805               relaxed = TRUE;
12806             }
12807           /* Other 32-bit instructions relaxable to 16-bit
12808              instructions will be handled here later.  */
12809
12810           if (relaxed)
12811             {
12812               /* JAL with 32-bit delay slot that is changed to a JALS
12813                  with 16-bit delay slot.  */
12814               bfd_put_micromips_32 (abfd, jal_insn_32_bd16.match, ptr);
12815
12816               /* Delete 2 bytes from irel->r_offset + 6.  */
12817               delcnt = 2;
12818               deloff = 6;
12819             }
12820         }
12821
12822       if (delcnt != 0)
12823         {
12824           /* Note that we've changed the relocs, section contents, etc.  */
12825           elf_section_data (sec)->relocs = internal_relocs;
12826           elf_section_data (sec)->this_hdr.contents = contents;
12827           symtab_hdr->contents = (unsigned char *) isymbuf;
12828
12829           /* Delete bytes depending on the delcnt and deloff.  */
12830           if (!mips_elf_relax_delete_bytes (abfd, sec,
12831                                             irel->r_offset + deloff, delcnt))
12832             goto error_return;
12833
12834           /* That will change things, so we should relax again.
12835              Note that this is not required, and it may be slow.  */
12836           *again = TRUE;
12837         }
12838     }
12839
12840   if (isymbuf != NULL
12841       && symtab_hdr->contents != (unsigned char *) isymbuf)
12842     {
12843       if (! link_info->keep_memory)
12844         free (isymbuf);
12845       else
12846         {
12847           /* Cache the symbols for elf_link_input_bfd.  */
12848           symtab_hdr->contents = (unsigned char *) isymbuf;
12849         }
12850     }
12851
12852   if (contents != NULL
12853       && elf_section_data (sec)->this_hdr.contents != contents)
12854     {
12855       if (! link_info->keep_memory)
12856         free (contents);
12857       else
12858         {
12859           /* Cache the section contents for elf_link_input_bfd.  */
12860           elf_section_data (sec)->this_hdr.contents = contents;
12861         }
12862     }
12863
12864   if (internal_relocs != NULL
12865       && elf_section_data (sec)->relocs != internal_relocs)
12866     free (internal_relocs);
12867
12868   return TRUE;
12869
12870  error_return:
12871   if (isymbuf != NULL
12872       && symtab_hdr->contents != (unsigned char *) isymbuf)
12873     free (isymbuf);
12874   if (contents != NULL
12875       && elf_section_data (sec)->this_hdr.contents != contents)
12876     free (contents);
12877   if (internal_relocs != NULL
12878       && elf_section_data (sec)->relocs != internal_relocs)
12879     free (internal_relocs);
12880
12881   return FALSE;
12882 }
12883 \f
12884 /* Create a MIPS ELF linker hash table.  */
12885
12886 struct bfd_link_hash_table *
12887 _bfd_mips_elf_link_hash_table_create (bfd *abfd)
12888 {
12889   struct mips_elf_link_hash_table *ret;
12890   bfd_size_type amt = sizeof (struct mips_elf_link_hash_table);
12891
12892   ret = bfd_zmalloc (amt);
12893   if (ret == NULL)
12894     return NULL;
12895
12896   if (!_bfd_elf_link_hash_table_init (&ret->root, abfd,
12897                                       mips_elf_link_hash_newfunc,
12898                                       sizeof (struct mips_elf_link_hash_entry),
12899                                       MIPS_ELF_DATA))
12900     {
12901       free (ret);
12902       return NULL;
12903     }
12904
12905   return &ret->root.root;
12906 }
12907
12908 /* Likewise, but indicate that the target is VxWorks.  */
12909
12910 struct bfd_link_hash_table *
12911 _bfd_mips_vxworks_link_hash_table_create (bfd *abfd)
12912 {
12913   struct bfd_link_hash_table *ret;
12914
12915   ret = _bfd_mips_elf_link_hash_table_create (abfd);
12916   if (ret)
12917     {
12918       struct mips_elf_link_hash_table *htab;
12919
12920       htab = (struct mips_elf_link_hash_table *) ret;
12921       htab->use_plts_and_copy_relocs = TRUE;
12922       htab->is_vxworks = TRUE;
12923     }
12924   return ret;
12925 }
12926
12927 /* A function that the linker calls if we are allowed to use PLTs
12928    and copy relocs.  */
12929
12930 void
12931 _bfd_mips_elf_use_plts_and_copy_relocs (struct bfd_link_info *info)
12932 {
12933   mips_elf_hash_table (info)->use_plts_and_copy_relocs = TRUE;
12934 }
12935 \f
12936 /* We need to use a special link routine to handle the .reginfo and
12937    the .mdebug sections.  We need to merge all instances of these
12938    sections together, not write them all out sequentially.  */
12939
12940 bfd_boolean
12941 _bfd_mips_elf_final_link (bfd *abfd, struct bfd_link_info *info)
12942 {
12943   asection *o;
12944   struct bfd_link_order *p;
12945   asection *reginfo_sec, *mdebug_sec, *gptab_data_sec, *gptab_bss_sec;
12946   asection *rtproc_sec;
12947   Elf32_RegInfo reginfo;
12948   struct ecoff_debug_info debug;
12949   struct mips_htab_traverse_info hti;
12950   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
12951   const struct ecoff_debug_swap *swap = bed->elf_backend_ecoff_debug_swap;
12952   HDRR *symhdr = &debug.symbolic_header;
12953   void *mdebug_handle = NULL;
12954   asection *s;
12955   EXTR esym;
12956   unsigned int i;
12957   bfd_size_type amt;
12958   struct mips_elf_link_hash_table *htab;
12959
12960   static const char * const secname[] =
12961   {
12962     ".text", ".init", ".fini", ".data",
12963     ".rodata", ".sdata", ".sbss", ".bss"
12964   };
12965   static const int sc[] =
12966   {
12967     scText, scInit, scFini, scData,
12968     scRData, scSData, scSBss, scBss
12969   };
12970
12971   /* Sort the dynamic symbols so that those with GOT entries come after
12972      those without.  */
12973   htab = mips_elf_hash_table (info);
12974   BFD_ASSERT (htab != NULL);
12975
12976   if (!mips_elf_sort_hash_table (abfd, info))
12977     return FALSE;
12978
12979   /* Create any scheduled LA25 stubs.  */
12980   hti.info = info;
12981   hti.output_bfd = abfd;
12982   hti.error = FALSE;
12983   htab_traverse (htab->la25_stubs, mips_elf_create_la25_stub, &hti);
12984   if (hti.error)
12985     return FALSE;
12986
12987   /* Get a value for the GP register.  */
12988   if (elf_gp (abfd) == 0)
12989     {
12990       struct bfd_link_hash_entry *h;
12991
12992       h = bfd_link_hash_lookup (info->hash, "_gp", FALSE, FALSE, TRUE);
12993       if (h != NULL && h->type == bfd_link_hash_defined)
12994         elf_gp (abfd) = (h->u.def.value
12995                          + h->u.def.section->output_section->vma
12996                          + h->u.def.section->output_offset);
12997       else if (htab->is_vxworks
12998                && (h = bfd_link_hash_lookup (info->hash,
12999                                              "_GLOBAL_OFFSET_TABLE_",
13000                                              FALSE, FALSE, TRUE))
13001                && h->type == bfd_link_hash_defined)
13002         elf_gp (abfd) = (h->u.def.section->output_section->vma
13003                          + h->u.def.section->output_offset
13004                          + h->u.def.value);
13005       else if (info->relocatable)
13006         {
13007           bfd_vma lo = MINUS_ONE;
13008
13009           /* Find the GP-relative section with the lowest offset.  */
13010           for (o = abfd->sections; o != NULL; o = o->next)
13011             if (o->vma < lo
13012                 && (elf_section_data (o)->this_hdr.sh_flags & SHF_MIPS_GPREL))
13013               lo = o->vma;
13014
13015           /* And calculate GP relative to that.  */
13016           elf_gp (abfd) = lo + ELF_MIPS_GP_OFFSET (info);
13017         }
13018       else
13019         {
13020           /* If the relocate_section function needs to do a reloc
13021              involving the GP value, it should make a reloc_dangerous
13022              callback to warn that GP is not defined.  */
13023         }
13024     }
13025
13026   /* Go through the sections and collect the .reginfo and .mdebug
13027      information.  */
13028   reginfo_sec = NULL;
13029   mdebug_sec = NULL;
13030   gptab_data_sec = NULL;
13031   gptab_bss_sec = NULL;
13032   for (o = abfd->sections; o != NULL; o = o->next)
13033     {
13034       if (strcmp (o->name, ".reginfo") == 0)
13035         {
13036           memset (&reginfo, 0, sizeof reginfo);
13037
13038           /* We have found the .reginfo section in the output file.
13039              Look through all the link_orders comprising it and merge
13040              the information together.  */
13041           for (p = o->map_head.link_order; p != NULL; p = p->next)
13042             {
13043               asection *input_section;
13044               bfd *input_bfd;
13045               Elf32_External_RegInfo ext;
13046               Elf32_RegInfo sub;
13047
13048               if (p->type != bfd_indirect_link_order)
13049                 {
13050                   if (p->type == bfd_data_link_order)
13051                     continue;
13052                   abort ();
13053                 }
13054
13055               input_section = p->u.indirect.section;
13056               input_bfd = input_section->owner;
13057
13058               if (! bfd_get_section_contents (input_bfd, input_section,
13059                                               &ext, 0, sizeof ext))
13060                 return FALSE;
13061
13062               bfd_mips_elf32_swap_reginfo_in (input_bfd, &ext, &sub);
13063
13064               reginfo.ri_gprmask |= sub.ri_gprmask;
13065               reginfo.ri_cprmask[0] |= sub.ri_cprmask[0];
13066               reginfo.ri_cprmask[1] |= sub.ri_cprmask[1];
13067               reginfo.ri_cprmask[2] |= sub.ri_cprmask[2];
13068               reginfo.ri_cprmask[3] |= sub.ri_cprmask[3];
13069
13070               /* ri_gp_value is set by the function
13071                  mips_elf32_section_processing when the section is
13072                  finally written out.  */
13073
13074               /* Hack: reset the SEC_HAS_CONTENTS flag so that
13075                  elf_link_input_bfd ignores this section.  */
13076               input_section->flags &= ~SEC_HAS_CONTENTS;
13077             }
13078
13079           /* Size has been set in _bfd_mips_elf_always_size_sections.  */
13080           BFD_ASSERT(o->size == sizeof (Elf32_External_RegInfo));
13081
13082           /* Skip this section later on (I don't think this currently
13083              matters, but someday it might).  */
13084           o->map_head.link_order = NULL;
13085
13086           reginfo_sec = o;
13087         }
13088
13089       if (strcmp (o->name, ".mdebug") == 0)
13090         {
13091           struct extsym_info einfo;
13092           bfd_vma last;
13093
13094           /* We have found the .mdebug section in the output file.
13095              Look through all the link_orders comprising it and merge
13096              the information together.  */
13097           symhdr->magic = swap->sym_magic;
13098           /* FIXME: What should the version stamp be?  */
13099           symhdr->vstamp = 0;
13100           symhdr->ilineMax = 0;
13101           symhdr->cbLine = 0;
13102           symhdr->idnMax = 0;
13103           symhdr->ipdMax = 0;
13104           symhdr->isymMax = 0;
13105           symhdr->ioptMax = 0;
13106           symhdr->iauxMax = 0;
13107           symhdr->issMax = 0;
13108           symhdr->issExtMax = 0;
13109           symhdr->ifdMax = 0;
13110           symhdr->crfd = 0;
13111           symhdr->iextMax = 0;
13112
13113           /* We accumulate the debugging information itself in the
13114              debug_info structure.  */
13115           debug.line = NULL;
13116           debug.external_dnr = NULL;
13117           debug.external_pdr = NULL;
13118           debug.external_sym = NULL;
13119           debug.external_opt = NULL;
13120           debug.external_aux = NULL;
13121           debug.ss = NULL;
13122           debug.ssext = debug.ssext_end = NULL;
13123           debug.external_fdr = NULL;
13124           debug.external_rfd = NULL;
13125           debug.external_ext = debug.external_ext_end = NULL;
13126
13127           mdebug_handle = bfd_ecoff_debug_init (abfd, &debug, swap, info);
13128           if (mdebug_handle == NULL)
13129             return FALSE;
13130
13131           esym.jmptbl = 0;
13132           esym.cobol_main = 0;
13133           esym.weakext = 0;
13134           esym.reserved = 0;
13135           esym.ifd = ifdNil;
13136           esym.asym.iss = issNil;
13137           esym.asym.st = stLocal;
13138           esym.asym.reserved = 0;
13139           esym.asym.index = indexNil;
13140           last = 0;
13141           for (i = 0; i < sizeof (secname) / sizeof (secname[0]); i++)
13142             {
13143               esym.asym.sc = sc[i];
13144               s = bfd_get_section_by_name (abfd, secname[i]);
13145               if (s != NULL)
13146                 {
13147                   esym.asym.value = s->vma;
13148                   last = s->vma + s->size;
13149                 }
13150               else
13151                 esym.asym.value = last;
13152               if (!bfd_ecoff_debug_one_external (abfd, &debug, swap,
13153                                                  secname[i], &esym))
13154                 return FALSE;
13155             }
13156
13157           for (p = o->map_head.link_order; p != NULL; p = p->next)
13158             {
13159               asection *input_section;
13160               bfd *input_bfd;
13161               const struct ecoff_debug_swap *input_swap;
13162               struct ecoff_debug_info input_debug;
13163               char *eraw_src;
13164               char *eraw_end;
13165
13166               if (p->type != bfd_indirect_link_order)
13167                 {
13168                   if (p->type == bfd_data_link_order)
13169                     continue;
13170                   abort ();
13171                 }
13172
13173               input_section = p->u.indirect.section;
13174               input_bfd = input_section->owner;
13175
13176               if (!is_mips_elf (input_bfd))
13177                 {
13178                   /* I don't know what a non MIPS ELF bfd would be
13179                      doing with a .mdebug section, but I don't really
13180                      want to deal with it.  */
13181                   continue;
13182                 }
13183
13184               input_swap = (get_elf_backend_data (input_bfd)
13185                             ->elf_backend_ecoff_debug_swap);
13186
13187               BFD_ASSERT (p->size == input_section->size);
13188
13189               /* The ECOFF linking code expects that we have already
13190                  read in the debugging information and set up an
13191                  ecoff_debug_info structure, so we do that now.  */
13192               if (! _bfd_mips_elf_read_ecoff_info (input_bfd, input_section,
13193                                                    &input_debug))
13194                 return FALSE;
13195
13196               if (! (bfd_ecoff_debug_accumulate
13197                      (mdebug_handle, abfd, &debug, swap, input_bfd,
13198                       &input_debug, input_swap, info)))
13199                 return FALSE;
13200
13201               /* Loop through the external symbols.  For each one with
13202                  interesting information, try to find the symbol in
13203                  the linker global hash table and save the information
13204                  for the output external symbols.  */
13205               eraw_src = input_debug.external_ext;
13206               eraw_end = (eraw_src
13207                           + (input_debug.symbolic_header.iextMax
13208                              * input_swap->external_ext_size));
13209               for (;
13210                    eraw_src < eraw_end;
13211                    eraw_src += input_swap->external_ext_size)
13212                 {
13213                   EXTR ext;
13214                   const char *name;
13215                   struct mips_elf_link_hash_entry *h;
13216
13217                   (*input_swap->swap_ext_in) (input_bfd, eraw_src, &ext);
13218                   if (ext.asym.sc == scNil
13219                       || ext.asym.sc == scUndefined
13220                       || ext.asym.sc == scSUndefined)
13221                     continue;
13222
13223                   name = input_debug.ssext + ext.asym.iss;
13224                   h = mips_elf_link_hash_lookup (mips_elf_hash_table (info),
13225                                                  name, FALSE, FALSE, TRUE);
13226                   if (h == NULL || h->esym.ifd != -2)
13227                     continue;
13228
13229                   if (ext.ifd != -1)
13230                     {
13231                       BFD_ASSERT (ext.ifd
13232                                   < input_debug.symbolic_header.ifdMax);
13233                       ext.ifd = input_debug.ifdmap[ext.ifd];
13234                     }
13235
13236                   h->esym = ext;
13237                 }
13238
13239               /* Free up the information we just read.  */
13240               free (input_debug.line);
13241               free (input_debug.external_dnr);
13242               free (input_debug.external_pdr);
13243               free (input_debug.external_sym);
13244               free (input_debug.external_opt);
13245               free (input_debug.external_aux);
13246               free (input_debug.ss);
13247               free (input_debug.ssext);
13248               free (input_debug.external_fdr);
13249               free (input_debug.external_rfd);
13250               free (input_debug.external_ext);
13251
13252               /* Hack: reset the SEC_HAS_CONTENTS flag so that
13253                  elf_link_input_bfd ignores this section.  */
13254               input_section->flags &= ~SEC_HAS_CONTENTS;
13255             }
13256
13257           if (SGI_COMPAT (abfd) && info->shared)
13258             {
13259               /* Create .rtproc section.  */
13260               rtproc_sec = bfd_get_linker_section (abfd, ".rtproc");
13261               if (rtproc_sec == NULL)
13262                 {
13263                   flagword flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY
13264                                     | SEC_LINKER_CREATED | SEC_READONLY);
13265
13266                   rtproc_sec = bfd_make_section_anyway_with_flags (abfd,
13267                                                                    ".rtproc",
13268                                                                    flags);
13269                   if (rtproc_sec == NULL
13270                       || ! bfd_set_section_alignment (abfd, rtproc_sec, 4))
13271                     return FALSE;
13272                 }
13273
13274               if (! mips_elf_create_procedure_table (mdebug_handle, abfd,
13275                                                      info, rtproc_sec,
13276                                                      &debug))
13277                 return FALSE;
13278             }
13279
13280           /* Build the external symbol information.  */
13281           einfo.abfd = abfd;
13282           einfo.info = info;
13283           einfo.debug = &debug;
13284           einfo.swap = swap;
13285           einfo.failed = FALSE;
13286           mips_elf_link_hash_traverse (mips_elf_hash_table (info),
13287                                        mips_elf_output_extsym, &einfo);
13288           if (einfo.failed)
13289             return FALSE;
13290
13291           /* Set the size of the .mdebug section.  */
13292           o->size = bfd_ecoff_debug_size (abfd, &debug, swap);
13293
13294           /* Skip this section later on (I don't think this currently
13295              matters, but someday it might).  */
13296           o->map_head.link_order = NULL;
13297
13298           mdebug_sec = o;
13299         }
13300
13301       if (CONST_STRNEQ (o->name, ".gptab."))
13302         {
13303           const char *subname;
13304           unsigned int c;
13305           Elf32_gptab *tab;
13306           Elf32_External_gptab *ext_tab;
13307           unsigned int j;
13308
13309           /* The .gptab.sdata and .gptab.sbss sections hold
13310              information describing how the small data area would
13311              change depending upon the -G switch.  These sections
13312              not used in executables files.  */
13313           if (! info->relocatable)
13314             {
13315               for (p = o->map_head.link_order; p != NULL; p = p->next)
13316                 {
13317                   asection *input_section;
13318
13319                   if (p->type != bfd_indirect_link_order)
13320                     {
13321                       if (p->type == bfd_data_link_order)
13322                         continue;
13323                       abort ();
13324                     }
13325
13326                   input_section = p->u.indirect.section;
13327
13328                   /* Hack: reset the SEC_HAS_CONTENTS flag so that
13329                      elf_link_input_bfd ignores this section.  */
13330                   input_section->flags &= ~SEC_HAS_CONTENTS;
13331                 }
13332
13333               /* Skip this section later on (I don't think this
13334                  currently matters, but someday it might).  */
13335               o->map_head.link_order = NULL;
13336
13337               /* Really remove the section.  */
13338               bfd_section_list_remove (abfd, o);
13339               --abfd->section_count;
13340
13341               continue;
13342             }
13343
13344           /* There is one gptab for initialized data, and one for
13345              uninitialized data.  */
13346           if (strcmp (o->name, ".gptab.sdata") == 0)
13347             gptab_data_sec = o;
13348           else if (strcmp (o->name, ".gptab.sbss") == 0)
13349             gptab_bss_sec = o;
13350           else
13351             {
13352               (*_bfd_error_handler)
13353                 (_("%s: illegal section name `%s'"),
13354                  bfd_get_filename (abfd), o->name);
13355               bfd_set_error (bfd_error_nonrepresentable_section);
13356               return FALSE;
13357             }
13358
13359           /* The linker script always combines .gptab.data and
13360              .gptab.sdata into .gptab.sdata, and likewise for
13361              .gptab.bss and .gptab.sbss.  It is possible that there is
13362              no .sdata or .sbss section in the output file, in which
13363              case we must change the name of the output section.  */
13364           subname = o->name + sizeof ".gptab" - 1;
13365           if (bfd_get_section_by_name (abfd, subname) == NULL)
13366             {
13367               if (o == gptab_data_sec)
13368                 o->name = ".gptab.data";
13369               else
13370                 o->name = ".gptab.bss";
13371               subname = o->name + sizeof ".gptab" - 1;
13372               BFD_ASSERT (bfd_get_section_by_name (abfd, subname) != NULL);
13373             }
13374
13375           /* Set up the first entry.  */
13376           c = 1;
13377           amt = c * sizeof (Elf32_gptab);
13378           tab = bfd_malloc (amt);
13379           if (tab == NULL)
13380             return FALSE;
13381           tab[0].gt_header.gt_current_g_value = elf_gp_size (abfd);
13382           tab[0].gt_header.gt_unused = 0;
13383
13384           /* Combine the input sections.  */
13385           for (p = o->map_head.link_order; p != NULL; p = p->next)
13386             {
13387               asection *input_section;
13388               bfd *input_bfd;
13389               bfd_size_type size;
13390               unsigned long last;
13391               bfd_size_type gpentry;
13392
13393               if (p->type != bfd_indirect_link_order)
13394                 {
13395                   if (p->type == bfd_data_link_order)
13396                     continue;
13397                   abort ();
13398                 }
13399
13400               input_section = p->u.indirect.section;
13401               input_bfd = input_section->owner;
13402
13403               /* Combine the gptab entries for this input section one
13404                  by one.  We know that the input gptab entries are
13405                  sorted by ascending -G value.  */
13406               size = input_section->size;
13407               last = 0;
13408               for (gpentry = sizeof (Elf32_External_gptab);
13409                    gpentry < size;
13410                    gpentry += sizeof (Elf32_External_gptab))
13411                 {
13412                   Elf32_External_gptab ext_gptab;
13413                   Elf32_gptab int_gptab;
13414                   unsigned long val;
13415                   unsigned long add;
13416                   bfd_boolean exact;
13417                   unsigned int look;
13418
13419                   if (! (bfd_get_section_contents
13420                          (input_bfd, input_section, &ext_gptab, gpentry,
13421                           sizeof (Elf32_External_gptab))))
13422                     {
13423                       free (tab);
13424                       return FALSE;
13425                     }
13426
13427                   bfd_mips_elf32_swap_gptab_in (input_bfd, &ext_gptab,
13428                                                 &int_gptab);
13429                   val = int_gptab.gt_entry.gt_g_value;
13430                   add = int_gptab.gt_entry.gt_bytes - last;
13431
13432                   exact = FALSE;
13433                   for (look = 1; look < c; look++)
13434                     {
13435                       if (tab[look].gt_entry.gt_g_value >= val)
13436                         tab[look].gt_entry.gt_bytes += add;
13437
13438                       if (tab[look].gt_entry.gt_g_value == val)
13439                         exact = TRUE;
13440                     }
13441
13442                   if (! exact)
13443                     {
13444                       Elf32_gptab *new_tab;
13445                       unsigned int max;
13446
13447                       /* We need a new table entry.  */
13448                       amt = (bfd_size_type) (c + 1) * sizeof (Elf32_gptab);
13449                       new_tab = bfd_realloc (tab, amt);
13450                       if (new_tab == NULL)
13451                         {
13452                           free (tab);
13453                           return FALSE;
13454                         }
13455                       tab = new_tab;
13456                       tab[c].gt_entry.gt_g_value = val;
13457                       tab[c].gt_entry.gt_bytes = add;
13458
13459                       /* Merge in the size for the next smallest -G
13460                          value, since that will be implied by this new
13461                          value.  */
13462                       max = 0;
13463                       for (look = 1; look < c; look++)
13464                         {
13465                           if (tab[look].gt_entry.gt_g_value < val
13466                               && (max == 0
13467                                   || (tab[look].gt_entry.gt_g_value
13468                                       > tab[max].gt_entry.gt_g_value)))
13469                             max = look;
13470                         }
13471                       if (max != 0)
13472                         tab[c].gt_entry.gt_bytes +=
13473                           tab[max].gt_entry.gt_bytes;
13474
13475                       ++c;
13476                     }
13477
13478                   last = int_gptab.gt_entry.gt_bytes;
13479                 }
13480
13481               /* Hack: reset the SEC_HAS_CONTENTS flag so that
13482                  elf_link_input_bfd ignores this section.  */
13483               input_section->flags &= ~SEC_HAS_CONTENTS;
13484             }
13485
13486           /* The table must be sorted by -G value.  */
13487           if (c > 2)
13488             qsort (tab + 1, c - 1, sizeof (tab[0]), gptab_compare);
13489
13490           /* Swap out the table.  */
13491           amt = (bfd_size_type) c * sizeof (Elf32_External_gptab);
13492           ext_tab = bfd_alloc (abfd, amt);
13493           if (ext_tab == NULL)
13494             {
13495               free (tab);
13496               return FALSE;
13497             }
13498
13499           for (j = 0; j < c; j++)
13500             bfd_mips_elf32_swap_gptab_out (abfd, tab + j, ext_tab + j);
13501           free (tab);
13502
13503           o->size = c * sizeof (Elf32_External_gptab);
13504           o->contents = (bfd_byte *) ext_tab;
13505
13506           /* Skip this section later on (I don't think this currently
13507              matters, but someday it might).  */
13508           o->map_head.link_order = NULL;
13509         }
13510     }
13511
13512   /* Invoke the regular ELF backend linker to do all the work.  */
13513   if (!bfd_elf_final_link (abfd, info))
13514     return FALSE;
13515
13516   /* Now write out the computed sections.  */
13517
13518   if (reginfo_sec != NULL)
13519     {
13520       Elf32_External_RegInfo ext;
13521
13522       bfd_mips_elf32_swap_reginfo_out (abfd, &reginfo, &ext);
13523       if (! bfd_set_section_contents (abfd, reginfo_sec, &ext, 0, sizeof ext))
13524         return FALSE;
13525     }
13526
13527   if (mdebug_sec != NULL)
13528     {
13529       BFD_ASSERT (abfd->output_has_begun);
13530       if (! bfd_ecoff_write_accumulated_debug (mdebug_handle, abfd, &debug,
13531                                                swap, info,
13532                                                mdebug_sec->filepos))
13533         return FALSE;
13534
13535       bfd_ecoff_debug_free (mdebug_handle, abfd, &debug, swap, info);
13536     }
13537
13538   if (gptab_data_sec != NULL)
13539     {
13540       if (! bfd_set_section_contents (abfd, gptab_data_sec,
13541                                       gptab_data_sec->contents,
13542                                       0, gptab_data_sec->size))
13543         return FALSE;
13544     }
13545
13546   if (gptab_bss_sec != NULL)
13547     {
13548       if (! bfd_set_section_contents (abfd, gptab_bss_sec,
13549                                       gptab_bss_sec->contents,
13550                                       0, gptab_bss_sec->size))
13551         return FALSE;
13552     }
13553
13554   if (SGI_COMPAT (abfd))
13555     {
13556       rtproc_sec = bfd_get_section_by_name (abfd, ".rtproc");
13557       if (rtproc_sec != NULL)
13558         {
13559           if (! bfd_set_section_contents (abfd, rtproc_sec,
13560                                           rtproc_sec->contents,
13561                                           0, rtproc_sec->size))
13562             return FALSE;
13563         }
13564     }
13565
13566   return TRUE;
13567 }
13568 \f
13569 /* Structure for saying that BFD machine EXTENSION extends BASE.  */
13570
13571 struct mips_mach_extension {
13572   unsigned long extension, base;
13573 };
13574
13575
13576 /* An array describing how BFD machines relate to one another.  The entries
13577    are ordered topologically with MIPS I extensions listed last.  */
13578
13579 static const struct mips_mach_extension mips_mach_extensions[] = {
13580   /* MIPS64r2 extensions.  */
13581   { bfd_mach_mips_octeon2, bfd_mach_mips_octeonp },
13582   { bfd_mach_mips_octeonp, bfd_mach_mips_octeon },
13583   { bfd_mach_mips_octeon, bfd_mach_mipsisa64r2 },
13584
13585   /* MIPS64 extensions.  */
13586   { bfd_mach_mipsisa64r2, bfd_mach_mipsisa64 },
13587   { bfd_mach_mips_sb1, bfd_mach_mipsisa64 },
13588   { bfd_mach_mips_xlr, bfd_mach_mipsisa64 },
13589   { bfd_mach_mips_loongson_3a, bfd_mach_mipsisa64 },
13590
13591   /* MIPS V extensions.  */
13592   { bfd_mach_mipsisa64, bfd_mach_mips5 },
13593
13594   /* R10000 extensions.  */
13595   { bfd_mach_mips12000, bfd_mach_mips10000 },
13596   { bfd_mach_mips14000, bfd_mach_mips10000 },
13597   { bfd_mach_mips16000, bfd_mach_mips10000 },
13598
13599   /* R5000 extensions.  Note: the vr5500 ISA is an extension of the core
13600      vr5400 ISA, but doesn't include the multimedia stuff.  It seems
13601      better to allow vr5400 and vr5500 code to be merged anyway, since
13602      many libraries will just use the core ISA.  Perhaps we could add
13603      some sort of ASE flag if this ever proves a problem.  */
13604   { bfd_mach_mips5500, bfd_mach_mips5400 },
13605   { bfd_mach_mips5400, bfd_mach_mips5000 },
13606
13607   /* MIPS IV extensions.  */
13608   { bfd_mach_mips5, bfd_mach_mips8000 },
13609   { bfd_mach_mips10000, bfd_mach_mips8000 },
13610   { bfd_mach_mips5000, bfd_mach_mips8000 },
13611   { bfd_mach_mips7000, bfd_mach_mips8000 },
13612   { bfd_mach_mips9000, bfd_mach_mips8000 },
13613
13614   /* VR4100 extensions.  */
13615   { bfd_mach_mips4120, bfd_mach_mips4100 },
13616   { bfd_mach_mips4111, bfd_mach_mips4100 },
13617
13618   /* MIPS III extensions.  */
13619   { bfd_mach_mips_loongson_2e, bfd_mach_mips4000 },
13620   { bfd_mach_mips_loongson_2f, bfd_mach_mips4000 },
13621   { bfd_mach_mips8000, bfd_mach_mips4000 },
13622   { bfd_mach_mips4650, bfd_mach_mips4000 },
13623   { bfd_mach_mips4600, bfd_mach_mips4000 },
13624   { bfd_mach_mips4400, bfd_mach_mips4000 },
13625   { bfd_mach_mips4300, bfd_mach_mips4000 },
13626   { bfd_mach_mips4100, bfd_mach_mips4000 },
13627   { bfd_mach_mips4010, bfd_mach_mips4000 },
13628   { bfd_mach_mips5900, bfd_mach_mips4000 },
13629
13630   /* MIPS32 extensions.  */
13631   { bfd_mach_mipsisa32r2, bfd_mach_mipsisa32 },
13632
13633   /* MIPS II extensions.  */
13634   { bfd_mach_mips4000, bfd_mach_mips6000 },
13635   { bfd_mach_mipsisa32, bfd_mach_mips6000 },
13636
13637   /* MIPS I extensions.  */
13638   { bfd_mach_mips6000, bfd_mach_mips3000 },
13639   { bfd_mach_mips3900, bfd_mach_mips3000 }
13640 };
13641
13642
13643 /* Return true if bfd machine EXTENSION is an extension of machine BASE.  */
13644
13645 static bfd_boolean
13646 mips_mach_extends_p (unsigned long base, unsigned long extension)
13647 {
13648   size_t i;
13649
13650   if (extension == base)
13651     return TRUE;
13652
13653   if (base == bfd_mach_mipsisa32
13654       && mips_mach_extends_p (bfd_mach_mipsisa64, extension))
13655     return TRUE;
13656
13657   if (base == bfd_mach_mipsisa32r2
13658       && mips_mach_extends_p (bfd_mach_mipsisa64r2, extension))
13659     return TRUE;
13660
13661   for (i = 0; i < ARRAY_SIZE (mips_mach_extensions); i++)
13662     if (extension == mips_mach_extensions[i].extension)
13663       {
13664         extension = mips_mach_extensions[i].base;
13665         if (extension == base)
13666           return TRUE;
13667       }
13668
13669   return FALSE;
13670 }
13671
13672
13673 /* Return true if the given ELF header flags describe a 32-bit binary.  */
13674
13675 static bfd_boolean
13676 mips_32bit_flags_p (flagword flags)
13677 {
13678   return ((flags & EF_MIPS_32BITMODE) != 0
13679           || (flags & EF_MIPS_ABI) == E_MIPS_ABI_O32
13680           || (flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32
13681           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1
13682           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2
13683           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32
13684           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2);
13685 }
13686
13687
13688 /* Merge object attributes from IBFD into OBFD.  Raise an error if
13689    there are conflicting attributes.  */
13690 static bfd_boolean
13691 mips_elf_merge_obj_attributes (bfd *ibfd, bfd *obfd)
13692 {
13693   obj_attribute *in_attr;
13694   obj_attribute *out_attr;
13695   bfd *abi_fp_bfd;
13696
13697   abi_fp_bfd = mips_elf_tdata (obfd)->abi_fp_bfd;
13698   in_attr = elf_known_obj_attributes (ibfd)[OBJ_ATTR_GNU];
13699   if (!abi_fp_bfd && in_attr[Tag_GNU_MIPS_ABI_FP].i != 0)
13700     mips_elf_tdata (obfd)->abi_fp_bfd = ibfd;
13701
13702   if (!elf_known_obj_attributes_proc (obfd)[0].i)
13703     {
13704       /* This is the first object.  Copy the attributes.  */
13705       _bfd_elf_copy_obj_attributes (ibfd, obfd);
13706
13707       /* Use the Tag_null value to indicate the attributes have been
13708          initialized.  */
13709       elf_known_obj_attributes_proc (obfd)[0].i = 1;
13710
13711       return TRUE;
13712     }
13713
13714   /* Check for conflicting Tag_GNU_MIPS_ABI_FP attributes and merge
13715      non-conflicting ones.  */
13716   out_attr = elf_known_obj_attributes (obfd)[OBJ_ATTR_GNU];
13717   if (in_attr[Tag_GNU_MIPS_ABI_FP].i != out_attr[Tag_GNU_MIPS_ABI_FP].i)
13718     {
13719       out_attr[Tag_GNU_MIPS_ABI_FP].type = 1;
13720       if (out_attr[Tag_GNU_MIPS_ABI_FP].i == 0)
13721         out_attr[Tag_GNU_MIPS_ABI_FP].i = in_attr[Tag_GNU_MIPS_ABI_FP].i;
13722       else if (in_attr[Tag_GNU_MIPS_ABI_FP].i != 0)
13723         switch (out_attr[Tag_GNU_MIPS_ABI_FP].i)
13724           {
13725           case 1:
13726             switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
13727               {
13728               case 2:
13729                 _bfd_error_handler
13730                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13731                    obfd, abi_fp_bfd, ibfd, "-mdouble-float", "-msingle-float");
13732                 break;
13733
13734               case 3:
13735                 _bfd_error_handler
13736                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13737                    obfd, abi_fp_bfd, ibfd, "-mhard-float", "-msoft-float");
13738                 break;
13739
13740               case 4:
13741                 _bfd_error_handler
13742                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13743                    obfd, abi_fp_bfd, ibfd,
13744                    "-mdouble-float", "-mips32r2 -mfp64");
13745                 break;
13746
13747               default:
13748                 _bfd_error_handler
13749                   (_("Warning: %B uses %s (set by %B), "
13750                      "%B uses unknown floating point ABI %d"),
13751                    obfd, abi_fp_bfd, ibfd,
13752                    "-mdouble-float", in_attr[Tag_GNU_MIPS_ABI_FP].i);
13753                 break;
13754               }
13755             break;
13756
13757           case 2:
13758             switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
13759               {
13760               case 1:
13761                 _bfd_error_handler
13762                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13763                    obfd, abi_fp_bfd, ibfd, "-msingle-float", "-mdouble-float");
13764                 break;
13765
13766               case 3:
13767                 _bfd_error_handler
13768                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13769                    obfd, abi_fp_bfd, ibfd, "-mhard-float", "-msoft-float");
13770                 break;
13771
13772               case 4:
13773                 _bfd_error_handler
13774                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13775                    obfd, abi_fp_bfd, ibfd,
13776                    "-msingle-float", "-mips32r2 -mfp64");
13777                 break;
13778
13779               default:
13780                 _bfd_error_handler
13781                   (_("Warning: %B uses %s (set by %B), "
13782                      "%B uses unknown floating point ABI %d"),
13783                    obfd, abi_fp_bfd, ibfd,
13784                    "-msingle-float", in_attr[Tag_GNU_MIPS_ABI_FP].i);
13785                 break;
13786               }
13787             break;
13788
13789           case 3:
13790             switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
13791               {
13792               case 1:
13793               case 2:
13794               case 4:
13795                 _bfd_error_handler
13796                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13797                    obfd, abi_fp_bfd, ibfd, "-msoft-float", "-mhard-float");
13798                 break;
13799
13800               default:
13801                 _bfd_error_handler
13802                   (_("Warning: %B uses %s (set by %B), "
13803                      "%B uses unknown floating point ABI %d"),
13804                    obfd, abi_fp_bfd, ibfd,
13805                    "-msoft-float", in_attr[Tag_GNU_MIPS_ABI_FP].i);
13806                 break;
13807               }
13808             break;
13809
13810           case 4:
13811             switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
13812               {
13813               case 1:
13814                 _bfd_error_handler
13815                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13816                    obfd, abi_fp_bfd, ibfd,
13817                    "-mips32r2 -mfp64", "-mdouble-float");
13818                 break;
13819
13820               case 2:
13821                 _bfd_error_handler
13822                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13823                    obfd, abi_fp_bfd, ibfd,
13824                    "-mips32r2 -mfp64", "-msingle-float");
13825                 break;
13826
13827               case 3:
13828                 _bfd_error_handler
13829                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13830                    obfd, abi_fp_bfd, ibfd, "-mhard-float", "-msoft-float");
13831                 break;
13832
13833               default:
13834                 _bfd_error_handler
13835                   (_("Warning: %B uses %s (set by %B), "
13836                      "%B uses unknown floating point ABI %d"),
13837                    obfd, abi_fp_bfd, ibfd,
13838                    "-mips32r2 -mfp64", in_attr[Tag_GNU_MIPS_ABI_FP].i);
13839                 break;
13840               }
13841             break;
13842
13843           default:
13844             switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
13845               {
13846               case 1:
13847                 _bfd_error_handler
13848                   (_("Warning: %B uses unknown floating point ABI %d "
13849                      "(set by %B), %B uses %s"),
13850                    obfd, abi_fp_bfd, ibfd,
13851                    out_attr[Tag_GNU_MIPS_ABI_FP].i, "-mdouble-float");
13852                 break;
13853
13854               case 2:
13855                 _bfd_error_handler
13856                   (_("Warning: %B uses unknown floating point ABI %d "
13857                      "(set by %B), %B uses %s"),
13858                    obfd, abi_fp_bfd, ibfd,
13859                    out_attr[Tag_GNU_MIPS_ABI_FP].i, "-msingle-float");
13860                 break;
13861
13862               case 3:
13863                 _bfd_error_handler
13864                   (_("Warning: %B uses unknown floating point ABI %d "
13865                      "(set by %B), %B uses %s"),
13866                    obfd, abi_fp_bfd, ibfd,
13867                    out_attr[Tag_GNU_MIPS_ABI_FP].i, "-msoft-float");
13868                 break;
13869
13870               case 4:
13871                 _bfd_error_handler
13872                   (_("Warning: %B uses unknown floating point ABI %d "
13873                      "(set by %B), %B uses %s"),
13874                    obfd, abi_fp_bfd, ibfd,
13875                    out_attr[Tag_GNU_MIPS_ABI_FP].i, "-mips32r2 -mfp64");
13876                 break;
13877
13878               default:
13879                 _bfd_error_handler
13880                   (_("Warning: %B uses unknown floating point ABI %d "
13881                      "(set by %B), %B uses unknown floating point ABI %d"),
13882                    obfd, abi_fp_bfd, ibfd,
13883                    out_attr[Tag_GNU_MIPS_ABI_FP].i,
13884                    in_attr[Tag_GNU_MIPS_ABI_FP].i);
13885                 break;
13886               }
13887             break;
13888           }
13889     }
13890
13891   /* Merge Tag_compatibility attributes and any common GNU ones.  */
13892   _bfd_elf_merge_object_attributes (ibfd, obfd);
13893
13894   return TRUE;
13895 }
13896
13897 /* Merge backend specific data from an object file to the output
13898    object file when linking.  */
13899
13900 bfd_boolean
13901 _bfd_mips_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
13902 {
13903   flagword old_flags;
13904   flagword new_flags;
13905   bfd_boolean ok;
13906   bfd_boolean null_input_bfd = TRUE;
13907   asection *sec;
13908
13909   /* Check if we have the same endianness.  */
13910   if (! _bfd_generic_verify_endian_match (ibfd, obfd))
13911     {
13912       (*_bfd_error_handler)
13913         (_("%B: endianness incompatible with that of the selected emulation"),
13914          ibfd);
13915       return FALSE;
13916     }
13917
13918   if (!is_mips_elf (ibfd) || !is_mips_elf (obfd))
13919     return TRUE;
13920
13921   if (strcmp (bfd_get_target (ibfd), bfd_get_target (obfd)) != 0)
13922     {
13923       (*_bfd_error_handler)
13924         (_("%B: ABI is incompatible with that of the selected emulation"),
13925          ibfd);
13926       return FALSE;
13927     }
13928
13929   if (!mips_elf_merge_obj_attributes (ibfd, obfd))
13930     return FALSE;
13931
13932   new_flags = elf_elfheader (ibfd)->e_flags;
13933   elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_NOREORDER;
13934   old_flags = elf_elfheader (obfd)->e_flags;
13935
13936   if (! elf_flags_init (obfd))
13937     {
13938       elf_flags_init (obfd) = TRUE;
13939       elf_elfheader (obfd)->e_flags = new_flags;
13940       elf_elfheader (obfd)->e_ident[EI_CLASS]
13941         = elf_elfheader (ibfd)->e_ident[EI_CLASS];
13942
13943       if (bfd_get_arch (obfd) == bfd_get_arch (ibfd)
13944           && (bfd_get_arch_info (obfd)->the_default
13945               || mips_mach_extends_p (bfd_get_mach (obfd),
13946                                       bfd_get_mach (ibfd))))
13947         {
13948           if (! bfd_set_arch_mach (obfd, bfd_get_arch (ibfd),
13949                                    bfd_get_mach (ibfd)))
13950             return FALSE;
13951         }
13952
13953       return TRUE;
13954     }
13955
13956   /* Check flag compatibility.  */
13957
13958   new_flags &= ~EF_MIPS_NOREORDER;
13959   old_flags &= ~EF_MIPS_NOREORDER;
13960
13961   /* Some IRIX 6 BSD-compatibility objects have this bit set.  It
13962      doesn't seem to matter.  */
13963   new_flags &= ~EF_MIPS_XGOT;
13964   old_flags &= ~EF_MIPS_XGOT;
13965
13966   /* MIPSpro generates ucode info in n64 objects.  Again, we should
13967      just be able to ignore this.  */
13968   new_flags &= ~EF_MIPS_UCODE;
13969   old_flags &= ~EF_MIPS_UCODE;
13970
13971   /* DSOs should only be linked with CPIC code.  */
13972   if ((ibfd->flags & DYNAMIC) != 0)
13973     new_flags |= EF_MIPS_PIC | EF_MIPS_CPIC;
13974
13975   if (new_flags == old_flags)
13976     return TRUE;
13977
13978   /* Check to see if the input BFD actually contains any sections.
13979      If not, its flags may not have been initialised either, but it cannot
13980      actually cause any incompatibility.  */
13981   for (sec = ibfd->sections; sec != NULL; sec = sec->next)
13982     {
13983       /* Ignore synthetic sections and empty .text, .data and .bss sections
13984          which are automatically generated by gas.  Also ignore fake
13985          (s)common sections, since merely defining a common symbol does
13986          not affect compatibility.  */
13987       if ((sec->flags & SEC_IS_COMMON) == 0
13988           && strcmp (sec->name, ".reginfo")
13989           && strcmp (sec->name, ".mdebug")
13990           && (sec->size != 0
13991               || (strcmp (sec->name, ".text")
13992                   && strcmp (sec->name, ".data")
13993                   && strcmp (sec->name, ".bss"))))
13994         {
13995           null_input_bfd = FALSE;
13996           break;
13997         }
13998     }
13999   if (null_input_bfd)
14000     return TRUE;
14001
14002   ok = TRUE;
14003
14004   if (((new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0)
14005       != ((old_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0))
14006     {
14007       (*_bfd_error_handler)
14008         (_("%B: warning: linking abicalls files with non-abicalls files"),
14009          ibfd);
14010       ok = TRUE;
14011     }
14012
14013   if (new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC))
14014     elf_elfheader (obfd)->e_flags |= EF_MIPS_CPIC;
14015   if (! (new_flags & EF_MIPS_PIC))
14016     elf_elfheader (obfd)->e_flags &= ~EF_MIPS_PIC;
14017
14018   new_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC);
14019   old_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC);
14020
14021   /* Compare the ISAs.  */
14022   if (mips_32bit_flags_p (old_flags) != mips_32bit_flags_p (new_flags))
14023     {
14024       (*_bfd_error_handler)
14025         (_("%B: linking 32-bit code with 64-bit code"),
14026          ibfd);
14027       ok = FALSE;
14028     }
14029   else if (!mips_mach_extends_p (bfd_get_mach (ibfd), bfd_get_mach (obfd)))
14030     {
14031       /* OBFD's ISA isn't the same as, or an extension of, IBFD's.  */
14032       if (mips_mach_extends_p (bfd_get_mach (obfd), bfd_get_mach (ibfd)))
14033         {
14034           /* Copy the architecture info from IBFD to OBFD.  Also copy
14035              the 32-bit flag (if set) so that we continue to recognise
14036              OBFD as a 32-bit binary.  */
14037           bfd_set_arch_info (obfd, bfd_get_arch_info (ibfd));
14038           elf_elfheader (obfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH);
14039           elf_elfheader (obfd)->e_flags
14040             |= new_flags & (EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
14041
14042           /* Copy across the ABI flags if OBFD doesn't use them
14043              and if that was what caused us to treat IBFD as 32-bit.  */
14044           if ((old_flags & EF_MIPS_ABI) == 0
14045               && mips_32bit_flags_p (new_flags)
14046               && !mips_32bit_flags_p (new_flags & ~EF_MIPS_ABI))
14047             elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ABI;
14048         }
14049       else
14050         {
14051           /* The ISAs aren't compatible.  */
14052           (*_bfd_error_handler)
14053             (_("%B: linking %s module with previous %s modules"),
14054              ibfd,
14055              bfd_printable_name (ibfd),
14056              bfd_printable_name (obfd));
14057           ok = FALSE;
14058         }
14059     }
14060
14061   new_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
14062   old_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
14063
14064   /* Compare ABIs.  The 64-bit ABI does not use EF_MIPS_ABI.  But, it
14065      does set EI_CLASS differently from any 32-bit ABI.  */
14066   if ((new_flags & EF_MIPS_ABI) != (old_flags & EF_MIPS_ABI)
14067       || (elf_elfheader (ibfd)->e_ident[EI_CLASS]
14068           != elf_elfheader (obfd)->e_ident[EI_CLASS]))
14069     {
14070       /* Only error if both are set (to different values).  */
14071       if (((new_flags & EF_MIPS_ABI) && (old_flags & EF_MIPS_ABI))
14072           || (elf_elfheader (ibfd)->e_ident[EI_CLASS]
14073               != elf_elfheader (obfd)->e_ident[EI_CLASS]))
14074         {
14075           (*_bfd_error_handler)
14076             (_("%B: ABI mismatch: linking %s module with previous %s modules"),
14077              ibfd,
14078              elf_mips_abi_name (ibfd),
14079              elf_mips_abi_name (obfd));
14080           ok = FALSE;
14081         }
14082       new_flags &= ~EF_MIPS_ABI;
14083       old_flags &= ~EF_MIPS_ABI;
14084     }
14085
14086   /* Compare ASEs.  Forbid linking MIPS16 and microMIPS ASE modules together
14087      and allow arbitrary mixing of the remaining ASEs (retain the union).  */
14088   if ((new_flags & EF_MIPS_ARCH_ASE) != (old_flags & EF_MIPS_ARCH_ASE))
14089     {
14090       int old_micro = old_flags & EF_MIPS_ARCH_ASE_MICROMIPS;
14091       int new_micro = new_flags & EF_MIPS_ARCH_ASE_MICROMIPS;
14092       int old_m16 = old_flags & EF_MIPS_ARCH_ASE_M16;
14093       int new_m16 = new_flags & EF_MIPS_ARCH_ASE_M16;
14094       int micro_mis = old_m16 && new_micro;
14095       int m16_mis = old_micro && new_m16;
14096
14097       if (m16_mis || micro_mis)
14098         {
14099           (*_bfd_error_handler)
14100             (_("%B: ASE mismatch: linking %s module with previous %s modules"),
14101              ibfd,
14102              m16_mis ? "MIPS16" : "microMIPS",
14103              m16_mis ? "microMIPS" : "MIPS16");
14104           ok = FALSE;
14105         }
14106
14107       elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ARCH_ASE;
14108
14109       new_flags &= ~ EF_MIPS_ARCH_ASE;
14110       old_flags &= ~ EF_MIPS_ARCH_ASE;
14111     }
14112
14113   /* Warn about any other mismatches */
14114   if (new_flags != old_flags)
14115     {
14116       (*_bfd_error_handler)
14117         (_("%B: uses different e_flags (0x%lx) fields than previous modules (0x%lx)"),
14118          ibfd, (unsigned long) new_flags,
14119          (unsigned long) old_flags);
14120       ok = FALSE;
14121     }
14122
14123   if (! ok)
14124     {
14125       bfd_set_error (bfd_error_bad_value);
14126       return FALSE;
14127     }
14128
14129   return TRUE;
14130 }
14131
14132 /* Function to keep MIPS specific file flags like as EF_MIPS_PIC.  */
14133
14134 bfd_boolean
14135 _bfd_mips_elf_set_private_flags (bfd *abfd, flagword flags)
14136 {
14137   BFD_ASSERT (!elf_flags_init (abfd)
14138               || elf_elfheader (abfd)->e_flags == flags);
14139
14140   elf_elfheader (abfd)->e_flags = flags;
14141   elf_flags_init (abfd) = TRUE;
14142   return TRUE;
14143 }
14144
14145 char *
14146 _bfd_mips_elf_get_target_dtag (bfd_vma dtag)
14147 {
14148   switch (dtag)
14149     {
14150     default: return "";
14151     case DT_MIPS_RLD_VERSION:
14152       return "MIPS_RLD_VERSION";
14153     case DT_MIPS_TIME_STAMP:
14154       return "MIPS_TIME_STAMP";
14155     case DT_MIPS_ICHECKSUM:
14156       return "MIPS_ICHECKSUM";
14157     case DT_MIPS_IVERSION:
14158       return "MIPS_IVERSION";
14159     case DT_MIPS_FLAGS:
14160       return "MIPS_FLAGS";
14161     case DT_MIPS_BASE_ADDRESS:
14162       return "MIPS_BASE_ADDRESS";
14163     case DT_MIPS_MSYM:
14164       return "MIPS_MSYM";
14165     case DT_MIPS_CONFLICT:
14166       return "MIPS_CONFLICT";
14167     case DT_MIPS_LIBLIST:
14168       return "MIPS_LIBLIST";
14169     case DT_MIPS_LOCAL_GOTNO:
14170       return "MIPS_LOCAL_GOTNO";
14171     case DT_MIPS_CONFLICTNO:
14172       return "MIPS_CONFLICTNO";
14173     case DT_MIPS_LIBLISTNO:
14174       return "MIPS_LIBLISTNO";
14175     case DT_MIPS_SYMTABNO:
14176       return "MIPS_SYMTABNO";
14177     case DT_MIPS_UNREFEXTNO:
14178       return "MIPS_UNREFEXTNO";
14179     case DT_MIPS_GOTSYM:
14180       return "MIPS_GOTSYM";
14181     case DT_MIPS_HIPAGENO:
14182       return "MIPS_HIPAGENO";
14183     case DT_MIPS_RLD_MAP:
14184       return "MIPS_RLD_MAP";
14185     case DT_MIPS_DELTA_CLASS:
14186       return "MIPS_DELTA_CLASS";
14187     case DT_MIPS_DELTA_CLASS_NO:
14188       return "MIPS_DELTA_CLASS_NO";
14189     case DT_MIPS_DELTA_INSTANCE:
14190       return "MIPS_DELTA_INSTANCE";
14191     case DT_MIPS_DELTA_INSTANCE_NO:
14192       return "MIPS_DELTA_INSTANCE_NO";
14193     case DT_MIPS_DELTA_RELOC:
14194       return "MIPS_DELTA_RELOC";
14195     case DT_MIPS_DELTA_RELOC_NO:
14196       return "MIPS_DELTA_RELOC_NO";
14197     case DT_MIPS_DELTA_SYM:
14198       return "MIPS_DELTA_SYM";
14199     case DT_MIPS_DELTA_SYM_NO:
14200       return "MIPS_DELTA_SYM_NO";
14201     case DT_MIPS_DELTA_CLASSSYM:
14202       return "MIPS_DELTA_CLASSSYM";
14203     case DT_MIPS_DELTA_CLASSSYM_NO:
14204       return "MIPS_DELTA_CLASSSYM_NO";
14205     case DT_MIPS_CXX_FLAGS:
14206       return "MIPS_CXX_FLAGS";
14207     case DT_MIPS_PIXIE_INIT:
14208       return "MIPS_PIXIE_INIT";
14209     case DT_MIPS_SYMBOL_LIB:
14210       return "MIPS_SYMBOL_LIB";
14211     case DT_MIPS_LOCALPAGE_GOTIDX:
14212       return "MIPS_LOCALPAGE_GOTIDX";
14213     case DT_MIPS_LOCAL_GOTIDX:
14214       return "MIPS_LOCAL_GOTIDX";
14215     case DT_MIPS_HIDDEN_GOTIDX:
14216       return "MIPS_HIDDEN_GOTIDX";
14217     case DT_MIPS_PROTECTED_GOTIDX:
14218       return "MIPS_PROTECTED_GOT_IDX";
14219     case DT_MIPS_OPTIONS:
14220       return "MIPS_OPTIONS";
14221     case DT_MIPS_INTERFACE:
14222       return "MIPS_INTERFACE";
14223     case DT_MIPS_DYNSTR_ALIGN:
14224       return "DT_MIPS_DYNSTR_ALIGN";
14225     case DT_MIPS_INTERFACE_SIZE:
14226       return "DT_MIPS_INTERFACE_SIZE";
14227     case DT_MIPS_RLD_TEXT_RESOLVE_ADDR:
14228       return "DT_MIPS_RLD_TEXT_RESOLVE_ADDR";
14229     case DT_MIPS_PERF_SUFFIX:
14230       return "DT_MIPS_PERF_SUFFIX";
14231     case DT_MIPS_COMPACT_SIZE:
14232       return "DT_MIPS_COMPACT_SIZE";
14233     case DT_MIPS_GP_VALUE:
14234       return "DT_MIPS_GP_VALUE";
14235     case DT_MIPS_AUX_DYNAMIC:
14236       return "DT_MIPS_AUX_DYNAMIC";
14237     case DT_MIPS_PLTGOT:
14238       return "DT_MIPS_PLTGOT";
14239     case DT_MIPS_RWPLT:
14240       return "DT_MIPS_RWPLT";
14241     }
14242 }
14243
14244 bfd_boolean
14245 _bfd_mips_elf_print_private_bfd_data (bfd *abfd, void *ptr)
14246 {
14247   FILE *file = ptr;
14248
14249   BFD_ASSERT (abfd != NULL && ptr != NULL);
14250
14251   /* Print normal ELF private data.  */
14252   _bfd_elf_print_private_bfd_data (abfd, ptr);
14253
14254   /* xgettext:c-format */
14255   fprintf (file, _("private flags = %lx:"), elf_elfheader (abfd)->e_flags);
14256
14257   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O32)
14258     fprintf (file, _(" [abi=O32]"));
14259   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O64)
14260     fprintf (file, _(" [abi=O64]"));
14261   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32)
14262     fprintf (file, _(" [abi=EABI32]"));
14263   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI64)
14264     fprintf (file, _(" [abi=EABI64]"));
14265   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI))
14266     fprintf (file, _(" [abi unknown]"));
14267   else if (ABI_N32_P (abfd))
14268     fprintf (file, _(" [abi=N32]"));
14269   else if (ABI_64_P (abfd))
14270     fprintf (file, _(" [abi=64]"));
14271   else
14272     fprintf (file, _(" [no abi set]"));
14273
14274   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1)
14275     fprintf (file, " [mips1]");
14276   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2)
14277     fprintf (file, " [mips2]");
14278   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_3)
14279     fprintf (file, " [mips3]");
14280   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_4)
14281     fprintf (file, " [mips4]");
14282   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_5)
14283     fprintf (file, " [mips5]");
14284   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32)
14285     fprintf (file, " [mips32]");
14286   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64)
14287     fprintf (file, " [mips64]");
14288   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2)
14289     fprintf (file, " [mips32r2]");
14290   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64R2)
14291     fprintf (file, " [mips64r2]");
14292   else
14293     fprintf (file, _(" [unknown ISA]"));
14294
14295   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MDMX)
14296     fprintf (file, " [mdmx]");
14297
14298   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_M16)
14299     fprintf (file, " [mips16]");
14300
14301   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MICROMIPS)
14302     fprintf (file, " [micromips]");
14303
14304   if (elf_elfheader (abfd)->e_flags & EF_MIPS_32BITMODE)
14305     fprintf (file, " [32bitmode]");
14306   else
14307     fprintf (file, _(" [not 32bitmode]"));
14308
14309   if (elf_elfheader (abfd)->e_flags & EF_MIPS_NOREORDER)
14310     fprintf (file, " [noreorder]");
14311
14312   if (elf_elfheader (abfd)->e_flags & EF_MIPS_PIC)
14313     fprintf (file, " [PIC]");
14314
14315   if (elf_elfheader (abfd)->e_flags & EF_MIPS_CPIC)
14316     fprintf (file, " [CPIC]");
14317
14318   if (elf_elfheader (abfd)->e_flags & EF_MIPS_XGOT)
14319     fprintf (file, " [XGOT]");
14320
14321   if (elf_elfheader (abfd)->e_flags & EF_MIPS_UCODE)
14322     fprintf (file, " [UCODE]");
14323
14324   fputc ('\n', file);
14325
14326   return TRUE;
14327 }
14328
14329 const struct bfd_elf_special_section _bfd_mips_elf_special_sections[] =
14330 {
14331   { STRING_COMMA_LEN (".lit4"),   0, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
14332   { STRING_COMMA_LEN (".lit8"),   0, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
14333   { STRING_COMMA_LEN (".mdebug"), 0, SHT_MIPS_DEBUG, 0 },
14334   { STRING_COMMA_LEN (".sbss"),  -2, SHT_NOBITS,     SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
14335   { STRING_COMMA_LEN (".sdata"), -2, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
14336   { STRING_COMMA_LEN (".ucode"),  0, SHT_MIPS_UCODE, 0 },
14337   { NULL,                     0,  0, 0,              0 }
14338 };
14339
14340 /* Merge non visibility st_other attributes.  Ensure that the
14341    STO_OPTIONAL flag is copied into h->other, even if this is not a
14342    definiton of the symbol.  */
14343 void
14344 _bfd_mips_elf_merge_symbol_attribute (struct elf_link_hash_entry *h,
14345                                       const Elf_Internal_Sym *isym,
14346                                       bfd_boolean definition,
14347                                       bfd_boolean dynamic ATTRIBUTE_UNUSED)
14348 {
14349   if ((isym->st_other & ~ELF_ST_VISIBILITY (-1)) != 0)
14350     {
14351       unsigned char other;
14352
14353       other = (definition ? isym->st_other : h->other);
14354       other &= ~ELF_ST_VISIBILITY (-1);
14355       h->other = other | ELF_ST_VISIBILITY (h->other);
14356     }
14357
14358   if (!definition
14359       && ELF_MIPS_IS_OPTIONAL (isym->st_other))
14360     h->other |= STO_OPTIONAL;
14361 }
14362
14363 /* Decide whether an undefined symbol is special and can be ignored.
14364    This is the case for OPTIONAL symbols on IRIX.  */
14365 bfd_boolean
14366 _bfd_mips_elf_ignore_undef_symbol (struct elf_link_hash_entry *h)
14367 {
14368   return ELF_MIPS_IS_OPTIONAL (h->other) ? TRUE : FALSE;
14369 }
14370
14371 bfd_boolean
14372 _bfd_mips_elf_common_definition (Elf_Internal_Sym *sym)
14373 {
14374   return (sym->st_shndx == SHN_COMMON
14375           || sym->st_shndx == SHN_MIPS_ACOMMON
14376           || sym->st_shndx == SHN_MIPS_SCOMMON);
14377 }
14378
14379 /* Return address for Ith PLT stub in section PLT, for relocation REL
14380    or (bfd_vma) -1 if it should not be included.  */
14381
14382 bfd_vma
14383 _bfd_mips_elf_plt_sym_val (bfd_vma i, const asection *plt,
14384                            const arelent *rel ATTRIBUTE_UNUSED)
14385 {
14386   return (plt->vma
14387           + 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry)
14388           + i * 4 * ARRAY_SIZE (mips_exec_plt_entry));
14389 }
14390
14391 void
14392 _bfd_mips_post_process_headers (bfd *abfd, struct bfd_link_info *link_info)
14393 {
14394   struct mips_elf_link_hash_table *htab;
14395   Elf_Internal_Ehdr *i_ehdrp;
14396
14397   i_ehdrp = elf_elfheader (abfd);
14398   if (link_info)
14399     {
14400       htab = mips_elf_hash_table (link_info);
14401       BFD_ASSERT (htab != NULL);
14402
14403       if (htab->use_plts_and_copy_relocs && !htab->is_vxworks)
14404         i_ehdrp->e_ident[EI_ABIVERSION] = 1;
14405     }
14406 }