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   /* A hash table mapping input bfds to other mips_got_info.  NULL
165      unless multi-got was necessary.  */
166   struct htab *bfd2got;
167   /* In multi-got links, a pointer to the next got (err, rather, most
168      of the time, it points to the previous got).  */
169   struct mips_got_info *next;
170   /* This is the GOT index of the TLS LDM entry for the GOT, MINUS_ONE
171      for none, or MINUS_TWO for not yet assigned.  This is needed
172      because a single-GOT link may have multiple hash table entries
173      for the LDM.  It does not get initialized in multi-GOT mode.  */
174   bfd_vma tls_ldm_offset;
175 };
176
177 /* Map an input bfd to a got in a multi-got link.  */
178
179 struct mips_elf_bfd2got_hash
180 {
181   bfd *bfd;
182   struct mips_got_info *g;
183 };
184
185 /* Structure passed when traversing the bfd2got hash table, used to
186    create and merge bfd's gots.  */
187
188 struct mips_elf_got_per_bfd_arg
189 {
190   /* A hashtable that maps bfds to gots.  */
191   htab_t bfd2got;
192   /* The output bfd.  */
193   bfd *obfd;
194   /* The link information.  */
195   struct bfd_link_info *info;
196   /* A pointer to the primary got, i.e., the one that's going to get
197      the implicit relocations from DT_MIPS_LOCAL_GOTNO and
198      DT_MIPS_GOTSYM.  */
199   struct mips_got_info *primary;
200   /* A non-primary got we're trying to merge with other input bfd's
201      gots.  */
202   struct mips_got_info *current;
203   /* The maximum number of got entries that can be addressed with a
204      16-bit offset.  */
205   unsigned int max_count;
206   /* The maximum number of page entries needed by each got.  */
207   unsigned int max_pages;
208   /* The total number of global entries which will live in the
209      primary got and be automatically relocated.  This includes
210      those not referenced by the primary GOT but included in
211      the "master" GOT.  */
212   unsigned int global_count;
213 };
214
215 /* A structure used to pass information to htab_traverse callbacks
216    when laying out the GOT.  */
217
218 struct mips_elf_traverse_got_arg
219 {
220   struct bfd_link_info *info;
221   struct mips_got_info *g;
222   int value;
223 };
224
225 struct _mips_elf_section_data
226 {
227   struct bfd_elf_section_data elf;
228   union
229   {
230     bfd_byte *tdata;
231   } u;
232 };
233
234 #define mips_elf_section_data(sec) \
235   ((struct _mips_elf_section_data *) elf_section_data (sec))
236
237 #define is_mips_elf(bfd)                                \
238   (bfd_get_flavour (bfd) == bfd_target_elf_flavour      \
239    && elf_tdata (bfd) != NULL                           \
240    && elf_object_id (bfd) == MIPS_ELF_DATA)
241
242 /* The ABI says that every symbol used by dynamic relocations must have
243    a global GOT entry.  Among other things, this provides the dynamic
244    linker with a free, directly-indexed cache.  The GOT can therefore
245    contain symbols that are not referenced by GOT relocations themselves
246    (in other words, it may have symbols that are not referenced by things
247    like R_MIPS_GOT16 and R_MIPS_GOT_PAGE).
248
249    GOT relocations are less likely to overflow if we put the associated
250    GOT entries towards the beginning.  We therefore divide the global
251    GOT entries into two areas: "normal" and "reloc-only".  Entries in
252    the first area can be used for both dynamic relocations and GP-relative
253    accesses, while those in the "reloc-only" area are for dynamic
254    relocations only.
255
256    These GGA_* ("Global GOT Area") values are organised so that lower
257    values are more general than higher values.  Also, non-GGA_NONE
258    values are ordered by the position of the area in the GOT.  */
259 #define GGA_NORMAL 0
260 #define GGA_RELOC_ONLY 1
261 #define GGA_NONE 2
262
263 /* Information about a non-PIC interface to a PIC function.  There are
264    two ways of creating these interfaces.  The first is to add:
265
266         lui     $25,%hi(func)
267         addiu   $25,$25,%lo(func)
268
269    immediately before a PIC function "func".  The second is to add:
270
271         lui     $25,%hi(func)
272         j       func
273         addiu   $25,$25,%lo(func)
274
275    to a separate trampoline section.
276
277    Stubs of the first kind go in a new section immediately before the
278    target function.  Stubs of the second kind go in a single section
279    pointed to by the hash table's "strampoline" field.  */
280 struct mips_elf_la25_stub {
281   /* The generated section that contains this stub.  */
282   asection *stub_section;
283
284   /* The offset of the stub from the start of STUB_SECTION.  */
285   bfd_vma offset;
286
287   /* One symbol for the original function.  Its location is available
288      in H->root.root.u.def.  */
289   struct mips_elf_link_hash_entry *h;
290 };
291
292 /* Macros for populating a mips_elf_la25_stub.  */
293
294 #define LA25_LUI(VAL) (0x3c190000 | (VAL))      /* lui t9,VAL */
295 #define LA25_J(VAL) (0x08000000 | (((VAL) >> 2) & 0x3ffffff)) /* j VAL */
296 #define LA25_ADDIU(VAL) (0x27390000 | (VAL))    /* addiu t9,t9,VAL */
297 #define LA25_LUI_MICROMIPS(VAL)                                         \
298   (0x41b90000 | (VAL))                          /* lui t9,VAL */
299 #define LA25_J_MICROMIPS(VAL)                                           \
300   (0xd4000000 | (((VAL) >> 1) & 0x3ffffff))     /* j VAL */
301 #define LA25_ADDIU_MICROMIPS(VAL)                                       \
302   (0x33390000 | (VAL))                          /* addiu t9,t9,VAL */
303
304 /* This structure is passed to mips_elf_sort_hash_table_f when sorting
305    the dynamic symbols.  */
306
307 struct mips_elf_hash_sort_data
308 {
309   /* The symbol in the global GOT with the lowest dynamic symbol table
310      index.  */
311   struct elf_link_hash_entry *low;
312   /* The least dynamic symbol table index corresponding to a non-TLS
313      symbol with a GOT entry.  */
314   long min_got_dynindx;
315   /* The greatest dynamic symbol table index corresponding to a symbol
316      with a GOT entry that is not referenced (e.g., a dynamic symbol
317      with dynamic relocations pointing to it from non-primary GOTs).  */
318   long max_unref_got_dynindx;
319   /* The greatest dynamic symbol table index not corresponding to a
320      symbol without a GOT entry.  */
321   long max_non_got_dynindx;
322 };
323
324 /* The MIPS ELF linker needs additional information for each symbol in
325    the global hash table.  */
326
327 struct mips_elf_link_hash_entry
328 {
329   struct elf_link_hash_entry root;
330
331   /* External symbol information.  */
332   EXTR esym;
333
334   /* The la25 stub we have created for ths symbol, if any.  */
335   struct mips_elf_la25_stub *la25_stub;
336
337   /* Number of R_MIPS_32, R_MIPS_REL32, or R_MIPS_64 relocs against
338      this symbol.  */
339   unsigned int possibly_dynamic_relocs;
340
341   /* If there is a stub that 32 bit functions should use to call this
342      16 bit function, this points to the section containing the stub.  */
343   asection *fn_stub;
344
345   /* If there is a stub that 16 bit functions should use to call this
346      32 bit function, this points to the section containing the stub.  */
347   asection *call_stub;
348
349   /* This is like the call_stub field, but it is used if the function
350      being called returns a floating point value.  */
351   asection *call_fp_stub;
352
353 #define GOT_NORMAL      0
354 #define GOT_TLS_GD      1
355 #define GOT_TLS_LDM     2
356 #define GOT_TLS_IE      4
357 #define GOT_TLS_TYPE    7
358 #define GOT_TLS_OFFSET_DONE    0x40
359 #define GOT_TLS_DONE    0x80
360   unsigned char tls_ie_type;
361   unsigned char tls_gd_type;
362
363   /* These fields are only used in single-GOT mode; in multi-GOT mode there
364      is one mips_got_entry per GOT entry, so the offset is stored
365      there.  In single-GOT mode there may be many mips_got_entry
366      structures all referring to the same GOT slot.  */
367   bfd_vma tls_ie_got_offset;
368   bfd_vma tls_gd_got_offset;
369
370   /* The highest GGA_* value that satisfies all references to this symbol.  */
371   unsigned int global_got_area : 2;
372
373   /* True if all GOT relocations against this symbol are for calls.  This is
374      a looser condition than no_fn_stub below, because there may be other
375      non-call non-GOT relocations against the symbol.  */
376   unsigned int got_only_for_calls : 1;
377
378   /* True if one of the relocations described by possibly_dynamic_relocs
379      is against a readonly section.  */
380   unsigned int readonly_reloc : 1;
381
382   /* True if there is a relocation against this symbol that must be
383      resolved by the static linker (in other words, if the relocation
384      cannot possibly be made dynamic).  */
385   unsigned int has_static_relocs : 1;
386
387   /* True if we must not create a .MIPS.stubs entry for this symbol.
388      This is set, for example, if there are relocations related to
389      taking the function's address, i.e. any but R_MIPS_CALL*16 ones.
390      See "MIPS ABI Supplement, 3rd Edition", p. 4-20.  */
391   unsigned int no_fn_stub : 1;
392
393   /* Whether we need the fn_stub; this is true if this symbol appears
394      in any relocs other than a 16 bit call.  */
395   unsigned int need_fn_stub : 1;
396
397   /* True if this symbol is referenced by branch relocations from
398      any non-PIC input file.  This is used to determine whether an
399      la25 stub is required.  */
400   unsigned int has_nonpic_branches : 1;
401
402   /* Does this symbol need a traditional MIPS lazy-binding stub
403      (as opposed to a PLT entry)?  */
404   unsigned int needs_lazy_stub : 1;
405 };
406
407 /* MIPS ELF linker hash table.  */
408
409 struct mips_elf_link_hash_table
410 {
411   struct elf_link_hash_table root;
412
413   /* The number of .rtproc entries.  */
414   bfd_size_type procedure_count;
415
416   /* The size of the .compact_rel section (if SGI_COMPAT).  */
417   bfd_size_type compact_rel_size;
418
419   /* This flag indicates that the value of DT_MIPS_RLD_MAP dynamic entry
420      is set to the address of __rld_obj_head as in IRIX5 and IRIX6.  */
421   bfd_boolean use_rld_obj_head;
422
423   /* The  __rld_map or __rld_obj_head symbol. */
424   struct elf_link_hash_entry *rld_symbol;
425
426   /* This is set if we see any mips16 stub sections.  */
427   bfd_boolean mips16_stubs_seen;
428
429   /* True if we can generate copy relocs and PLTs.  */
430   bfd_boolean use_plts_and_copy_relocs;
431
432   /* True if we're generating code for VxWorks.  */
433   bfd_boolean is_vxworks;
434
435   /* True if we already reported the small-data section overflow.  */
436   bfd_boolean small_data_overflow_reported;
437
438   /* Shortcuts to some dynamic sections, or NULL if they are not
439      being used.  */
440   asection *srelbss;
441   asection *sdynbss;
442   asection *srelplt;
443   asection *srelplt2;
444   asection *sgotplt;
445   asection *splt;
446   asection *sstubs;
447   asection *sgot;
448
449   /* The master GOT information.  */
450   struct mips_got_info *got_info;
451
452   /* The global symbol in the GOT with the lowest index in the dynamic
453      symbol table.  */
454   struct elf_link_hash_entry *global_gotsym;
455
456   /* The size of the PLT header in bytes.  */
457   bfd_vma plt_header_size;
458
459   /* The size of a PLT entry in bytes.  */
460   bfd_vma plt_entry_size;
461
462   /* The number of functions that need a lazy-binding stub.  */
463   bfd_vma lazy_stub_count;
464
465   /* The size of a function stub entry in bytes.  */
466   bfd_vma function_stub_size;
467
468   /* The number of reserved entries at the beginning of the GOT.  */
469   unsigned int reserved_gotno;
470
471   /* The section used for mips_elf_la25_stub trampolines.
472      See the comment above that structure for details.  */
473   asection *strampoline;
474
475   /* A table of mips_elf_la25_stubs, indexed by (input_section, offset)
476      pairs.  */
477   htab_t la25_stubs;
478
479   /* A function FN (NAME, IS, OS) that creates a new input section
480      called NAME and links it to output section OS.  If IS is nonnull,
481      the new section should go immediately before it, otherwise it
482      should go at the (current) beginning of OS.
483
484      The function returns the new section on success, otherwise it
485      returns null.  */
486   asection *(*add_stub_section) (const char *, asection *, asection *);
487 };
488
489 /* Get the MIPS ELF linker hash table from a link_info structure.  */
490
491 #define mips_elf_hash_table(p) \
492   (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
493   == MIPS_ELF_DATA ? ((struct mips_elf_link_hash_table *) ((p)->hash)) : NULL)
494
495 /* A structure used to communicate with htab_traverse callbacks.  */
496 struct mips_htab_traverse_info
497 {
498   /* The usual link-wide information.  */
499   struct bfd_link_info *info;
500   bfd *output_bfd;
501
502   /* Starts off FALSE and is set to TRUE if the link should be aborted.  */
503   bfd_boolean error;
504 };
505
506 /* MIPS ELF private object data.  */
507
508 struct mips_elf_obj_tdata
509 {
510   /* Generic ELF private object data.  */
511   struct elf_obj_tdata root;
512
513   /* Input BFD providing Tag_GNU_MIPS_ABI_FP attribute for output.  */
514   bfd *abi_fp_bfd;
515
516   /* The GOT requirements of input bfds.  */
517   struct mips_got_info *got;
518 };
519
520 /* Get MIPS ELF private object data from BFD's tdata.  */
521
522 #define mips_elf_tdata(bfd) \
523   ((struct mips_elf_obj_tdata *) (bfd)->tdata.any)
524
525 #define TLS_RELOC_P(r_type) \
526   (r_type == R_MIPS_TLS_DTPMOD32                \
527    || r_type == R_MIPS_TLS_DTPMOD64             \
528    || r_type == R_MIPS_TLS_DTPREL32             \
529    || r_type == R_MIPS_TLS_DTPREL64             \
530    || r_type == R_MIPS_TLS_GD                   \
531    || r_type == R_MIPS_TLS_LDM                  \
532    || r_type == R_MIPS_TLS_DTPREL_HI16          \
533    || r_type == R_MIPS_TLS_DTPREL_LO16          \
534    || r_type == R_MIPS_TLS_GOTTPREL             \
535    || r_type == R_MIPS_TLS_TPREL32              \
536    || r_type == R_MIPS_TLS_TPREL64              \
537    || r_type == R_MIPS_TLS_TPREL_HI16           \
538    || r_type == R_MIPS_TLS_TPREL_LO16           \
539    || r_type == R_MIPS16_TLS_GD                 \
540    || r_type == R_MIPS16_TLS_LDM                \
541    || r_type == R_MIPS16_TLS_DTPREL_HI16        \
542    || r_type == R_MIPS16_TLS_DTPREL_LO16        \
543    || r_type == R_MIPS16_TLS_GOTTPREL           \
544    || r_type == R_MIPS16_TLS_TPREL_HI16         \
545    || r_type == R_MIPS16_TLS_TPREL_LO16         \
546    || r_type == R_MICROMIPS_TLS_GD              \
547    || r_type == R_MICROMIPS_TLS_LDM             \
548    || r_type == R_MICROMIPS_TLS_DTPREL_HI16     \
549    || r_type == R_MICROMIPS_TLS_DTPREL_LO16     \
550    || r_type == R_MICROMIPS_TLS_GOTTPREL        \
551    || r_type == R_MICROMIPS_TLS_TPREL_HI16      \
552    || r_type == R_MICROMIPS_TLS_TPREL_LO16)
553
554 /* Structure used to pass information to mips_elf_output_extsym.  */
555
556 struct extsym_info
557 {
558   bfd *abfd;
559   struct bfd_link_info *info;
560   struct ecoff_debug_info *debug;
561   const struct ecoff_debug_swap *swap;
562   bfd_boolean failed;
563 };
564
565 /* The names of the runtime procedure table symbols used on IRIX5.  */
566
567 static const char * const mips_elf_dynsym_rtproc_names[] =
568 {
569   "_procedure_table",
570   "_procedure_string_table",
571   "_procedure_table_size",
572   NULL
573 };
574
575 /* These structures are used to generate the .compact_rel section on
576    IRIX5.  */
577
578 typedef struct
579 {
580   unsigned long id1;            /* Always one?  */
581   unsigned long num;            /* Number of compact relocation entries.  */
582   unsigned long id2;            /* Always two?  */
583   unsigned long offset;         /* The file offset of the first relocation.  */
584   unsigned long reserved0;      /* Zero?  */
585   unsigned long reserved1;      /* Zero?  */
586 } Elf32_compact_rel;
587
588 typedef struct
589 {
590   bfd_byte id1[4];
591   bfd_byte num[4];
592   bfd_byte id2[4];
593   bfd_byte offset[4];
594   bfd_byte reserved0[4];
595   bfd_byte reserved1[4];
596 } Elf32_External_compact_rel;
597
598 typedef struct
599 {
600   unsigned int ctype : 1;       /* 1: long 0: short format. See below.  */
601   unsigned int rtype : 4;       /* Relocation types. See below.  */
602   unsigned int dist2to : 8;
603   unsigned int relvaddr : 19;   /* (VADDR - vaddr of the previous entry)/ 4 */
604   unsigned long konst;          /* KONST field. See below.  */
605   unsigned long vaddr;          /* VADDR to be relocated.  */
606 } Elf32_crinfo;
607
608 typedef struct
609 {
610   unsigned int ctype : 1;       /* 1: long 0: short format. See below.  */
611   unsigned int rtype : 4;       /* Relocation types. See below.  */
612   unsigned int dist2to : 8;
613   unsigned int relvaddr : 19;   /* (VADDR - vaddr of the previous entry)/ 4 */
614   unsigned long konst;          /* KONST field. See below.  */
615 } Elf32_crinfo2;
616
617 typedef struct
618 {
619   bfd_byte info[4];
620   bfd_byte konst[4];
621   bfd_byte vaddr[4];
622 } Elf32_External_crinfo;
623
624 typedef struct
625 {
626   bfd_byte info[4];
627   bfd_byte konst[4];
628 } Elf32_External_crinfo2;
629
630 /* These are the constants used to swap the bitfields in a crinfo.  */
631
632 #define CRINFO_CTYPE (0x1)
633 #define CRINFO_CTYPE_SH (31)
634 #define CRINFO_RTYPE (0xf)
635 #define CRINFO_RTYPE_SH (27)
636 #define CRINFO_DIST2TO (0xff)
637 #define CRINFO_DIST2TO_SH (19)
638 #define CRINFO_RELVADDR (0x7ffff)
639 #define CRINFO_RELVADDR_SH (0)
640
641 /* A compact relocation info has long (3 words) or short (2 words)
642    formats.  A short format doesn't have VADDR field and relvaddr
643    fields contains ((VADDR - vaddr of the previous entry) >> 2).  */
644 #define CRF_MIPS_LONG                   1
645 #define CRF_MIPS_SHORT                  0
646
647 /* There are 4 types of compact relocation at least. The value KONST
648    has different meaning for each type:
649
650    (type)               (konst)
651    CT_MIPS_REL32        Address in data
652    CT_MIPS_WORD         Address in word (XXX)
653    CT_MIPS_GPHI_LO      GP - vaddr
654    CT_MIPS_JMPAD        Address to jump
655    */
656
657 #define CRT_MIPS_REL32                  0xa
658 #define CRT_MIPS_WORD                   0xb
659 #define CRT_MIPS_GPHI_LO                0xc
660 #define CRT_MIPS_JMPAD                  0xd
661
662 #define mips_elf_set_cr_format(x,format)        ((x).ctype = (format))
663 #define mips_elf_set_cr_type(x,type)            ((x).rtype = (type))
664 #define mips_elf_set_cr_dist2to(x,v)            ((x).dist2to = (v))
665 #define mips_elf_set_cr_relvaddr(x,d)           ((x).relvaddr = (d)<<2)
666 \f
667 /* The structure of the runtime procedure descriptor created by the
668    loader for use by the static exception system.  */
669
670 typedef struct runtime_pdr {
671         bfd_vma adr;            /* Memory address of start of procedure.  */
672         long    regmask;        /* Save register mask.  */
673         long    regoffset;      /* Save register offset.  */
674         long    fregmask;       /* Save floating point register mask.  */
675         long    fregoffset;     /* Save floating point register offset.  */
676         long    frameoffset;    /* Frame size.  */
677         short   framereg;       /* Frame pointer register.  */
678         short   pcreg;          /* Offset or reg of return pc.  */
679         long    irpss;          /* Index into the runtime string table.  */
680         long    reserved;
681         struct exception_info *exception_info;/* Pointer to exception array.  */
682 } RPDR, *pRPDR;
683 #define cbRPDR sizeof (RPDR)
684 #define rpdNil ((pRPDR) 0)
685 \f
686 static struct mips_got_entry *mips_elf_create_local_got_entry
687   (bfd *, struct bfd_link_info *, bfd *, bfd_vma, unsigned long,
688    struct mips_elf_link_hash_entry *, int);
689 static bfd_boolean mips_elf_sort_hash_table_f
690   (struct mips_elf_link_hash_entry *, void *);
691 static bfd_vma mips_elf_high
692   (bfd_vma);
693 static bfd_boolean mips_elf_create_dynamic_relocation
694   (bfd *, struct bfd_link_info *, const Elf_Internal_Rela *,
695    struct mips_elf_link_hash_entry *, asection *, bfd_vma,
696    bfd_vma *, asection *);
697 static bfd_vma mips_elf_adjust_gp
698   (bfd *, struct mips_got_info *, bfd *);
699 static struct mips_got_info *mips_elf_got_for_ibfd
700   (struct mips_got_info *, bfd *);
701
702 /* This will be used when we sort the dynamic relocation records.  */
703 static bfd *reldyn_sorting_bfd;
704
705 /* True if ABFD is for CPUs with load interlocking that include
706    non-MIPS1 CPUs and R3900.  */
707 #define LOAD_INTERLOCKS_P(abfd) \
708   (   ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) != E_MIPS_ARCH_1) \
709    || ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == E_MIPS_MACH_3900))
710
711 /* True if ABFD is for CPUs that are faster if JAL is converted to BAL.
712    This should be safe for all architectures.  We enable this predicate
713    for RM9000 for now.  */
714 #define JAL_TO_BAL_P(abfd) \
715   ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == E_MIPS_MACH_9000)
716
717 /* True if ABFD is for CPUs that are faster if JALR is converted to BAL.
718    This should be safe for all architectures.  We enable this predicate for
719    all CPUs.  */
720 #define JALR_TO_BAL_P(abfd) 1
721
722 /* True if ABFD is for CPUs that are faster if JR is converted to B.
723    This should be safe for all architectures.  We enable this predicate for
724    all CPUs.  */
725 #define JR_TO_B_P(abfd) 1
726
727 /* True if ABFD is a PIC object.  */
728 #define PIC_OBJECT_P(abfd) \
729   ((elf_elfheader (abfd)->e_flags & EF_MIPS_PIC) != 0)
730
731 /* Nonzero if ABFD is using the N32 ABI.  */
732 #define ABI_N32_P(abfd) \
733   ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI2) != 0)
734
735 /* Nonzero if ABFD is using the N64 ABI.  */
736 #define ABI_64_P(abfd) \
737   (get_elf_backend_data (abfd)->s->elfclass == ELFCLASS64)
738
739 /* Nonzero if ABFD is using NewABI conventions.  */
740 #define NEWABI_P(abfd) (ABI_N32_P (abfd) || ABI_64_P (abfd))
741
742 /* The IRIX compatibility level we are striving for.  */
743 #define IRIX_COMPAT(abfd) \
744   (get_elf_backend_data (abfd)->elf_backend_mips_irix_compat (abfd))
745
746 /* Whether we are trying to be compatible with IRIX at all.  */
747 #define SGI_COMPAT(abfd) \
748   (IRIX_COMPAT (abfd) != ict_none)
749
750 /* The name of the options section.  */
751 #define MIPS_ELF_OPTIONS_SECTION_NAME(abfd) \
752   (NEWABI_P (abfd) ? ".MIPS.options" : ".options")
753
754 /* True if NAME is the recognized name of any SHT_MIPS_OPTIONS section.
755    Some IRIX system files do not use MIPS_ELF_OPTIONS_SECTION_NAME.  */
756 #define MIPS_ELF_OPTIONS_SECTION_NAME_P(NAME) \
757   (strcmp (NAME, ".MIPS.options") == 0 || strcmp (NAME, ".options") == 0)
758
759 /* Whether the section is readonly.  */
760 #define MIPS_ELF_READONLY_SECTION(sec) \
761   ((sec->flags & (SEC_ALLOC | SEC_LOAD | SEC_READONLY))         \
762    == (SEC_ALLOC | SEC_LOAD | SEC_READONLY))
763
764 /* The name of the stub section.  */
765 #define MIPS_ELF_STUB_SECTION_NAME(abfd) ".MIPS.stubs"
766
767 /* The size of an external REL relocation.  */
768 #define MIPS_ELF_REL_SIZE(abfd) \
769   (get_elf_backend_data (abfd)->s->sizeof_rel)
770
771 /* The size of an external RELA relocation.  */
772 #define MIPS_ELF_RELA_SIZE(abfd) \
773   (get_elf_backend_data (abfd)->s->sizeof_rela)
774
775 /* The size of an external dynamic table entry.  */
776 #define MIPS_ELF_DYN_SIZE(abfd) \
777   (get_elf_backend_data (abfd)->s->sizeof_dyn)
778
779 /* The size of a GOT entry.  */
780 #define MIPS_ELF_GOT_SIZE(abfd) \
781   (get_elf_backend_data (abfd)->s->arch_size / 8)
782
783 /* The size of the .rld_map section. */
784 #define MIPS_ELF_RLD_MAP_SIZE(abfd) \
785   (get_elf_backend_data (abfd)->s->arch_size / 8)
786
787 /* The size of a symbol-table entry.  */
788 #define MIPS_ELF_SYM_SIZE(abfd) \
789   (get_elf_backend_data (abfd)->s->sizeof_sym)
790
791 /* The default alignment for sections, as a power of two.  */
792 #define MIPS_ELF_LOG_FILE_ALIGN(abfd)                           \
793   (get_elf_backend_data (abfd)->s->log_file_align)
794
795 /* Get word-sized data.  */
796 #define MIPS_ELF_GET_WORD(abfd, ptr) \
797   (ABI_64_P (abfd) ? bfd_get_64 (abfd, ptr) : bfd_get_32 (abfd, ptr))
798
799 /* Put out word-sized data.  */
800 #define MIPS_ELF_PUT_WORD(abfd, val, ptr)       \
801   (ABI_64_P (abfd)                              \
802    ? bfd_put_64 (abfd, val, ptr)                \
803    : bfd_put_32 (abfd, val, ptr))
804
805 /* The opcode for word-sized loads (LW or LD).  */
806 #define MIPS_ELF_LOAD_WORD(abfd) \
807   (ABI_64_P (abfd) ? 0xdc000000 : 0x8c000000)
808
809 /* Add a dynamic symbol table-entry.  */
810 #define MIPS_ELF_ADD_DYNAMIC_ENTRY(info, tag, val)      \
811   _bfd_elf_add_dynamic_entry (info, tag, val)
812
813 #define MIPS_ELF_RTYPE_TO_HOWTO(abfd, rtype, rela)                      \
814   (get_elf_backend_data (abfd)->elf_backend_mips_rtype_to_howto (rtype, rela))
815
816 /* The name of the dynamic relocation section.  */
817 #define MIPS_ELF_REL_DYN_NAME(INFO) \
818   (mips_elf_hash_table (INFO)->is_vxworks ? ".rela.dyn" : ".rel.dyn")
819
820 /* In case we're on a 32-bit machine, construct a 64-bit "-1" value
821    from smaller values.  Start with zero, widen, *then* decrement.  */
822 #define MINUS_ONE       (((bfd_vma)0) - 1)
823 #define MINUS_TWO       (((bfd_vma)0) - 2)
824
825 /* The value to write into got[1] for SVR4 targets, to identify it is
826    a GNU object.  The dynamic linker can then use got[1] to store the
827    module pointer.  */
828 #define MIPS_ELF_GNU_GOT1_MASK(abfd) \
829   ((bfd_vma) 1 << (ABI_64_P (abfd) ? 63 : 31))
830
831 /* The offset of $gp from the beginning of the .got section.  */
832 #define ELF_MIPS_GP_OFFSET(INFO) \
833   (mips_elf_hash_table (INFO)->is_vxworks ? 0x0 : 0x7ff0)
834
835 /* The maximum size of the GOT for it to be addressable using 16-bit
836    offsets from $gp.  */
837 #define MIPS_ELF_GOT_MAX_SIZE(INFO) (ELF_MIPS_GP_OFFSET (INFO) + 0x7fff)
838
839 /* Instructions which appear in a stub.  */
840 #define STUB_LW(abfd)                                                   \
841   ((ABI_64_P (abfd)                                                     \
842     ? 0xdf998010                                /* ld t9,0x8010(gp) */  \
843     : 0x8f998010))                              /* lw t9,0x8010(gp) */
844 #define STUB_MOVE(abfd)                                                 \
845    ((ABI_64_P (abfd)                                                    \
846      ? 0x03e0782d                               /* daddu t7,ra */       \
847      : 0x03e07821))                             /* addu t7,ra */
848 #define STUB_LUI(VAL) (0x3c180000 + (VAL))      /* lui t8,VAL */
849 #define STUB_JALR 0x0320f809                    /* jalr t9,ra */
850 #define STUB_ORI(VAL) (0x37180000 + (VAL))      /* ori t8,t8,VAL */
851 #define STUB_LI16U(VAL) (0x34180000 + (VAL))    /* ori t8,zero,VAL unsigned */
852 #define STUB_LI16S(abfd, VAL)                                           \
853    ((ABI_64_P (abfd)                                                    \
854     ? (0x64180000 + (VAL))      /* daddiu t8,zero,VAL sign extended */  \
855     : (0x24180000 + (VAL))))    /* addiu t8,zero,VAL sign extended */
856
857 #define MIPS_FUNCTION_STUB_NORMAL_SIZE 16
858 #define MIPS_FUNCTION_STUB_BIG_SIZE 20
859
860 /* The name of the dynamic interpreter.  This is put in the .interp
861    section.  */
862
863 #define ELF_DYNAMIC_INTERPRETER(abfd)           \
864    (ABI_N32_P (abfd) ? "/usr/lib32/libc.so.1"   \
865     : ABI_64_P (abfd) ? "/usr/lib64/libc.so.1"  \
866     : "/usr/lib/libc.so.1")
867
868 #ifdef BFD64
869 #define MNAME(bfd,pre,pos) \
870   (ABI_64_P (bfd) ? CONCAT4 (pre,64,_,pos) : CONCAT4 (pre,32,_,pos))
871 #define ELF_R_SYM(bfd, i)                                       \
872   (ABI_64_P (bfd) ? ELF64_R_SYM (i) : ELF32_R_SYM (i))
873 #define ELF_R_TYPE(bfd, i)                                      \
874   (ABI_64_P (bfd) ? ELF64_MIPS_R_TYPE (i) : ELF32_R_TYPE (i))
875 #define ELF_R_INFO(bfd, s, t)                                   \
876   (ABI_64_P (bfd) ? ELF64_R_INFO (s, t) : ELF32_R_INFO (s, t))
877 #else
878 #define MNAME(bfd,pre,pos) CONCAT4 (pre,32,_,pos)
879 #define ELF_R_SYM(bfd, i)                                       \
880   (ELF32_R_SYM (i))
881 #define ELF_R_TYPE(bfd, i)                                      \
882   (ELF32_R_TYPE (i))
883 #define ELF_R_INFO(bfd, s, t)                                   \
884   (ELF32_R_INFO (s, t))
885 #endif
886 \f
887   /* The mips16 compiler uses a couple of special sections to handle
888      floating point arguments.
889
890      Section names that look like .mips16.fn.FNNAME contain stubs that
891      copy floating point arguments from the fp regs to the gp regs and
892      then jump to FNNAME.  If any 32 bit function calls FNNAME, the
893      call should be redirected to the stub instead.  If no 32 bit
894      function calls FNNAME, the stub should be discarded.  We need to
895      consider any reference to the function, not just a call, because
896      if the address of the function is taken we will need the stub,
897      since the address might be passed to a 32 bit function.
898
899      Section names that look like .mips16.call.FNNAME contain stubs
900      that copy floating point arguments from the gp regs to the fp
901      regs and then jump to FNNAME.  If FNNAME is a 32 bit function,
902      then any 16 bit function that calls FNNAME should be redirected
903      to the stub instead.  If FNNAME is not a 32 bit function, the
904      stub should be discarded.
905
906      .mips16.call.fp.FNNAME sections are similar, but contain stubs
907      which call FNNAME and then copy the return value from the fp regs
908      to the gp regs.  These stubs store the return value in $18 while
909      calling FNNAME; any function which might call one of these stubs
910      must arrange to save $18 around the call.  (This case is not
911      needed for 32 bit functions that call 16 bit functions, because
912      16 bit functions always return floating point values in both
913      $f0/$f1 and $2/$3.)
914
915      Note that in all cases FNNAME might be defined statically.
916      Therefore, FNNAME is not used literally.  Instead, the relocation
917      information will indicate which symbol the section is for.
918
919      We record any stubs that we find in the symbol table.  */
920
921 #define FN_STUB ".mips16.fn."
922 #define CALL_STUB ".mips16.call."
923 #define CALL_FP_STUB ".mips16.call.fp."
924
925 #define FN_STUB_P(name) CONST_STRNEQ (name, FN_STUB)
926 #define CALL_STUB_P(name) CONST_STRNEQ (name, CALL_STUB)
927 #define CALL_FP_STUB_P(name) CONST_STRNEQ (name, CALL_FP_STUB)
928 \f
929 /* The format of the first PLT entry in an O32 executable.  */
930 static const bfd_vma mips_o32_exec_plt0_entry[] =
931 {
932   0x3c1c0000,   /* lui $28, %hi(&GOTPLT[0])                             */
933   0x8f990000,   /* lw $25, %lo(&GOTPLT[0])($28)                         */
934   0x279c0000,   /* addiu $28, $28, %lo(&GOTPLT[0])                      */
935   0x031cc023,   /* subu $24, $24, $28                                   */
936   0x03e07821,   /* move $15, $31        # 32-bit move (addu)            */
937   0x0018c082,   /* srl $24, $24, 2                                      */
938   0x0320f809,   /* jalr $25                                             */
939   0x2718fffe    /* subu $24, $24, 2                                     */
940 };
941
942 /* The format of the first PLT entry in an N32 executable.  Different
943    because gp ($28) is not available; we use t2 ($14) instead.  */
944 static const bfd_vma mips_n32_exec_plt0_entry[] =
945 {
946   0x3c0e0000,   /* lui $14, %hi(&GOTPLT[0])                             */
947   0x8dd90000,   /* lw $25, %lo(&GOTPLT[0])($14)                         */
948   0x25ce0000,   /* addiu $14, $14, %lo(&GOTPLT[0])                      */
949   0x030ec023,   /* subu $24, $24, $14                                   */
950   0x03e07821,   /* move $15, $31        # 32-bit move (addu)            */
951   0x0018c082,   /* srl $24, $24, 2                                      */
952   0x0320f809,   /* jalr $25                                             */
953   0x2718fffe    /* subu $24, $24, 2                                     */
954 };
955
956 /* The format of the first PLT entry in an N64 executable.  Different
957    from N32 because of the increased size of GOT entries.  */
958 static const bfd_vma mips_n64_exec_plt0_entry[] =
959 {
960   0x3c0e0000,   /* lui $14, %hi(&GOTPLT[0])                             */
961   0xddd90000,   /* ld $25, %lo(&GOTPLT[0])($14)                         */
962   0x25ce0000,   /* addiu $14, $14, %lo(&GOTPLT[0])                      */
963   0x030ec023,   /* subu $24, $24, $14                                   */
964   0x03e0782d,   /* move $15, $31        # 64-bit move (daddu)           */
965   0x0018c0c2,   /* srl $24, $24, 3                                      */
966   0x0320f809,   /* jalr $25                                             */
967   0x2718fffe    /* subu $24, $24, 2                                     */
968 };
969
970 /* The format of subsequent PLT entries.  */
971 static const bfd_vma mips_exec_plt_entry[] =
972 {
973   0x3c0f0000,   /* lui $15, %hi(.got.plt entry)                 */
974   0x01f90000,   /* l[wd] $25, %lo(.got.plt entry)($15)          */
975   0x25f80000,   /* addiu $24, $15, %lo(.got.plt entry)          */
976   0x03200008    /* jr $25                                       */
977 };
978
979 /* The format of the first PLT entry in a VxWorks executable.  */
980 static const bfd_vma mips_vxworks_exec_plt0_entry[] =
981 {
982   0x3c190000,   /* lui t9, %hi(_GLOBAL_OFFSET_TABLE_)           */
983   0x27390000,   /* addiu t9, t9, %lo(_GLOBAL_OFFSET_TABLE_)     */
984   0x8f390008,   /* lw t9, 8(t9)                                 */
985   0x00000000,   /* nop                                          */
986   0x03200008,   /* jr t9                                        */
987   0x00000000    /* nop                                          */
988 };
989
990 /* The format of subsequent PLT entries.  */
991 static const bfd_vma mips_vxworks_exec_plt_entry[] =
992 {
993   0x10000000,   /* b .PLT_resolver                      */
994   0x24180000,   /* li t8, <pltindex>                    */
995   0x3c190000,   /* lui t9, %hi(<.got.plt slot>)         */
996   0x27390000,   /* addiu t9, t9, %lo(<.got.plt slot>)   */
997   0x8f390000,   /* lw t9, 0(t9)                         */
998   0x00000000,   /* nop                                  */
999   0x03200008,   /* jr t9                                */
1000   0x00000000    /* nop                                  */
1001 };
1002
1003 /* The format of the first PLT entry in a VxWorks shared object.  */
1004 static const bfd_vma mips_vxworks_shared_plt0_entry[] =
1005 {
1006   0x8f990008,   /* lw t9, 8(gp)         */
1007   0x00000000,   /* nop                  */
1008   0x03200008,   /* jr t9                */
1009   0x00000000,   /* nop                  */
1010   0x00000000,   /* nop                  */
1011   0x00000000    /* nop                  */
1012 };
1013
1014 /* The format of subsequent PLT entries.  */
1015 static const bfd_vma mips_vxworks_shared_plt_entry[] =
1016 {
1017   0x10000000,   /* b .PLT_resolver      */
1018   0x24180000    /* li t8, <pltindex>    */
1019 };
1020 \f
1021 /* microMIPS 32-bit opcode helper installer.  */
1022
1023 static void
1024 bfd_put_micromips_32 (const bfd *abfd, bfd_vma opcode, bfd_byte *ptr)
1025 {
1026   bfd_put_16 (abfd, (opcode >> 16) & 0xffff, ptr);
1027   bfd_put_16 (abfd,  opcode        & 0xffff, ptr + 2);
1028 }
1029
1030 /* microMIPS 32-bit opcode helper retriever.  */
1031
1032 static bfd_vma
1033 bfd_get_micromips_32 (const bfd *abfd, const bfd_byte *ptr)
1034 {
1035   return (bfd_get_16 (abfd, ptr) << 16) | bfd_get_16 (abfd, ptr + 2);
1036 }
1037 \f
1038 /* Look up an entry in a MIPS ELF linker hash table.  */
1039
1040 #define mips_elf_link_hash_lookup(table, string, create, copy, follow)  \
1041   ((struct mips_elf_link_hash_entry *)                                  \
1042    elf_link_hash_lookup (&(table)->root, (string), (create),            \
1043                          (copy), (follow)))
1044
1045 /* Traverse a MIPS ELF linker hash table.  */
1046
1047 #define mips_elf_link_hash_traverse(table, func, info)                  \
1048   (elf_link_hash_traverse                                               \
1049    (&(table)->root,                                                     \
1050     (bfd_boolean (*) (struct elf_link_hash_entry *, void *)) (func),    \
1051     (info)))
1052
1053 /* Find the base offsets for thread-local storage in this object,
1054    for GD/LD and IE/LE respectively.  */
1055
1056 #define TP_OFFSET 0x7000
1057 #define DTP_OFFSET 0x8000
1058
1059 static bfd_vma
1060 dtprel_base (struct bfd_link_info *info)
1061 {
1062   /* If tls_sec is NULL, we should have signalled an error already.  */
1063   if (elf_hash_table (info)->tls_sec == NULL)
1064     return 0;
1065   return elf_hash_table (info)->tls_sec->vma + DTP_OFFSET;
1066 }
1067
1068 static bfd_vma
1069 tprel_base (struct bfd_link_info *info)
1070 {
1071   /* If tls_sec is NULL, we should have signalled an error already.  */
1072   if (elf_hash_table (info)->tls_sec == NULL)
1073     return 0;
1074   return elf_hash_table (info)->tls_sec->vma + TP_OFFSET;
1075 }
1076
1077 /* Create an entry in a MIPS ELF linker hash table.  */
1078
1079 static struct bfd_hash_entry *
1080 mips_elf_link_hash_newfunc (struct bfd_hash_entry *entry,
1081                             struct bfd_hash_table *table, const char *string)
1082 {
1083   struct mips_elf_link_hash_entry *ret =
1084     (struct mips_elf_link_hash_entry *) entry;
1085
1086   /* Allocate the structure if it has not already been allocated by a
1087      subclass.  */
1088   if (ret == NULL)
1089     ret = bfd_hash_allocate (table, sizeof (struct mips_elf_link_hash_entry));
1090   if (ret == NULL)
1091     return (struct bfd_hash_entry *) ret;
1092
1093   /* Call the allocation method of the superclass.  */
1094   ret = ((struct mips_elf_link_hash_entry *)
1095          _bfd_elf_link_hash_newfunc ((struct bfd_hash_entry *) ret,
1096                                      table, string));
1097   if (ret != NULL)
1098     {
1099       /* Set local fields.  */
1100       memset (&ret->esym, 0, sizeof (EXTR));
1101       /* We use -2 as a marker to indicate that the information has
1102          not been set.  -1 means there is no associated ifd.  */
1103       ret->esym.ifd = -2;
1104       ret->la25_stub = 0;
1105       ret->possibly_dynamic_relocs = 0;
1106       ret->fn_stub = NULL;
1107       ret->call_stub = NULL;
1108       ret->call_fp_stub = NULL;
1109       ret->tls_ie_type = GOT_NORMAL;
1110       ret->tls_gd_type = GOT_NORMAL;
1111       ret->global_got_area = GGA_NONE;
1112       ret->got_only_for_calls = TRUE;
1113       ret->readonly_reloc = FALSE;
1114       ret->has_static_relocs = FALSE;
1115       ret->no_fn_stub = FALSE;
1116       ret->need_fn_stub = FALSE;
1117       ret->has_nonpic_branches = FALSE;
1118       ret->needs_lazy_stub = FALSE;
1119     }
1120
1121   return (struct bfd_hash_entry *) ret;
1122 }
1123
1124 /* Allocate MIPS ELF private object data.  */
1125
1126 bfd_boolean
1127 _bfd_mips_elf_mkobject (bfd *abfd)
1128 {
1129   return bfd_elf_allocate_object (abfd, sizeof (struct mips_elf_obj_tdata),
1130                                   MIPS_ELF_DATA);
1131 }
1132
1133 bfd_boolean
1134 _bfd_mips_elf_new_section_hook (bfd *abfd, asection *sec)
1135 {
1136   if (!sec->used_by_bfd)
1137     {
1138       struct _mips_elf_section_data *sdata;
1139       bfd_size_type amt = sizeof (*sdata);
1140
1141       sdata = bfd_zalloc (abfd, amt);
1142       if (sdata == NULL)
1143         return FALSE;
1144       sec->used_by_bfd = sdata;
1145     }
1146
1147   return _bfd_elf_new_section_hook (abfd, sec);
1148 }
1149 \f
1150 /* Read ECOFF debugging information from a .mdebug section into a
1151    ecoff_debug_info structure.  */
1152
1153 bfd_boolean
1154 _bfd_mips_elf_read_ecoff_info (bfd *abfd, asection *section,
1155                                struct ecoff_debug_info *debug)
1156 {
1157   HDRR *symhdr;
1158   const struct ecoff_debug_swap *swap;
1159   char *ext_hdr;
1160
1161   swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
1162   memset (debug, 0, sizeof (*debug));
1163
1164   ext_hdr = bfd_malloc (swap->external_hdr_size);
1165   if (ext_hdr == NULL && swap->external_hdr_size != 0)
1166     goto error_return;
1167
1168   if (! bfd_get_section_contents (abfd, section, ext_hdr, 0,
1169                                   swap->external_hdr_size))
1170     goto error_return;
1171
1172   symhdr = &debug->symbolic_header;
1173   (*swap->swap_hdr_in) (abfd, ext_hdr, symhdr);
1174
1175   /* The symbolic header contains absolute file offsets and sizes to
1176      read.  */
1177 #define READ(ptr, offset, count, size, type)                            \
1178   if (symhdr->count == 0)                                               \
1179     debug->ptr = NULL;                                                  \
1180   else                                                                  \
1181     {                                                                   \
1182       bfd_size_type amt = (bfd_size_type) size * symhdr->count;         \
1183       debug->ptr = bfd_malloc (amt);                                    \
1184       if (debug->ptr == NULL)                                           \
1185         goto error_return;                                              \
1186       if (bfd_seek (abfd, symhdr->offset, SEEK_SET) != 0                \
1187           || bfd_bread (debug->ptr, amt, abfd) != amt)                  \
1188         goto error_return;                                              \
1189     }
1190
1191   READ (line, cbLineOffset, cbLine, sizeof (unsigned char), unsigned char *);
1192   READ (external_dnr, cbDnOffset, idnMax, swap->external_dnr_size, void *);
1193   READ (external_pdr, cbPdOffset, ipdMax, swap->external_pdr_size, void *);
1194   READ (external_sym, cbSymOffset, isymMax, swap->external_sym_size, void *);
1195   READ (external_opt, cbOptOffset, ioptMax, swap->external_opt_size, void *);
1196   READ (external_aux, cbAuxOffset, iauxMax, sizeof (union aux_ext),
1197         union aux_ext *);
1198   READ (ss, cbSsOffset, issMax, sizeof (char), char *);
1199   READ (ssext, cbSsExtOffset, issExtMax, sizeof (char), char *);
1200   READ (external_fdr, cbFdOffset, ifdMax, swap->external_fdr_size, void *);
1201   READ (external_rfd, cbRfdOffset, crfd, swap->external_rfd_size, void *);
1202   READ (external_ext, cbExtOffset, iextMax, swap->external_ext_size, void *);
1203 #undef READ
1204
1205   debug->fdr = NULL;
1206
1207   return TRUE;
1208
1209  error_return:
1210   if (ext_hdr != NULL)
1211     free (ext_hdr);
1212   if (debug->line != NULL)
1213     free (debug->line);
1214   if (debug->external_dnr != NULL)
1215     free (debug->external_dnr);
1216   if (debug->external_pdr != NULL)
1217     free (debug->external_pdr);
1218   if (debug->external_sym != NULL)
1219     free (debug->external_sym);
1220   if (debug->external_opt != NULL)
1221     free (debug->external_opt);
1222   if (debug->external_aux != NULL)
1223     free (debug->external_aux);
1224   if (debug->ss != NULL)
1225     free (debug->ss);
1226   if (debug->ssext != NULL)
1227     free (debug->ssext);
1228   if (debug->external_fdr != NULL)
1229     free (debug->external_fdr);
1230   if (debug->external_rfd != NULL)
1231     free (debug->external_rfd);
1232   if (debug->external_ext != NULL)
1233     free (debug->external_ext);
1234   return FALSE;
1235 }
1236 \f
1237 /* Swap RPDR (runtime procedure table entry) for output.  */
1238
1239 static void
1240 ecoff_swap_rpdr_out (bfd *abfd, const RPDR *in, struct rpdr_ext *ex)
1241 {
1242   H_PUT_S32 (abfd, in->adr, ex->p_adr);
1243   H_PUT_32 (abfd, in->regmask, ex->p_regmask);
1244   H_PUT_32 (abfd, in->regoffset, ex->p_regoffset);
1245   H_PUT_32 (abfd, in->fregmask, ex->p_fregmask);
1246   H_PUT_32 (abfd, in->fregoffset, ex->p_fregoffset);
1247   H_PUT_32 (abfd, in->frameoffset, ex->p_frameoffset);
1248
1249   H_PUT_16 (abfd, in->framereg, ex->p_framereg);
1250   H_PUT_16 (abfd, in->pcreg, ex->p_pcreg);
1251
1252   H_PUT_32 (abfd, in->irpss, ex->p_irpss);
1253 }
1254
1255 /* Create a runtime procedure table from the .mdebug section.  */
1256
1257 static bfd_boolean
1258 mips_elf_create_procedure_table (void *handle, bfd *abfd,
1259                                  struct bfd_link_info *info, asection *s,
1260                                  struct ecoff_debug_info *debug)
1261 {
1262   const struct ecoff_debug_swap *swap;
1263   HDRR *hdr = &debug->symbolic_header;
1264   RPDR *rpdr, *rp;
1265   struct rpdr_ext *erp;
1266   void *rtproc;
1267   struct pdr_ext *epdr;
1268   struct sym_ext *esym;
1269   char *ss, **sv;
1270   char *str;
1271   bfd_size_type size;
1272   bfd_size_type count;
1273   unsigned long sindex;
1274   unsigned long i;
1275   PDR pdr;
1276   SYMR sym;
1277   const char *no_name_func = _("static procedure (no name)");
1278
1279   epdr = NULL;
1280   rpdr = NULL;
1281   esym = NULL;
1282   ss = NULL;
1283   sv = NULL;
1284
1285   swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
1286
1287   sindex = strlen (no_name_func) + 1;
1288   count = hdr->ipdMax;
1289   if (count > 0)
1290     {
1291       size = swap->external_pdr_size;
1292
1293       epdr = bfd_malloc (size * count);
1294       if (epdr == NULL)
1295         goto error_return;
1296
1297       if (! _bfd_ecoff_get_accumulated_pdr (handle, (bfd_byte *) epdr))
1298         goto error_return;
1299
1300       size = sizeof (RPDR);
1301       rp = rpdr = bfd_malloc (size * count);
1302       if (rpdr == NULL)
1303         goto error_return;
1304
1305       size = sizeof (char *);
1306       sv = bfd_malloc (size * count);
1307       if (sv == NULL)
1308         goto error_return;
1309
1310       count = hdr->isymMax;
1311       size = swap->external_sym_size;
1312       esym = bfd_malloc (size * count);
1313       if (esym == NULL)
1314         goto error_return;
1315
1316       if (! _bfd_ecoff_get_accumulated_sym (handle, (bfd_byte *) esym))
1317         goto error_return;
1318
1319       count = hdr->issMax;
1320       ss = bfd_malloc (count);
1321       if (ss == NULL)
1322         goto error_return;
1323       if (! _bfd_ecoff_get_accumulated_ss (handle, (bfd_byte *) ss))
1324         goto error_return;
1325
1326       count = hdr->ipdMax;
1327       for (i = 0; i < (unsigned long) count; i++, rp++)
1328         {
1329           (*swap->swap_pdr_in) (abfd, epdr + i, &pdr);
1330           (*swap->swap_sym_in) (abfd, &esym[pdr.isym], &sym);
1331           rp->adr = sym.value;
1332           rp->regmask = pdr.regmask;
1333           rp->regoffset = pdr.regoffset;
1334           rp->fregmask = pdr.fregmask;
1335           rp->fregoffset = pdr.fregoffset;
1336           rp->frameoffset = pdr.frameoffset;
1337           rp->framereg = pdr.framereg;
1338           rp->pcreg = pdr.pcreg;
1339           rp->irpss = sindex;
1340           sv[i] = ss + sym.iss;
1341           sindex += strlen (sv[i]) + 1;
1342         }
1343     }
1344
1345   size = sizeof (struct rpdr_ext) * (count + 2) + sindex;
1346   size = BFD_ALIGN (size, 16);
1347   rtproc = bfd_alloc (abfd, size);
1348   if (rtproc == NULL)
1349     {
1350       mips_elf_hash_table (info)->procedure_count = 0;
1351       goto error_return;
1352     }
1353
1354   mips_elf_hash_table (info)->procedure_count = count + 2;
1355
1356   erp = rtproc;
1357   memset (erp, 0, sizeof (struct rpdr_ext));
1358   erp++;
1359   str = (char *) rtproc + sizeof (struct rpdr_ext) * (count + 2);
1360   strcpy (str, no_name_func);
1361   str += strlen (no_name_func) + 1;
1362   for (i = 0; i < count; i++)
1363     {
1364       ecoff_swap_rpdr_out (abfd, rpdr + i, erp + i);
1365       strcpy (str, sv[i]);
1366       str += strlen (sv[i]) + 1;
1367     }
1368   H_PUT_S32 (abfd, -1, (erp + count)->p_adr);
1369
1370   /* Set the size and contents of .rtproc section.  */
1371   s->size = size;
1372   s->contents = rtproc;
1373
1374   /* Skip this section later on (I don't think this currently
1375      matters, but someday it might).  */
1376   s->map_head.link_order = NULL;
1377
1378   if (epdr != NULL)
1379     free (epdr);
1380   if (rpdr != NULL)
1381     free (rpdr);
1382   if (esym != NULL)
1383     free (esym);
1384   if (ss != NULL)
1385     free (ss);
1386   if (sv != NULL)
1387     free (sv);
1388
1389   return TRUE;
1390
1391  error_return:
1392   if (epdr != NULL)
1393     free (epdr);
1394   if (rpdr != NULL)
1395     free (rpdr);
1396   if (esym != NULL)
1397     free (esym);
1398   if (ss != NULL)
1399     free (ss);
1400   if (sv != NULL)
1401     free (sv);
1402   return FALSE;
1403 }
1404 \f
1405 /* We're going to create a stub for H.  Create a symbol for the stub's
1406    value and size, to help make the disassembly easier to read.  */
1407
1408 static bfd_boolean
1409 mips_elf_create_stub_symbol (struct bfd_link_info *info,
1410                              struct mips_elf_link_hash_entry *h,
1411                              const char *prefix, asection *s, bfd_vma value,
1412                              bfd_vma size)
1413 {
1414   struct bfd_link_hash_entry *bh;
1415   struct elf_link_hash_entry *elfh;
1416   const char *name;
1417
1418   if (ELF_ST_IS_MICROMIPS (h->root.other))
1419     value |= 1;
1420
1421   /* Create a new symbol.  */
1422   name = ACONCAT ((prefix, h->root.root.root.string, NULL));
1423   bh = NULL;
1424   if (!_bfd_generic_link_add_one_symbol (info, s->owner, name,
1425                                          BSF_LOCAL, s, value, NULL,
1426                                          TRUE, FALSE, &bh))
1427     return FALSE;
1428
1429   /* Make it a local function.  */
1430   elfh = (struct elf_link_hash_entry *) bh;
1431   elfh->type = ELF_ST_INFO (STB_LOCAL, STT_FUNC);
1432   elfh->size = size;
1433   elfh->forced_local = 1;
1434   return TRUE;
1435 }
1436
1437 /* We're about to redefine H.  Create a symbol to represent H's
1438    current value and size, to help make the disassembly easier
1439    to read.  */
1440
1441 static bfd_boolean
1442 mips_elf_create_shadow_symbol (struct bfd_link_info *info,
1443                                struct mips_elf_link_hash_entry *h,
1444                                const char *prefix)
1445 {
1446   struct bfd_link_hash_entry *bh;
1447   struct elf_link_hash_entry *elfh;
1448   const char *name;
1449   asection *s;
1450   bfd_vma value;
1451
1452   /* Read the symbol's value.  */
1453   BFD_ASSERT (h->root.root.type == bfd_link_hash_defined
1454               || h->root.root.type == bfd_link_hash_defweak);
1455   s = h->root.root.u.def.section;
1456   value = h->root.root.u.def.value;
1457
1458   /* Create a new symbol.  */
1459   name = ACONCAT ((prefix, h->root.root.root.string, NULL));
1460   bh = NULL;
1461   if (!_bfd_generic_link_add_one_symbol (info, s->owner, name,
1462                                          BSF_LOCAL, s, value, NULL,
1463                                          TRUE, FALSE, &bh))
1464     return FALSE;
1465
1466   /* Make it local and copy the other attributes from H.  */
1467   elfh = (struct elf_link_hash_entry *) bh;
1468   elfh->type = ELF_ST_INFO (STB_LOCAL, ELF_ST_TYPE (h->root.type));
1469   elfh->other = h->root.other;
1470   elfh->size = h->root.size;
1471   elfh->forced_local = 1;
1472   return TRUE;
1473 }
1474
1475 /* Return TRUE if relocations in SECTION can refer directly to a MIPS16
1476    function rather than to a hard-float stub.  */
1477
1478 static bfd_boolean
1479 section_allows_mips16_refs_p (asection *section)
1480 {
1481   const char *name;
1482
1483   name = bfd_get_section_name (section->owner, section);
1484   return (FN_STUB_P (name)
1485           || CALL_STUB_P (name)
1486           || CALL_FP_STUB_P (name)
1487           || strcmp (name, ".pdr") == 0);
1488 }
1489
1490 /* [RELOCS, RELEND) are the relocations against SEC, which is a MIPS16
1491    stub section of some kind.  Return the R_SYMNDX of the target
1492    function, or 0 if we can't decide which function that is.  */
1493
1494 static unsigned long
1495 mips16_stub_symndx (const struct elf_backend_data *bed,
1496                     asection *sec ATTRIBUTE_UNUSED,
1497                     const Elf_Internal_Rela *relocs,
1498                     const Elf_Internal_Rela *relend)
1499 {
1500   int int_rels_per_ext_rel = bed->s->int_rels_per_ext_rel;
1501   const Elf_Internal_Rela *rel;
1502
1503   /* Trust the first R_MIPS_NONE relocation, if any, but not a subsequent
1504      one in a compound relocation.  */
1505   for (rel = relocs; rel < relend; rel += int_rels_per_ext_rel)
1506     if (ELF_R_TYPE (sec->owner, rel->r_info) == R_MIPS_NONE)
1507       return ELF_R_SYM (sec->owner, rel->r_info);
1508
1509   /* Otherwise trust the first relocation, whatever its kind.  This is
1510      the traditional behavior.  */
1511   if (relocs < relend)
1512     return ELF_R_SYM (sec->owner, relocs->r_info);
1513
1514   return 0;
1515 }
1516
1517 /* Check the mips16 stubs for a particular symbol, and see if we can
1518    discard them.  */
1519
1520 static void
1521 mips_elf_check_mips16_stubs (struct bfd_link_info *info,
1522                              struct mips_elf_link_hash_entry *h)
1523 {
1524   /* Dynamic symbols must use the standard call interface, in case other
1525      objects try to call them.  */
1526   if (h->fn_stub != NULL
1527       && h->root.dynindx != -1)
1528     {
1529       mips_elf_create_shadow_symbol (info, h, ".mips16.");
1530       h->need_fn_stub = TRUE;
1531     }
1532
1533   if (h->fn_stub != NULL
1534       && ! h->need_fn_stub)
1535     {
1536       /* We don't need the fn_stub; the only references to this symbol
1537          are 16 bit calls.  Clobber the size to 0 to prevent it from
1538          being included in the link.  */
1539       h->fn_stub->size = 0;
1540       h->fn_stub->flags &= ~SEC_RELOC;
1541       h->fn_stub->reloc_count = 0;
1542       h->fn_stub->flags |= SEC_EXCLUDE;
1543     }
1544
1545   if (h->call_stub != NULL
1546       && ELF_ST_IS_MIPS16 (h->root.other))
1547     {
1548       /* We don't need the call_stub; this is a 16 bit function, so
1549          calls from other 16 bit functions are OK.  Clobber the size
1550          to 0 to prevent it from being included in the link.  */
1551       h->call_stub->size = 0;
1552       h->call_stub->flags &= ~SEC_RELOC;
1553       h->call_stub->reloc_count = 0;
1554       h->call_stub->flags |= SEC_EXCLUDE;
1555     }
1556
1557   if (h->call_fp_stub != NULL
1558       && ELF_ST_IS_MIPS16 (h->root.other))
1559     {
1560       /* We don't need the call_stub; this is a 16 bit function, so
1561          calls from other 16 bit functions are OK.  Clobber the size
1562          to 0 to prevent it from being included in the link.  */
1563       h->call_fp_stub->size = 0;
1564       h->call_fp_stub->flags &= ~SEC_RELOC;
1565       h->call_fp_stub->reloc_count = 0;
1566       h->call_fp_stub->flags |= SEC_EXCLUDE;
1567     }
1568 }
1569
1570 /* Hashtable callbacks for mips_elf_la25_stubs.  */
1571
1572 static hashval_t
1573 mips_elf_la25_stub_hash (const void *entry_)
1574 {
1575   const struct mips_elf_la25_stub *entry;
1576
1577   entry = (struct mips_elf_la25_stub *) entry_;
1578   return entry->h->root.root.u.def.section->id
1579     + entry->h->root.root.u.def.value;
1580 }
1581
1582 static int
1583 mips_elf_la25_stub_eq (const void *entry1_, const void *entry2_)
1584 {
1585   const struct mips_elf_la25_stub *entry1, *entry2;
1586
1587   entry1 = (struct mips_elf_la25_stub *) entry1_;
1588   entry2 = (struct mips_elf_la25_stub *) entry2_;
1589   return ((entry1->h->root.root.u.def.section
1590            == entry2->h->root.root.u.def.section)
1591           && (entry1->h->root.root.u.def.value
1592               == entry2->h->root.root.u.def.value));
1593 }
1594
1595 /* Called by the linker to set up the la25 stub-creation code.  FN is
1596    the linker's implementation of add_stub_function.  Return true on
1597    success.  */
1598
1599 bfd_boolean
1600 _bfd_mips_elf_init_stubs (struct bfd_link_info *info,
1601                           asection *(*fn) (const char *, asection *,
1602                                            asection *))
1603 {
1604   struct mips_elf_link_hash_table *htab;
1605
1606   htab = mips_elf_hash_table (info);
1607   if (htab == NULL)
1608     return FALSE;
1609
1610   htab->add_stub_section = fn;
1611   htab->la25_stubs = htab_try_create (1, mips_elf_la25_stub_hash,
1612                                       mips_elf_la25_stub_eq, NULL);
1613   if (htab->la25_stubs == NULL)
1614     return FALSE;
1615
1616   return TRUE;
1617 }
1618
1619 /* Return true if H is a locally-defined PIC function, in the sense
1620    that it or its fn_stub might need $25 to be valid on entry.
1621    Note that MIPS16 functions set up $gp using PC-relative instructions,
1622    so they themselves never need $25 to be valid.  Only non-MIPS16
1623    entry points are of interest here.  */
1624
1625 static bfd_boolean
1626 mips_elf_local_pic_function_p (struct mips_elf_link_hash_entry *h)
1627 {
1628   return ((h->root.root.type == bfd_link_hash_defined
1629            || h->root.root.type == bfd_link_hash_defweak)
1630           && h->root.def_regular
1631           && !bfd_is_abs_section (h->root.root.u.def.section)
1632           && (!ELF_ST_IS_MIPS16 (h->root.other)
1633               || (h->fn_stub && h->need_fn_stub))
1634           && (PIC_OBJECT_P (h->root.root.u.def.section->owner)
1635               || ELF_ST_IS_MIPS_PIC (h->root.other)));
1636 }
1637
1638 /* Set *SEC to the input section that contains the target of STUB.
1639    Return the offset of the target from the start of that section.  */
1640
1641 static bfd_vma
1642 mips_elf_get_la25_target (struct mips_elf_la25_stub *stub,
1643                           asection **sec)
1644 {
1645   if (ELF_ST_IS_MIPS16 (stub->h->root.other))
1646     {
1647       BFD_ASSERT (stub->h->need_fn_stub);
1648       *sec = stub->h->fn_stub;
1649       return 0;
1650     }
1651   else
1652     {
1653       *sec = stub->h->root.root.u.def.section;
1654       return stub->h->root.root.u.def.value;
1655     }
1656 }
1657
1658 /* STUB describes an la25 stub that we have decided to implement
1659    by inserting an LUI/ADDIU pair before the target function.
1660    Create the section and redirect the function symbol to it.  */
1661
1662 static bfd_boolean
1663 mips_elf_add_la25_intro (struct mips_elf_la25_stub *stub,
1664                          struct bfd_link_info *info)
1665 {
1666   struct mips_elf_link_hash_table *htab;
1667   char *name;
1668   asection *s, *input_section;
1669   unsigned int align;
1670
1671   htab = mips_elf_hash_table (info);
1672   if (htab == NULL)
1673     return FALSE;
1674
1675   /* Create a unique name for the new section.  */
1676   name = bfd_malloc (11 + sizeof (".text.stub."));
1677   if (name == NULL)
1678     return FALSE;
1679   sprintf (name, ".text.stub.%d", (int) htab_elements (htab->la25_stubs));
1680
1681   /* Create the section.  */
1682   mips_elf_get_la25_target (stub, &input_section);
1683   s = htab->add_stub_section (name, input_section,
1684                               input_section->output_section);
1685   if (s == NULL)
1686     return FALSE;
1687
1688   /* Make sure that any padding goes before the stub.  */
1689   align = input_section->alignment_power;
1690   if (!bfd_set_section_alignment (s->owner, s, align))
1691     return FALSE;
1692   if (align > 3)
1693     s->size = (1 << align) - 8;
1694
1695   /* Create a symbol for the stub.  */
1696   mips_elf_create_stub_symbol (info, stub->h, ".pic.", s, s->size, 8);
1697   stub->stub_section = s;
1698   stub->offset = s->size;
1699
1700   /* Allocate room for it.  */
1701   s->size += 8;
1702   return TRUE;
1703 }
1704
1705 /* STUB describes an la25 stub that we have decided to implement
1706    with a separate trampoline.  Allocate room for it and redirect
1707    the function symbol to it.  */
1708
1709 static bfd_boolean
1710 mips_elf_add_la25_trampoline (struct mips_elf_la25_stub *stub,
1711                               struct bfd_link_info *info)
1712 {
1713   struct mips_elf_link_hash_table *htab;
1714   asection *s;
1715
1716   htab = mips_elf_hash_table (info);
1717   if (htab == NULL)
1718     return FALSE;
1719
1720   /* Create a trampoline section, if we haven't already.  */
1721   s = htab->strampoline;
1722   if (s == NULL)
1723     {
1724       asection *input_section = stub->h->root.root.u.def.section;
1725       s = htab->add_stub_section (".text", NULL,
1726                                   input_section->output_section);
1727       if (s == NULL || !bfd_set_section_alignment (s->owner, s, 4))
1728         return FALSE;
1729       htab->strampoline = s;
1730     }
1731
1732   /* Create a symbol for the stub.  */
1733   mips_elf_create_stub_symbol (info, stub->h, ".pic.", s, s->size, 16);
1734   stub->stub_section = s;
1735   stub->offset = s->size;
1736
1737   /* Allocate room for it.  */
1738   s->size += 16;
1739   return TRUE;
1740 }
1741
1742 /* H describes a symbol that needs an la25 stub.  Make sure that an
1743    appropriate stub exists and point H at it.  */
1744
1745 static bfd_boolean
1746 mips_elf_add_la25_stub (struct bfd_link_info *info,
1747                         struct mips_elf_link_hash_entry *h)
1748 {
1749   struct mips_elf_link_hash_table *htab;
1750   struct mips_elf_la25_stub search, *stub;
1751   bfd_boolean use_trampoline_p;
1752   asection *s;
1753   bfd_vma value;
1754   void **slot;
1755
1756   /* Describe the stub we want.  */
1757   search.stub_section = NULL;
1758   search.offset = 0;
1759   search.h = h;
1760
1761   /* See if we've already created an equivalent stub.  */
1762   htab = mips_elf_hash_table (info);
1763   if (htab == NULL)
1764     return FALSE;
1765
1766   slot = htab_find_slot (htab->la25_stubs, &search, INSERT);
1767   if (slot == NULL)
1768     return FALSE;
1769
1770   stub = (struct mips_elf_la25_stub *) *slot;
1771   if (stub != NULL)
1772     {
1773       /* We can reuse the existing stub.  */
1774       h->la25_stub = stub;
1775       return TRUE;
1776     }
1777
1778   /* Create a permanent copy of ENTRY and add it to the hash table.  */
1779   stub = bfd_malloc (sizeof (search));
1780   if (stub == NULL)
1781     return FALSE;
1782   *stub = search;
1783   *slot = stub;
1784
1785   /* Prefer to use LUI/ADDIU stubs if the function is at the beginning
1786      of the section and if we would need no more than 2 nops.  */
1787   value = mips_elf_get_la25_target (stub, &s);
1788   use_trampoline_p = (value != 0 || s->alignment_power > 4);
1789
1790   h->la25_stub = stub;
1791   return (use_trampoline_p
1792           ? mips_elf_add_la25_trampoline (stub, info)
1793           : mips_elf_add_la25_intro (stub, info));
1794 }
1795
1796 /* A mips_elf_link_hash_traverse callback that is called before sizing
1797    sections.  DATA points to a mips_htab_traverse_info structure.  */
1798
1799 static bfd_boolean
1800 mips_elf_check_symbols (struct mips_elf_link_hash_entry *h, void *data)
1801 {
1802   struct mips_htab_traverse_info *hti;
1803
1804   hti = (struct mips_htab_traverse_info *) data;
1805   if (!hti->info->relocatable)
1806     mips_elf_check_mips16_stubs (hti->info, h);
1807
1808   if (mips_elf_local_pic_function_p (h))
1809     {
1810       /* PR 12845: If H is in a section that has been garbage
1811          collected it will have its output section set to *ABS*.  */
1812       if (bfd_is_abs_section (h->root.root.u.def.section->output_section))
1813         return TRUE;
1814
1815       /* H is a function that might need $25 to be valid on entry.
1816          If we're creating a non-PIC relocatable object, mark H as
1817          being PIC.  If we're creating a non-relocatable object with
1818          non-PIC branches and jumps to H, make sure that H has an la25
1819          stub.  */
1820       if (hti->info->relocatable)
1821         {
1822           if (!PIC_OBJECT_P (hti->output_bfd))
1823             h->root.other = ELF_ST_SET_MIPS_PIC (h->root.other);
1824         }
1825       else if (h->has_nonpic_branches && !mips_elf_add_la25_stub (hti->info, h))
1826         {
1827           hti->error = TRUE;
1828           return FALSE;
1829         }
1830     }
1831   return TRUE;
1832 }
1833 \f
1834 /* R_MIPS16_26 is used for the mips16 jal and jalx instructions.
1835    Most mips16 instructions are 16 bits, but these instructions
1836    are 32 bits.
1837
1838    The format of these instructions is:
1839
1840    +--------------+--------------------------------+
1841    |     JALX     | X|   Imm 20:16  |   Imm 25:21  |
1842    +--------------+--------------------------------+
1843    |                Immediate  15:0                |
1844    +-----------------------------------------------+
1845
1846    JALX is the 5-bit value 00011.  X is 0 for jal, 1 for jalx.
1847    Note that the immediate value in the first word is swapped.
1848
1849    When producing a relocatable object file, R_MIPS16_26 is
1850    handled mostly like R_MIPS_26.  In particular, the addend is
1851    stored as a straight 26-bit value in a 32-bit instruction.
1852    (gas makes life simpler for itself by never adjusting a
1853    R_MIPS16_26 reloc to be against a section, so the addend is
1854    always zero).  However, the 32 bit instruction is stored as 2
1855    16-bit values, rather than a single 32-bit value.  In a
1856    big-endian file, the result is the same; in a little-endian
1857    file, the two 16-bit halves of the 32 bit value are swapped.
1858    This is so that a disassembler can recognize the jal
1859    instruction.
1860
1861    When doing a final link, R_MIPS16_26 is treated as a 32 bit
1862    instruction stored as two 16-bit values.  The addend A is the
1863    contents of the targ26 field.  The calculation is the same as
1864    R_MIPS_26.  When storing the calculated value, reorder the
1865    immediate value as shown above, and don't forget to store the
1866    value as two 16-bit values.
1867
1868    To put it in MIPS ABI terms, the relocation field is T-targ26-16,
1869    defined as
1870
1871    big-endian:
1872    +--------+----------------------+
1873    |        |                      |
1874    |        |    targ26-16         |
1875    |31    26|25                   0|
1876    +--------+----------------------+
1877
1878    little-endian:
1879    +----------+------+-------------+
1880    |          |      |             |
1881    |  sub1    |      |     sub2    |
1882    |0        9|10  15|16         31|
1883    +----------+--------------------+
1884    where targ26-16 is sub1 followed by sub2 (i.e., the addend field A is
1885    ((sub1 << 16) | sub2)).
1886
1887    When producing a relocatable object file, the calculation is
1888    (((A < 2) | ((P + 4) & 0xf0000000) + S) >> 2)
1889    When producing a fully linked file, the calculation is
1890    let R = (((A < 2) | ((P + 4) & 0xf0000000) + S) >> 2)
1891    ((R & 0x1f0000) << 5) | ((R & 0x3e00000) >> 5) | (R & 0xffff)
1892
1893    The table below lists the other MIPS16 instruction relocations.
1894    Each one is calculated in the same way as the non-MIPS16 relocation
1895    given on the right, but using the extended MIPS16 layout of 16-bit
1896    immediate fields:
1897
1898         R_MIPS16_GPREL          R_MIPS_GPREL16
1899         R_MIPS16_GOT16          R_MIPS_GOT16
1900         R_MIPS16_CALL16         R_MIPS_CALL16
1901         R_MIPS16_HI16           R_MIPS_HI16
1902         R_MIPS16_LO16           R_MIPS_LO16
1903
1904    A typical instruction will have a format like this:
1905
1906    +--------------+--------------------------------+
1907    |    EXTEND    |     Imm 10:5    |   Imm 15:11  |
1908    +--------------+--------------------------------+
1909    |    Major     |   rx   |   ry   |   Imm  4:0   |
1910    +--------------+--------------------------------+
1911
1912    EXTEND is the five bit value 11110.  Major is the instruction
1913    opcode.
1914
1915    All we need to do here is shuffle the bits appropriately.
1916    As above, the two 16-bit halves must be swapped on a
1917    little-endian system.  */
1918
1919 static inline bfd_boolean
1920 mips16_reloc_p (int r_type)
1921 {
1922   switch (r_type)
1923     {
1924     case R_MIPS16_26:
1925     case R_MIPS16_GPREL:
1926     case R_MIPS16_GOT16:
1927     case R_MIPS16_CALL16:
1928     case R_MIPS16_HI16:
1929     case R_MIPS16_LO16:
1930     case R_MIPS16_TLS_GD:
1931     case R_MIPS16_TLS_LDM:
1932     case R_MIPS16_TLS_DTPREL_HI16:
1933     case R_MIPS16_TLS_DTPREL_LO16:
1934     case R_MIPS16_TLS_GOTTPREL:
1935     case R_MIPS16_TLS_TPREL_HI16:
1936     case R_MIPS16_TLS_TPREL_LO16:
1937       return TRUE;
1938
1939     default:
1940       return FALSE;
1941     }
1942 }
1943
1944 /* Check if a microMIPS reloc.  */
1945
1946 static inline bfd_boolean
1947 micromips_reloc_p (unsigned int r_type)
1948 {
1949   return r_type >= R_MICROMIPS_min && r_type < R_MICROMIPS_max;
1950 }
1951
1952 /* Similar to MIPS16, the two 16-bit halves in microMIPS must be swapped
1953    on a little-endian system.  This does not apply to R_MICROMIPS_PC7_S1
1954    and R_MICROMIPS_PC10_S1 relocs that apply to 16-bit instructions.  */
1955
1956 static inline bfd_boolean
1957 micromips_reloc_shuffle_p (unsigned int r_type)
1958 {
1959   return (micromips_reloc_p (r_type)
1960           && r_type != R_MICROMIPS_PC7_S1
1961           && r_type != R_MICROMIPS_PC10_S1);
1962 }
1963
1964 static inline bfd_boolean
1965 got16_reloc_p (int r_type)
1966 {
1967   return (r_type == R_MIPS_GOT16
1968           || r_type == R_MIPS16_GOT16
1969           || r_type == R_MICROMIPS_GOT16);
1970 }
1971
1972 static inline bfd_boolean
1973 call16_reloc_p (int r_type)
1974 {
1975   return (r_type == R_MIPS_CALL16
1976           || r_type == R_MIPS16_CALL16
1977           || r_type == R_MICROMIPS_CALL16);
1978 }
1979
1980 static inline bfd_boolean
1981 got_disp_reloc_p (unsigned int r_type)
1982 {
1983   return r_type == R_MIPS_GOT_DISP || r_type == R_MICROMIPS_GOT_DISP;
1984 }
1985
1986 static inline bfd_boolean
1987 got_page_reloc_p (unsigned int r_type)
1988 {
1989   return r_type == R_MIPS_GOT_PAGE || r_type == R_MICROMIPS_GOT_PAGE;
1990 }
1991
1992 static inline bfd_boolean
1993 got_ofst_reloc_p (unsigned int r_type)
1994 {
1995   return r_type == R_MIPS_GOT_OFST || r_type == R_MICROMIPS_GOT_OFST;
1996 }
1997
1998 static inline bfd_boolean
1999 got_hi16_reloc_p (unsigned int r_type)
2000 {
2001   return r_type == R_MIPS_GOT_HI16 || r_type == R_MICROMIPS_GOT_HI16;
2002 }
2003
2004 static inline bfd_boolean
2005 got_lo16_reloc_p (unsigned int r_type)
2006 {
2007   return r_type == R_MIPS_GOT_LO16 || r_type == R_MICROMIPS_GOT_LO16;
2008 }
2009
2010 static inline bfd_boolean
2011 call_hi16_reloc_p (unsigned int r_type)
2012 {
2013   return r_type == R_MIPS_CALL_HI16 || r_type == R_MICROMIPS_CALL_HI16;
2014 }
2015
2016 static inline bfd_boolean
2017 call_lo16_reloc_p (unsigned int r_type)
2018 {
2019   return r_type == R_MIPS_CALL_LO16 || r_type == R_MICROMIPS_CALL_LO16;
2020 }
2021
2022 static inline bfd_boolean
2023 hi16_reloc_p (int r_type)
2024 {
2025   return (r_type == R_MIPS_HI16
2026           || r_type == R_MIPS16_HI16
2027           || r_type == R_MICROMIPS_HI16);
2028 }
2029
2030 static inline bfd_boolean
2031 lo16_reloc_p (int r_type)
2032 {
2033   return (r_type == R_MIPS_LO16
2034           || r_type == R_MIPS16_LO16
2035           || r_type == R_MICROMIPS_LO16);
2036 }
2037
2038 static inline bfd_boolean
2039 mips16_call_reloc_p (int r_type)
2040 {
2041   return r_type == R_MIPS16_26 || r_type == R_MIPS16_CALL16;
2042 }
2043
2044 static inline bfd_boolean
2045 jal_reloc_p (int r_type)
2046 {
2047   return (r_type == R_MIPS_26
2048           || r_type == R_MIPS16_26
2049           || r_type == R_MICROMIPS_26_S1);
2050 }
2051
2052 static inline bfd_boolean
2053 micromips_branch_reloc_p (int r_type)
2054 {
2055   return (r_type == R_MICROMIPS_26_S1
2056           || r_type == R_MICROMIPS_PC16_S1
2057           || r_type == R_MICROMIPS_PC10_S1
2058           || r_type == R_MICROMIPS_PC7_S1);
2059 }
2060
2061 static inline bfd_boolean
2062 tls_gd_reloc_p (unsigned int r_type)
2063 {
2064   return (r_type == R_MIPS_TLS_GD
2065           || r_type == R_MIPS16_TLS_GD
2066           || r_type == R_MICROMIPS_TLS_GD);
2067 }
2068
2069 static inline bfd_boolean
2070 tls_ldm_reloc_p (unsigned int r_type)
2071 {
2072   return (r_type == R_MIPS_TLS_LDM
2073           || r_type == R_MIPS16_TLS_LDM
2074           || r_type == R_MICROMIPS_TLS_LDM);
2075 }
2076
2077 static inline bfd_boolean
2078 tls_gottprel_reloc_p (unsigned int r_type)
2079 {
2080   return (r_type == R_MIPS_TLS_GOTTPREL
2081           || r_type == R_MIPS16_TLS_GOTTPREL
2082           || r_type == R_MICROMIPS_TLS_GOTTPREL);
2083 }
2084
2085 void
2086 _bfd_mips_elf_reloc_unshuffle (bfd *abfd, int r_type,
2087                                bfd_boolean jal_shuffle, bfd_byte *data)
2088 {
2089   bfd_vma first, second, val;
2090
2091   if (!mips16_reloc_p (r_type) && !micromips_reloc_shuffle_p (r_type))
2092     return;
2093
2094   /* Pick up the first and second halfwords of the instruction.  */
2095   first = bfd_get_16 (abfd, data);
2096   second = bfd_get_16 (abfd, data + 2);
2097   if (micromips_reloc_p (r_type) || (r_type == R_MIPS16_26 && !jal_shuffle))
2098     val = first << 16 | second;
2099   else if (r_type != R_MIPS16_26)
2100     val = (((first & 0xf800) << 16) | ((second & 0xffe0) << 11)
2101            | ((first & 0x1f) << 11) | (first & 0x7e0) | (second & 0x1f));
2102   else
2103     val = (((first & 0xfc00) << 16) | ((first & 0x3e0) << 11)
2104            | ((first & 0x1f) << 21) | second);
2105   bfd_put_32 (abfd, val, data);
2106 }
2107
2108 void
2109 _bfd_mips_elf_reloc_shuffle (bfd *abfd, int r_type,
2110                              bfd_boolean jal_shuffle, bfd_byte *data)
2111 {
2112   bfd_vma first, second, val;
2113
2114   if (!mips16_reloc_p (r_type) && !micromips_reloc_shuffle_p (r_type))
2115     return;
2116
2117   val = bfd_get_32 (abfd, data);
2118   if (micromips_reloc_p (r_type) || (r_type == R_MIPS16_26 && !jal_shuffle))
2119     {
2120       second = val & 0xffff;
2121       first = val >> 16;
2122     }
2123   else if (r_type != R_MIPS16_26)
2124     {
2125       second = ((val >> 11) & 0xffe0) | (val & 0x1f);
2126       first = ((val >> 16) & 0xf800) | ((val >> 11) & 0x1f) | (val & 0x7e0);
2127     }
2128   else
2129     {
2130       second = val & 0xffff;
2131       first = ((val >> 16) & 0xfc00) | ((val >> 11) & 0x3e0)
2132                | ((val >> 21) & 0x1f);
2133     }
2134   bfd_put_16 (abfd, second, data + 2);
2135   bfd_put_16 (abfd, first, data);
2136 }
2137
2138 bfd_reloc_status_type
2139 _bfd_mips_elf_gprel16_with_gp (bfd *abfd, asymbol *symbol,
2140                                arelent *reloc_entry, asection *input_section,
2141                                bfd_boolean relocatable, void *data, bfd_vma gp)
2142 {
2143   bfd_vma relocation;
2144   bfd_signed_vma val;
2145   bfd_reloc_status_type status;
2146
2147   if (bfd_is_com_section (symbol->section))
2148     relocation = 0;
2149   else
2150     relocation = symbol->value;
2151
2152   relocation += symbol->section->output_section->vma;
2153   relocation += symbol->section->output_offset;
2154
2155   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2156     return bfd_reloc_outofrange;
2157
2158   /* Set val to the offset into the section or symbol.  */
2159   val = reloc_entry->addend;
2160
2161   _bfd_mips_elf_sign_extend (val, 16);
2162
2163   /* Adjust val for the final section location and GP value.  If we
2164      are producing relocatable output, we don't want to do this for
2165      an external symbol.  */
2166   if (! relocatable
2167       || (symbol->flags & BSF_SECTION_SYM) != 0)
2168     val += relocation - gp;
2169
2170   if (reloc_entry->howto->partial_inplace)
2171     {
2172       status = _bfd_relocate_contents (reloc_entry->howto, abfd, val,
2173                                        (bfd_byte *) data
2174                                        + reloc_entry->address);
2175       if (status != bfd_reloc_ok)
2176         return status;
2177     }
2178   else
2179     reloc_entry->addend = val;
2180
2181   if (relocatable)
2182     reloc_entry->address += input_section->output_offset;
2183
2184   return bfd_reloc_ok;
2185 }
2186
2187 /* Used to store a REL high-part relocation such as R_MIPS_HI16 or
2188    R_MIPS_GOT16.  REL is the relocation, INPUT_SECTION is the section
2189    that contains the relocation field and DATA points to the start of
2190    INPUT_SECTION.  */
2191
2192 struct mips_hi16
2193 {
2194   struct mips_hi16 *next;
2195   bfd_byte *data;
2196   asection *input_section;
2197   arelent rel;
2198 };
2199
2200 /* FIXME: This should not be a static variable.  */
2201
2202 static struct mips_hi16 *mips_hi16_list;
2203
2204 /* A howto special_function for REL *HI16 relocations.  We can only
2205    calculate the correct value once we've seen the partnering
2206    *LO16 relocation, so just save the information for later.
2207
2208    The ABI requires that the *LO16 immediately follow the *HI16.
2209    However, as a GNU extension, we permit an arbitrary number of
2210    *HI16s to be associated with a single *LO16.  This significantly
2211    simplies the relocation handling in gcc.  */
2212
2213 bfd_reloc_status_type
2214 _bfd_mips_elf_hi16_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry,
2215                           asymbol *symbol ATTRIBUTE_UNUSED, void *data,
2216                           asection *input_section, bfd *output_bfd,
2217                           char **error_message ATTRIBUTE_UNUSED)
2218 {
2219   struct mips_hi16 *n;
2220
2221   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2222     return bfd_reloc_outofrange;
2223
2224   n = bfd_malloc (sizeof *n);
2225   if (n == NULL)
2226     return bfd_reloc_outofrange;
2227
2228   n->next = mips_hi16_list;
2229   n->data = data;
2230   n->input_section = input_section;
2231   n->rel = *reloc_entry;
2232   mips_hi16_list = n;
2233
2234   if (output_bfd != NULL)
2235     reloc_entry->address += input_section->output_offset;
2236
2237   return bfd_reloc_ok;
2238 }
2239
2240 /* A howto special_function for REL R_MIPS*_GOT16 relocations.  This is just
2241    like any other 16-bit relocation when applied to global symbols, but is
2242    treated in the same as R_MIPS_HI16 when applied to local symbols.  */
2243
2244 bfd_reloc_status_type
2245 _bfd_mips_elf_got16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2246                            void *data, asection *input_section,
2247                            bfd *output_bfd, char **error_message)
2248 {
2249   if ((symbol->flags & (BSF_GLOBAL | BSF_WEAK)) != 0
2250       || bfd_is_und_section (bfd_get_section (symbol))
2251       || bfd_is_com_section (bfd_get_section (symbol)))
2252     /* The relocation is against a global symbol.  */
2253     return _bfd_mips_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2254                                         input_section, output_bfd,
2255                                         error_message);
2256
2257   return _bfd_mips_elf_hi16_reloc (abfd, reloc_entry, symbol, data,
2258                                    input_section, output_bfd, error_message);
2259 }
2260
2261 /* A howto special_function for REL *LO16 relocations.  The *LO16 itself
2262    is a straightforward 16 bit inplace relocation, but we must deal with
2263    any partnering high-part relocations as well.  */
2264
2265 bfd_reloc_status_type
2266 _bfd_mips_elf_lo16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2267                           void *data, asection *input_section,
2268                           bfd *output_bfd, char **error_message)
2269 {
2270   bfd_vma vallo;
2271   bfd_byte *location = (bfd_byte *) data + reloc_entry->address;
2272
2273   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2274     return bfd_reloc_outofrange;
2275
2276   _bfd_mips_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, FALSE,
2277                                  location);
2278   vallo = bfd_get_32 (abfd, location);
2279   _bfd_mips_elf_reloc_shuffle (abfd, reloc_entry->howto->type, FALSE,
2280                                location);
2281
2282   while (mips_hi16_list != NULL)
2283     {
2284       bfd_reloc_status_type ret;
2285       struct mips_hi16 *hi;
2286
2287       hi = mips_hi16_list;
2288
2289       /* R_MIPS*_GOT16 relocations are something of a special case.  We
2290          want to install the addend in the same way as for a R_MIPS*_HI16
2291          relocation (with a rightshift of 16).  However, since GOT16
2292          relocations can also be used with global symbols, their howto
2293          has a rightshift of 0.  */
2294       if (hi->rel.howto->type == R_MIPS_GOT16)
2295         hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MIPS_HI16, FALSE);
2296       else if (hi->rel.howto->type == R_MIPS16_GOT16)
2297         hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MIPS16_HI16, FALSE);
2298       else if (hi->rel.howto->type == R_MICROMIPS_GOT16)
2299         hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MICROMIPS_HI16, FALSE);
2300
2301       /* VALLO is a signed 16-bit number.  Bias it by 0x8000 so that any
2302          carry or borrow will induce a change of +1 or -1 in the high part.  */
2303       hi->rel.addend += (vallo + 0x8000) & 0xffff;
2304
2305       ret = _bfd_mips_elf_generic_reloc (abfd, &hi->rel, symbol, hi->data,
2306                                          hi->input_section, output_bfd,
2307                                          error_message);
2308       if (ret != bfd_reloc_ok)
2309         return ret;
2310
2311       mips_hi16_list = hi->next;
2312       free (hi);
2313     }
2314
2315   return _bfd_mips_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2316                                       input_section, output_bfd,
2317                                       error_message);
2318 }
2319
2320 /* A generic howto special_function.  This calculates and installs the
2321    relocation itself, thus avoiding the oft-discussed problems in
2322    bfd_perform_relocation and bfd_install_relocation.  */
2323
2324 bfd_reloc_status_type
2325 _bfd_mips_elf_generic_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry,
2326                              asymbol *symbol, void *data ATTRIBUTE_UNUSED,
2327                              asection *input_section, bfd *output_bfd,
2328                              char **error_message ATTRIBUTE_UNUSED)
2329 {
2330   bfd_signed_vma val;
2331   bfd_reloc_status_type status;
2332   bfd_boolean relocatable;
2333
2334   relocatable = (output_bfd != NULL);
2335
2336   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2337     return bfd_reloc_outofrange;
2338
2339   /* Build up the field adjustment in VAL.  */
2340   val = 0;
2341   if (!relocatable || (symbol->flags & BSF_SECTION_SYM) != 0)
2342     {
2343       /* Either we're calculating the final field value or we have a
2344          relocation against a section symbol.  Add in the section's
2345          offset or address.  */
2346       val += symbol->section->output_section->vma;
2347       val += symbol->section->output_offset;
2348     }
2349
2350   if (!relocatable)
2351     {
2352       /* We're calculating the final field value.  Add in the symbol's value
2353          and, if pc-relative, subtract the address of the field itself.  */
2354       val += symbol->value;
2355       if (reloc_entry->howto->pc_relative)
2356         {
2357           val -= input_section->output_section->vma;
2358           val -= input_section->output_offset;
2359           val -= reloc_entry->address;
2360         }
2361     }
2362
2363   /* VAL is now the final adjustment.  If we're keeping this relocation
2364      in the output file, and if the relocation uses a separate addend,
2365      we just need to add VAL to that addend.  Otherwise we need to add
2366      VAL to the relocation field itself.  */
2367   if (relocatable && !reloc_entry->howto->partial_inplace)
2368     reloc_entry->addend += val;
2369   else
2370     {
2371       bfd_byte *location = (bfd_byte *) data + reloc_entry->address;
2372
2373       /* Add in the separate addend, if any.  */
2374       val += reloc_entry->addend;
2375
2376       /* Add VAL to the relocation field.  */
2377       _bfd_mips_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, FALSE,
2378                                      location);
2379       status = _bfd_relocate_contents (reloc_entry->howto, abfd, val,
2380                                        location);
2381       _bfd_mips_elf_reloc_shuffle (abfd, reloc_entry->howto->type, FALSE,
2382                                    location);
2383
2384       if (status != bfd_reloc_ok)
2385         return status;
2386     }
2387
2388   if (relocatable)
2389     reloc_entry->address += input_section->output_offset;
2390
2391   return bfd_reloc_ok;
2392 }
2393 \f
2394 /* Swap an entry in a .gptab section.  Note that these routines rely
2395    on the equivalence of the two elements of the union.  */
2396
2397 static void
2398 bfd_mips_elf32_swap_gptab_in (bfd *abfd, const Elf32_External_gptab *ex,
2399                               Elf32_gptab *in)
2400 {
2401   in->gt_entry.gt_g_value = H_GET_32 (abfd, ex->gt_entry.gt_g_value);
2402   in->gt_entry.gt_bytes = H_GET_32 (abfd, ex->gt_entry.gt_bytes);
2403 }
2404
2405 static void
2406 bfd_mips_elf32_swap_gptab_out (bfd *abfd, const Elf32_gptab *in,
2407                                Elf32_External_gptab *ex)
2408 {
2409   H_PUT_32 (abfd, in->gt_entry.gt_g_value, ex->gt_entry.gt_g_value);
2410   H_PUT_32 (abfd, in->gt_entry.gt_bytes, ex->gt_entry.gt_bytes);
2411 }
2412
2413 static void
2414 bfd_elf32_swap_compact_rel_out (bfd *abfd, const Elf32_compact_rel *in,
2415                                 Elf32_External_compact_rel *ex)
2416 {
2417   H_PUT_32 (abfd, in->id1, ex->id1);
2418   H_PUT_32 (abfd, in->num, ex->num);
2419   H_PUT_32 (abfd, in->id2, ex->id2);
2420   H_PUT_32 (abfd, in->offset, ex->offset);
2421   H_PUT_32 (abfd, in->reserved0, ex->reserved0);
2422   H_PUT_32 (abfd, in->reserved1, ex->reserved1);
2423 }
2424
2425 static void
2426 bfd_elf32_swap_crinfo_out (bfd *abfd, const Elf32_crinfo *in,
2427                            Elf32_External_crinfo *ex)
2428 {
2429   unsigned long l;
2430
2431   l = (((in->ctype & CRINFO_CTYPE) << CRINFO_CTYPE_SH)
2432        | ((in->rtype & CRINFO_RTYPE) << CRINFO_RTYPE_SH)
2433        | ((in->dist2to & CRINFO_DIST2TO) << CRINFO_DIST2TO_SH)
2434        | ((in->relvaddr & CRINFO_RELVADDR) << CRINFO_RELVADDR_SH));
2435   H_PUT_32 (abfd, l, ex->info);
2436   H_PUT_32 (abfd, in->konst, ex->konst);
2437   H_PUT_32 (abfd, in->vaddr, ex->vaddr);
2438 }
2439 \f
2440 /* A .reginfo section holds a single Elf32_RegInfo structure.  These
2441    routines swap this structure in and out.  They are used outside of
2442    BFD, so they are globally visible.  */
2443
2444 void
2445 bfd_mips_elf32_swap_reginfo_in (bfd *abfd, const Elf32_External_RegInfo *ex,
2446                                 Elf32_RegInfo *in)
2447 {
2448   in->ri_gprmask = H_GET_32 (abfd, ex->ri_gprmask);
2449   in->ri_cprmask[0] = H_GET_32 (abfd, ex->ri_cprmask[0]);
2450   in->ri_cprmask[1] = H_GET_32 (abfd, ex->ri_cprmask[1]);
2451   in->ri_cprmask[2] = H_GET_32 (abfd, ex->ri_cprmask[2]);
2452   in->ri_cprmask[3] = H_GET_32 (abfd, ex->ri_cprmask[3]);
2453   in->ri_gp_value = H_GET_32 (abfd, ex->ri_gp_value);
2454 }
2455
2456 void
2457 bfd_mips_elf32_swap_reginfo_out (bfd *abfd, const Elf32_RegInfo *in,
2458                                  Elf32_External_RegInfo *ex)
2459 {
2460   H_PUT_32 (abfd, in->ri_gprmask, ex->ri_gprmask);
2461   H_PUT_32 (abfd, in->ri_cprmask[0], ex->ri_cprmask[0]);
2462   H_PUT_32 (abfd, in->ri_cprmask[1], ex->ri_cprmask[1]);
2463   H_PUT_32 (abfd, in->ri_cprmask[2], ex->ri_cprmask[2]);
2464   H_PUT_32 (abfd, in->ri_cprmask[3], ex->ri_cprmask[3]);
2465   H_PUT_32 (abfd, in->ri_gp_value, ex->ri_gp_value);
2466 }
2467
2468 /* In the 64 bit ABI, the .MIPS.options section holds register
2469    information in an Elf64_Reginfo structure.  These routines swap
2470    them in and out.  They are globally visible because they are used
2471    outside of BFD.  These routines are here so that gas can call them
2472    without worrying about whether the 64 bit ABI has been included.  */
2473
2474 void
2475 bfd_mips_elf64_swap_reginfo_in (bfd *abfd, const Elf64_External_RegInfo *ex,
2476                                 Elf64_Internal_RegInfo *in)
2477 {
2478   in->ri_gprmask = H_GET_32 (abfd, ex->ri_gprmask);
2479   in->ri_pad = H_GET_32 (abfd, ex->ri_pad);
2480   in->ri_cprmask[0] = H_GET_32 (abfd, ex->ri_cprmask[0]);
2481   in->ri_cprmask[1] = H_GET_32 (abfd, ex->ri_cprmask[1]);
2482   in->ri_cprmask[2] = H_GET_32 (abfd, ex->ri_cprmask[2]);
2483   in->ri_cprmask[3] = H_GET_32 (abfd, ex->ri_cprmask[3]);
2484   in->ri_gp_value = H_GET_64 (abfd, ex->ri_gp_value);
2485 }
2486
2487 void
2488 bfd_mips_elf64_swap_reginfo_out (bfd *abfd, const Elf64_Internal_RegInfo *in,
2489                                  Elf64_External_RegInfo *ex)
2490 {
2491   H_PUT_32 (abfd, in->ri_gprmask, ex->ri_gprmask);
2492   H_PUT_32 (abfd, in->ri_pad, ex->ri_pad);
2493   H_PUT_32 (abfd, in->ri_cprmask[0], ex->ri_cprmask[0]);
2494   H_PUT_32 (abfd, in->ri_cprmask[1], ex->ri_cprmask[1]);
2495   H_PUT_32 (abfd, in->ri_cprmask[2], ex->ri_cprmask[2]);
2496   H_PUT_32 (abfd, in->ri_cprmask[3], ex->ri_cprmask[3]);
2497   H_PUT_64 (abfd, in->ri_gp_value, ex->ri_gp_value);
2498 }
2499
2500 /* Swap in an options header.  */
2501
2502 void
2503 bfd_mips_elf_swap_options_in (bfd *abfd, const Elf_External_Options *ex,
2504                               Elf_Internal_Options *in)
2505 {
2506   in->kind = H_GET_8 (abfd, ex->kind);
2507   in->size = H_GET_8 (abfd, ex->size);
2508   in->section = H_GET_16 (abfd, ex->section);
2509   in->info = H_GET_32 (abfd, ex->info);
2510 }
2511
2512 /* Swap out an options header.  */
2513
2514 void
2515 bfd_mips_elf_swap_options_out (bfd *abfd, const Elf_Internal_Options *in,
2516                                Elf_External_Options *ex)
2517 {
2518   H_PUT_8 (abfd, in->kind, ex->kind);
2519   H_PUT_8 (abfd, in->size, ex->size);
2520   H_PUT_16 (abfd, in->section, ex->section);
2521   H_PUT_32 (abfd, in->info, ex->info);
2522 }
2523 \f
2524 /* This function is called via qsort() to sort the dynamic relocation
2525    entries by increasing r_symndx value.  */
2526
2527 static int
2528 sort_dynamic_relocs (const void *arg1, const void *arg2)
2529 {
2530   Elf_Internal_Rela int_reloc1;
2531   Elf_Internal_Rela int_reloc2;
2532   int diff;
2533
2534   bfd_elf32_swap_reloc_in (reldyn_sorting_bfd, arg1, &int_reloc1);
2535   bfd_elf32_swap_reloc_in (reldyn_sorting_bfd, arg2, &int_reloc2);
2536
2537   diff = ELF32_R_SYM (int_reloc1.r_info) - ELF32_R_SYM (int_reloc2.r_info);
2538   if (diff != 0)
2539     return diff;
2540
2541   if (int_reloc1.r_offset < int_reloc2.r_offset)
2542     return -1;
2543   if (int_reloc1.r_offset > int_reloc2.r_offset)
2544     return 1;
2545   return 0;
2546 }
2547
2548 /* Like sort_dynamic_relocs, but used for elf64 relocations.  */
2549
2550 static int
2551 sort_dynamic_relocs_64 (const void *arg1 ATTRIBUTE_UNUSED,
2552                         const void *arg2 ATTRIBUTE_UNUSED)
2553 {
2554 #ifdef BFD64
2555   Elf_Internal_Rela int_reloc1[3];
2556   Elf_Internal_Rela int_reloc2[3];
2557
2558   (*get_elf_backend_data (reldyn_sorting_bfd)->s->swap_reloc_in)
2559     (reldyn_sorting_bfd, arg1, int_reloc1);
2560   (*get_elf_backend_data (reldyn_sorting_bfd)->s->swap_reloc_in)
2561     (reldyn_sorting_bfd, arg2, int_reloc2);
2562
2563   if (ELF64_R_SYM (int_reloc1[0].r_info) < ELF64_R_SYM (int_reloc2[0].r_info))
2564     return -1;
2565   if (ELF64_R_SYM (int_reloc1[0].r_info) > ELF64_R_SYM (int_reloc2[0].r_info))
2566     return 1;
2567
2568   if (int_reloc1[0].r_offset < int_reloc2[0].r_offset)
2569     return -1;
2570   if (int_reloc1[0].r_offset > int_reloc2[0].r_offset)
2571     return 1;
2572   return 0;
2573 #else
2574   abort ();
2575 #endif
2576 }
2577
2578
2579 /* This routine is used to write out ECOFF debugging external symbol
2580    information.  It is called via mips_elf_link_hash_traverse.  The
2581    ECOFF external symbol information must match the ELF external
2582    symbol information.  Unfortunately, at this point we don't know
2583    whether a symbol is required by reloc information, so the two
2584    tables may wind up being different.  We must sort out the external
2585    symbol information before we can set the final size of the .mdebug
2586    section, and we must set the size of the .mdebug section before we
2587    can relocate any sections, and we can't know which symbols are
2588    required by relocation until we relocate the sections.
2589    Fortunately, it is relatively unlikely that any symbol will be
2590    stripped but required by a reloc.  In particular, it can not happen
2591    when generating a final executable.  */
2592
2593 static bfd_boolean
2594 mips_elf_output_extsym (struct mips_elf_link_hash_entry *h, void *data)
2595 {
2596   struct extsym_info *einfo = data;
2597   bfd_boolean strip;
2598   asection *sec, *output_section;
2599
2600   if (h->root.indx == -2)
2601     strip = FALSE;
2602   else if ((h->root.def_dynamic
2603             || h->root.ref_dynamic
2604             || h->root.type == bfd_link_hash_new)
2605            && !h->root.def_regular
2606            && !h->root.ref_regular)
2607     strip = TRUE;
2608   else if (einfo->info->strip == strip_all
2609            || (einfo->info->strip == strip_some
2610                && bfd_hash_lookup (einfo->info->keep_hash,
2611                                    h->root.root.root.string,
2612                                    FALSE, FALSE) == NULL))
2613     strip = TRUE;
2614   else
2615     strip = FALSE;
2616
2617   if (strip)
2618     return TRUE;
2619
2620   if (h->esym.ifd == -2)
2621     {
2622       h->esym.jmptbl = 0;
2623       h->esym.cobol_main = 0;
2624       h->esym.weakext = 0;
2625       h->esym.reserved = 0;
2626       h->esym.ifd = ifdNil;
2627       h->esym.asym.value = 0;
2628       h->esym.asym.st = stGlobal;
2629
2630       if (h->root.root.type == bfd_link_hash_undefined
2631           || h->root.root.type == bfd_link_hash_undefweak)
2632         {
2633           const char *name;
2634
2635           /* Use undefined class.  Also, set class and type for some
2636              special symbols.  */
2637           name = h->root.root.root.string;
2638           if (strcmp (name, mips_elf_dynsym_rtproc_names[0]) == 0
2639               || strcmp (name, mips_elf_dynsym_rtproc_names[1]) == 0)
2640             {
2641               h->esym.asym.sc = scData;
2642               h->esym.asym.st = stLabel;
2643               h->esym.asym.value = 0;
2644             }
2645           else if (strcmp (name, mips_elf_dynsym_rtproc_names[2]) == 0)
2646             {
2647               h->esym.asym.sc = scAbs;
2648               h->esym.asym.st = stLabel;
2649               h->esym.asym.value =
2650                 mips_elf_hash_table (einfo->info)->procedure_count;
2651             }
2652           else if (strcmp (name, "_gp_disp") == 0 && ! NEWABI_P (einfo->abfd))
2653             {
2654               h->esym.asym.sc = scAbs;
2655               h->esym.asym.st = stLabel;
2656               h->esym.asym.value = elf_gp (einfo->abfd);
2657             }
2658           else
2659             h->esym.asym.sc = scUndefined;
2660         }
2661       else if (h->root.root.type != bfd_link_hash_defined
2662           && h->root.root.type != bfd_link_hash_defweak)
2663         h->esym.asym.sc = scAbs;
2664       else
2665         {
2666           const char *name;
2667
2668           sec = h->root.root.u.def.section;
2669           output_section = sec->output_section;
2670
2671           /* When making a shared library and symbol h is the one from
2672              the another shared library, OUTPUT_SECTION may be null.  */
2673           if (output_section == NULL)
2674             h->esym.asym.sc = scUndefined;
2675           else
2676             {
2677               name = bfd_section_name (output_section->owner, output_section);
2678
2679               if (strcmp (name, ".text") == 0)
2680                 h->esym.asym.sc = scText;
2681               else if (strcmp (name, ".data") == 0)
2682                 h->esym.asym.sc = scData;
2683               else if (strcmp (name, ".sdata") == 0)
2684                 h->esym.asym.sc = scSData;
2685               else if (strcmp (name, ".rodata") == 0
2686                        || strcmp (name, ".rdata") == 0)
2687                 h->esym.asym.sc = scRData;
2688               else if (strcmp (name, ".bss") == 0)
2689                 h->esym.asym.sc = scBss;
2690               else if (strcmp (name, ".sbss") == 0)
2691                 h->esym.asym.sc = scSBss;
2692               else if (strcmp (name, ".init") == 0)
2693                 h->esym.asym.sc = scInit;
2694               else if (strcmp (name, ".fini") == 0)
2695                 h->esym.asym.sc = scFini;
2696               else
2697                 h->esym.asym.sc = scAbs;
2698             }
2699         }
2700
2701       h->esym.asym.reserved = 0;
2702       h->esym.asym.index = indexNil;
2703     }
2704
2705   if (h->root.root.type == bfd_link_hash_common)
2706     h->esym.asym.value = h->root.root.u.c.size;
2707   else if (h->root.root.type == bfd_link_hash_defined
2708            || h->root.root.type == bfd_link_hash_defweak)
2709     {
2710       if (h->esym.asym.sc == scCommon)
2711         h->esym.asym.sc = scBss;
2712       else if (h->esym.asym.sc == scSCommon)
2713         h->esym.asym.sc = scSBss;
2714
2715       sec = h->root.root.u.def.section;
2716       output_section = sec->output_section;
2717       if (output_section != NULL)
2718         h->esym.asym.value = (h->root.root.u.def.value
2719                               + sec->output_offset
2720                               + output_section->vma);
2721       else
2722         h->esym.asym.value = 0;
2723     }
2724   else
2725     {
2726       struct mips_elf_link_hash_entry *hd = h;
2727
2728       while (hd->root.root.type == bfd_link_hash_indirect)
2729         hd = (struct mips_elf_link_hash_entry *)h->root.root.u.i.link;
2730
2731       if (hd->needs_lazy_stub)
2732         {
2733           /* Set type and value for a symbol with a function stub.  */
2734           h->esym.asym.st = stProc;
2735           sec = hd->root.root.u.def.section;
2736           if (sec == NULL)
2737             h->esym.asym.value = 0;
2738           else
2739             {
2740               output_section = sec->output_section;
2741               if (output_section != NULL)
2742                 h->esym.asym.value = (hd->root.plt.offset
2743                                       + sec->output_offset
2744                                       + output_section->vma);
2745               else
2746                 h->esym.asym.value = 0;
2747             }
2748         }
2749     }
2750
2751   if (! bfd_ecoff_debug_one_external (einfo->abfd, einfo->debug, einfo->swap,
2752                                       h->root.root.root.string,
2753                                       &h->esym))
2754     {
2755       einfo->failed = TRUE;
2756       return FALSE;
2757     }
2758
2759   return TRUE;
2760 }
2761
2762 /* A comparison routine used to sort .gptab entries.  */
2763
2764 static int
2765 gptab_compare (const void *p1, const void *p2)
2766 {
2767   const Elf32_gptab *a1 = p1;
2768   const Elf32_gptab *a2 = p2;
2769
2770   return a1->gt_entry.gt_g_value - a2->gt_entry.gt_g_value;
2771 }
2772 \f
2773 /* Functions to manage the got entry hash table.  */
2774
2775 /* Use all 64 bits of a bfd_vma for the computation of a 32-bit
2776    hash number.  */
2777
2778 static INLINE hashval_t
2779 mips_elf_hash_bfd_vma (bfd_vma addr)
2780 {
2781 #ifdef BFD64
2782   return addr + (addr >> 32);
2783 #else
2784   return addr;
2785 #endif
2786 }
2787
2788 /* got_entries only match if they're identical, except for gotidx, so
2789    use all fields to compute the hash, and compare the appropriate
2790    union members.  */
2791
2792 static int
2793 mips_elf_got_entry_eq (const void *entry1, const void *entry2)
2794 {
2795   const struct mips_got_entry *e1 = (struct mips_got_entry *)entry1;
2796   const struct mips_got_entry *e2 = (struct mips_got_entry *)entry2;
2797
2798   return (e1->abfd == e2->abfd
2799           && e1->symndx == e2->symndx
2800           && (e1->tls_type & GOT_TLS_TYPE) == (e2->tls_type & GOT_TLS_TYPE)
2801           && (!e1->abfd ? e1->d.address == e2->d.address
2802               : e1->symndx >= 0 ? e1->d.addend == e2->d.addend
2803               : e1->d.h == e2->d.h));
2804 }
2805
2806 /* multi_got_entries are still a match in the case of global objects,
2807    even if the input bfd in which they're referenced differs, so the
2808    hash computation and compare functions are adjusted
2809    accordingly.  */
2810
2811 static hashval_t
2812 mips_elf_got_entry_hash (const void *entry_)
2813 {
2814   const struct mips_got_entry *entry = (struct mips_got_entry *)entry_;
2815
2816   return (entry->symndx
2817           + (((entry->tls_type & GOT_TLS_TYPE) == GOT_TLS_LDM) << 18)
2818           + ((entry->tls_type & GOT_TLS_TYPE) == GOT_TLS_LDM ? 0
2819              : !entry->abfd ? mips_elf_hash_bfd_vma (entry->d.address)
2820              : entry->symndx >= 0 ? (entry->abfd->id
2821                                      + mips_elf_hash_bfd_vma (entry->d.addend))
2822              : entry->d.h->root.root.root.hash));
2823 }
2824
2825 static int
2826 mips_elf_multi_got_entry_eq (const void *entry1, const void *entry2)
2827 {
2828   const struct mips_got_entry *e1 = (struct mips_got_entry *)entry1;
2829   const struct mips_got_entry *e2 = (struct mips_got_entry *)entry2;
2830
2831   return (e1->symndx == e2->symndx
2832           && (e1->tls_type & GOT_TLS_TYPE) == (e2->tls_type & GOT_TLS_TYPE)
2833           && ((e1->tls_type & GOT_TLS_TYPE) == GOT_TLS_LDM ? TRUE
2834               : !e1->abfd ? !e2->abfd && e1->d.address == e2->d.address
2835               : e1->symndx >= 0 ? (e1->abfd == e2->abfd
2836                                    && e1->d.addend == e2->d.addend)
2837               : e2->abfd && e1->d.h == e2->d.h));
2838 }
2839
2840 static hashval_t
2841 mips_got_page_entry_hash (const void *entry_)
2842 {
2843   const struct mips_got_page_entry *entry;
2844
2845   entry = (const struct mips_got_page_entry *) entry_;
2846   return entry->abfd->id + entry->symndx;
2847 }
2848
2849 static int
2850 mips_got_page_entry_eq (const void *entry1_, const void *entry2_)
2851 {
2852   const struct mips_got_page_entry *entry1, *entry2;
2853
2854   entry1 = (const struct mips_got_page_entry *) entry1_;
2855   entry2 = (const struct mips_got_page_entry *) entry2_;
2856   return entry1->abfd == entry2->abfd && entry1->symndx == entry2->symndx;
2857 }
2858 \f
2859 /* Create and return a new mips_got_info structure.  MASTER_GOT_P
2860    is true if this is the master GOT rather than a multigot.  */
2861
2862 static struct mips_got_info *
2863 mips_elf_create_got_info (bfd *abfd, bfd_boolean master_got_p)
2864 {
2865   struct mips_got_info *g;
2866
2867   g = bfd_zalloc (abfd, sizeof (struct mips_got_info));
2868   if (g == NULL)
2869     return NULL;
2870
2871   g->tls_ldm_offset = MINUS_ONE;
2872   if (master_got_p)
2873     g->got_entries = htab_try_create (1, mips_elf_got_entry_hash,
2874                                       mips_elf_got_entry_eq, NULL);
2875   else
2876     g->got_entries = htab_try_create (1, mips_elf_got_entry_hash,
2877                                       mips_elf_multi_got_entry_eq, NULL);
2878   if (g->got_entries == NULL)
2879     return NULL;
2880
2881   g->got_page_entries = htab_try_create (1, mips_got_page_entry_hash,
2882                                          mips_got_page_entry_eq, NULL);
2883   if (g->got_page_entries == NULL)
2884     return NULL;
2885
2886   return g;
2887 }
2888
2889 /* Return the GOT info for input bfd ABFD, trying to create a new one if
2890    CREATE_P and if ABFD doesn't already have a GOT.  */
2891
2892 static struct mips_got_info *
2893 mips_elf_bfd_got (bfd *abfd, bfd_boolean create_p)
2894 {
2895   struct mips_elf_obj_tdata *tdata;
2896
2897   if (!is_mips_elf (abfd))
2898     return NULL;
2899
2900   tdata = mips_elf_tdata (abfd);
2901   if (!tdata->got && create_p)
2902     tdata->got = mips_elf_create_got_info (abfd, FALSE);
2903   return tdata->got;
2904 }
2905
2906 /* Return the dynamic relocation section.  If it doesn't exist, try to
2907    create a new it if CREATE_P, otherwise return NULL.  Also return NULL
2908    if creation fails.  */
2909
2910 static asection *
2911 mips_elf_rel_dyn_section (struct bfd_link_info *info, bfd_boolean create_p)
2912 {
2913   const char *dname;
2914   asection *sreloc;
2915   bfd *dynobj;
2916
2917   dname = MIPS_ELF_REL_DYN_NAME (info);
2918   dynobj = elf_hash_table (info)->dynobj;
2919   sreloc = bfd_get_linker_section (dynobj, dname);
2920   if (sreloc == NULL && create_p)
2921     {
2922       sreloc = bfd_make_section_anyway_with_flags (dynobj, dname,
2923                                                    (SEC_ALLOC
2924                                                     | SEC_LOAD
2925                                                     | SEC_HAS_CONTENTS
2926                                                     | SEC_IN_MEMORY
2927                                                     | SEC_LINKER_CREATED
2928                                                     | SEC_READONLY));
2929       if (sreloc == NULL
2930           || ! bfd_set_section_alignment (dynobj, sreloc,
2931                                           MIPS_ELF_LOG_FILE_ALIGN (dynobj)))
2932         return NULL;
2933     }
2934   return sreloc;
2935 }
2936
2937 /* Return the GOT_TLS_* type required by relocation type R_TYPE.  */
2938
2939 static int
2940 mips_elf_reloc_tls_type (unsigned int r_type)
2941 {
2942   if (tls_gd_reloc_p (r_type))
2943     return GOT_TLS_GD;
2944
2945   if (tls_ldm_reloc_p (r_type))
2946     return GOT_TLS_LDM;
2947
2948   if (tls_gottprel_reloc_p (r_type))
2949     return GOT_TLS_IE;
2950
2951   return GOT_NORMAL;
2952 }
2953
2954 /* Return the number of GOT slots needed for GOT TLS type TYPE.  */
2955
2956 static int
2957 mips_tls_got_entries (unsigned int type)
2958 {
2959   switch (type)
2960     {
2961     case GOT_TLS_GD:
2962     case GOT_TLS_LDM:
2963       return 2;
2964
2965     case GOT_TLS_IE:
2966       return 1;
2967
2968     case GOT_NORMAL:
2969       return 0;
2970     }
2971   abort ();
2972 }
2973
2974 /* Count the number of relocations needed for a TLS GOT entry, with
2975    access types from TLS_TYPE, and symbol H (or a local symbol if H
2976    is NULL).  */
2977
2978 static int
2979 mips_tls_got_relocs (struct bfd_link_info *info, unsigned char tls_type,
2980                      struct elf_link_hash_entry *h)
2981 {
2982   int indx = 0;
2983   bfd_boolean need_relocs = FALSE;
2984   bfd_boolean dyn = elf_hash_table (info)->dynamic_sections_created;
2985
2986   if (h && WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h)
2987       && (!info->shared || !SYMBOL_REFERENCES_LOCAL (info, h)))
2988     indx = h->dynindx;
2989
2990   if ((info->shared || indx != 0)
2991       && (h == NULL
2992           || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
2993           || h->root.type != bfd_link_hash_undefweak))
2994     need_relocs = TRUE;
2995
2996   if (!need_relocs)
2997     return 0;
2998
2999   switch (tls_type & GOT_TLS_TYPE)
3000     {
3001     case GOT_TLS_GD:
3002       return indx != 0 ? 2 : 1;
3003
3004     case GOT_TLS_IE:
3005       return 1;
3006
3007     case GOT_TLS_LDM:
3008       return info->shared ? 1 : 0;
3009
3010     default:
3011       return 0;
3012     }
3013 }
3014
3015 /* Add the number of GOT entries and TLS relocations required by ENTRY
3016    to G.  */
3017
3018 static void
3019 mips_elf_count_got_entry (struct bfd_link_info *info,
3020                           struct mips_got_info *g,
3021                           struct mips_got_entry *entry)
3022 {
3023   unsigned char tls_type;
3024
3025   tls_type = entry->tls_type & GOT_TLS_TYPE;
3026   if (tls_type)
3027     {
3028       g->tls_gotno += mips_tls_got_entries (tls_type);
3029       g->relocs += mips_tls_got_relocs (info, tls_type,
3030                                         entry->symndx < 0
3031                                         ? &entry->d.h->root : NULL);
3032     }
3033   else if (entry->symndx >= 0 || entry->d.h->global_got_area == GGA_NONE)
3034     g->local_gotno += 1;
3035   else
3036     g->global_gotno += 1;
3037 }
3038
3039 /* A htab_traverse callback.  If *SLOT describes a GOT entry for a local
3040    symbol, count the number of GOT entries and TLS relocations that it
3041    requires.  DATA points to a mips_elf_traverse_got_arg structure.  */
3042
3043 static int
3044 mips_elf_count_local_got_entries (void **entryp, void *data)
3045 {
3046   struct mips_got_entry *entry;
3047   struct mips_elf_traverse_got_arg *arg;
3048
3049   entry = (struct mips_got_entry *) *entryp;
3050   arg = (struct mips_elf_traverse_got_arg *) data;
3051   if (entry->abfd != NULL && entry->symndx != -1)
3052     {
3053       if ((entry->tls_type & GOT_TLS_TYPE) == GOT_TLS_LDM)
3054         {
3055           if (arg->g->tls_ldm_offset == MINUS_TWO)
3056             return 1;
3057           arg->g->tls_ldm_offset = MINUS_TWO;
3058         }
3059       mips_elf_count_got_entry (arg->info, arg->g, entry);
3060     }
3061
3062   return 1;
3063 }
3064
3065 /* Count the number of TLS GOT entries and relocationss required for the
3066    global (or forced-local) symbol in ARG1.  */
3067
3068 static int
3069 mips_elf_count_global_tls_entries (void *entry, void *data)
3070 {
3071   struct mips_elf_link_hash_entry *hm;
3072   struct mips_elf_traverse_got_arg *arg;
3073
3074   hm = (struct mips_elf_link_hash_entry *) entry;
3075   if (hm->root.root.type == bfd_link_hash_indirect
3076       || hm->root.root.type == bfd_link_hash_warning)
3077     return 1;
3078
3079   arg = (struct mips_elf_traverse_got_arg *) data;
3080   if (hm->tls_gd_type)
3081     {
3082       arg->g->tls_gotno += 2;
3083       arg->g->relocs += mips_tls_got_relocs (arg->info, hm->tls_gd_type,
3084                                              &hm->root);
3085     }
3086   if (hm->tls_ie_type)
3087     {
3088       arg->g->tls_gotno += 1;
3089       arg->g->relocs += mips_tls_got_relocs (arg->info, hm->tls_ie_type,
3090                                              &hm->root);
3091     }
3092
3093   return 1;
3094 }
3095
3096 /* Output a simple dynamic relocation into SRELOC.  */
3097
3098 static void
3099 mips_elf_output_dynamic_relocation (bfd *output_bfd,
3100                                     asection *sreloc,
3101                                     unsigned long reloc_index,
3102                                     unsigned long indx,
3103                                     int r_type,
3104                                     bfd_vma offset)
3105 {
3106   Elf_Internal_Rela rel[3];
3107
3108   memset (rel, 0, sizeof (rel));
3109
3110   rel[0].r_info = ELF_R_INFO (output_bfd, indx, r_type);
3111   rel[0].r_offset = rel[1].r_offset = rel[2].r_offset = offset;
3112
3113   if (ABI_64_P (output_bfd))
3114     {
3115       (*get_elf_backend_data (output_bfd)->s->swap_reloc_out)
3116         (output_bfd, &rel[0],
3117          (sreloc->contents
3118           + reloc_index * sizeof (Elf64_Mips_External_Rel)));
3119     }
3120   else
3121     bfd_elf32_swap_reloc_out
3122       (output_bfd, &rel[0],
3123        (sreloc->contents
3124         + reloc_index * sizeof (Elf32_External_Rel)));
3125 }
3126
3127 /* Initialize a set of TLS GOT entries for one symbol.  */
3128
3129 static void
3130 mips_elf_initialize_tls_slots (bfd *abfd, bfd_vma got_offset,
3131                                unsigned char *tls_type_p,
3132                                struct bfd_link_info *info,
3133                                struct mips_elf_link_hash_entry *h,
3134                                bfd_vma value)
3135 {
3136   struct mips_elf_link_hash_table *htab;
3137   int indx;
3138   asection *sreloc, *sgot;
3139   bfd_vma got_offset2;
3140   bfd_boolean need_relocs = FALSE;
3141
3142   htab = mips_elf_hash_table (info);
3143   if (htab == NULL)
3144     return;
3145
3146   sgot = htab->sgot;
3147
3148   indx = 0;
3149   if (h != NULL)
3150     {
3151       bfd_boolean dyn = elf_hash_table (info)->dynamic_sections_created;
3152
3153       if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, &h->root)
3154           && (!info->shared || !SYMBOL_REFERENCES_LOCAL (info, &h->root)))
3155         indx = h->root.dynindx;
3156     }
3157
3158   if (*tls_type_p & GOT_TLS_DONE)
3159     return;
3160
3161   if ((info->shared || indx != 0)
3162       && (h == NULL
3163           || ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT
3164           || h->root.type != bfd_link_hash_undefweak))
3165     need_relocs = TRUE;
3166
3167   /* MINUS_ONE means the symbol is not defined in this object.  It may not
3168      be defined at all; assume that the value doesn't matter in that
3169      case.  Otherwise complain if we would use the value.  */
3170   BFD_ASSERT (value != MINUS_ONE || (indx != 0 && need_relocs)
3171               || h->root.root.type == bfd_link_hash_undefweak);
3172
3173   /* Emit necessary relocations.  */
3174   sreloc = mips_elf_rel_dyn_section (info, FALSE);
3175
3176   switch (*tls_type_p & GOT_TLS_TYPE)
3177     {
3178     case GOT_TLS_GD:
3179       /* General Dynamic.  */
3180       got_offset2 = got_offset + MIPS_ELF_GOT_SIZE (abfd);
3181
3182       if (need_relocs)
3183         {
3184           mips_elf_output_dynamic_relocation
3185             (abfd, sreloc, sreloc->reloc_count++, indx,
3186              ABI_64_P (abfd) ? R_MIPS_TLS_DTPMOD64 : R_MIPS_TLS_DTPMOD32,
3187              sgot->output_offset + sgot->output_section->vma + got_offset);
3188
3189           if (indx)
3190             mips_elf_output_dynamic_relocation
3191               (abfd, sreloc, sreloc->reloc_count++, indx,
3192                ABI_64_P (abfd) ? R_MIPS_TLS_DTPREL64 : R_MIPS_TLS_DTPREL32,
3193                sgot->output_offset + sgot->output_section->vma + got_offset2);
3194           else
3195             MIPS_ELF_PUT_WORD (abfd, value - dtprel_base (info),
3196                                sgot->contents + got_offset2);
3197         }
3198       else
3199         {
3200           MIPS_ELF_PUT_WORD (abfd, 1,
3201                              sgot->contents + got_offset);
3202           MIPS_ELF_PUT_WORD (abfd, value - dtprel_base (info),
3203                              sgot->contents + got_offset2);
3204         }
3205       break;
3206
3207     case GOT_TLS_IE:
3208       /* Initial Exec model.  */
3209       if (need_relocs)
3210         {
3211           if (indx == 0)
3212             MIPS_ELF_PUT_WORD (abfd, value - elf_hash_table (info)->tls_sec->vma,
3213                                sgot->contents + got_offset);
3214           else
3215             MIPS_ELF_PUT_WORD (abfd, 0,
3216                                sgot->contents + got_offset);
3217
3218           mips_elf_output_dynamic_relocation
3219             (abfd, sreloc, sreloc->reloc_count++, indx,
3220              ABI_64_P (abfd) ? R_MIPS_TLS_TPREL64 : R_MIPS_TLS_TPREL32,
3221              sgot->output_offset + sgot->output_section->vma + got_offset);
3222         }
3223       else
3224         MIPS_ELF_PUT_WORD (abfd, value - tprel_base (info),
3225                            sgot->contents + got_offset);
3226       break;
3227
3228     case GOT_TLS_LDM:
3229       /* The initial offset is zero, and the LD offsets will include the
3230          bias by DTP_OFFSET.  */
3231       MIPS_ELF_PUT_WORD (abfd, 0,
3232                          sgot->contents + got_offset
3233                          + MIPS_ELF_GOT_SIZE (abfd));
3234
3235       if (!info->shared)
3236         MIPS_ELF_PUT_WORD (abfd, 1,
3237                            sgot->contents + got_offset);
3238       else
3239         mips_elf_output_dynamic_relocation
3240           (abfd, sreloc, sreloc->reloc_count++, indx,
3241            ABI_64_P (abfd) ? R_MIPS_TLS_DTPMOD64 : R_MIPS_TLS_DTPMOD32,
3242            sgot->output_offset + sgot->output_section->vma + got_offset);
3243       break;
3244
3245     default:
3246       abort ();
3247     }
3248
3249   *tls_type_p |= GOT_TLS_DONE;
3250 }
3251
3252 /* Return the GOT index to use for a relocation against H using the
3253    TLS model in *TLS_TYPE.  The GOT entries for this symbol/model
3254    combination start at GOT_INDEX into ABFD's GOT.  This function
3255    initializes the GOT entries and corresponding relocations.  */
3256
3257 static bfd_vma
3258 mips_tls_got_index (bfd *abfd, bfd_vma got_index, unsigned char *tls_type,
3259                     struct bfd_link_info *info,
3260                     struct mips_elf_link_hash_entry *h, bfd_vma symbol)
3261 {
3262   mips_elf_initialize_tls_slots (abfd, got_index, tls_type, info, h, symbol);
3263   return got_index;
3264 }
3265
3266 /* Return the GOT index to use for a relocation of type R_TYPE against H
3267    in ABFD.  */
3268
3269 static bfd_vma
3270 mips_tls_single_got_index (bfd *abfd, int r_type, struct bfd_link_info *info,
3271                            struct mips_elf_link_hash_entry *h, bfd_vma symbol)
3272 {
3273   if (tls_gottprel_reloc_p (r_type))
3274     return mips_tls_got_index (abfd, h->tls_ie_got_offset, &h->tls_ie_type,
3275                                info, h, symbol);
3276   if (tls_gd_reloc_p (r_type))
3277     return mips_tls_got_index (abfd, h->tls_gd_got_offset, &h->tls_gd_type,
3278                                info, h, symbol);
3279   abort ();
3280 }
3281
3282 /* Return the offset from _GLOBAL_OFFSET_TABLE_ of the .got.plt entry
3283    for global symbol H.  .got.plt comes before the GOT, so the offset
3284    will be negative.  */
3285
3286 static bfd_vma
3287 mips_elf_gotplt_index (struct bfd_link_info *info,
3288                        struct elf_link_hash_entry *h)
3289 {
3290   bfd_vma plt_index, got_address, got_value;
3291   struct mips_elf_link_hash_table *htab;
3292
3293   htab = mips_elf_hash_table (info);
3294   BFD_ASSERT (htab != NULL);
3295
3296   BFD_ASSERT (h->plt.offset != (bfd_vma) -1);
3297
3298   /* This function only works for VxWorks, because a non-VxWorks .got.plt
3299      section starts with reserved entries.  */
3300   BFD_ASSERT (htab->is_vxworks);
3301
3302   /* Calculate the index of the symbol's PLT entry.  */
3303   plt_index = (h->plt.offset - htab->plt_header_size) / htab->plt_entry_size;
3304
3305   /* Calculate the address of the associated .got.plt entry.  */
3306   got_address = (htab->sgotplt->output_section->vma
3307                  + htab->sgotplt->output_offset
3308                  + plt_index * 4);
3309
3310   /* Calculate the value of _GLOBAL_OFFSET_TABLE_.  */
3311   got_value = (htab->root.hgot->root.u.def.section->output_section->vma
3312                + htab->root.hgot->root.u.def.section->output_offset
3313                + htab->root.hgot->root.u.def.value);
3314
3315   return got_address - got_value;
3316 }
3317
3318 /* Return the GOT offset for address VALUE.   If there is not yet a GOT
3319    entry for this value, create one.  If R_SYMNDX refers to a TLS symbol,
3320    create a TLS GOT entry instead.  Return -1 if no satisfactory GOT
3321    offset can be found.  */
3322
3323 static bfd_vma
3324 mips_elf_local_got_index (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
3325                           bfd_vma value, unsigned long r_symndx,
3326                           struct mips_elf_link_hash_entry *h, int r_type)
3327 {
3328   struct mips_elf_link_hash_table *htab;
3329   struct mips_got_entry *entry;
3330
3331   htab = mips_elf_hash_table (info);
3332   BFD_ASSERT (htab != NULL);
3333
3334   entry = mips_elf_create_local_got_entry (abfd, info, ibfd, value,
3335                                            r_symndx, h, r_type);
3336   if (!entry)
3337     return MINUS_ONE;
3338
3339   if (entry->tls_type)
3340     {
3341       if (entry->symndx == -1 && htab->got_info->next == NULL)
3342         /* A type (3) entry in the single-GOT case.  We use the symbol's
3343            hash table entry to track the index.  */
3344         return mips_tls_single_got_index (abfd, r_type, info, h, value);
3345       else
3346         return mips_tls_got_index (abfd, entry->gotidx, &entry->tls_type,
3347                                    info, h, value);
3348     }
3349   else
3350     return entry->gotidx;
3351 }
3352
3353 /* Returns the GOT index for the global symbol indicated by H.  */
3354
3355 static bfd_vma
3356 mips_elf_global_got_index (bfd *abfd, bfd *ibfd, struct elf_link_hash_entry *h,
3357                            int r_type, struct bfd_link_info *info)
3358 {
3359   struct mips_elf_link_hash_table *htab;
3360   bfd_vma got_index;
3361   struct mips_got_info *g, *gg;
3362   long global_got_dynindx = 0;
3363
3364   htab = mips_elf_hash_table (info);
3365   BFD_ASSERT (htab != NULL);
3366
3367   gg = g = htab->got_info;
3368   if (g->bfd2got && ibfd)
3369     {
3370       struct mips_got_entry e, *p;
3371
3372       BFD_ASSERT (h->dynindx >= 0);
3373
3374       g = mips_elf_got_for_ibfd (g, ibfd);
3375       if (g->next != gg || TLS_RELOC_P (r_type))
3376         {
3377           e.abfd = ibfd;
3378           e.symndx = -1;
3379           e.d.h = (struct mips_elf_link_hash_entry *)h;
3380           e.tls_type = mips_elf_reloc_tls_type (r_type);
3381
3382           p = htab_find (g->got_entries, &e);
3383
3384           BFD_ASSERT (p && p->gotidx > 0);
3385
3386           if (p->tls_type)
3387             {
3388               bfd_vma value = MINUS_ONE;
3389               if ((h->root.type == bfd_link_hash_defined
3390                    || h->root.type == bfd_link_hash_defweak)
3391                   && h->root.u.def.section->output_section)
3392                 value = (h->root.u.def.value
3393                          + h->root.u.def.section->output_offset
3394                          + h->root.u.def.section->output_section->vma);
3395
3396               return mips_tls_got_index (abfd, p->gotidx, &p->tls_type,
3397                                          info, e.d.h, value);
3398             }
3399           else
3400             return p->gotidx;
3401         }
3402     }
3403
3404   if (htab->global_gotsym != NULL)
3405     global_got_dynindx = htab->global_gotsym->dynindx;
3406
3407   if (TLS_RELOC_P (r_type))
3408     {
3409       struct mips_elf_link_hash_entry *hm
3410         = (struct mips_elf_link_hash_entry *) h;
3411       bfd_vma value = MINUS_ONE;
3412
3413       if ((h->root.type == bfd_link_hash_defined
3414            || h->root.type == bfd_link_hash_defweak)
3415           && h->root.u.def.section->output_section)
3416         value = (h->root.u.def.value
3417                  + h->root.u.def.section->output_offset
3418                  + h->root.u.def.section->output_section->vma);
3419
3420       got_index = mips_tls_single_got_index (abfd, r_type, info, hm, value);
3421     }
3422   else
3423     {
3424       /* Once we determine the global GOT entry with the lowest dynamic
3425          symbol table index, we must put all dynamic symbols with greater
3426          indices into the GOT.  That makes it easy to calculate the GOT
3427          offset.  */
3428       BFD_ASSERT (h->dynindx >= global_got_dynindx);
3429       got_index = ((h->dynindx - global_got_dynindx + g->local_gotno)
3430                    * MIPS_ELF_GOT_SIZE (abfd));
3431     }
3432   BFD_ASSERT (got_index < htab->sgot->size);
3433
3434   return got_index;
3435 }
3436
3437 /* Find a GOT page entry that points to within 32KB of VALUE.  These
3438    entries are supposed to be placed at small offsets in the GOT, i.e.,
3439    within 32KB of GP.  Return the index of the GOT entry, or -1 if no
3440    entry could be created.  If OFFSETP is nonnull, use it to return the
3441    offset of the GOT entry from VALUE.  */
3442
3443 static bfd_vma
3444 mips_elf_got_page (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
3445                    bfd_vma value, bfd_vma *offsetp)
3446 {
3447   bfd_vma page, got_index;
3448   struct mips_got_entry *entry;
3449
3450   page = (value + 0x8000) & ~(bfd_vma) 0xffff;
3451   entry = mips_elf_create_local_got_entry (abfd, info, ibfd, page, 0,
3452                                            NULL, R_MIPS_GOT_PAGE);
3453
3454   if (!entry)
3455     return MINUS_ONE;
3456
3457   got_index = entry->gotidx;
3458
3459   if (offsetp)
3460     *offsetp = value - entry->d.address;
3461
3462   return got_index;
3463 }
3464
3465 /* Find a local GOT entry for an R_MIPS*_GOT16 relocation against VALUE.
3466    EXTERNAL is true if the relocation was originally against a global
3467    symbol that binds locally.  */
3468
3469 static bfd_vma
3470 mips_elf_got16_entry (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
3471                       bfd_vma value, bfd_boolean external)
3472 {
3473   struct mips_got_entry *entry;
3474
3475   /* GOT16 relocations against local symbols are followed by a LO16
3476      relocation; those against global symbols are not.  Thus if the
3477      symbol was originally local, the GOT16 relocation should load the
3478      equivalent of %hi(VALUE), otherwise it should load VALUE itself.  */
3479   if (! external)
3480     value = mips_elf_high (value) << 16;
3481
3482   /* It doesn't matter whether the original relocation was R_MIPS_GOT16,
3483      R_MIPS16_GOT16, R_MIPS_CALL16, etc.  The format of the entry is the
3484      same in all cases.  */
3485   entry = mips_elf_create_local_got_entry (abfd, info, ibfd, value, 0,
3486                                            NULL, R_MIPS_GOT16);
3487   if (entry)
3488     return entry->gotidx;
3489   else
3490     return MINUS_ONE;
3491 }
3492
3493 /* Returns the offset for the entry at the INDEXth position
3494    in the GOT.  */
3495
3496 static bfd_vma
3497 mips_elf_got_offset_from_index (struct bfd_link_info *info, bfd *output_bfd,
3498                                 bfd *input_bfd, bfd_vma got_index)
3499 {
3500   struct mips_elf_link_hash_table *htab;
3501   asection *sgot;
3502   bfd_vma gp;
3503
3504   htab = mips_elf_hash_table (info);
3505   BFD_ASSERT (htab != NULL);
3506
3507   sgot = htab->sgot;
3508   gp = _bfd_get_gp_value (output_bfd)
3509     + mips_elf_adjust_gp (output_bfd, htab->got_info, input_bfd);
3510
3511   return sgot->output_section->vma + sgot->output_offset + got_index - gp;
3512 }
3513
3514 /* Create and return a local GOT entry for VALUE, which was calculated
3515    from a symbol belonging to INPUT_SECTON.  Return NULL if it could not
3516    be created.  If R_SYMNDX refers to a TLS symbol, create a TLS entry
3517    instead.  */
3518
3519 static struct mips_got_entry *
3520 mips_elf_create_local_got_entry (bfd *abfd, struct bfd_link_info *info,
3521                                  bfd *ibfd, bfd_vma value,
3522                                  unsigned long r_symndx,
3523                                  struct mips_elf_link_hash_entry *h,
3524                                  int r_type)
3525 {
3526   struct mips_got_entry entry, **loc;
3527   struct mips_got_info *g;
3528   struct mips_elf_link_hash_table *htab;
3529
3530   htab = mips_elf_hash_table (info);
3531   BFD_ASSERT (htab != NULL);
3532
3533   entry.abfd = NULL;
3534   entry.symndx = -1;
3535   entry.d.address = value;
3536   entry.tls_type = mips_elf_reloc_tls_type (r_type);
3537
3538   g = mips_elf_got_for_ibfd (htab->got_info, ibfd);
3539   if (g == NULL)
3540     {
3541       g = mips_elf_got_for_ibfd (htab->got_info, abfd);
3542       BFD_ASSERT (g != NULL);
3543     }
3544
3545   /* This function shouldn't be called for symbols that live in the global
3546      area of the GOT.  */
3547   BFD_ASSERT (h == NULL || h->global_got_area == GGA_NONE);
3548   if (entry.tls_type)
3549     {
3550       struct mips_got_entry *p;
3551
3552       entry.abfd = ibfd;
3553       if (tls_ldm_reloc_p (r_type))
3554         {
3555           entry.symndx = 0;
3556           entry.d.addend = 0;
3557         }
3558       else if (h == NULL)
3559         {
3560           entry.symndx = r_symndx;
3561           entry.d.addend = 0;
3562         }
3563       else
3564         entry.d.h = h;
3565
3566       p = (struct mips_got_entry *)
3567         htab_find (g->got_entries, &entry);
3568
3569       BFD_ASSERT (p);
3570       return p;
3571     }
3572
3573   loc = (struct mips_got_entry **) htab_find_slot (g->got_entries, &entry,
3574                                                    INSERT);
3575   if (*loc)
3576     return *loc;
3577
3578   entry.gotidx = MIPS_ELF_GOT_SIZE (abfd) * g->assigned_gotno++;
3579
3580   *loc = (struct mips_got_entry *)bfd_alloc (abfd, sizeof entry);
3581
3582   if (! *loc)
3583     return NULL;
3584
3585   memcpy (*loc, &entry, sizeof entry);
3586
3587   if (g->assigned_gotno > g->local_gotno)
3588     {
3589       (*loc)->gotidx = -1;
3590       /* We didn't allocate enough space in the GOT.  */
3591       (*_bfd_error_handler)
3592         (_("not enough GOT space for local GOT entries"));
3593       bfd_set_error (bfd_error_bad_value);
3594       return NULL;
3595     }
3596
3597   MIPS_ELF_PUT_WORD (abfd, value,
3598                      (htab->sgot->contents + entry.gotidx));
3599
3600   /* These GOT entries need a dynamic relocation on VxWorks.  */
3601   if (htab->is_vxworks)
3602     {
3603       Elf_Internal_Rela outrel;
3604       asection *s;
3605       bfd_byte *rloc;
3606       bfd_vma got_address;
3607
3608       s = mips_elf_rel_dyn_section (info, FALSE);
3609       got_address = (htab->sgot->output_section->vma
3610                      + htab->sgot->output_offset
3611                      + entry.gotidx);
3612
3613       rloc = s->contents + (s->reloc_count++ * sizeof (Elf32_External_Rela));
3614       outrel.r_offset = got_address;
3615       outrel.r_info = ELF32_R_INFO (STN_UNDEF, R_MIPS_32);
3616       outrel.r_addend = value;
3617       bfd_elf32_swap_reloca_out (abfd, &outrel, rloc);
3618     }
3619
3620   return *loc;
3621 }
3622
3623 /* Return the number of dynamic section symbols required by OUTPUT_BFD.
3624    The number might be exact or a worst-case estimate, depending on how
3625    much information is available to elf_backend_omit_section_dynsym at
3626    the current linking stage.  */
3627
3628 static bfd_size_type
3629 count_section_dynsyms (bfd *output_bfd, struct bfd_link_info *info)
3630 {
3631   bfd_size_type count;
3632
3633   count = 0;
3634   if (info->shared || elf_hash_table (info)->is_relocatable_executable)
3635     {
3636       asection *p;
3637       const struct elf_backend_data *bed;
3638
3639       bed = get_elf_backend_data (output_bfd);
3640       for (p = output_bfd->sections; p ; p = p->next)
3641         if ((p->flags & SEC_EXCLUDE) == 0
3642             && (p->flags & SEC_ALLOC) != 0
3643             && !(*bed->elf_backend_omit_section_dynsym) (output_bfd, info, p))
3644           ++count;
3645     }
3646   return count;
3647 }
3648
3649 /* Sort the dynamic symbol table so that symbols that need GOT entries
3650    appear towards the end.  */
3651
3652 static bfd_boolean
3653 mips_elf_sort_hash_table (bfd *abfd, struct bfd_link_info *info)
3654 {
3655   struct mips_elf_link_hash_table *htab;
3656   struct mips_elf_hash_sort_data hsd;
3657   struct mips_got_info *g;
3658
3659   if (elf_hash_table (info)->dynsymcount == 0)
3660     return TRUE;
3661
3662   htab = mips_elf_hash_table (info);
3663   BFD_ASSERT (htab != NULL);
3664
3665   g = htab->got_info;
3666   if (g == NULL)
3667     return TRUE;
3668
3669   hsd.low = NULL;
3670   hsd.max_unref_got_dynindx
3671     = hsd.min_got_dynindx
3672     = (elf_hash_table (info)->dynsymcount - g->reloc_only_gotno);
3673   hsd.max_non_got_dynindx = count_section_dynsyms (abfd, info) + 1;
3674   mips_elf_link_hash_traverse (((struct mips_elf_link_hash_table *)
3675                                 elf_hash_table (info)),
3676                                mips_elf_sort_hash_table_f,
3677                                &hsd);
3678
3679   /* There should have been enough room in the symbol table to
3680      accommodate both the GOT and non-GOT symbols.  */
3681   BFD_ASSERT (hsd.max_non_got_dynindx <= hsd.min_got_dynindx);
3682   BFD_ASSERT ((unsigned long) hsd.max_unref_got_dynindx
3683               == elf_hash_table (info)->dynsymcount);
3684   BFD_ASSERT (elf_hash_table (info)->dynsymcount - hsd.min_got_dynindx
3685               == g->global_gotno);
3686
3687   /* Now we know which dynamic symbol has the lowest dynamic symbol
3688      table index in the GOT.  */
3689   htab->global_gotsym = hsd.low;
3690
3691   return TRUE;
3692 }
3693
3694 /* If H needs a GOT entry, assign it the highest available dynamic
3695    index.  Otherwise, assign it the lowest available dynamic
3696    index.  */
3697
3698 static bfd_boolean
3699 mips_elf_sort_hash_table_f (struct mips_elf_link_hash_entry *h, void *data)
3700 {
3701   struct mips_elf_hash_sort_data *hsd = data;
3702
3703   /* Symbols without dynamic symbol table entries aren't interesting
3704      at all.  */
3705   if (h->root.dynindx == -1)
3706     return TRUE;
3707
3708   switch (h->global_got_area)
3709     {
3710     case GGA_NONE:
3711       h->root.dynindx = hsd->max_non_got_dynindx++;
3712       break;
3713
3714     case GGA_NORMAL:
3715       h->root.dynindx = --hsd->min_got_dynindx;
3716       hsd->low = (struct elf_link_hash_entry *) h;
3717       break;
3718
3719     case GGA_RELOC_ONLY:
3720       if (hsd->max_unref_got_dynindx == hsd->min_got_dynindx)
3721         hsd->low = (struct elf_link_hash_entry *) h;
3722       h->root.dynindx = hsd->max_unref_got_dynindx++;
3723       break;
3724     }
3725
3726   return TRUE;
3727 }
3728
3729 /* Record that input bfd ABFD requires a GOT entry like *LOOKUP
3730    (which is owned by the caller and shouldn't be added to the
3731    hash table directly).  */
3732
3733 static bfd_boolean
3734 mips_elf_record_got_entry (struct bfd_link_info *info, bfd *abfd,
3735                            struct mips_got_entry *lookup)
3736 {
3737   struct mips_elf_link_hash_table *htab;
3738   struct mips_got_entry *entry;
3739   struct mips_got_info *g;
3740   void **loc, **bfd_loc;
3741
3742   /* Make sure there's a slot for this entry in the master GOT.  */
3743   htab = mips_elf_hash_table (info);
3744   g = htab->got_info;
3745   loc = htab_find_slot (g->got_entries, lookup, INSERT);
3746   if (!loc)
3747     return FALSE;
3748
3749   /* Populate the entry if it isn't already.  */
3750   entry = (struct mips_got_entry *) *loc;
3751   if (!entry)
3752     {
3753       entry = (struct mips_got_entry *) bfd_alloc (abfd, sizeof (*entry));
3754       if (!entry)
3755         return FALSE;
3756
3757       lookup->gotidx = -1;
3758       *entry = *lookup;
3759       *loc = entry;
3760     }
3761
3762   /* Reuse the same GOT entry for the BFD's GOT.  */
3763   g = mips_elf_bfd_got (abfd, TRUE);
3764   if (!g)
3765     return FALSE;
3766
3767   bfd_loc = htab_find_slot (g->got_entries, lookup, INSERT);
3768   if (!bfd_loc)
3769     return FALSE;
3770
3771   if (!*bfd_loc)
3772     *bfd_loc = entry;
3773   return TRUE;
3774 }
3775
3776 /* ABFD has a GOT relocation of type R_TYPE against H.  Reserve a GOT
3777    entry for it.  FOR_CALL is true if the caller is only interested in
3778    using the GOT entry for calls.  */
3779
3780 static bfd_boolean
3781 mips_elf_record_global_got_symbol (struct elf_link_hash_entry *h,
3782                                    bfd *abfd, struct bfd_link_info *info,
3783                                    bfd_boolean for_call, int r_type)
3784 {
3785   struct mips_elf_link_hash_table *htab;
3786   struct mips_elf_link_hash_entry *hmips;
3787   struct mips_got_entry entry;
3788   unsigned char tls_type;
3789
3790   htab = mips_elf_hash_table (info);
3791   BFD_ASSERT (htab != NULL);
3792
3793   hmips = (struct mips_elf_link_hash_entry *) h;
3794   if (!for_call)
3795     hmips->got_only_for_calls = FALSE;
3796
3797   /* A global symbol in the GOT must also be in the dynamic symbol
3798      table.  */
3799   if (h->dynindx == -1)
3800     {
3801       switch (ELF_ST_VISIBILITY (h->other))
3802         {
3803         case STV_INTERNAL:
3804         case STV_HIDDEN:
3805           _bfd_elf_link_hash_hide_symbol (info, h, TRUE);
3806           break;
3807         }
3808       if (!bfd_elf_link_record_dynamic_symbol (info, h))
3809         return FALSE;
3810     }
3811
3812   tls_type = mips_elf_reloc_tls_type (r_type);
3813   if (tls_type == GOT_NORMAL && hmips->global_got_area > GGA_NORMAL)
3814     hmips->global_got_area = GGA_NORMAL;
3815   else if (tls_type == GOT_TLS_IE && hmips->tls_ie_type == 0)
3816     hmips->tls_ie_type = tls_type;
3817   else if (tls_type == GOT_TLS_GD && hmips->tls_gd_type == 0)
3818     hmips->tls_gd_type = tls_type;
3819
3820   entry.abfd = abfd;
3821   entry.symndx = -1;
3822   entry.d.h = (struct mips_elf_link_hash_entry *) h;
3823   entry.tls_type = tls_type;
3824   return mips_elf_record_got_entry (info, abfd, &entry);
3825 }
3826
3827 /* ABFD has a GOT relocation of type R_TYPE against symbol SYMNDX + ADDEND,
3828    where SYMNDX is a local symbol.  Reserve a GOT entry for it.  */
3829
3830 static bfd_boolean
3831 mips_elf_record_local_got_symbol (bfd *abfd, long symndx, bfd_vma addend,
3832                                   struct bfd_link_info *info, int r_type)
3833 {
3834   struct mips_elf_link_hash_table *htab;
3835   struct mips_got_info *g;
3836   struct mips_got_entry entry;
3837
3838   htab = mips_elf_hash_table (info);
3839   BFD_ASSERT (htab != NULL);
3840
3841   g = htab->got_info;
3842   BFD_ASSERT (g != NULL);
3843
3844   entry.abfd = abfd;
3845   entry.symndx = symndx;
3846   entry.d.addend = addend;
3847   entry.tls_type = mips_elf_reloc_tls_type (r_type);
3848   return mips_elf_record_got_entry (info, abfd, &entry);
3849 }
3850
3851 /* Return the maximum number of GOT page entries required for RANGE.  */
3852
3853 static bfd_vma
3854 mips_elf_pages_for_range (const struct mips_got_page_range *range)
3855 {
3856   return (range->max_addend - range->min_addend + 0x1ffff) >> 16;
3857 }
3858
3859 /* Record that ABFD has a page relocation against symbol SYMNDX and
3860    that ADDEND is the addend for that relocation.
3861
3862    This function creates an upper bound on the number of GOT slots
3863    required; no attempt is made to combine references to non-overridable
3864    global symbols across multiple input files.  */
3865
3866 static bfd_boolean
3867 mips_elf_record_got_page_entry (struct bfd_link_info *info, bfd *abfd,
3868                                 long symndx, bfd_signed_vma addend)
3869 {
3870   struct mips_elf_link_hash_table *htab;
3871   struct mips_got_info *g1, *g2;
3872   struct mips_got_page_entry lookup, *entry;
3873   struct mips_got_page_range **range_ptr, *range;
3874   bfd_vma old_pages, new_pages;
3875   void **loc, **bfd_loc;
3876
3877   htab = mips_elf_hash_table (info);
3878   BFD_ASSERT (htab != NULL);
3879
3880   g1 = htab->got_info;
3881   BFD_ASSERT (g1 != NULL);
3882
3883   /* Find the mips_got_page_entry hash table entry for this symbol.  */
3884   lookup.abfd = abfd;
3885   lookup.symndx = symndx;
3886   loc = htab_find_slot (g1->got_page_entries, &lookup, INSERT);
3887   if (loc == NULL)
3888     return FALSE;
3889
3890   /* Create a mips_got_page_entry if this is the first time we've
3891      seen the symbol.  */
3892   entry = (struct mips_got_page_entry *) *loc;
3893   if (!entry)
3894     {
3895       entry = bfd_alloc (abfd, sizeof (*entry));
3896       if (!entry)
3897         return FALSE;
3898
3899       entry->abfd = abfd;
3900       entry->symndx = symndx;
3901       entry->ranges = NULL;
3902       entry->num_pages = 0;
3903       *loc = entry;
3904     }
3905
3906   /* Add the same entry to the BFD's GOT.  */
3907   g2 = mips_elf_bfd_got (abfd, TRUE);
3908   if (!g2)
3909     return FALSE;
3910
3911   bfd_loc = htab_find_slot (g2->got_page_entries, &lookup, INSERT);
3912   if (!bfd_loc)
3913     return FALSE;
3914
3915   if (!*bfd_loc)
3916     *bfd_loc = entry;
3917
3918   /* Skip over ranges whose maximum extent cannot share a page entry
3919      with ADDEND.  */
3920   range_ptr = &entry->ranges;
3921   while (*range_ptr && addend > (*range_ptr)->max_addend + 0xffff)
3922     range_ptr = &(*range_ptr)->next;
3923
3924   /* If we scanned to the end of the list, or found a range whose
3925      minimum extent cannot share a page entry with ADDEND, create
3926      a new singleton range.  */
3927   range = *range_ptr;
3928   if (!range || addend < range->min_addend - 0xffff)
3929     {
3930       range = bfd_alloc (abfd, sizeof (*range));
3931       if (!range)
3932         return FALSE;
3933
3934       range->next = *range_ptr;
3935       range->min_addend = addend;
3936       range->max_addend = addend;
3937
3938       *range_ptr = range;
3939       entry->num_pages++;
3940       g1->page_gotno++;
3941       g2->page_gotno++;
3942       return TRUE;
3943     }
3944
3945   /* Remember how many pages the old range contributed.  */
3946   old_pages = mips_elf_pages_for_range (range);
3947
3948   /* Update the ranges.  */
3949   if (addend < range->min_addend)
3950     range->min_addend = addend;
3951   else if (addend > range->max_addend)
3952     {
3953       if (range->next && addend >= range->next->min_addend - 0xffff)
3954         {
3955           old_pages += mips_elf_pages_for_range (range->next);
3956           range->max_addend = range->next->max_addend;
3957           range->next = range->next->next;
3958         }
3959       else
3960         range->max_addend = addend;
3961     }
3962
3963   /* Record any change in the total estimate.  */
3964   new_pages = mips_elf_pages_for_range (range);
3965   if (old_pages != new_pages)
3966     {
3967       entry->num_pages += new_pages - old_pages;
3968       g1->page_gotno += new_pages - old_pages;
3969       g2->page_gotno += new_pages - old_pages;
3970     }
3971
3972   return TRUE;
3973 }
3974
3975 /* Add room for N relocations to the .rel(a).dyn section in ABFD.  */
3976
3977 static void
3978 mips_elf_allocate_dynamic_relocations (bfd *abfd, struct bfd_link_info *info,
3979                                        unsigned int n)
3980 {
3981   asection *s;
3982   struct mips_elf_link_hash_table *htab;
3983
3984   htab = mips_elf_hash_table (info);
3985   BFD_ASSERT (htab != NULL);
3986
3987   s = mips_elf_rel_dyn_section (info, FALSE);
3988   BFD_ASSERT (s != NULL);
3989
3990   if (htab->is_vxworks)
3991     s->size += n * MIPS_ELF_RELA_SIZE (abfd);
3992   else
3993     {
3994       if (s->size == 0)
3995         {
3996           /* Make room for a null element.  */
3997           s->size += MIPS_ELF_REL_SIZE (abfd);
3998           ++s->reloc_count;
3999         }
4000       s->size += n * MIPS_ELF_REL_SIZE (abfd);
4001     }
4002 }
4003 \f
4004 /* A htab_traverse callback for GOT entries.  Set boolean *DATA to true
4005    if the GOT entry is for an indirect or warning symbol.  */
4006
4007 static int
4008 mips_elf_check_recreate_got (void **entryp, void *data)
4009 {
4010   struct mips_got_entry *entry;
4011   bfd_boolean *must_recreate;
4012
4013   entry = (struct mips_got_entry *) *entryp;
4014   must_recreate = (bfd_boolean *) data;
4015   if (entry->abfd != NULL && entry->symndx == -1)
4016     {
4017       struct mips_elf_link_hash_entry *h;
4018
4019       h = entry->d.h;
4020       if (h->root.root.type == bfd_link_hash_indirect
4021           || h->root.root.type == bfd_link_hash_warning)
4022         {
4023           *must_recreate = TRUE;
4024           return 0;
4025         }
4026     }
4027   return 1;
4028 }
4029
4030 /* A htab_traverse callback for GOT entries.  Add all entries to
4031    hash table *DATA, converting entries for indirect and warning
4032    symbols into entries for the target symbol.  Set *DATA to null
4033    on error.  */
4034
4035 static int
4036 mips_elf_recreate_got (void **entryp, void *data)
4037 {
4038   htab_t *new_got;
4039   struct mips_got_entry new_entry, *entry;
4040   void **slot;
4041
4042   new_got = (htab_t *) data;
4043   entry = (struct mips_got_entry *) *entryp;
4044   if (entry->abfd != NULL
4045       && entry->symndx == -1
4046       && (entry->d.h->root.root.type == bfd_link_hash_indirect
4047           || entry->d.h->root.root.type == bfd_link_hash_warning))
4048     {
4049       struct mips_elf_link_hash_entry *h;
4050
4051       new_entry = *entry;
4052       entry = &new_entry;
4053       h = entry->d.h;
4054       do
4055         {
4056           BFD_ASSERT (h->global_got_area == GGA_NONE);
4057           h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
4058         }
4059       while (h->root.root.type == bfd_link_hash_indirect
4060              || h->root.root.type == bfd_link_hash_warning);
4061       entry->d.h = h;
4062     }
4063   slot = htab_find_slot (*new_got, entry, INSERT);
4064   if (slot == NULL)
4065     {
4066       *new_got = NULL;
4067       return 0;
4068     }
4069   if (*slot == NULL)
4070     {
4071       if (entry == &new_entry)
4072         {
4073           entry = bfd_alloc (entry->abfd, sizeof (*entry));
4074           if (!entry)
4075             {
4076               *new_got = NULL;
4077               return 0;
4078             }
4079           *entry = new_entry;
4080         }
4081       *slot = entry;
4082     }
4083   return 1;
4084 }
4085
4086 /* If any entries in G->got_entries are for indirect or warning symbols,
4087    replace them with entries for the target symbol.  */
4088
4089 static bfd_boolean
4090 mips_elf_resolve_final_got_entries (struct mips_got_info *g)
4091 {
4092   bfd_boolean must_recreate;
4093   htab_t new_got;
4094
4095   must_recreate = FALSE;
4096   htab_traverse (g->got_entries, mips_elf_check_recreate_got, &must_recreate);
4097   if (must_recreate)
4098     {
4099       new_got = htab_create (htab_size (g->got_entries),
4100                              mips_elf_got_entry_hash,
4101                              mips_elf_got_entry_eq, NULL);
4102       htab_traverse (g->got_entries, mips_elf_recreate_got, &new_got);
4103       if (new_got == NULL)
4104         return FALSE;
4105
4106       htab_delete (g->got_entries);
4107       g->got_entries = new_got;
4108     }
4109   return TRUE;
4110 }
4111
4112 /* A mips_elf_link_hash_traverse callback for which DATA points
4113    to the link_info structure.  Count the number of type (3) entries
4114    in the master GOT.  */
4115
4116 static int
4117 mips_elf_count_got_symbols (struct mips_elf_link_hash_entry *h, void *data)
4118 {
4119   struct bfd_link_info *info;
4120   struct mips_elf_link_hash_table *htab;
4121   struct mips_got_info *g;
4122
4123   info = (struct bfd_link_info *) data;
4124   htab = mips_elf_hash_table (info);
4125   g = htab->got_info;
4126   if (h->global_got_area != GGA_NONE)
4127     {
4128       /* Make a final decision about whether the symbol belongs in the
4129          local or global GOT.  Symbols that bind locally can (and in the
4130          case of forced-local symbols, must) live in the local GOT.
4131          Those that are aren't in the dynamic symbol table must also
4132          live in the local GOT.
4133
4134          Note that the former condition does not always imply the
4135          latter: symbols do not bind locally if they are completely
4136          undefined.  We'll report undefined symbols later if appropriate.  */
4137       if (h->root.dynindx == -1
4138           || (h->got_only_for_calls
4139               ? SYMBOL_CALLS_LOCAL (info, &h->root)
4140               : SYMBOL_REFERENCES_LOCAL (info, &h->root)))
4141         {
4142           /* The symbol belongs in the local GOT.  We no longer need this
4143              entry if it was only used for relocations; those relocations
4144              will be against the null or section symbol instead of H.  */
4145           if (h->global_got_area != GGA_RELOC_ONLY)
4146             g->local_gotno++;
4147           h->global_got_area = GGA_NONE;
4148         }
4149       else if (htab->is_vxworks
4150                && h->got_only_for_calls
4151                && h->root.plt.offset != MINUS_ONE)
4152         /* On VxWorks, calls can refer directly to the .got.plt entry;
4153            they don't need entries in the regular GOT.  .got.plt entries
4154            will be allocated by _bfd_mips_elf_adjust_dynamic_symbol.  */
4155         h->global_got_area = GGA_NONE;
4156       else
4157         {
4158           g->global_gotno++;
4159           if (h->global_got_area == GGA_RELOC_ONLY)
4160             g->reloc_only_gotno++;
4161         }
4162     }
4163   return 1;
4164 }
4165 \f
4166 /* Compute the hash value of the bfd in a bfd2got hash entry.  */
4167
4168 static hashval_t
4169 mips_elf_bfd2got_entry_hash (const void *entry_)
4170 {
4171   const struct mips_elf_bfd2got_hash *entry
4172     = (struct mips_elf_bfd2got_hash *)entry_;
4173
4174   return entry->bfd->id;
4175 }
4176
4177 /* Check whether two hash entries have the same bfd.  */
4178
4179 static int
4180 mips_elf_bfd2got_entry_eq (const void *entry1, const void *entry2)
4181 {
4182   const struct mips_elf_bfd2got_hash *e1
4183     = (const struct mips_elf_bfd2got_hash *)entry1;
4184   const struct mips_elf_bfd2got_hash *e2
4185     = (const struct mips_elf_bfd2got_hash *)entry2;
4186
4187   return e1->bfd == e2->bfd;
4188 }
4189
4190 /* In a multi-got link, determine the GOT to be used for IBFD.  G must
4191    be the master GOT data.  */
4192
4193 static struct mips_got_info *
4194 mips_elf_got_for_ibfd (struct mips_got_info *g, bfd *ibfd)
4195 {
4196   struct mips_elf_bfd2got_hash e, *p;
4197
4198   if (! g->bfd2got)
4199     return g;
4200
4201   e.bfd = ibfd;
4202   p = htab_find (g->bfd2got, &e);
4203   return p ? p->g : NULL;
4204 }
4205
4206 /* Use BFD2GOT to find ABFD's got entry, creating one if none exists.
4207    Return NULL if an error occured.  */
4208
4209 static struct mips_got_info *
4210 mips_elf_get_got_for_bfd (struct htab *bfd2got, bfd *output_bfd,
4211                           bfd *input_bfd)
4212 {
4213   struct mips_elf_bfd2got_hash bfdgot_entry, *bfdgot;
4214   void **bfdgotp;
4215
4216   bfdgot_entry.bfd = input_bfd;
4217   bfdgotp = htab_find_slot (bfd2got, &bfdgot_entry, INSERT);
4218   bfdgot = (struct mips_elf_bfd2got_hash *) *bfdgotp;
4219
4220   if (bfdgot == NULL)
4221     {
4222       bfdgot = ((struct mips_elf_bfd2got_hash *)
4223                 bfd_alloc (output_bfd, sizeof (struct mips_elf_bfd2got_hash)));
4224       if (bfdgot == NULL)
4225         return NULL;
4226
4227       *bfdgotp = bfdgot;
4228
4229       bfdgot->bfd = input_bfd;
4230       bfdgot->g = mips_elf_create_got_info (input_bfd, FALSE);
4231       if (bfdgot->g == NULL)
4232         return NULL;
4233     }
4234
4235   return bfdgot->g;
4236 }
4237
4238 /* A htab_traverse callback for the entries in the master got.
4239    Create one separate got for each bfd that has entries in the global
4240    got, such that we can tell how many local and global entries each
4241    bfd requires.  */
4242
4243 static int
4244 mips_elf_make_got_per_bfd (void **entryp, void *p)
4245 {
4246   struct mips_got_entry *entry = (struct mips_got_entry *)*entryp;
4247   struct mips_elf_got_per_bfd_arg *arg = (struct mips_elf_got_per_bfd_arg *)p;
4248   struct mips_got_info *g;
4249
4250   g = mips_elf_get_got_for_bfd (arg->bfd2got, arg->obfd, entry->abfd);
4251   if (g == NULL)
4252     {
4253       arg->obfd = NULL;
4254       return 0;
4255     }
4256
4257   /* Insert the GOT entry in the bfd's got entry hash table.  */
4258   entryp = htab_find_slot (g->got_entries, entry, INSERT);
4259   if (*entryp != NULL)
4260     return 1;
4261
4262   *entryp = entry;
4263   mips_elf_count_got_entry (arg->info, g, entry);
4264
4265   return 1;
4266 }
4267
4268 /* A htab_traverse callback for the page entries in the master got.
4269    Associate each page entry with the bfd's got.  */
4270
4271 static int
4272 mips_elf_make_got_pages_per_bfd (void **entryp, void *p)
4273 {
4274   struct mips_got_page_entry *entry = (struct mips_got_page_entry *) *entryp;
4275   struct mips_elf_got_per_bfd_arg *arg = (struct mips_elf_got_per_bfd_arg *) p;
4276   struct mips_got_info *g;
4277
4278   g = mips_elf_get_got_for_bfd (arg->bfd2got, arg->obfd, entry->abfd);
4279   if (g == NULL)
4280     {
4281       arg->obfd = NULL;
4282       return 0;
4283     }
4284
4285   /* Insert the GOT entry in the bfd's got entry hash table.  */
4286   entryp = htab_find_slot (g->got_page_entries, entry, INSERT);
4287   if (*entryp != NULL)
4288     return 1;
4289
4290   *entryp = entry;
4291   g->page_gotno += entry->num_pages;
4292   return 1;
4293 }
4294
4295 /* Consider merging the got described by BFD2GOT with TO, using the
4296    information given by ARG.  Return -1 if this would lead to overflow,
4297    1 if they were merged successfully, and 0 if a merge failed due to
4298    lack of memory.  (These values are chosen so that nonnegative return
4299    values can be returned by a htab_traverse callback.)  */
4300
4301 static int
4302 mips_elf_merge_got_with (struct mips_elf_bfd2got_hash *bfd2got,
4303                          struct mips_got_info *to,
4304                          struct mips_elf_got_per_bfd_arg *arg)
4305 {
4306   struct mips_got_info *from = bfd2got->g;
4307   unsigned int estimate;
4308
4309   /* Work out how many page entries we would need for the combined GOT.  */
4310   estimate = arg->max_pages;
4311   if (estimate >= from->page_gotno + to->page_gotno)
4312     estimate = from->page_gotno + to->page_gotno;
4313
4314   /* And conservatively estimate how many local and TLS entries
4315      would be needed.  */
4316   estimate += from->local_gotno + to->local_gotno;
4317   estimate += from->tls_gotno + to->tls_gotno;
4318
4319   /* If we're merging with the primary got, any TLS relocations will
4320      come after the full set of global entries.  Otherwise estimate those
4321      conservatively as well.  */
4322   if (to == arg->primary && from->tls_gotno + to->tls_gotno)
4323     estimate += arg->global_count;
4324   else
4325     estimate += from->global_gotno + to->global_gotno;
4326
4327   /* Bail out if the combined GOT might be too big.  */
4328   if (estimate > arg->max_count)
4329     return -1;
4330
4331   /* Commit to the merge.  Record that TO is now the bfd for this got.  */
4332   bfd2got->g = to;
4333
4334   /* Transfer the bfd's got information from FROM to TO.  */
4335   htab_traverse (from->got_entries, mips_elf_make_got_per_bfd, arg);
4336   if (arg->obfd == NULL)
4337     return 0;
4338
4339   htab_traverse (from->got_page_entries, mips_elf_make_got_pages_per_bfd, arg);
4340   if (arg->obfd == NULL)
4341     return 0;
4342
4343   /* We don't have to worry about releasing memory of the actual
4344      got entries, since they're all in the master got_entries hash
4345      table anyway.  */
4346   htab_delete (from->got_entries);
4347   htab_delete (from->got_page_entries);
4348   return 1;
4349 }
4350
4351 /* Attempt to merge gots of different input bfds.  Try to use as much
4352    as possible of the primary got, since it doesn't require explicit
4353    dynamic relocations, but don't use bfds that would reference global
4354    symbols out of the addressable range.  Failing the primary got,
4355    attempt to merge with the current got, or finish the current got
4356    and then make make the new got current.  */
4357
4358 static int
4359 mips_elf_merge_gots (void **bfd2got_, void *p)
4360 {
4361   struct mips_elf_bfd2got_hash *bfd2got
4362     = (struct mips_elf_bfd2got_hash *)*bfd2got_;
4363   struct mips_elf_got_per_bfd_arg *arg = (struct mips_elf_got_per_bfd_arg *)p;
4364   struct mips_got_info *g;
4365   unsigned int estimate;
4366   int result;
4367
4368   g = bfd2got->g;
4369
4370   /* Work out the number of page, local and TLS entries.  */
4371   estimate = arg->max_pages;
4372   if (estimate > g->page_gotno)
4373     estimate = g->page_gotno;
4374   estimate += g->local_gotno + g->tls_gotno;
4375
4376   /* We place TLS GOT entries after both locals and globals.  The globals
4377      for the primary GOT may overflow the normal GOT size limit, so be
4378      sure not to merge a GOT which requires TLS with the primary GOT in that
4379      case.  This doesn't affect non-primary GOTs.  */
4380   estimate += (g->tls_gotno > 0 ? arg->global_count : g->global_gotno);
4381
4382   if (estimate <= arg->max_count)
4383     {
4384       /* If we don't have a primary GOT, use it as
4385          a starting point for the primary GOT.  */
4386       if (!arg->primary)
4387         {
4388           arg->primary = bfd2got->g;
4389           return 1;
4390         }
4391
4392       /* Try merging with the primary GOT.  */
4393       result = mips_elf_merge_got_with (bfd2got, arg->primary, arg);
4394       if (result >= 0)
4395         return result;
4396     }
4397
4398   /* If we can merge with the last-created got, do it.  */
4399   if (arg->current)
4400     {
4401       result = mips_elf_merge_got_with (bfd2got, arg->current, arg);
4402       if (result >= 0)
4403         return result;
4404     }
4405
4406   /* Well, we couldn't merge, so create a new GOT.  Don't check if it
4407      fits; if it turns out that it doesn't, we'll get relocation
4408      overflows anyway.  */
4409   g->next = arg->current;
4410   arg->current = g;
4411
4412   return 1;
4413 }
4414
4415 /* ENTRYP is a hash table entry for a mips_got_entry.  Set its gotidx
4416    to GOTIDX, duplicating the entry if it has already been assigned
4417    an index in a different GOT.  */
4418
4419 static bfd_boolean
4420 mips_elf_set_gotidx (void **entryp, long gotidx)
4421 {
4422   struct mips_got_entry *entry;
4423
4424   entry = (struct mips_got_entry *) *entryp;
4425   if (entry->gotidx > 0)
4426     {
4427       struct mips_got_entry *new_entry;
4428
4429       new_entry = bfd_alloc (entry->abfd, sizeof (*entry));
4430       if (!new_entry)
4431         return FALSE;
4432
4433       *new_entry = *entry;
4434       *entryp = new_entry;
4435       entry = new_entry;
4436     }
4437   entry->gotidx = gotidx;
4438   return TRUE;
4439 }
4440
4441 /* Set the TLS GOT index for the GOT entry in ENTRYP.  DATA points to a
4442    mips_elf_traverse_got_arg in which DATA->value is the size of one
4443    GOT entry.  Set DATA->g to null on failure.  */
4444
4445 static int
4446 mips_elf_initialize_tls_index (void **entryp, void *data)
4447 {
4448   struct mips_got_entry *entry;
4449   struct mips_elf_traverse_got_arg *arg;
4450   struct mips_got_info *g;
4451   bfd_vma next_index;
4452   unsigned char tls_type;
4453
4454   /* We're only interested in TLS symbols.  */
4455   entry = (struct mips_got_entry *) *entryp;
4456   tls_type = (entry->tls_type & GOT_TLS_TYPE);
4457   if (tls_type == 0)
4458     return 1;
4459
4460   arg = (struct mips_elf_traverse_got_arg *) data;
4461   g = arg->g;
4462   next_index = arg->value * g->tls_assigned_gotno;
4463
4464   if (entry->symndx == -1 && g->next == NULL)
4465     {
4466       /* A type (3) got entry in the single-GOT case.  We use the symbol's
4467          hash table entry to track its index.  */
4468       if (tls_type == GOT_TLS_IE)
4469         {
4470           if (entry->d.h->tls_ie_type & GOT_TLS_OFFSET_DONE)
4471             return 1;
4472           entry->d.h->tls_ie_type |= GOT_TLS_OFFSET_DONE;
4473           entry->d.h->tls_ie_got_offset = next_index;
4474         }
4475       else
4476         {
4477           BFD_ASSERT (tls_type == GOT_TLS_GD);
4478           if (entry->d.h->tls_gd_type & GOT_TLS_OFFSET_DONE)
4479             return 1;
4480           entry->d.h->tls_gd_type |= GOT_TLS_OFFSET_DONE;
4481           entry->d.h->tls_gd_got_offset = next_index;
4482         }
4483     }
4484   else
4485     {
4486       if (tls_type == GOT_TLS_LDM)
4487         {
4488           /* There are separate mips_got_entry objects for each input bfd
4489              that requires an LDM entry.  Make sure that all LDM entries in
4490              a GOT resolve to the same index.  */
4491           if (g->tls_ldm_offset != MINUS_TWO && g->tls_ldm_offset != MINUS_ONE)
4492             {
4493               entry->gotidx = g->tls_ldm_offset;
4494               return 1;
4495             }
4496           g->tls_ldm_offset = next_index;
4497         }
4498       if (!mips_elf_set_gotidx (entryp, next_index))
4499         {
4500           arg->g = NULL;
4501           return 0;
4502         }
4503     }
4504
4505   /* Account for the entries we've just allocated.  */
4506   g->tls_assigned_gotno += mips_tls_got_entries (tls_type);
4507   return 1;
4508 }
4509
4510 /* A htab_traverse callback for GOT entries, where DATA points to a
4511    mips_elf_traverse_got_arg.  Set the global_got_area of each global
4512    symbol to DATA->value.  */
4513
4514 static int
4515 mips_elf_set_global_got_area (void **entryp, void *data)
4516 {
4517   struct mips_got_entry *entry;
4518   struct mips_elf_traverse_got_arg *arg;
4519
4520   entry = (struct mips_got_entry *) *entryp;
4521   arg = (struct mips_elf_traverse_got_arg *) data;
4522   if (entry->abfd != NULL
4523       && entry->symndx == -1
4524       && entry->d.h->global_got_area != GGA_NONE)
4525     entry->d.h->global_got_area = arg->value;
4526   return 1;
4527 }
4528
4529 /* A htab_traverse callback for secondary GOT entries, where DATA points
4530    to a mips_elf_traverse_got_arg.  Assign GOT indices to global entries
4531    and record the number of relocations they require.  DATA->value is
4532    the size of one GOT entry.  Set DATA->g to null on failure.  */
4533
4534 static int
4535 mips_elf_set_global_gotidx (void **entryp, void *data)
4536 {
4537   struct mips_got_entry *entry;
4538   struct mips_elf_traverse_got_arg *arg;
4539
4540   entry = (struct mips_got_entry *) *entryp;
4541   arg = (struct mips_elf_traverse_got_arg *) data;
4542   if (entry->abfd != NULL
4543       && entry->symndx == -1
4544       && entry->d.h->global_got_area != GGA_NONE)
4545     {
4546       if (!mips_elf_set_gotidx (entryp, arg->value * arg->g->assigned_gotno))
4547         {
4548           arg->g = NULL;
4549           return 0;
4550         }
4551       arg->g->assigned_gotno += 1;
4552
4553       if (arg->info->shared
4554           || (elf_hash_table (arg->info)->dynamic_sections_created
4555               && entry->d.h->root.def_dynamic
4556               && !entry->d.h->root.def_regular))
4557         arg->g->relocs += 1;
4558     }
4559
4560   return 1;
4561 }
4562
4563 /* A htab_traverse callback for GOT entries for which DATA is the
4564    bfd_link_info.  Forbid any global symbols from having traditional
4565    lazy-binding stubs.  */
4566
4567 static int
4568 mips_elf_forbid_lazy_stubs (void **entryp, void *data)
4569 {
4570   struct bfd_link_info *info;
4571   struct mips_elf_link_hash_table *htab;
4572   struct mips_got_entry *entry;
4573
4574   entry = (struct mips_got_entry *) *entryp;
4575   info = (struct bfd_link_info *) data;
4576   htab = mips_elf_hash_table (info);
4577   BFD_ASSERT (htab != NULL);
4578
4579   if (entry->abfd != NULL
4580       && entry->symndx == -1
4581       && entry->d.h->needs_lazy_stub)
4582     {
4583       entry->d.h->needs_lazy_stub = FALSE;
4584       htab->lazy_stub_count--;
4585     }
4586
4587   return 1;
4588 }
4589
4590 /* Return the offset of an input bfd IBFD's GOT from the beginning of
4591    the primary GOT.  */
4592 static bfd_vma
4593 mips_elf_adjust_gp (bfd *abfd, struct mips_got_info *g, bfd *ibfd)
4594 {
4595   if (g->bfd2got == NULL)
4596     return 0;
4597
4598   g = mips_elf_got_for_ibfd (g, ibfd);
4599   if (! g)
4600     return 0;
4601
4602   BFD_ASSERT (g->next);
4603
4604   g = g->next;
4605
4606   return (g->local_gotno + g->global_gotno + g->tls_gotno)
4607     * MIPS_ELF_GOT_SIZE (abfd);
4608 }
4609
4610 /* Turn a single GOT that is too big for 16-bit addressing into
4611    a sequence of GOTs, each one 16-bit addressable.  */
4612
4613 static bfd_boolean
4614 mips_elf_multi_got (bfd *abfd, struct bfd_link_info *info,
4615                     asection *got, bfd_size_type pages)
4616 {
4617   struct mips_elf_link_hash_table *htab;
4618   struct mips_elf_got_per_bfd_arg got_per_bfd_arg;
4619   struct mips_elf_traverse_got_arg tga;
4620   struct mips_got_info *g, *gg;
4621   unsigned int assign, needed_relocs;
4622   bfd *dynobj;
4623
4624   dynobj = elf_hash_table (info)->dynobj;
4625   htab = mips_elf_hash_table (info);
4626   BFD_ASSERT (htab != NULL);
4627
4628   g = htab->got_info;
4629   g->bfd2got = htab_try_create (1, mips_elf_bfd2got_entry_hash,
4630                                 mips_elf_bfd2got_entry_eq, NULL);
4631   if (g->bfd2got == NULL)
4632     return FALSE;
4633
4634   got_per_bfd_arg.bfd2got = g->bfd2got;
4635   got_per_bfd_arg.obfd = abfd;
4636   got_per_bfd_arg.info = info;
4637
4638   /* Count how many GOT entries each input bfd requires, creating a
4639      map from bfd to got info while at that.  */
4640   htab_traverse (g->got_entries, mips_elf_make_got_per_bfd, &got_per_bfd_arg);
4641   if (got_per_bfd_arg.obfd == NULL)
4642     return FALSE;
4643
4644   /* Also count how many page entries each input bfd requires.  */
4645   htab_traverse (g->got_page_entries, mips_elf_make_got_pages_per_bfd,
4646                  &got_per_bfd_arg);
4647   if (got_per_bfd_arg.obfd == NULL)
4648     return FALSE;
4649
4650   got_per_bfd_arg.current = NULL;
4651   got_per_bfd_arg.primary = NULL;
4652   got_per_bfd_arg.max_count = ((MIPS_ELF_GOT_MAX_SIZE (info)
4653                                 / MIPS_ELF_GOT_SIZE (abfd))
4654                                - htab->reserved_gotno);
4655   got_per_bfd_arg.max_pages = pages;
4656   /* The number of globals that will be included in the primary GOT.
4657      See the calls to mips_elf_set_global_got_area below for more
4658      information.  */
4659   got_per_bfd_arg.global_count = g->global_gotno;
4660
4661   /* Try to merge the GOTs of input bfds together, as long as they
4662      don't seem to exceed the maximum GOT size, choosing one of them
4663      to be the primary GOT.  */
4664   htab_traverse (g->bfd2got, mips_elf_merge_gots, &got_per_bfd_arg);
4665   if (got_per_bfd_arg.obfd == NULL)
4666     return FALSE;
4667
4668   /* If we do not find any suitable primary GOT, create an empty one.  */
4669   if (got_per_bfd_arg.primary == NULL)
4670     g->next = mips_elf_create_got_info (abfd, FALSE);
4671   else
4672     g->next = got_per_bfd_arg.primary;
4673   g->next->next = got_per_bfd_arg.current;
4674
4675   /* GG is now the master GOT, and G is the primary GOT.  */
4676   gg = g;
4677   g = g->next;
4678
4679   /* Map the output bfd to the primary got.  That's what we're going
4680      to use for bfds that use GOT16 or GOT_PAGE relocations that we
4681      didn't mark in check_relocs, and we want a quick way to find it.
4682      We can't just use gg->next because we're going to reverse the
4683      list.  */
4684   {
4685     struct mips_elf_bfd2got_hash *bfdgot;
4686     void **bfdgotp;
4687
4688     bfdgot = (struct mips_elf_bfd2got_hash *)bfd_alloc
4689       (abfd, sizeof (struct mips_elf_bfd2got_hash));
4690
4691     if (bfdgot == NULL)
4692       return FALSE;
4693
4694     bfdgot->bfd = abfd;
4695     bfdgot->g = g;
4696     bfdgotp = htab_find_slot (gg->bfd2got, bfdgot, INSERT);
4697
4698     BFD_ASSERT (*bfdgotp == NULL);
4699     *bfdgotp = bfdgot;
4700   }
4701
4702   /* Every symbol that is referenced in a dynamic relocation must be
4703      present in the primary GOT, so arrange for them to appear after
4704      those that are actually referenced.  */
4705   gg->reloc_only_gotno = gg->global_gotno - g->global_gotno;
4706   g->global_gotno = gg->global_gotno;
4707
4708   tga.info = info;
4709   tga.value = GGA_RELOC_ONLY;
4710   htab_traverse (gg->got_entries, mips_elf_set_global_got_area, &tga);
4711   tga.value = GGA_NORMAL;
4712   htab_traverse (g->got_entries, mips_elf_set_global_got_area, &tga);
4713
4714   /* Now go through the GOTs assigning them offset ranges.
4715      [assigned_gotno, local_gotno[ will be set to the range of local
4716      entries in each GOT.  We can then compute the end of a GOT by
4717      adding local_gotno to global_gotno.  We reverse the list and make
4718      it circular since then we'll be able to quickly compute the
4719      beginning of a GOT, by computing the end of its predecessor.  To
4720      avoid special cases for the primary GOT, while still preserving
4721      assertions that are valid for both single- and multi-got links,
4722      we arrange for the main got struct to have the right number of
4723      global entries, but set its local_gotno such that the initial
4724      offset of the primary GOT is zero.  Remember that the primary GOT
4725      will become the last item in the circular linked list, so it
4726      points back to the master GOT.  */
4727   gg->local_gotno = -g->global_gotno;
4728   gg->global_gotno = g->global_gotno;
4729   gg->tls_gotno = 0;
4730   assign = 0;
4731   gg->next = gg;
4732
4733   do
4734     {
4735       struct mips_got_info *gn;
4736
4737       assign += htab->reserved_gotno;
4738       g->assigned_gotno = assign;
4739       g->local_gotno += assign;
4740       g->local_gotno += (pages < g->page_gotno ? pages : g->page_gotno);
4741       assign = g->local_gotno + g->global_gotno + g->tls_gotno;
4742
4743       /* Take g out of the direct list, and push it onto the reversed
4744          list that gg points to.  g->next is guaranteed to be nonnull after
4745          this operation, as required by mips_elf_initialize_tls_index. */
4746       gn = g->next;
4747       g->next = gg->next;
4748       gg->next = g;
4749
4750       /* Set up any TLS entries.  We always place the TLS entries after
4751          all non-TLS entries.  */
4752       g->tls_assigned_gotno = g->local_gotno + g->global_gotno;
4753       tga.g = g;
4754       tga.value = MIPS_ELF_GOT_SIZE (abfd);
4755       htab_traverse (g->got_entries, mips_elf_initialize_tls_index, &tga);
4756       if (!tga.g)
4757         return FALSE;
4758       BFD_ASSERT (g->tls_assigned_gotno == assign);
4759
4760       /* Move onto the next GOT.  It will be a secondary GOT if nonull.  */
4761       g = gn;
4762
4763       /* Forbid global symbols in every non-primary GOT from having
4764          lazy-binding stubs.  */
4765       if (g)
4766         htab_traverse (g->got_entries, mips_elf_forbid_lazy_stubs, info);
4767     }
4768   while (g);
4769
4770   got->size = assign * MIPS_ELF_GOT_SIZE (abfd);
4771
4772   needed_relocs = 0;
4773   for (g = gg->next; g && g->next != gg; g = g->next)
4774     {
4775       unsigned int save_assign;
4776
4777       /* Assign offsets to global GOT entries and count how many
4778          relocations they need.  */
4779       save_assign = g->assigned_gotno;
4780       g->assigned_gotno = g->local_gotno;
4781       tga.info = info;
4782       tga.value = MIPS_ELF_GOT_SIZE (abfd);
4783       tga.g = g;
4784       htab_traverse (g->got_entries, mips_elf_set_global_gotidx, &tga);
4785       if (!tga.g)
4786         return FALSE;
4787       BFD_ASSERT (g->assigned_gotno == g->local_gotno + g->global_gotno);
4788       g->assigned_gotno = save_assign;
4789
4790       if (info->shared)
4791         {
4792           g->relocs += g->local_gotno - g->assigned_gotno;
4793           BFD_ASSERT (g->assigned_gotno == g->next->local_gotno
4794                       + g->next->global_gotno
4795                       + g->next->tls_gotno
4796                       + htab->reserved_gotno);
4797         }
4798       needed_relocs += g->relocs;
4799     }
4800   needed_relocs += g->relocs;
4801
4802   if (needed_relocs)
4803     mips_elf_allocate_dynamic_relocations (dynobj, info,
4804                                            needed_relocs);
4805
4806   return TRUE;
4807 }
4808
4809 \f
4810 /* Returns the first relocation of type r_type found, beginning with
4811    RELOCATION.  RELEND is one-past-the-end of the relocation table.  */
4812
4813 static const Elf_Internal_Rela *
4814 mips_elf_next_relocation (bfd *abfd ATTRIBUTE_UNUSED, unsigned int r_type,
4815                           const Elf_Internal_Rela *relocation,
4816                           const Elf_Internal_Rela *relend)
4817 {
4818   unsigned long r_symndx = ELF_R_SYM (abfd, relocation->r_info);
4819
4820   while (relocation < relend)
4821     {
4822       if (ELF_R_TYPE (abfd, relocation->r_info) == r_type
4823           && ELF_R_SYM (abfd, relocation->r_info) == r_symndx)
4824         return relocation;
4825
4826       ++relocation;
4827     }
4828
4829   /* We didn't find it.  */
4830   return NULL;
4831 }
4832
4833 /* Return whether an input relocation is against a local symbol.  */
4834
4835 static bfd_boolean
4836 mips_elf_local_relocation_p (bfd *input_bfd,
4837                              const Elf_Internal_Rela *relocation,
4838                              asection **local_sections)
4839 {
4840   unsigned long r_symndx;
4841   Elf_Internal_Shdr *symtab_hdr;
4842   size_t extsymoff;
4843
4844   r_symndx = ELF_R_SYM (input_bfd, relocation->r_info);
4845   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
4846   extsymoff = (elf_bad_symtab (input_bfd)) ? 0 : symtab_hdr->sh_info;
4847
4848   if (r_symndx < extsymoff)
4849     return TRUE;
4850   if (elf_bad_symtab (input_bfd) && local_sections[r_symndx] != NULL)
4851     return TRUE;
4852
4853   return FALSE;
4854 }
4855 \f
4856 /* Sign-extend VALUE, which has the indicated number of BITS.  */
4857
4858 bfd_vma
4859 _bfd_mips_elf_sign_extend (bfd_vma value, int bits)
4860 {
4861   if (value & ((bfd_vma) 1 << (bits - 1)))
4862     /* VALUE is negative.  */
4863     value |= ((bfd_vma) - 1) << bits;
4864
4865   return value;
4866 }
4867
4868 /* Return non-zero if the indicated VALUE has overflowed the maximum
4869    range expressible by a signed number with the indicated number of
4870    BITS.  */
4871
4872 static bfd_boolean
4873 mips_elf_overflow_p (bfd_vma value, int bits)
4874 {
4875   bfd_signed_vma svalue = (bfd_signed_vma) value;
4876
4877   if (svalue > (1 << (bits - 1)) - 1)
4878     /* The value is too big.  */
4879     return TRUE;
4880   else if (svalue < -(1 << (bits - 1)))
4881     /* The value is too small.  */
4882     return TRUE;
4883
4884   /* All is well.  */
4885   return FALSE;
4886 }
4887
4888 /* Calculate the %high function.  */
4889
4890 static bfd_vma
4891 mips_elf_high (bfd_vma value)
4892 {
4893   return ((value + (bfd_vma) 0x8000) >> 16) & 0xffff;
4894 }
4895
4896 /* Calculate the %higher function.  */
4897
4898 static bfd_vma
4899 mips_elf_higher (bfd_vma value ATTRIBUTE_UNUSED)
4900 {
4901 #ifdef BFD64
4902   return ((value + (bfd_vma) 0x80008000) >> 32) & 0xffff;
4903 #else
4904   abort ();
4905   return MINUS_ONE;
4906 #endif
4907 }
4908
4909 /* Calculate the %highest function.  */
4910
4911 static bfd_vma
4912 mips_elf_highest (bfd_vma value ATTRIBUTE_UNUSED)
4913 {
4914 #ifdef BFD64
4915   return ((value + (((bfd_vma) 0x8000 << 32) | 0x80008000)) >> 48) & 0xffff;
4916 #else
4917   abort ();
4918   return MINUS_ONE;
4919 #endif
4920 }
4921 \f
4922 /* Create the .compact_rel section.  */
4923
4924 static bfd_boolean
4925 mips_elf_create_compact_rel_section
4926   (bfd *abfd, struct bfd_link_info *info ATTRIBUTE_UNUSED)
4927 {
4928   flagword flags;
4929   register asection *s;
4930
4931   if (bfd_get_linker_section (abfd, ".compact_rel") == NULL)
4932     {
4933       flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED
4934                | SEC_READONLY);
4935
4936       s = bfd_make_section_anyway_with_flags (abfd, ".compact_rel", flags);
4937       if (s == NULL
4938           || ! bfd_set_section_alignment (abfd, s,
4939                                           MIPS_ELF_LOG_FILE_ALIGN (abfd)))
4940         return FALSE;
4941
4942       s->size = sizeof (Elf32_External_compact_rel);
4943     }
4944
4945   return TRUE;
4946 }
4947
4948 /* Create the .got section to hold the global offset table.  */
4949
4950 static bfd_boolean
4951 mips_elf_create_got_section (bfd *abfd, struct bfd_link_info *info)
4952 {
4953   flagword flags;
4954   register asection *s;
4955   struct elf_link_hash_entry *h;
4956   struct bfd_link_hash_entry *bh;
4957   struct mips_elf_link_hash_table *htab;
4958
4959   htab = mips_elf_hash_table (info);
4960   BFD_ASSERT (htab != NULL);
4961
4962   /* This function may be called more than once.  */
4963   if (htab->sgot)
4964     return TRUE;
4965
4966   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
4967            | SEC_LINKER_CREATED);
4968
4969   /* We have to use an alignment of 2**4 here because this is hardcoded
4970      in the function stub generation and in the linker script.  */
4971   s = bfd_make_section_anyway_with_flags (abfd, ".got", flags);
4972   if (s == NULL
4973       || ! bfd_set_section_alignment (abfd, s, 4))
4974     return FALSE;
4975   htab->sgot = s;
4976
4977   /* Define the symbol _GLOBAL_OFFSET_TABLE_.  We don't do this in the
4978      linker script because we don't want to define the symbol if we
4979      are not creating a global offset table.  */
4980   bh = NULL;
4981   if (! (_bfd_generic_link_add_one_symbol
4982          (info, abfd, "_GLOBAL_OFFSET_TABLE_", BSF_GLOBAL, s,
4983           0, NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
4984     return FALSE;
4985
4986   h = (struct elf_link_hash_entry *) bh;
4987   h->non_elf = 0;
4988   h->def_regular = 1;
4989   h->type = STT_OBJECT;
4990   elf_hash_table (info)->hgot = h;
4991
4992   if (info->shared
4993       && ! bfd_elf_link_record_dynamic_symbol (info, h))
4994     return FALSE;
4995
4996   htab->got_info = mips_elf_create_got_info (abfd, TRUE);
4997   mips_elf_section_data (s)->elf.this_hdr.sh_flags
4998     |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL;
4999
5000   /* We also need a .got.plt section when generating PLTs.  */
5001   s = bfd_make_section_anyway_with_flags (abfd, ".got.plt",
5002                                           SEC_ALLOC | SEC_LOAD
5003                                           | SEC_HAS_CONTENTS
5004                                           | SEC_IN_MEMORY
5005                                           | SEC_LINKER_CREATED);
5006   if (s == NULL)
5007     return FALSE;
5008   htab->sgotplt = s;
5009
5010   return TRUE;
5011 }
5012 \f
5013 /* Return true if H refers to the special VxWorks __GOTT_BASE__ or
5014    __GOTT_INDEX__ symbols.  These symbols are only special for
5015    shared objects; they are not used in executables.  */
5016
5017 static bfd_boolean
5018 is_gott_symbol (struct bfd_link_info *info, struct elf_link_hash_entry *h)
5019 {
5020   return (mips_elf_hash_table (info)->is_vxworks
5021           && info->shared
5022           && (strcmp (h->root.root.string, "__GOTT_BASE__") == 0
5023               || strcmp (h->root.root.string, "__GOTT_INDEX__") == 0));
5024 }
5025
5026 /* Return TRUE if a relocation of type R_TYPE from INPUT_BFD might
5027    require an la25 stub.  See also mips_elf_local_pic_function_p,
5028    which determines whether the destination function ever requires a
5029    stub.  */
5030
5031 static bfd_boolean
5032 mips_elf_relocation_needs_la25_stub (bfd *input_bfd, int r_type,
5033                                      bfd_boolean target_is_16_bit_code_p)
5034 {
5035   /* We specifically ignore branches and jumps from EF_PIC objects,
5036      where the onus is on the compiler or programmer to perform any
5037      necessary initialization of $25.  Sometimes such initialization
5038      is unnecessary; for example, -mno-shared functions do not use
5039      the incoming value of $25, and may therefore be called directly.  */
5040   if (PIC_OBJECT_P (input_bfd))
5041     return FALSE;
5042
5043   switch (r_type)
5044     {
5045     case R_MIPS_26:
5046     case R_MIPS_PC16:
5047     case R_MICROMIPS_26_S1:
5048     case R_MICROMIPS_PC7_S1:
5049     case R_MICROMIPS_PC10_S1:
5050     case R_MICROMIPS_PC16_S1:
5051     case R_MICROMIPS_PC23_S2:
5052       return TRUE;
5053
5054     case R_MIPS16_26:
5055       return !target_is_16_bit_code_p;
5056
5057     default:
5058       return FALSE;
5059     }
5060 }
5061 \f
5062 /* Calculate the value produced by the RELOCATION (which comes from
5063    the INPUT_BFD).  The ADDEND is the addend to use for this
5064    RELOCATION; RELOCATION->R_ADDEND is ignored.
5065
5066    The result of the relocation calculation is stored in VALUEP.
5067    On exit, set *CROSS_MODE_JUMP_P to true if the relocation field
5068    is a MIPS16 or microMIPS jump to standard MIPS code, or vice versa.
5069
5070    This function returns bfd_reloc_continue if the caller need take no
5071    further action regarding this relocation, bfd_reloc_notsupported if
5072    something goes dramatically wrong, bfd_reloc_overflow if an
5073    overflow occurs, and bfd_reloc_ok to indicate success.  */
5074
5075 static bfd_reloc_status_type
5076 mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
5077                                asection *input_section,
5078                                struct bfd_link_info *info,
5079                                const Elf_Internal_Rela *relocation,
5080                                bfd_vma addend, reloc_howto_type *howto,
5081                                Elf_Internal_Sym *local_syms,
5082                                asection **local_sections, bfd_vma *valuep,
5083                                const char **namep,
5084                                bfd_boolean *cross_mode_jump_p,
5085                                bfd_boolean save_addend)
5086 {
5087   /* The eventual value we will return.  */
5088   bfd_vma value;
5089   /* The address of the symbol against which the relocation is
5090      occurring.  */
5091   bfd_vma symbol = 0;
5092   /* The final GP value to be used for the relocatable, executable, or
5093      shared object file being produced.  */
5094   bfd_vma gp;
5095   /* The place (section offset or address) of the storage unit being
5096      relocated.  */
5097   bfd_vma p;
5098   /* The value of GP used to create the relocatable object.  */
5099   bfd_vma gp0;
5100   /* The offset into the global offset table at which the address of
5101      the relocation entry symbol, adjusted by the addend, resides
5102      during execution.  */
5103   bfd_vma g = MINUS_ONE;
5104   /* The section in which the symbol referenced by the relocation is
5105      located.  */
5106   asection *sec = NULL;
5107   struct mips_elf_link_hash_entry *h = NULL;
5108   /* TRUE if the symbol referred to by this relocation is a local
5109      symbol.  */
5110   bfd_boolean local_p, was_local_p;
5111   /* TRUE if the symbol referred to by this relocation is "_gp_disp".  */
5112   bfd_boolean gp_disp_p = FALSE;
5113   /* TRUE if the symbol referred to by this relocation is
5114      "__gnu_local_gp".  */
5115   bfd_boolean gnu_local_gp_p = FALSE;
5116   Elf_Internal_Shdr *symtab_hdr;
5117   size_t extsymoff;
5118   unsigned long r_symndx;
5119   int r_type;
5120   /* TRUE if overflow occurred during the calculation of the
5121      relocation value.  */
5122   bfd_boolean overflowed_p;
5123   /* TRUE if this relocation refers to a MIPS16 function.  */
5124   bfd_boolean target_is_16_bit_code_p = FALSE;
5125   bfd_boolean target_is_micromips_code_p = FALSE;
5126   struct mips_elf_link_hash_table *htab;
5127   bfd *dynobj;
5128
5129   dynobj = elf_hash_table (info)->dynobj;
5130   htab = mips_elf_hash_table (info);
5131   BFD_ASSERT (htab != NULL);
5132
5133   /* Parse the relocation.  */
5134   r_symndx = ELF_R_SYM (input_bfd, relocation->r_info);
5135   r_type = ELF_R_TYPE (input_bfd, relocation->r_info);
5136   p = (input_section->output_section->vma
5137        + input_section->output_offset
5138        + relocation->r_offset);
5139
5140   /* Assume that there will be no overflow.  */
5141   overflowed_p = FALSE;
5142
5143   /* Figure out whether or not the symbol is local, and get the offset
5144      used in the array of hash table entries.  */
5145   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
5146   local_p = mips_elf_local_relocation_p (input_bfd, relocation,
5147                                          local_sections);
5148   was_local_p = local_p;
5149   if (! elf_bad_symtab (input_bfd))
5150     extsymoff = symtab_hdr->sh_info;
5151   else
5152     {
5153       /* The symbol table does not follow the rule that local symbols
5154          must come before globals.  */
5155       extsymoff = 0;
5156     }
5157
5158   /* Figure out the value of the symbol.  */
5159   if (local_p)
5160     {
5161       Elf_Internal_Sym *sym;
5162
5163       sym = local_syms + r_symndx;
5164       sec = local_sections[r_symndx];
5165
5166       symbol = sec->output_section->vma + sec->output_offset;
5167       if (ELF_ST_TYPE (sym->st_info) != STT_SECTION
5168           || (sec->flags & SEC_MERGE))
5169         symbol += sym->st_value;
5170       if ((sec->flags & SEC_MERGE)
5171           && ELF_ST_TYPE (sym->st_info) == STT_SECTION)
5172         {
5173           addend = _bfd_elf_rel_local_sym (abfd, sym, &sec, addend);
5174           addend -= symbol;
5175           addend += sec->output_section->vma + sec->output_offset;
5176         }
5177
5178       /* MIPS16/microMIPS text labels should be treated as odd.  */
5179       if (ELF_ST_IS_COMPRESSED (sym->st_other))
5180         ++symbol;
5181
5182       /* Record the name of this symbol, for our caller.  */
5183       *namep = bfd_elf_string_from_elf_section (input_bfd,
5184                                                 symtab_hdr->sh_link,
5185                                                 sym->st_name);
5186       if (*namep == '\0')
5187         *namep = bfd_section_name (input_bfd, sec);
5188
5189       target_is_16_bit_code_p = ELF_ST_IS_MIPS16 (sym->st_other);
5190       target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (sym->st_other);
5191     }
5192   else
5193     {
5194       /* ??? Could we use RELOC_FOR_GLOBAL_SYMBOL here ?  */
5195
5196       /* For global symbols we look up the symbol in the hash-table.  */
5197       h = ((struct mips_elf_link_hash_entry *)
5198            elf_sym_hashes (input_bfd) [r_symndx - extsymoff]);
5199       /* Find the real hash-table entry for this symbol.  */
5200       while (h->root.root.type == bfd_link_hash_indirect
5201              || h->root.root.type == bfd_link_hash_warning)
5202         h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
5203
5204       /* Record the name of this symbol, for our caller.  */
5205       *namep = h->root.root.root.string;
5206
5207       /* See if this is the special _gp_disp symbol.  Note that such a
5208          symbol must always be a global symbol.  */
5209       if (strcmp (*namep, "_gp_disp") == 0
5210           && ! NEWABI_P (input_bfd))
5211         {
5212           /* Relocations against _gp_disp are permitted only with
5213              R_MIPS_HI16 and R_MIPS_LO16 relocations.  */
5214           if (!hi16_reloc_p (r_type) && !lo16_reloc_p (r_type))
5215             return bfd_reloc_notsupported;
5216
5217           gp_disp_p = TRUE;
5218         }
5219       /* See if this is the special _gp symbol.  Note that such a
5220          symbol must always be a global symbol.  */
5221       else if (strcmp (*namep, "__gnu_local_gp") == 0)
5222         gnu_local_gp_p = TRUE;
5223
5224
5225       /* If this symbol is defined, calculate its address.  Note that
5226          _gp_disp is a magic symbol, always implicitly defined by the
5227          linker, so it's inappropriate to check to see whether or not
5228          its defined.  */
5229       else if ((h->root.root.type == bfd_link_hash_defined
5230                 || h->root.root.type == bfd_link_hash_defweak)
5231                && h->root.root.u.def.section)
5232         {
5233           sec = h->root.root.u.def.section;
5234           if (sec->output_section)
5235             symbol = (h->root.root.u.def.value
5236                       + sec->output_section->vma
5237                       + sec->output_offset);
5238           else
5239             symbol = h->root.root.u.def.value;
5240         }
5241       else if (h->root.root.type == bfd_link_hash_undefweak)
5242         /* We allow relocations against undefined weak symbols, giving
5243            it the value zero, so that you can undefined weak functions
5244            and check to see if they exist by looking at their
5245            addresses.  */
5246         symbol = 0;
5247       else if (info->unresolved_syms_in_objects == RM_IGNORE
5248                && ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT)
5249         symbol = 0;
5250       else if (strcmp (*namep, SGI_COMPAT (input_bfd)
5251                        ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING") == 0)
5252         {
5253           /* If this is a dynamic link, we should have created a
5254              _DYNAMIC_LINK symbol or _DYNAMIC_LINKING(for normal mips) symbol
5255              in in _bfd_mips_elf_create_dynamic_sections.
5256              Otherwise, we should define the symbol with a value of 0.
5257              FIXME: It should probably get into the symbol table
5258              somehow as well.  */
5259           BFD_ASSERT (! info->shared);
5260           BFD_ASSERT (bfd_get_section_by_name (abfd, ".dynamic") == NULL);
5261           symbol = 0;
5262         }
5263       else if (ELF_MIPS_IS_OPTIONAL (h->root.other))
5264         {
5265           /* This is an optional symbol - an Irix specific extension to the
5266              ELF spec.  Ignore it for now.
5267              XXX - FIXME - there is more to the spec for OPTIONAL symbols
5268              than simply ignoring them, but we do not handle this for now.
5269              For information see the "64-bit ELF Object File Specification"
5270              which is available from here:
5271              http://techpubs.sgi.com/library/manuals/4000/007-4658-001/pdf/007-4658-001.pdf  */
5272           symbol = 0;
5273         }
5274       else if ((*info->callbacks->undefined_symbol)
5275                (info, h->root.root.root.string, input_bfd,
5276                 input_section, relocation->r_offset,
5277                 (info->unresolved_syms_in_objects == RM_GENERATE_ERROR)
5278                  || ELF_ST_VISIBILITY (h->root.other)))
5279         {
5280           return bfd_reloc_undefined;
5281         }
5282       else
5283         {
5284           return bfd_reloc_notsupported;
5285         }
5286
5287       target_is_16_bit_code_p = ELF_ST_IS_MIPS16 (h->root.other);
5288       /* If the output section is the PLT section,
5289          then the target is not microMIPS.  */
5290       target_is_micromips_code_p = (htab->splt != sec
5291                                     && ELF_ST_IS_MICROMIPS (h->root.other));
5292     }
5293
5294   /* If this is a reference to a 16-bit function with a stub, we need
5295      to redirect the relocation to the stub unless:
5296
5297      (a) the relocation is for a MIPS16 JAL;
5298
5299      (b) the relocation is for a MIPS16 PIC call, and there are no
5300          non-MIPS16 uses of the GOT slot; or
5301
5302      (c) the section allows direct references to MIPS16 functions.  */
5303   if (r_type != R_MIPS16_26
5304       && !info->relocatable
5305       && ((h != NULL
5306            && h->fn_stub != NULL
5307            && (r_type != R_MIPS16_CALL16 || h->need_fn_stub))
5308           || (local_p
5309               && elf_tdata (input_bfd)->local_stubs != NULL
5310               && elf_tdata (input_bfd)->local_stubs[r_symndx] != NULL))
5311       && !section_allows_mips16_refs_p (input_section))
5312     {
5313       /* This is a 32- or 64-bit call to a 16-bit function.  We should
5314          have already noticed that we were going to need the
5315          stub.  */
5316       if (local_p)
5317         {
5318           sec = elf_tdata (input_bfd)->local_stubs[r_symndx];
5319           value = 0;
5320         }
5321       else
5322         {
5323           BFD_ASSERT (h->need_fn_stub);
5324           if (h->la25_stub)
5325             {
5326               /* If a LA25 header for the stub itself exists, point to the
5327                  prepended LUI/ADDIU sequence.  */
5328               sec = h->la25_stub->stub_section;
5329               value = h->la25_stub->offset;
5330             }
5331           else
5332             {
5333               sec = h->fn_stub;
5334               value = 0;
5335             }
5336         }
5337
5338       symbol = sec->output_section->vma + sec->output_offset + value;
5339       /* The target is 16-bit, but the stub isn't.  */
5340       target_is_16_bit_code_p = FALSE;
5341     }
5342   /* If this is a 16-bit call to a 32- or 64-bit function with a stub, we
5343      need to redirect the call to the stub.  Note that we specifically
5344      exclude R_MIPS16_CALL16 from this behavior; indirect calls should
5345      use an indirect stub instead.  */
5346   else if (r_type == R_MIPS16_26 && !info->relocatable
5347            && ((h != NULL && (h->call_stub != NULL || h->call_fp_stub != NULL))
5348                || (local_p
5349                    && elf_tdata (input_bfd)->local_call_stubs != NULL
5350                    && elf_tdata (input_bfd)->local_call_stubs[r_symndx] != NULL))
5351            && !target_is_16_bit_code_p)
5352     {
5353       if (local_p)
5354         sec = elf_tdata (input_bfd)->local_call_stubs[r_symndx];
5355       else
5356         {
5357           /* If both call_stub and call_fp_stub are defined, we can figure
5358              out which one to use by checking which one appears in the input
5359              file.  */
5360           if (h->call_stub != NULL && h->call_fp_stub != NULL)
5361             {
5362               asection *o;
5363
5364               sec = NULL;
5365               for (o = input_bfd->sections; o != NULL; o = o->next)
5366                 {
5367                   if (CALL_FP_STUB_P (bfd_get_section_name (input_bfd, o)))
5368                     {
5369                       sec = h->call_fp_stub;
5370                       break;
5371                     }
5372                 }
5373               if (sec == NULL)
5374                 sec = h->call_stub;
5375             }
5376           else if (h->call_stub != NULL)
5377             sec = h->call_stub;
5378           else
5379             sec = h->call_fp_stub;
5380         }
5381
5382       BFD_ASSERT (sec->size > 0);
5383       symbol = sec->output_section->vma + sec->output_offset;
5384     }
5385   /* If this is a direct call to a PIC function, redirect to the
5386      non-PIC stub.  */
5387   else if (h != NULL && h->la25_stub
5388            && mips_elf_relocation_needs_la25_stub (input_bfd, r_type,
5389                                                    target_is_16_bit_code_p))
5390     symbol = (h->la25_stub->stub_section->output_section->vma
5391               + h->la25_stub->stub_section->output_offset
5392               + h->la25_stub->offset);
5393
5394   /* Make sure MIPS16 and microMIPS are not used together.  */
5395   if ((r_type == R_MIPS16_26 && target_is_micromips_code_p)
5396       || (micromips_branch_reloc_p (r_type) && target_is_16_bit_code_p))
5397    {
5398       (*_bfd_error_handler)
5399         (_("MIPS16 and microMIPS functions cannot call each other"));
5400       return bfd_reloc_notsupported;
5401    }
5402
5403   /* Calls from 16-bit code to 32-bit code and vice versa require the
5404      mode change.  However, we can ignore calls to undefined weak symbols,
5405      which should never be executed at runtime.  This exception is important
5406      because the assembly writer may have "known" that any definition of the
5407      symbol would be 16-bit code, and that direct jumps were therefore
5408      acceptable.  */
5409   *cross_mode_jump_p = (!info->relocatable
5410                         && !(h && h->root.root.type == bfd_link_hash_undefweak)
5411                         && ((r_type == R_MIPS16_26 && !target_is_16_bit_code_p)
5412                             || (r_type == R_MICROMIPS_26_S1
5413                                 && !target_is_micromips_code_p)
5414                             || ((r_type == R_MIPS_26 || r_type == R_MIPS_JALR)
5415                                 && (target_is_16_bit_code_p
5416                                     || target_is_micromips_code_p))));
5417
5418   local_p = (h == NULL
5419              || (h->got_only_for_calls
5420                  ? SYMBOL_CALLS_LOCAL (info, &h->root)
5421                  : SYMBOL_REFERENCES_LOCAL (info, &h->root)));
5422
5423   gp0 = _bfd_get_gp_value (input_bfd);
5424   gp = _bfd_get_gp_value (abfd);
5425   if (htab->got_info)
5426     gp += mips_elf_adjust_gp (abfd, htab->got_info, input_bfd);
5427
5428   if (gnu_local_gp_p)
5429     symbol = gp;
5430
5431   /* Global R_MIPS_GOT_PAGE/R_MICROMIPS_GOT_PAGE relocations are equivalent
5432      to R_MIPS_GOT_DISP/R_MICROMIPS_GOT_DISP.  The addend is applied by the
5433      corresponding R_MIPS_GOT_OFST/R_MICROMIPS_GOT_OFST.  */
5434   if (got_page_reloc_p (r_type) && !local_p)
5435     {
5436       r_type = (micromips_reloc_p (r_type)
5437                 ? R_MICROMIPS_GOT_DISP : R_MIPS_GOT_DISP);
5438       addend = 0;
5439     }
5440
5441   /* If we haven't already determined the GOT offset, and we're going
5442      to need it, get it now.  */
5443   switch (r_type)
5444     {
5445     case R_MIPS16_CALL16:
5446     case R_MIPS16_GOT16:
5447     case R_MIPS_CALL16:
5448     case R_MIPS_GOT16:
5449     case R_MIPS_GOT_DISP:
5450     case R_MIPS_GOT_HI16:
5451     case R_MIPS_CALL_HI16:
5452     case R_MIPS_GOT_LO16:
5453     case R_MIPS_CALL_LO16:
5454     case R_MICROMIPS_CALL16:
5455     case R_MICROMIPS_GOT16:
5456     case R_MICROMIPS_GOT_DISP:
5457     case R_MICROMIPS_GOT_HI16:
5458     case R_MICROMIPS_CALL_HI16:
5459     case R_MICROMIPS_GOT_LO16:
5460     case R_MICROMIPS_CALL_LO16:
5461     case R_MIPS_TLS_GD:
5462     case R_MIPS_TLS_GOTTPREL:
5463     case R_MIPS_TLS_LDM:
5464     case R_MIPS16_TLS_GD:
5465     case R_MIPS16_TLS_GOTTPREL:
5466     case R_MIPS16_TLS_LDM:
5467     case R_MICROMIPS_TLS_GD:
5468     case R_MICROMIPS_TLS_GOTTPREL:
5469     case R_MICROMIPS_TLS_LDM:
5470       /* Find the index into the GOT where this value is located.  */
5471       if (tls_ldm_reloc_p (r_type))
5472         {
5473           g = mips_elf_local_got_index (abfd, input_bfd, info,
5474                                         0, 0, NULL, r_type);
5475           if (g == MINUS_ONE)
5476             return bfd_reloc_outofrange;
5477         }
5478       else if (!local_p)
5479         {
5480           /* On VxWorks, CALL relocations should refer to the .got.plt
5481              entry, which is initialized to point at the PLT stub.  */
5482           if (htab->is_vxworks
5483               && (call_hi16_reloc_p (r_type)
5484                   || call_lo16_reloc_p (r_type)
5485                   || call16_reloc_p (r_type)))
5486             {
5487               BFD_ASSERT (addend == 0);
5488               BFD_ASSERT (h->root.needs_plt);
5489               g = mips_elf_gotplt_index (info, &h->root);
5490             }
5491           else
5492             {
5493               BFD_ASSERT (addend == 0);
5494               g = mips_elf_global_got_index (dynobj, input_bfd,
5495                                              &h->root, r_type, info);
5496               if (!TLS_RELOC_P (r_type)
5497                   && !elf_hash_table (info)->dynamic_sections_created)
5498                 /* This is a static link.  We must initialize the GOT entry.  */
5499                 MIPS_ELF_PUT_WORD (dynobj, symbol, htab->sgot->contents + g);
5500             }
5501         }
5502       else if (!htab->is_vxworks
5503                && (call16_reloc_p (r_type) || got16_reloc_p (r_type)))
5504         /* The calculation below does not involve "g".  */
5505         break;
5506       else
5507         {
5508           g = mips_elf_local_got_index (abfd, input_bfd, info,
5509                                         symbol + addend, r_symndx, h, r_type);
5510           if (g == MINUS_ONE)
5511             return bfd_reloc_outofrange;
5512         }
5513
5514       /* Convert GOT indices to actual offsets.  */
5515       g = mips_elf_got_offset_from_index (info, abfd, input_bfd, g);
5516       break;
5517     }
5518
5519   /* Relocations against the VxWorks __GOTT_BASE__ and __GOTT_INDEX__
5520      symbols are resolved by the loader.  Add them to .rela.dyn.  */
5521   if (h != NULL && is_gott_symbol (info, &h->root))
5522     {
5523       Elf_Internal_Rela outrel;
5524       bfd_byte *loc;
5525       asection *s;
5526
5527       s = mips_elf_rel_dyn_section (info, FALSE);
5528       loc = s->contents + s->reloc_count++ * sizeof (Elf32_External_Rela);
5529
5530       outrel.r_offset = (input_section->output_section->vma
5531                          + input_section->output_offset
5532                          + relocation->r_offset);
5533       outrel.r_info = ELF32_R_INFO (h->root.dynindx, r_type);
5534       outrel.r_addend = addend;
5535       bfd_elf32_swap_reloca_out (abfd, &outrel, loc);
5536
5537       /* If we've written this relocation for a readonly section,
5538          we need to set DF_TEXTREL again, so that we do not delete the
5539          DT_TEXTREL tag.  */
5540       if (MIPS_ELF_READONLY_SECTION (input_section))
5541         info->flags |= DF_TEXTREL;
5542
5543       *valuep = 0;
5544       return bfd_reloc_ok;
5545     }
5546
5547   /* Figure out what kind of relocation is being performed.  */
5548   switch (r_type)
5549     {
5550     case R_MIPS_NONE:
5551       return bfd_reloc_continue;
5552
5553     case R_MIPS_16:
5554       value = symbol + _bfd_mips_elf_sign_extend (addend, 16);
5555       overflowed_p = mips_elf_overflow_p (value, 16);
5556       break;
5557
5558     case R_MIPS_32:
5559     case R_MIPS_REL32:
5560     case R_MIPS_64:
5561       if ((info->shared
5562            || (htab->root.dynamic_sections_created
5563                && h != NULL
5564                && h->root.def_dynamic
5565                && !h->root.def_regular
5566                && !h->has_static_relocs))
5567           && r_symndx != STN_UNDEF
5568           && (h == NULL
5569               || h->root.root.type != bfd_link_hash_undefweak
5570               || ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT)
5571           && (input_section->flags & SEC_ALLOC) != 0)
5572         {
5573           /* If we're creating a shared library, then we can't know
5574              where the symbol will end up.  So, we create a relocation
5575              record in the output, and leave the job up to the dynamic
5576              linker.  We must do the same for executable references to
5577              shared library symbols, unless we've decided to use copy
5578              relocs or PLTs instead.  */
5579           value = addend;
5580           if (!mips_elf_create_dynamic_relocation (abfd,
5581                                                    info,
5582                                                    relocation,
5583                                                    h,
5584                                                    sec,
5585                                                    symbol,
5586                                                    &value,
5587                                                    input_section))
5588             return bfd_reloc_undefined;
5589         }
5590       else
5591         {
5592           if (r_type != R_MIPS_REL32)
5593             value = symbol + addend;
5594           else
5595             value = addend;
5596         }
5597       value &= howto->dst_mask;
5598       break;
5599
5600     case R_MIPS_PC32:
5601       value = symbol + addend - p;
5602       value &= howto->dst_mask;
5603       break;
5604
5605     case R_MIPS16_26:
5606       /* The calculation for R_MIPS16_26 is just the same as for an
5607          R_MIPS_26.  It's only the storage of the relocated field into
5608          the output file that's different.  That's handled in
5609          mips_elf_perform_relocation.  So, we just fall through to the
5610          R_MIPS_26 case here.  */
5611     case R_MIPS_26:
5612     case R_MICROMIPS_26_S1:
5613       {
5614         unsigned int shift;
5615
5616         /* Make sure the target of JALX is word-aligned.  Bit 0 must be
5617            the correct ISA mode selector and bit 1 must be 0.  */
5618         if (*cross_mode_jump_p && (symbol & 3) != (r_type == R_MIPS_26))
5619           return bfd_reloc_outofrange;
5620
5621         /* Shift is 2, unusually, for microMIPS JALX.  */
5622         shift = (!*cross_mode_jump_p && r_type == R_MICROMIPS_26_S1) ? 1 : 2;
5623
5624         if (was_local_p)
5625           value = addend | ((p + 4) & (0xfc000000 << shift));
5626         else
5627           value = _bfd_mips_elf_sign_extend (addend, 26 + shift);
5628         value = (value + symbol) >> shift;
5629         if (!was_local_p && h->root.root.type != bfd_link_hash_undefweak)
5630           overflowed_p = (value >> 26) != ((p + 4) >> (26 + shift));
5631         value &= howto->dst_mask;
5632       }
5633       break;
5634
5635     case R_MIPS_TLS_DTPREL_HI16:
5636     case R_MIPS16_TLS_DTPREL_HI16:
5637     case R_MICROMIPS_TLS_DTPREL_HI16:
5638       value = (mips_elf_high (addend + symbol - dtprel_base (info))
5639                & howto->dst_mask);
5640       break;
5641
5642     case R_MIPS_TLS_DTPREL_LO16:
5643     case R_MIPS_TLS_DTPREL32:
5644     case R_MIPS_TLS_DTPREL64:
5645     case R_MIPS16_TLS_DTPREL_LO16:
5646     case R_MICROMIPS_TLS_DTPREL_LO16:
5647       value = (symbol + addend - dtprel_base (info)) & howto->dst_mask;
5648       break;
5649
5650     case R_MIPS_TLS_TPREL_HI16:
5651     case R_MIPS16_TLS_TPREL_HI16:
5652     case R_MICROMIPS_TLS_TPREL_HI16:
5653       value = (mips_elf_high (addend + symbol - tprel_base (info))
5654                & howto->dst_mask);
5655       break;
5656
5657     case R_MIPS_TLS_TPREL_LO16:
5658     case R_MIPS_TLS_TPREL32:
5659     case R_MIPS_TLS_TPREL64:
5660     case R_MIPS16_TLS_TPREL_LO16:
5661     case R_MICROMIPS_TLS_TPREL_LO16:
5662       value = (symbol + addend - tprel_base (info)) & howto->dst_mask;
5663       break;
5664
5665     case R_MIPS_HI16:
5666     case R_MIPS16_HI16:
5667     case R_MICROMIPS_HI16:
5668       if (!gp_disp_p)
5669         {
5670           value = mips_elf_high (addend + symbol);
5671           value &= howto->dst_mask;
5672         }
5673       else
5674         {
5675           /* For MIPS16 ABI code we generate this sequence
5676                 0: li      $v0,%hi(_gp_disp)
5677                 4: addiupc $v1,%lo(_gp_disp)
5678                 8: sll     $v0,16
5679                12: addu    $v0,$v1
5680                14: move    $gp,$v0
5681              So the offsets of hi and lo relocs are the same, but the
5682              base $pc is that used by the ADDIUPC instruction at $t9 + 4.
5683              ADDIUPC clears the low two bits of the instruction address,
5684              so the base is ($t9 + 4) & ~3.  */
5685           if (r_type == R_MIPS16_HI16)
5686             value = mips_elf_high (addend + gp - ((p + 4) & ~(bfd_vma) 0x3));
5687           /* The microMIPS .cpload sequence uses the same assembly
5688              instructions as the traditional psABI version, but the
5689              incoming $t9 has the low bit set.  */
5690           else if (r_type == R_MICROMIPS_HI16)
5691             value = mips_elf_high (addend + gp - p - 1);
5692           else
5693             value = mips_elf_high (addend + gp - p);
5694           overflowed_p = mips_elf_overflow_p (value, 16);
5695         }
5696       break;
5697
5698     case R_MIPS_LO16:
5699     case R_MIPS16_LO16:
5700     case R_MICROMIPS_LO16:
5701     case R_MICROMIPS_HI0_LO16:
5702       if (!gp_disp_p)
5703         value = (symbol + addend) & howto->dst_mask;
5704       else
5705         {
5706           /* See the comment for R_MIPS16_HI16 above for the reason
5707              for this conditional.  */
5708           if (r_type == R_MIPS16_LO16)
5709             value = addend + gp - (p & ~(bfd_vma) 0x3);
5710           else if (r_type == R_MICROMIPS_LO16
5711                    || r_type == R_MICROMIPS_HI0_LO16)
5712             value = addend + gp - p + 3;
5713           else
5714             value = addend + gp - p + 4;
5715           /* The MIPS ABI requires checking the R_MIPS_LO16 relocation
5716              for overflow.  But, on, say, IRIX5, relocations against
5717              _gp_disp are normally generated from the .cpload
5718              pseudo-op.  It generates code that normally looks like
5719              this:
5720
5721                lui    $gp,%hi(_gp_disp)
5722                addiu  $gp,$gp,%lo(_gp_disp)
5723                addu   $gp,$gp,$t9
5724
5725              Here $t9 holds the address of the function being called,
5726              as required by the MIPS ELF ABI.  The R_MIPS_LO16
5727              relocation can easily overflow in this situation, but the
5728              R_MIPS_HI16 relocation will handle the overflow.
5729              Therefore, we consider this a bug in the MIPS ABI, and do
5730              not check for overflow here.  */
5731         }
5732       break;
5733
5734     case R_MIPS_LITERAL:
5735     case R_MICROMIPS_LITERAL:
5736       /* Because we don't merge literal sections, we can handle this
5737          just like R_MIPS_GPREL16.  In the long run, we should merge
5738          shared literals, and then we will need to additional work
5739          here.  */
5740
5741       /* Fall through.  */
5742
5743     case R_MIPS16_GPREL:
5744       /* The R_MIPS16_GPREL performs the same calculation as
5745          R_MIPS_GPREL16, but stores the relocated bits in a different
5746          order.  We don't need to do anything special here; the
5747          differences are handled in mips_elf_perform_relocation.  */
5748     case R_MIPS_GPREL16:
5749     case R_MICROMIPS_GPREL7_S2:
5750     case R_MICROMIPS_GPREL16:
5751       /* Only sign-extend the addend if it was extracted from the
5752          instruction.  If the addend was separate, leave it alone,
5753          otherwise we may lose significant bits.  */
5754       if (howto->partial_inplace)
5755         addend = _bfd_mips_elf_sign_extend (addend, 16);
5756       value = symbol + addend - gp;
5757       /* If the symbol was local, any earlier relocatable links will
5758          have adjusted its addend with the gp offset, so compensate
5759          for that now.  Don't do it for symbols forced local in this
5760          link, though, since they won't have had the gp offset applied
5761          to them before.  */
5762       if (was_local_p)
5763         value += gp0;
5764       overflowed_p = mips_elf_overflow_p (value, 16);
5765       break;
5766
5767     case R_MIPS16_GOT16:
5768     case R_MIPS16_CALL16:
5769     case R_MIPS_GOT16:
5770     case R_MIPS_CALL16:
5771     case R_MICROMIPS_GOT16:
5772     case R_MICROMIPS_CALL16:
5773       /* VxWorks does not have separate local and global semantics for
5774          R_MIPS*_GOT16; every relocation evaluates to "G".  */
5775       if (!htab->is_vxworks && local_p)
5776         {
5777           value = mips_elf_got16_entry (abfd, input_bfd, info,
5778                                         symbol + addend, !was_local_p);
5779           if (value == MINUS_ONE)
5780             return bfd_reloc_outofrange;
5781           value
5782             = mips_elf_got_offset_from_index (info, abfd, input_bfd, value);
5783           overflowed_p = mips_elf_overflow_p (value, 16);
5784           break;
5785         }
5786
5787       /* Fall through.  */
5788
5789     case R_MIPS_TLS_GD:
5790     case R_MIPS_TLS_GOTTPREL:
5791     case R_MIPS_TLS_LDM:
5792     case R_MIPS_GOT_DISP:
5793     case R_MIPS16_TLS_GD:
5794     case R_MIPS16_TLS_GOTTPREL:
5795     case R_MIPS16_TLS_LDM:
5796     case R_MICROMIPS_TLS_GD:
5797     case R_MICROMIPS_TLS_GOTTPREL:
5798     case R_MICROMIPS_TLS_LDM:
5799     case R_MICROMIPS_GOT_DISP:
5800       value = g;
5801       overflowed_p = mips_elf_overflow_p (value, 16);
5802       break;
5803
5804     case R_MIPS_GPREL32:
5805       value = (addend + symbol + gp0 - gp);
5806       if (!save_addend)
5807         value &= howto->dst_mask;
5808       break;
5809
5810     case R_MIPS_PC16:
5811     case R_MIPS_GNU_REL16_S2:
5812       value = symbol + _bfd_mips_elf_sign_extend (addend, 18) - p;
5813       overflowed_p = mips_elf_overflow_p (value, 18);
5814       value >>= howto->rightshift;
5815       value &= howto->dst_mask;
5816       break;
5817
5818     case R_MICROMIPS_PC7_S1:
5819       value = symbol + _bfd_mips_elf_sign_extend (addend, 8) - p;
5820       overflowed_p = mips_elf_overflow_p (value, 8);
5821       value >>= howto->rightshift;
5822       value &= howto->dst_mask;
5823       break;
5824
5825     case R_MICROMIPS_PC10_S1:
5826       value = symbol + _bfd_mips_elf_sign_extend (addend, 11) - p;
5827       overflowed_p = mips_elf_overflow_p (value, 11);
5828       value >>= howto->rightshift;
5829       value &= howto->dst_mask;
5830       break;
5831
5832     case R_MICROMIPS_PC16_S1:
5833       value = symbol + _bfd_mips_elf_sign_extend (addend, 17) - p;
5834       overflowed_p = mips_elf_overflow_p (value, 17);
5835       value >>= howto->rightshift;
5836       value &= howto->dst_mask;
5837       break;
5838
5839     case R_MICROMIPS_PC23_S2:
5840       value = symbol + _bfd_mips_elf_sign_extend (addend, 25) - ((p | 3) ^ 3);
5841       overflowed_p = mips_elf_overflow_p (value, 25);
5842       value >>= howto->rightshift;
5843       value &= howto->dst_mask;
5844       break;
5845
5846     case R_MIPS_GOT_HI16:
5847     case R_MIPS_CALL_HI16:
5848     case R_MICROMIPS_GOT_HI16:
5849     case R_MICROMIPS_CALL_HI16:
5850       /* We're allowed to handle these two relocations identically.
5851          The dynamic linker is allowed to handle the CALL relocations
5852          differently by creating a lazy evaluation stub.  */
5853       value = g;
5854       value = mips_elf_high (value);
5855       value &= howto->dst_mask;
5856       break;
5857
5858     case R_MIPS_GOT_LO16:
5859     case R_MIPS_CALL_LO16:
5860     case R_MICROMIPS_GOT_LO16:
5861     case R_MICROMIPS_CALL_LO16:
5862       value = g & howto->dst_mask;
5863       break;
5864
5865     case R_MIPS_GOT_PAGE:
5866     case R_MICROMIPS_GOT_PAGE:
5867       value = mips_elf_got_page (abfd, input_bfd, info, symbol + addend, NULL);
5868       if (value == MINUS_ONE)
5869         return bfd_reloc_outofrange;
5870       value = mips_elf_got_offset_from_index (info, abfd, input_bfd, value);
5871       overflowed_p = mips_elf_overflow_p (value, 16);
5872       break;
5873
5874     case R_MIPS_GOT_OFST:
5875     case R_MICROMIPS_GOT_OFST:
5876       if (local_p)
5877         mips_elf_got_page (abfd, input_bfd, info, symbol + addend, &value);
5878       else
5879         value = addend;
5880       overflowed_p = mips_elf_overflow_p (value, 16);
5881       break;
5882
5883     case R_MIPS_SUB:
5884     case R_MICROMIPS_SUB:
5885       value = symbol - addend;
5886       value &= howto->dst_mask;
5887       break;
5888
5889     case R_MIPS_HIGHER:
5890     case R_MICROMIPS_HIGHER:
5891       value = mips_elf_higher (addend + symbol);
5892       value &= howto->dst_mask;
5893       break;
5894
5895     case R_MIPS_HIGHEST:
5896     case R_MICROMIPS_HIGHEST:
5897       value = mips_elf_highest (addend + symbol);
5898       value &= howto->dst_mask;
5899       break;
5900
5901     case R_MIPS_SCN_DISP:
5902     case R_MICROMIPS_SCN_DISP:
5903       value = symbol + addend - sec->output_offset;
5904       value &= howto->dst_mask;
5905       break;
5906
5907     case R_MIPS_JALR:
5908     case R_MICROMIPS_JALR:
5909       /* This relocation is only a hint.  In some cases, we optimize
5910          it into a bal instruction.  But we don't try to optimize
5911          when the symbol does not resolve locally.  */
5912       if (h != NULL && !SYMBOL_CALLS_LOCAL (info, &h->root))
5913         return bfd_reloc_continue;
5914       value = symbol + addend;
5915       break;
5916
5917     case R_MIPS_PJUMP:
5918     case R_MIPS_GNU_VTINHERIT:
5919     case R_MIPS_GNU_VTENTRY:
5920       /* We don't do anything with these at present.  */
5921       return bfd_reloc_continue;
5922
5923     default:
5924       /* An unrecognized relocation type.  */
5925       return bfd_reloc_notsupported;
5926     }
5927
5928   /* Store the VALUE for our caller.  */
5929   *valuep = value;
5930   return overflowed_p ? bfd_reloc_overflow : bfd_reloc_ok;
5931 }
5932
5933 /* Obtain the field relocated by RELOCATION.  */
5934
5935 static bfd_vma
5936 mips_elf_obtain_contents (reloc_howto_type *howto,
5937                           const Elf_Internal_Rela *relocation,
5938                           bfd *input_bfd, bfd_byte *contents)
5939 {
5940   bfd_vma x;
5941   bfd_byte *location = contents + relocation->r_offset;
5942
5943   /* Obtain the bytes.  */
5944   x = bfd_get ((8 * bfd_get_reloc_size (howto)), input_bfd, location);
5945
5946   return x;
5947 }
5948
5949 /* It has been determined that the result of the RELOCATION is the
5950    VALUE.  Use HOWTO to place VALUE into the output file at the
5951    appropriate position.  The SECTION is the section to which the
5952    relocation applies.
5953    CROSS_MODE_JUMP_P is true if the relocation field
5954    is a MIPS16 or microMIPS jump to standard MIPS code, or vice versa.
5955
5956    Returns FALSE if anything goes wrong.  */
5957
5958 static bfd_boolean
5959 mips_elf_perform_relocation (struct bfd_link_info *info,
5960                              reloc_howto_type *howto,
5961                              const Elf_Internal_Rela *relocation,
5962                              bfd_vma value, bfd *input_bfd,
5963                              asection *input_section, bfd_byte *contents,
5964                              bfd_boolean cross_mode_jump_p)
5965 {
5966   bfd_vma x;
5967   bfd_byte *location;
5968   int r_type = ELF_R_TYPE (input_bfd, relocation->r_info);
5969
5970   /* Figure out where the relocation is occurring.  */
5971   location = contents + relocation->r_offset;
5972
5973   _bfd_mips_elf_reloc_unshuffle (input_bfd, r_type, FALSE, location);
5974
5975   /* Obtain the current value.  */
5976   x = mips_elf_obtain_contents (howto, relocation, input_bfd, contents);
5977
5978   /* Clear the field we are setting.  */
5979   x &= ~howto->dst_mask;
5980
5981   /* Set the field.  */
5982   x |= (value & howto->dst_mask);
5983
5984   /* If required, turn JAL into JALX.  */
5985   if (cross_mode_jump_p && jal_reloc_p (r_type))
5986     {
5987       bfd_boolean ok;
5988       bfd_vma opcode = x >> 26;
5989       bfd_vma jalx_opcode;
5990
5991       /* Check to see if the opcode is already JAL or JALX.  */
5992       if (r_type == R_MIPS16_26)
5993         {
5994           ok = ((opcode == 0x6) || (opcode == 0x7));
5995           jalx_opcode = 0x7;
5996         }
5997       else if (r_type == R_MICROMIPS_26_S1)
5998         {
5999           ok = ((opcode == 0x3d) || (opcode == 0x3c));
6000           jalx_opcode = 0x3c;
6001         }
6002       else
6003         {
6004           ok = ((opcode == 0x3) || (opcode == 0x1d));
6005           jalx_opcode = 0x1d;
6006         }
6007
6008       /* If the opcode is not JAL or JALX, there's a problem.  We cannot
6009          convert J or JALS to JALX.  */
6010       if (!ok)
6011         {
6012           (*_bfd_error_handler)
6013             (_("%B: %A+0x%lx: Unsupported jump between ISA modes; consider recompiling with interlinking enabled."),
6014              input_bfd,
6015              input_section,
6016              (unsigned long) relocation->r_offset);
6017           bfd_set_error (bfd_error_bad_value);
6018           return FALSE;
6019         }
6020
6021       /* Make this the JALX opcode.  */
6022       x = (x & ~(0x3f << 26)) | (jalx_opcode << 26);
6023     }
6024
6025   /* Try converting JAL to BAL and J(AL)R to B(AL), if the target is in
6026      range.  */
6027   if (!info->relocatable
6028       && !cross_mode_jump_p
6029       && ((JAL_TO_BAL_P (input_bfd)
6030            && r_type == R_MIPS_26
6031            && (x >> 26) == 0x3)         /* jal addr */
6032           || (JALR_TO_BAL_P (input_bfd)
6033               && r_type == R_MIPS_JALR
6034               && x == 0x0320f809)       /* jalr t9 */
6035           || (JR_TO_B_P (input_bfd)
6036               && r_type == R_MIPS_JALR
6037               && x == 0x03200008)))     /* jr t9 */
6038     {
6039       bfd_vma addr;
6040       bfd_vma dest;
6041       bfd_signed_vma off;
6042
6043       addr = (input_section->output_section->vma
6044               + input_section->output_offset
6045               + relocation->r_offset
6046               + 4);
6047       if (r_type == R_MIPS_26)
6048         dest = (value << 2) | ((addr >> 28) << 28);
6049       else
6050         dest = value;
6051       off = dest - addr;
6052       if (off <= 0x1ffff && off >= -0x20000)
6053         {
6054           if (x == 0x03200008)  /* jr t9 */
6055             x = 0x10000000 | (((bfd_vma) off >> 2) & 0xffff);   /* b addr */
6056           else
6057             x = 0x04110000 | (((bfd_vma) off >> 2) & 0xffff);   /* bal addr */
6058         }
6059     }
6060
6061   /* Put the value into the output.  */
6062   bfd_put (8 * bfd_get_reloc_size (howto), input_bfd, x, location);
6063
6064   _bfd_mips_elf_reloc_shuffle (input_bfd, r_type, !info->relocatable,
6065                                location);
6066
6067   return TRUE;
6068 }
6069 \f
6070 /* Create a rel.dyn relocation for the dynamic linker to resolve.  REL
6071    is the original relocation, which is now being transformed into a
6072    dynamic relocation.  The ADDENDP is adjusted if necessary; the
6073    caller should store the result in place of the original addend.  */
6074
6075 static bfd_boolean
6076 mips_elf_create_dynamic_relocation (bfd *output_bfd,
6077                                     struct bfd_link_info *info,
6078                                     const Elf_Internal_Rela *rel,
6079                                     struct mips_elf_link_hash_entry *h,
6080                                     asection *sec, bfd_vma symbol,
6081                                     bfd_vma *addendp, asection *input_section)
6082 {
6083   Elf_Internal_Rela outrel[3];
6084   asection *sreloc;
6085   bfd *dynobj;
6086   int r_type;
6087   long indx;
6088   bfd_boolean defined_p;
6089   struct mips_elf_link_hash_table *htab;
6090
6091   htab = mips_elf_hash_table (info);
6092   BFD_ASSERT (htab != NULL);
6093
6094   r_type = ELF_R_TYPE (output_bfd, rel->r_info);
6095   dynobj = elf_hash_table (info)->dynobj;
6096   sreloc = mips_elf_rel_dyn_section (info, FALSE);
6097   BFD_ASSERT (sreloc != NULL);
6098   BFD_ASSERT (sreloc->contents != NULL);
6099   BFD_ASSERT (sreloc->reloc_count * MIPS_ELF_REL_SIZE (output_bfd)
6100               < sreloc->size);
6101
6102   outrel[0].r_offset =
6103     _bfd_elf_section_offset (output_bfd, info, input_section, rel[0].r_offset);
6104   if (ABI_64_P (output_bfd))
6105     {
6106       outrel[1].r_offset =
6107         _bfd_elf_section_offset (output_bfd, info, input_section, rel[1].r_offset);
6108       outrel[2].r_offset =
6109         _bfd_elf_section_offset (output_bfd, info, input_section, rel[2].r_offset);
6110     }
6111
6112   if (outrel[0].r_offset == MINUS_ONE)
6113     /* The relocation field has been deleted.  */
6114     return TRUE;
6115
6116   if (outrel[0].r_offset == MINUS_TWO)
6117     {
6118       /* The relocation field has been converted into a relative value of
6119          some sort.  Functions like _bfd_elf_write_section_eh_frame expect
6120          the field to be fully relocated, so add in the symbol's value.  */
6121       *addendp += symbol;
6122       return TRUE;
6123     }
6124
6125   /* We must now calculate the dynamic symbol table index to use
6126      in the relocation.  */
6127   if (h != NULL && ! SYMBOL_REFERENCES_LOCAL (info, &h->root))
6128     {
6129       BFD_ASSERT (htab->is_vxworks || h->global_got_area != GGA_NONE);
6130       indx = h->root.dynindx;
6131       if (SGI_COMPAT (output_bfd))
6132         defined_p = h->root.def_regular;
6133       else
6134         /* ??? glibc's ld.so just adds the final GOT entry to the
6135            relocation field.  It therefore treats relocs against
6136            defined symbols in the same way as relocs against
6137            undefined symbols.  */
6138         defined_p = FALSE;
6139     }
6140   else
6141     {
6142       if (sec != NULL && bfd_is_abs_section (sec))
6143         indx = 0;
6144       else if (sec == NULL || sec->owner == NULL)
6145         {
6146           bfd_set_error (bfd_error_bad_value);
6147           return FALSE;
6148         }
6149       else
6150         {
6151           indx = elf_section_data (sec->output_section)->dynindx;
6152           if (indx == 0)
6153             {
6154               asection *osec = htab->root.text_index_section;
6155               indx = elf_section_data (osec)->dynindx;
6156             }
6157           if (indx == 0)
6158             abort ();
6159         }
6160
6161       /* Instead of generating a relocation using the section
6162          symbol, we may as well make it a fully relative
6163          relocation.  We want to avoid generating relocations to
6164          local symbols because we used to generate them
6165          incorrectly, without adding the original symbol value,
6166          which is mandated by the ABI for section symbols.  In
6167          order to give dynamic loaders and applications time to
6168          phase out the incorrect use, we refrain from emitting
6169          section-relative relocations.  It's not like they're
6170          useful, after all.  This should be a bit more efficient
6171          as well.  */
6172       /* ??? Although this behavior is compatible with glibc's ld.so,
6173          the ABI says that relocations against STN_UNDEF should have
6174          a symbol value of 0.  Irix rld honors this, so relocations
6175          against STN_UNDEF have no effect.  */
6176       if (!SGI_COMPAT (output_bfd))
6177         indx = 0;
6178       defined_p = TRUE;
6179     }
6180
6181   /* If the relocation was previously an absolute relocation and
6182      this symbol will not be referred to by the relocation, we must
6183      adjust it by the value we give it in the dynamic symbol table.
6184      Otherwise leave the job up to the dynamic linker.  */
6185   if (defined_p && r_type != R_MIPS_REL32)
6186     *addendp += symbol;
6187
6188   if (htab->is_vxworks)
6189     /* VxWorks uses non-relative relocations for this.  */
6190     outrel[0].r_info = ELF32_R_INFO (indx, R_MIPS_32);
6191   else
6192     /* The relocation is always an REL32 relocation because we don't
6193        know where the shared library will wind up at load-time.  */
6194     outrel[0].r_info = ELF_R_INFO (output_bfd, (unsigned long) indx,
6195                                    R_MIPS_REL32);
6196
6197   /* For strict adherence to the ABI specification, we should
6198      generate a R_MIPS_64 relocation record by itself before the
6199      _REL32/_64 record as well, such that the addend is read in as
6200      a 64-bit value (REL32 is a 32-bit relocation, after all).
6201      However, since none of the existing ELF64 MIPS dynamic
6202      loaders seems to care, we don't waste space with these
6203      artificial relocations.  If this turns out to not be true,
6204      mips_elf_allocate_dynamic_relocation() should be tweaked so
6205      as to make room for a pair of dynamic relocations per
6206      invocation if ABI_64_P, and here we should generate an
6207      additional relocation record with R_MIPS_64 by itself for a
6208      NULL symbol before this relocation record.  */
6209   outrel[1].r_info = ELF_R_INFO (output_bfd, 0,
6210                                  ABI_64_P (output_bfd)
6211                                  ? R_MIPS_64
6212                                  : R_MIPS_NONE);
6213   outrel[2].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_NONE);
6214
6215   /* Adjust the output offset of the relocation to reference the
6216      correct location in the output file.  */
6217   outrel[0].r_offset += (input_section->output_section->vma
6218                          + input_section->output_offset);
6219   outrel[1].r_offset += (input_section->output_section->vma
6220                          + input_section->output_offset);
6221   outrel[2].r_offset += (input_section->output_section->vma
6222                          + input_section->output_offset);
6223
6224   /* Put the relocation back out.  We have to use the special
6225      relocation outputter in the 64-bit case since the 64-bit
6226      relocation format is non-standard.  */
6227   if (ABI_64_P (output_bfd))
6228     {
6229       (*get_elf_backend_data (output_bfd)->s->swap_reloc_out)
6230         (output_bfd, &outrel[0],
6231          (sreloc->contents
6232           + sreloc->reloc_count * sizeof (Elf64_Mips_External_Rel)));
6233     }
6234   else if (htab->is_vxworks)
6235     {
6236       /* VxWorks uses RELA rather than REL dynamic relocations.  */
6237       outrel[0].r_addend = *addendp;
6238       bfd_elf32_swap_reloca_out
6239         (output_bfd, &outrel[0],
6240          (sreloc->contents
6241           + sreloc->reloc_count * sizeof (Elf32_External_Rela)));
6242     }
6243   else
6244     bfd_elf32_swap_reloc_out
6245       (output_bfd, &outrel[0],
6246        (sreloc->contents + sreloc->reloc_count * sizeof (Elf32_External_Rel)));
6247
6248   /* We've now added another relocation.  */
6249   ++sreloc->reloc_count;
6250
6251   /* Make sure the output section is writable.  The dynamic linker
6252      will be writing to it.  */
6253   elf_section_data (input_section->output_section)->this_hdr.sh_flags
6254     |= SHF_WRITE;
6255
6256   /* On IRIX5, make an entry of compact relocation info.  */
6257   if (IRIX_COMPAT (output_bfd) == ict_irix5)
6258     {
6259       asection *scpt = bfd_get_linker_section (dynobj, ".compact_rel");
6260       bfd_byte *cr;
6261
6262       if (scpt)
6263         {
6264           Elf32_crinfo cptrel;
6265
6266           mips_elf_set_cr_format (cptrel, CRF_MIPS_LONG);
6267           cptrel.vaddr = (rel->r_offset
6268                           + input_section->output_section->vma
6269                           + input_section->output_offset);
6270           if (r_type == R_MIPS_REL32)
6271             mips_elf_set_cr_type (cptrel, CRT_MIPS_REL32);
6272           else
6273             mips_elf_set_cr_type (cptrel, CRT_MIPS_WORD);
6274           mips_elf_set_cr_dist2to (cptrel, 0);
6275           cptrel.konst = *addendp;
6276
6277           cr = (scpt->contents
6278                 + sizeof (Elf32_External_compact_rel));
6279           mips_elf_set_cr_relvaddr (cptrel, 0);
6280           bfd_elf32_swap_crinfo_out (output_bfd, &cptrel,
6281                                      ((Elf32_External_crinfo *) cr
6282                                       + scpt->reloc_count));
6283           ++scpt->reloc_count;
6284         }
6285     }
6286
6287   /* If we've written this relocation for a readonly section,
6288      we need to set DF_TEXTREL again, so that we do not delete the
6289      DT_TEXTREL tag.  */
6290   if (MIPS_ELF_READONLY_SECTION (input_section))
6291     info->flags |= DF_TEXTREL;
6292
6293   return TRUE;
6294 }
6295 \f
6296 /* Return the MACH for a MIPS e_flags value.  */
6297
6298 unsigned long
6299 _bfd_elf_mips_mach (flagword flags)
6300 {
6301   switch (flags & EF_MIPS_MACH)
6302     {
6303     case E_MIPS_MACH_3900:
6304       return bfd_mach_mips3900;
6305
6306     case E_MIPS_MACH_4010:
6307       return bfd_mach_mips4010;
6308
6309     case E_MIPS_MACH_4100:
6310       return bfd_mach_mips4100;
6311
6312     case E_MIPS_MACH_4111:
6313       return bfd_mach_mips4111;
6314
6315     case E_MIPS_MACH_4120:
6316       return bfd_mach_mips4120;
6317
6318     case E_MIPS_MACH_4650:
6319       return bfd_mach_mips4650;
6320
6321     case E_MIPS_MACH_5400:
6322       return bfd_mach_mips5400;
6323
6324     case E_MIPS_MACH_5500:
6325       return bfd_mach_mips5500;
6326
6327     case E_MIPS_MACH_5900:
6328       return bfd_mach_mips5900;
6329
6330     case E_MIPS_MACH_9000:
6331       return bfd_mach_mips9000;
6332
6333     case E_MIPS_MACH_SB1:
6334       return bfd_mach_mips_sb1;
6335
6336     case E_MIPS_MACH_LS2E:
6337       return bfd_mach_mips_loongson_2e;
6338
6339     case E_MIPS_MACH_LS2F:
6340       return bfd_mach_mips_loongson_2f;
6341
6342     case E_MIPS_MACH_LS3A:
6343       return bfd_mach_mips_loongson_3a;
6344
6345     case E_MIPS_MACH_OCTEON2:
6346       return bfd_mach_mips_octeon2;
6347
6348     case E_MIPS_MACH_OCTEON:
6349       return bfd_mach_mips_octeon;
6350
6351     case E_MIPS_MACH_XLR:
6352       return bfd_mach_mips_xlr;
6353
6354     default:
6355       switch (flags & EF_MIPS_ARCH)
6356         {
6357         default:
6358         case E_MIPS_ARCH_1:
6359           return bfd_mach_mips3000;
6360
6361         case E_MIPS_ARCH_2:
6362           return bfd_mach_mips6000;
6363
6364         case E_MIPS_ARCH_3:
6365           return bfd_mach_mips4000;
6366
6367         case E_MIPS_ARCH_4:
6368           return bfd_mach_mips8000;
6369
6370         case E_MIPS_ARCH_5:
6371           return bfd_mach_mips5;
6372
6373         case E_MIPS_ARCH_32:
6374           return bfd_mach_mipsisa32;
6375
6376         case E_MIPS_ARCH_64:
6377           return bfd_mach_mipsisa64;
6378
6379         case E_MIPS_ARCH_32R2:
6380           return bfd_mach_mipsisa32r2;
6381
6382         case E_MIPS_ARCH_64R2:
6383           return bfd_mach_mipsisa64r2;
6384         }
6385     }
6386
6387   return 0;
6388 }
6389
6390 /* Return printable name for ABI.  */
6391
6392 static INLINE char *
6393 elf_mips_abi_name (bfd *abfd)
6394 {
6395   flagword flags;
6396
6397   flags = elf_elfheader (abfd)->e_flags;
6398   switch (flags & EF_MIPS_ABI)
6399     {
6400     case 0:
6401       if (ABI_N32_P (abfd))
6402         return "N32";
6403       else if (ABI_64_P (abfd))
6404         return "64";
6405       else
6406         return "none";
6407     case E_MIPS_ABI_O32:
6408       return "O32";
6409     case E_MIPS_ABI_O64:
6410       return "O64";
6411     case E_MIPS_ABI_EABI32:
6412       return "EABI32";
6413     case E_MIPS_ABI_EABI64:
6414       return "EABI64";
6415     default:
6416       return "unknown abi";
6417     }
6418 }
6419 \f
6420 /* MIPS ELF uses two common sections.  One is the usual one, and the
6421    other is for small objects.  All the small objects are kept
6422    together, and then referenced via the gp pointer, which yields
6423    faster assembler code.  This is what we use for the small common
6424    section.  This approach is copied from ecoff.c.  */
6425 static asection mips_elf_scom_section;
6426 static asymbol mips_elf_scom_symbol;
6427 static asymbol *mips_elf_scom_symbol_ptr;
6428
6429 /* MIPS ELF also uses an acommon section, which represents an
6430    allocated common symbol which may be overridden by a
6431    definition in a shared library.  */
6432 static asection mips_elf_acom_section;
6433 static asymbol mips_elf_acom_symbol;
6434 static asymbol *mips_elf_acom_symbol_ptr;
6435
6436 /* This is used for both the 32-bit and the 64-bit ABI.  */
6437
6438 void
6439 _bfd_mips_elf_symbol_processing (bfd *abfd, asymbol *asym)
6440 {
6441   elf_symbol_type *elfsym;
6442
6443   /* Handle the special MIPS section numbers that a symbol may use.  */
6444   elfsym = (elf_symbol_type *) asym;
6445   switch (elfsym->internal_elf_sym.st_shndx)
6446     {
6447     case SHN_MIPS_ACOMMON:
6448       /* This section is used in a dynamically linked executable file.
6449          It is an allocated common section.  The dynamic linker can
6450          either resolve these symbols to something in a shared
6451          library, or it can just leave them here.  For our purposes,
6452          we can consider these symbols to be in a new section.  */
6453       if (mips_elf_acom_section.name == NULL)
6454         {
6455           /* Initialize the acommon section.  */
6456           mips_elf_acom_section.name = ".acommon";
6457           mips_elf_acom_section.flags = SEC_ALLOC;
6458           mips_elf_acom_section.output_section = &mips_elf_acom_section;
6459           mips_elf_acom_section.symbol = &mips_elf_acom_symbol;
6460           mips_elf_acom_section.symbol_ptr_ptr = &mips_elf_acom_symbol_ptr;
6461           mips_elf_acom_symbol.name = ".acommon";
6462           mips_elf_acom_symbol.flags = BSF_SECTION_SYM;
6463           mips_elf_acom_symbol.section = &mips_elf_acom_section;
6464           mips_elf_acom_symbol_ptr = &mips_elf_acom_symbol;
6465         }
6466       asym->section = &mips_elf_acom_section;
6467       break;
6468
6469     case SHN_COMMON:
6470       /* Common symbols less than the GP size are automatically
6471          treated as SHN_MIPS_SCOMMON symbols on IRIX5.  */
6472       if (asym->value > elf_gp_size (abfd)
6473           || ELF_ST_TYPE (elfsym->internal_elf_sym.st_info) == STT_TLS
6474           || IRIX_COMPAT (abfd) == ict_irix6)
6475         break;
6476       /* Fall through.  */
6477     case SHN_MIPS_SCOMMON:
6478       if (mips_elf_scom_section.name == NULL)
6479         {
6480           /* Initialize the small common section.  */
6481           mips_elf_scom_section.name = ".scommon";
6482           mips_elf_scom_section.flags = SEC_IS_COMMON;
6483           mips_elf_scom_section.output_section = &mips_elf_scom_section;
6484           mips_elf_scom_section.symbol = &mips_elf_scom_symbol;
6485           mips_elf_scom_section.symbol_ptr_ptr = &mips_elf_scom_symbol_ptr;
6486           mips_elf_scom_symbol.name = ".scommon";
6487           mips_elf_scom_symbol.flags = BSF_SECTION_SYM;
6488           mips_elf_scom_symbol.section = &mips_elf_scom_section;
6489           mips_elf_scom_symbol_ptr = &mips_elf_scom_symbol;
6490         }
6491       asym->section = &mips_elf_scom_section;
6492       asym->value = elfsym->internal_elf_sym.st_size;
6493       break;
6494
6495     case SHN_MIPS_SUNDEFINED:
6496       asym->section = bfd_und_section_ptr;
6497       break;
6498
6499     case SHN_MIPS_TEXT:
6500       {
6501         asection *section = bfd_get_section_by_name (abfd, ".text");
6502
6503         if (section != NULL)
6504           {
6505             asym->section = section;
6506             /* MIPS_TEXT is a bit special, the address is not an offset
6507                to the base of the .text section.  So substract the section
6508                base address to make it an offset.  */
6509             asym->value -= section->vma;
6510           }
6511       }
6512       break;
6513
6514     case SHN_MIPS_DATA:
6515       {
6516         asection *section = bfd_get_section_by_name (abfd, ".data");
6517
6518         if (section != NULL)
6519           {
6520             asym->section = section;
6521             /* MIPS_DATA is a bit special, the address is not an offset
6522                to the base of the .data section.  So substract the section
6523                base address to make it an offset.  */
6524             asym->value -= section->vma;
6525           }
6526       }
6527       break;
6528     }
6529
6530   /* If this is an odd-valued function symbol, assume it's a MIPS16
6531      or microMIPS one.  */
6532   if (ELF_ST_TYPE (elfsym->internal_elf_sym.st_info) == STT_FUNC
6533       && (asym->value & 1) != 0)
6534     {
6535       asym->value--;
6536       if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MICROMIPS)
6537         elfsym->internal_elf_sym.st_other
6538           = ELF_ST_SET_MICROMIPS (elfsym->internal_elf_sym.st_other);
6539       else
6540         elfsym->internal_elf_sym.st_other
6541           = ELF_ST_SET_MIPS16 (elfsym->internal_elf_sym.st_other);
6542     }
6543 }
6544 \f
6545 /* Implement elf_backend_eh_frame_address_size.  This differs from
6546    the default in the way it handles EABI64.
6547
6548    EABI64 was originally specified as an LP64 ABI, and that is what
6549    -mabi=eabi normally gives on a 64-bit target.  However, gcc has
6550    historically accepted the combination of -mabi=eabi and -mlong32,
6551    and this ILP32 variation has become semi-official over time.
6552    Both forms use elf32 and have pointer-sized FDE addresses.
6553
6554    If an EABI object was generated by GCC 4.0 or above, it will have
6555    an empty .gcc_compiled_longXX section, where XX is the size of longs
6556    in bits.  Unfortunately, ILP32 objects generated by earlier compilers
6557    have no special marking to distinguish them from LP64 objects.
6558
6559    We don't want users of the official LP64 ABI to be punished for the
6560    existence of the ILP32 variant, but at the same time, we don't want
6561    to mistakenly interpret pre-4.0 ILP32 objects as being LP64 objects.
6562    We therefore take the following approach:
6563
6564       - If ABFD contains a .gcc_compiled_longXX section, use it to
6565         determine the pointer size.
6566
6567       - Otherwise check the type of the first relocation.  Assume that
6568         the LP64 ABI is being used if the relocation is of type R_MIPS_64.
6569
6570       - Otherwise punt.
6571
6572    The second check is enough to detect LP64 objects generated by pre-4.0
6573    compilers because, in the kind of output generated by those compilers,
6574    the first relocation will be associated with either a CIE personality
6575    routine or an FDE start address.  Furthermore, the compilers never
6576    used a special (non-pointer) encoding for this ABI.
6577
6578    Checking the relocation type should also be safe because there is no
6579    reason to use R_MIPS_64 in an ILP32 object.  Pre-4.0 compilers never
6580    did so.  */
6581
6582 unsigned int
6583 _bfd_mips_elf_eh_frame_address_size (bfd *abfd, asection *sec)
6584 {
6585   if (elf_elfheader (abfd)->e_ident[EI_CLASS] == ELFCLASS64)
6586     return 8;
6587   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI64)
6588     {
6589       bfd_boolean long32_p, long64_p;
6590
6591       long32_p = bfd_get_section_by_name (abfd, ".gcc_compiled_long32") != 0;
6592       long64_p = bfd_get_section_by_name (abfd, ".gcc_compiled_long64") != 0;
6593       if (long32_p && long64_p)
6594         return 0;
6595       if (long32_p)
6596         return 4;
6597       if (long64_p)
6598         return 8;
6599
6600       if (sec->reloc_count > 0
6601           && elf_section_data (sec)->relocs != NULL
6602           && (ELF32_R_TYPE (elf_section_data (sec)->relocs[0].r_info)
6603               == R_MIPS_64))
6604         return 8;
6605
6606       return 0;
6607     }
6608   return 4;
6609 }
6610 \f
6611 /* There appears to be a bug in the MIPSpro linker that causes GOT_DISP
6612    relocations against two unnamed section symbols to resolve to the
6613    same address.  For example, if we have code like:
6614
6615         lw      $4,%got_disp(.data)($gp)
6616         lw      $25,%got_disp(.text)($gp)
6617         jalr    $25
6618
6619    then the linker will resolve both relocations to .data and the program
6620    will jump there rather than to .text.
6621
6622    We can work around this problem by giving names to local section symbols.
6623    This is also what the MIPSpro tools do.  */
6624
6625 bfd_boolean
6626 _bfd_mips_elf_name_local_section_symbols (bfd *abfd)
6627 {
6628   return SGI_COMPAT (abfd);
6629 }
6630 \f
6631 /* Work over a section just before writing it out.  This routine is
6632    used by both the 32-bit and the 64-bit ABI.  FIXME: We recognize
6633    sections that need the SHF_MIPS_GPREL flag by name; there has to be
6634    a better way.  */
6635
6636 bfd_boolean
6637 _bfd_mips_elf_section_processing (bfd *abfd, Elf_Internal_Shdr *hdr)
6638 {
6639   if (hdr->sh_type == SHT_MIPS_REGINFO
6640       && hdr->sh_size > 0)
6641     {
6642       bfd_byte buf[4];
6643
6644       BFD_ASSERT (hdr->sh_size == sizeof (Elf32_External_RegInfo));
6645       BFD_ASSERT (hdr->contents == NULL);
6646
6647       if (bfd_seek (abfd,
6648                     hdr->sh_offset + sizeof (Elf32_External_RegInfo) - 4,
6649                     SEEK_SET) != 0)
6650         return FALSE;
6651       H_PUT_32 (abfd, elf_gp (abfd), buf);
6652       if (bfd_bwrite (buf, 4, abfd) != 4)
6653         return FALSE;
6654     }
6655
6656   if (hdr->sh_type == SHT_MIPS_OPTIONS
6657       && hdr->bfd_section != NULL
6658       && mips_elf_section_data (hdr->bfd_section) != NULL
6659       && mips_elf_section_data (hdr->bfd_section)->u.tdata != NULL)
6660     {
6661       bfd_byte *contents, *l, *lend;
6662
6663       /* We stored the section contents in the tdata field in the
6664          set_section_contents routine.  We save the section contents
6665          so that we don't have to read them again.
6666          At this point we know that elf_gp is set, so we can look
6667          through the section contents to see if there is an
6668          ODK_REGINFO structure.  */
6669
6670       contents = mips_elf_section_data (hdr->bfd_section)->u.tdata;
6671       l = contents;
6672       lend = contents + hdr->sh_size;
6673       while (l + sizeof (Elf_External_Options) <= lend)
6674         {
6675           Elf_Internal_Options intopt;
6676
6677           bfd_mips_elf_swap_options_in (abfd, (Elf_External_Options *) l,
6678                                         &intopt);
6679           if (intopt.size < sizeof (Elf_External_Options))
6680             {
6681               (*_bfd_error_handler)
6682                 (_("%B: Warning: bad `%s' option size %u smaller than its header"),
6683                 abfd, MIPS_ELF_OPTIONS_SECTION_NAME (abfd), intopt.size);
6684               break;
6685             }
6686           if (ABI_64_P (abfd) && intopt.kind == ODK_REGINFO)
6687             {
6688               bfd_byte buf[8];
6689
6690               if (bfd_seek (abfd,
6691                             (hdr->sh_offset
6692                              + (l - contents)
6693                              + sizeof (Elf_External_Options)
6694                              + (sizeof (Elf64_External_RegInfo) - 8)),
6695                              SEEK_SET) != 0)
6696                 return FALSE;
6697               H_PUT_64 (abfd, elf_gp (abfd), buf);
6698               if (bfd_bwrite (buf, 8, abfd) != 8)
6699                 return FALSE;
6700             }
6701           else if (intopt.kind == ODK_REGINFO)
6702             {
6703               bfd_byte buf[4];
6704
6705               if (bfd_seek (abfd,
6706                             (hdr->sh_offset
6707                              + (l - contents)
6708                              + sizeof (Elf_External_Options)
6709                              + (sizeof (Elf32_External_RegInfo) - 4)),
6710                             SEEK_SET) != 0)
6711                 return FALSE;
6712               H_PUT_32 (abfd, elf_gp (abfd), buf);
6713               if (bfd_bwrite (buf, 4, abfd) != 4)
6714                 return FALSE;
6715             }
6716           l += intopt.size;
6717         }
6718     }
6719
6720   if (hdr->bfd_section != NULL)
6721     {
6722       const char *name = bfd_get_section_name (abfd, hdr->bfd_section);
6723
6724       /* .sbss is not handled specially here because the GNU/Linux
6725          prelinker can convert .sbss from NOBITS to PROGBITS and
6726          changing it back to NOBITS breaks the binary.  The entry in
6727          _bfd_mips_elf_special_sections will ensure the correct flags
6728          are set on .sbss if BFD creates it without reading it from an
6729          input file, and without special handling here the flags set
6730          on it in an input file will be followed.  */
6731       if (strcmp (name, ".sdata") == 0
6732           || strcmp (name, ".lit8") == 0
6733           || strcmp (name, ".lit4") == 0)
6734         {
6735           hdr->sh_flags |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL;
6736           hdr->sh_type = SHT_PROGBITS;
6737         }
6738       else if (strcmp (name, ".srdata") == 0)
6739         {
6740           hdr->sh_flags |= SHF_ALLOC | SHF_MIPS_GPREL;
6741           hdr->sh_type = SHT_PROGBITS;
6742         }
6743       else if (strcmp (name, ".compact_rel") == 0)
6744         {
6745           hdr->sh_flags = 0;
6746           hdr->sh_type = SHT_PROGBITS;
6747         }
6748       else if (strcmp (name, ".rtproc") == 0)
6749         {
6750           if (hdr->sh_addralign != 0 && hdr->sh_entsize == 0)
6751             {
6752               unsigned int adjust;
6753
6754               adjust = hdr->sh_size % hdr->sh_addralign;
6755               if (adjust != 0)
6756                 hdr->sh_size += hdr->sh_addralign - adjust;
6757             }
6758         }
6759     }
6760
6761   return TRUE;
6762 }
6763
6764 /* Handle a MIPS specific section when reading an object file.  This
6765    is called when elfcode.h finds a section with an unknown type.
6766    This routine supports both the 32-bit and 64-bit ELF ABI.
6767
6768    FIXME: We need to handle the SHF_MIPS_GPREL flag, but I'm not sure
6769    how to.  */
6770
6771 bfd_boolean
6772 _bfd_mips_elf_section_from_shdr (bfd *abfd,
6773                                  Elf_Internal_Shdr *hdr,
6774                                  const char *name,
6775                                  int shindex)
6776 {
6777   flagword flags = 0;
6778
6779   /* There ought to be a place to keep ELF backend specific flags, but
6780      at the moment there isn't one.  We just keep track of the
6781      sections by their name, instead.  Fortunately, the ABI gives
6782      suggested names for all the MIPS specific sections, so we will
6783      probably get away with this.  */
6784   switch (hdr->sh_type)
6785     {
6786     case SHT_MIPS_LIBLIST:
6787       if (strcmp (name, ".liblist") != 0)
6788         return FALSE;
6789       break;
6790     case SHT_MIPS_MSYM:
6791       if (strcmp (name, ".msym") != 0)
6792         return FALSE;
6793       break;
6794     case SHT_MIPS_CONFLICT:
6795       if (strcmp (name, ".conflict") != 0)
6796         return FALSE;
6797       break;
6798     case SHT_MIPS_GPTAB:
6799       if (! CONST_STRNEQ (name, ".gptab."))
6800         return FALSE;
6801       break;
6802     case SHT_MIPS_UCODE:
6803       if (strcmp (name, ".ucode") != 0)
6804         return FALSE;
6805       break;
6806     case SHT_MIPS_DEBUG:
6807       if (strcmp (name, ".mdebug") != 0)
6808         return FALSE;
6809       flags = SEC_DEBUGGING;
6810       break;
6811     case SHT_MIPS_REGINFO:
6812       if (strcmp (name, ".reginfo") != 0
6813           || hdr->sh_size != sizeof (Elf32_External_RegInfo))
6814         return FALSE;
6815       flags = (SEC_LINK_ONCE | SEC_LINK_DUPLICATES_SAME_SIZE);
6816       break;
6817     case SHT_MIPS_IFACE:
6818       if (strcmp (name, ".MIPS.interfaces") != 0)
6819         return FALSE;
6820       break;
6821     case SHT_MIPS_CONTENT:
6822       if (! CONST_STRNEQ (name, ".MIPS.content"))
6823         return FALSE;
6824       break;
6825     case SHT_MIPS_OPTIONS:
6826       if (!MIPS_ELF_OPTIONS_SECTION_NAME_P (name))
6827         return FALSE;
6828       break;
6829     case SHT_MIPS_DWARF:
6830       if (! CONST_STRNEQ (name, ".debug_")
6831           && ! CONST_STRNEQ (name, ".zdebug_"))
6832         return FALSE;
6833       break;
6834     case SHT_MIPS_SYMBOL_LIB:
6835       if (strcmp (name, ".MIPS.symlib") != 0)
6836         return FALSE;
6837       break;
6838     case SHT_MIPS_EVENTS:
6839       if (! CONST_STRNEQ (name, ".MIPS.events")
6840           && ! CONST_STRNEQ (name, ".MIPS.post_rel"))
6841         return FALSE;
6842       break;
6843     default:
6844       break;
6845     }
6846
6847   if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
6848     return FALSE;
6849
6850   if (flags)
6851     {
6852       if (! bfd_set_section_flags (abfd, hdr->bfd_section,
6853                                    (bfd_get_section_flags (abfd,
6854                                                            hdr->bfd_section)
6855                                     | flags)))
6856         return FALSE;
6857     }
6858
6859   /* FIXME: We should record sh_info for a .gptab section.  */
6860
6861   /* For a .reginfo section, set the gp value in the tdata information
6862      from the contents of this section.  We need the gp value while
6863      processing relocs, so we just get it now.  The .reginfo section
6864      is not used in the 64-bit MIPS ELF ABI.  */
6865   if (hdr->sh_type == SHT_MIPS_REGINFO)
6866     {
6867       Elf32_External_RegInfo ext;
6868       Elf32_RegInfo s;
6869
6870       if (! bfd_get_section_contents (abfd, hdr->bfd_section,
6871                                       &ext, 0, sizeof ext))
6872         return FALSE;
6873       bfd_mips_elf32_swap_reginfo_in (abfd, &ext, &s);
6874       elf_gp (abfd) = s.ri_gp_value;
6875     }
6876
6877   /* For a SHT_MIPS_OPTIONS section, look for a ODK_REGINFO entry, and
6878      set the gp value based on what we find.  We may see both
6879      SHT_MIPS_REGINFO and SHT_MIPS_OPTIONS/ODK_REGINFO; in that case,
6880      they should agree.  */
6881   if (hdr->sh_type == SHT_MIPS_OPTIONS)
6882     {
6883       bfd_byte *contents, *l, *lend;
6884
6885       contents = bfd_malloc (hdr->sh_size);
6886       if (contents == NULL)
6887         return FALSE;
6888       if (! bfd_get_section_contents (abfd, hdr->bfd_section, contents,
6889                                       0, hdr->sh_size))
6890         {
6891           free (contents);
6892           return FALSE;
6893         }
6894       l = contents;
6895       lend = contents + hdr->sh_size;
6896       while (l + sizeof (Elf_External_Options) <= lend)
6897         {
6898           Elf_Internal_Options intopt;
6899
6900           bfd_mips_elf_swap_options_in (abfd, (Elf_External_Options *) l,
6901                                         &intopt);
6902           if (intopt.size < sizeof (Elf_External_Options))
6903             {
6904               (*_bfd_error_handler)
6905                 (_("%B: Warning: bad `%s' option size %u smaller than its header"),
6906                 abfd, MIPS_ELF_OPTIONS_SECTION_NAME (abfd), intopt.size);
6907               break;
6908             }
6909           if (ABI_64_P (abfd) && intopt.kind == ODK_REGINFO)
6910             {
6911               Elf64_Internal_RegInfo intreg;
6912
6913               bfd_mips_elf64_swap_reginfo_in
6914                 (abfd,
6915                  ((Elf64_External_RegInfo *)
6916                   (l + sizeof (Elf_External_Options))),
6917                  &intreg);
6918               elf_gp (abfd) = intreg.ri_gp_value;
6919             }
6920           else if (intopt.kind == ODK_REGINFO)
6921             {
6922               Elf32_RegInfo intreg;
6923
6924               bfd_mips_elf32_swap_reginfo_in
6925                 (abfd,
6926                  ((Elf32_External_RegInfo *)
6927                   (l + sizeof (Elf_External_Options))),
6928                  &intreg);
6929               elf_gp (abfd) = intreg.ri_gp_value;
6930             }
6931           l += intopt.size;
6932         }
6933       free (contents);
6934     }
6935
6936   return TRUE;
6937 }
6938
6939 /* Set the correct type for a MIPS ELF section.  We do this by the
6940    section name, which is a hack, but ought to work.  This routine is
6941    used by both the 32-bit and the 64-bit ABI.  */
6942
6943 bfd_boolean
6944 _bfd_mips_elf_fake_sections (bfd *abfd, Elf_Internal_Shdr *hdr, asection *sec)
6945 {
6946   const char *name = bfd_get_section_name (abfd, sec);
6947
6948   if (strcmp (name, ".liblist") == 0)
6949     {
6950       hdr->sh_type = SHT_MIPS_LIBLIST;
6951       hdr->sh_info = sec->size / sizeof (Elf32_Lib);
6952       /* The sh_link field is set in final_write_processing.  */
6953     }
6954   else if (strcmp (name, ".conflict") == 0)
6955     hdr->sh_type = SHT_MIPS_CONFLICT;
6956   else if (CONST_STRNEQ (name, ".gptab."))
6957     {
6958       hdr->sh_type = SHT_MIPS_GPTAB;
6959       hdr->sh_entsize = sizeof (Elf32_External_gptab);
6960       /* The sh_info field is set in final_write_processing.  */
6961     }
6962   else if (strcmp (name, ".ucode") == 0)
6963     hdr->sh_type = SHT_MIPS_UCODE;
6964   else if (strcmp (name, ".mdebug") == 0)
6965     {
6966       hdr->sh_type = SHT_MIPS_DEBUG;
6967       /* In a shared object on IRIX 5.3, the .mdebug section has an
6968          entsize of 0.  FIXME: Does this matter?  */
6969       if (SGI_COMPAT (abfd) && (abfd->flags & DYNAMIC) != 0)
6970         hdr->sh_entsize = 0;
6971       else
6972         hdr->sh_entsize = 1;
6973     }
6974   else if (strcmp (name, ".reginfo") == 0)
6975     {
6976       hdr->sh_type = SHT_MIPS_REGINFO;
6977       /* In a shared object on IRIX 5.3, the .reginfo section has an
6978          entsize of 0x18.  FIXME: Does this matter?  */
6979       if (SGI_COMPAT (abfd))
6980         {
6981           if ((abfd->flags & DYNAMIC) != 0)
6982             hdr->sh_entsize = sizeof (Elf32_External_RegInfo);
6983           else
6984             hdr->sh_entsize = 1;
6985         }
6986       else
6987         hdr->sh_entsize = sizeof (Elf32_External_RegInfo);
6988     }
6989   else if (SGI_COMPAT (abfd)
6990            && (strcmp (name, ".hash") == 0
6991                || strcmp (name, ".dynamic") == 0
6992                || strcmp (name, ".dynstr") == 0))
6993     {
6994       if (SGI_COMPAT (abfd))
6995         hdr->sh_entsize = 0;
6996 #if 0
6997       /* This isn't how the IRIX6 linker behaves.  */
6998       hdr->sh_info = SIZEOF_MIPS_DYNSYM_SECNAMES;
6999 #endif
7000     }
7001   else if (strcmp (name, ".got") == 0
7002            || strcmp (name, ".srdata") == 0
7003            || strcmp (name, ".sdata") == 0
7004            || strcmp (name, ".sbss") == 0
7005            || strcmp (name, ".lit4") == 0
7006            || strcmp (name, ".lit8") == 0)
7007     hdr->sh_flags |= SHF_MIPS_GPREL;
7008   else if (strcmp (name, ".MIPS.interfaces") == 0)
7009     {
7010       hdr->sh_type = SHT_MIPS_IFACE;
7011       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7012     }
7013   else if (CONST_STRNEQ (name, ".MIPS.content"))
7014     {
7015       hdr->sh_type = SHT_MIPS_CONTENT;
7016       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7017       /* The sh_info field is set in final_write_processing.  */
7018     }
7019   else if (MIPS_ELF_OPTIONS_SECTION_NAME_P (name))
7020     {
7021       hdr->sh_type = SHT_MIPS_OPTIONS;
7022       hdr->sh_entsize = 1;
7023       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7024     }
7025   else if (CONST_STRNEQ (name, ".debug_")
7026            || CONST_STRNEQ (name, ".zdebug_"))
7027     {
7028       hdr->sh_type = SHT_MIPS_DWARF;
7029
7030       /* Irix facilities such as libexc expect a single .debug_frame
7031          per executable, the system ones have NOSTRIP set and the linker
7032          doesn't merge sections with different flags so ...  */
7033       if (SGI_COMPAT (abfd) && CONST_STRNEQ (name, ".debug_frame"))
7034         hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7035     }
7036   else if (strcmp (name, ".MIPS.symlib") == 0)
7037     {
7038       hdr->sh_type = SHT_MIPS_SYMBOL_LIB;
7039       /* The sh_link and sh_info fields are set in
7040          final_write_processing.  */
7041     }
7042   else if (CONST_STRNEQ (name, ".MIPS.events")
7043            || CONST_STRNEQ (name, ".MIPS.post_rel"))
7044     {
7045       hdr->sh_type = SHT_MIPS_EVENTS;
7046       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7047       /* The sh_link field is set in final_write_processing.  */
7048     }
7049   else if (strcmp (name, ".msym") == 0)
7050     {
7051       hdr->sh_type = SHT_MIPS_MSYM;
7052       hdr->sh_flags |= SHF_ALLOC;
7053       hdr->sh_entsize = 8;
7054     }
7055
7056   /* The generic elf_fake_sections will set up REL_HDR using the default
7057    kind of relocations.  We used to set up a second header for the
7058    non-default kind of relocations here, but only NewABI would use
7059    these, and the IRIX ld doesn't like resulting empty RELA sections.
7060    Thus we create those header only on demand now.  */
7061
7062   return TRUE;
7063 }
7064
7065 /* Given a BFD section, try to locate the corresponding ELF section
7066    index.  This is used by both the 32-bit and the 64-bit ABI.
7067    Actually, it's not clear to me that the 64-bit ABI supports these,
7068    but for non-PIC objects we will certainly want support for at least
7069    the .scommon section.  */
7070
7071 bfd_boolean
7072 _bfd_mips_elf_section_from_bfd_section (bfd *abfd ATTRIBUTE_UNUSED,
7073                                         asection *sec, int *retval)
7074 {
7075   if (strcmp (bfd_get_section_name (abfd, sec), ".scommon") == 0)
7076     {
7077       *retval = SHN_MIPS_SCOMMON;
7078       return TRUE;
7079     }
7080   if (strcmp (bfd_get_section_name (abfd, sec), ".acommon") == 0)
7081     {
7082       *retval = SHN_MIPS_ACOMMON;
7083       return TRUE;
7084     }
7085   return FALSE;
7086 }
7087 \f
7088 /* Hook called by the linker routine which adds symbols from an object
7089    file.  We must handle the special MIPS section numbers here.  */
7090
7091 bfd_boolean
7092 _bfd_mips_elf_add_symbol_hook (bfd *abfd, struct bfd_link_info *info,
7093                                Elf_Internal_Sym *sym, const char **namep,
7094                                flagword *flagsp ATTRIBUTE_UNUSED,
7095                                asection **secp, bfd_vma *valp)
7096 {
7097   if (SGI_COMPAT (abfd)
7098       && (abfd->flags & DYNAMIC) != 0
7099       && strcmp (*namep, "_rld_new_interface") == 0)
7100     {
7101       /* Skip IRIX5 rld entry name.  */
7102       *namep = NULL;
7103       return TRUE;
7104     }
7105
7106   /* Shared objects may have a dynamic symbol '_gp_disp' defined as
7107      a SECTION *ABS*.  This causes ld to think it can resolve _gp_disp
7108      by setting a DT_NEEDED for the shared object.  Since _gp_disp is
7109      a magic symbol resolved by the linker, we ignore this bogus definition
7110      of _gp_disp.  New ABI objects do not suffer from this problem so this
7111      is not done for them. */
7112   if (!NEWABI_P(abfd)
7113       && (sym->st_shndx == SHN_ABS)
7114       && (strcmp (*namep, "_gp_disp") == 0))
7115     {
7116       *namep = NULL;
7117       return TRUE;
7118     }
7119
7120   switch (sym->st_shndx)
7121     {
7122     case SHN_COMMON:
7123       /* Common symbols less than the GP size are automatically
7124          treated as SHN_MIPS_SCOMMON symbols.  */
7125       if (sym->st_size > elf_gp_size (abfd)
7126           || ELF_ST_TYPE (sym->st_info) == STT_TLS
7127           || IRIX_COMPAT (abfd) == ict_irix6)
7128         break;
7129       /* Fall through.  */
7130     case SHN_MIPS_SCOMMON:
7131       *secp = bfd_make_section_old_way (abfd, ".scommon");
7132       (*secp)->flags |= SEC_IS_COMMON;
7133       *valp = sym->st_size;
7134       break;
7135
7136     case SHN_MIPS_TEXT:
7137       /* This section is used in a shared object.  */
7138       if (elf_tdata (abfd)->elf_text_section == NULL)
7139         {
7140           asymbol *elf_text_symbol;
7141           asection *elf_text_section;
7142           bfd_size_type amt = sizeof (asection);
7143
7144           elf_text_section = bfd_zalloc (abfd, amt);
7145           if (elf_text_section == NULL)
7146             return FALSE;
7147
7148           amt = sizeof (asymbol);
7149           elf_text_symbol = bfd_zalloc (abfd, amt);
7150           if (elf_text_symbol == NULL)
7151             return FALSE;
7152
7153           /* Initialize the section.  */
7154
7155           elf_tdata (abfd)->elf_text_section = elf_text_section;
7156           elf_tdata (abfd)->elf_text_symbol = elf_text_symbol;
7157
7158           elf_text_section->symbol = elf_text_symbol;
7159           elf_text_section->symbol_ptr_ptr = &elf_tdata (abfd)->elf_text_symbol;
7160
7161           elf_text_section->name = ".text";
7162           elf_text_section->flags = SEC_NO_FLAGS;
7163           elf_text_section->output_section = NULL;
7164           elf_text_section->owner = abfd;
7165           elf_text_symbol->name = ".text";
7166           elf_text_symbol->flags = BSF_SECTION_SYM | BSF_DYNAMIC;
7167           elf_text_symbol->section = elf_text_section;
7168         }
7169       /* This code used to do *secp = bfd_und_section_ptr if
7170          info->shared.  I don't know why, and that doesn't make sense,
7171          so I took it out.  */
7172       *secp = elf_tdata (abfd)->elf_text_section;
7173       break;
7174
7175     case SHN_MIPS_ACOMMON:
7176       /* Fall through. XXX Can we treat this as allocated data?  */
7177     case SHN_MIPS_DATA:
7178       /* This section is used in a shared object.  */
7179       if (elf_tdata (abfd)->elf_data_section == NULL)
7180         {
7181           asymbol *elf_data_symbol;
7182           asection *elf_data_section;
7183           bfd_size_type amt = sizeof (asection);
7184
7185           elf_data_section = bfd_zalloc (abfd, amt);
7186           if (elf_data_section == NULL)
7187             return FALSE;
7188
7189           amt = sizeof (asymbol);
7190           elf_data_symbol = bfd_zalloc (abfd, amt);
7191           if (elf_data_symbol == NULL)
7192             return FALSE;
7193
7194           /* Initialize the section.  */
7195
7196           elf_tdata (abfd)->elf_data_section = elf_data_section;
7197           elf_tdata (abfd)->elf_data_symbol = elf_data_symbol;
7198
7199           elf_data_section->symbol = elf_data_symbol;
7200           elf_data_section->symbol_ptr_ptr = &elf_tdata (abfd)->elf_data_symbol;
7201
7202           elf_data_section->name = ".data";
7203           elf_data_section->flags = SEC_NO_FLAGS;
7204           elf_data_section->output_section = NULL;
7205           elf_data_section->owner = abfd;
7206           elf_data_symbol->name = ".data";
7207           elf_data_symbol->flags = BSF_SECTION_SYM | BSF_DYNAMIC;
7208           elf_data_symbol->section = elf_data_section;
7209         }
7210       /* This code used to do *secp = bfd_und_section_ptr if
7211          info->shared.  I don't know why, and that doesn't make sense,
7212          so I took it out.  */
7213       *secp = elf_tdata (abfd)->elf_data_section;
7214       break;
7215
7216     case SHN_MIPS_SUNDEFINED:
7217       *secp = bfd_und_section_ptr;
7218       break;
7219     }
7220
7221   if (SGI_COMPAT (abfd)
7222       && ! info->shared
7223       && info->output_bfd->xvec == abfd->xvec
7224       && strcmp (*namep, "__rld_obj_head") == 0)
7225     {
7226       struct elf_link_hash_entry *h;
7227       struct bfd_link_hash_entry *bh;
7228
7229       /* Mark __rld_obj_head as dynamic.  */
7230       bh = NULL;
7231       if (! (_bfd_generic_link_add_one_symbol
7232              (info, abfd, *namep, BSF_GLOBAL, *secp, *valp, NULL, FALSE,
7233               get_elf_backend_data (abfd)->collect, &bh)))
7234         return FALSE;
7235
7236       h = (struct elf_link_hash_entry *) bh;
7237       h->non_elf = 0;
7238       h->def_regular = 1;
7239       h->type = STT_OBJECT;
7240
7241       if (! bfd_elf_link_record_dynamic_symbol (info, h))
7242         return FALSE;
7243
7244       mips_elf_hash_table (info)->use_rld_obj_head = TRUE;
7245       mips_elf_hash_table (info)->rld_symbol = h;
7246     }
7247
7248   /* If this is a mips16 text symbol, add 1 to the value to make it
7249      odd.  This will cause something like .word SYM to come up with
7250      the right value when it is loaded into the PC.  */
7251   if (ELF_ST_IS_COMPRESSED (sym->st_other))
7252     ++*valp;
7253
7254   return TRUE;
7255 }
7256
7257 /* This hook function is called before the linker writes out a global
7258    symbol.  We mark symbols as small common if appropriate.  This is
7259    also where we undo the increment of the value for a mips16 symbol.  */
7260
7261 int
7262 _bfd_mips_elf_link_output_symbol_hook
7263   (struct bfd_link_info *info ATTRIBUTE_UNUSED,
7264    const char *name ATTRIBUTE_UNUSED, Elf_Internal_Sym *sym,
7265    asection *input_sec, struct elf_link_hash_entry *h ATTRIBUTE_UNUSED)
7266 {
7267   /* If we see a common symbol, which implies a relocatable link, then
7268      if a symbol was small common in an input file, mark it as small
7269      common in the output file.  */
7270   if (sym->st_shndx == SHN_COMMON
7271       && strcmp (input_sec->name, ".scommon") == 0)
7272     sym->st_shndx = SHN_MIPS_SCOMMON;
7273
7274   if (ELF_ST_IS_COMPRESSED (sym->st_other))
7275     sym->st_value &= ~1;
7276
7277   return 1;
7278 }
7279 \f
7280 /* Functions for the dynamic linker.  */
7281
7282 /* Create dynamic sections when linking against a dynamic object.  */
7283
7284 bfd_boolean
7285 _bfd_mips_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
7286 {
7287   struct elf_link_hash_entry *h;
7288   struct bfd_link_hash_entry *bh;
7289   flagword flags;
7290   register asection *s;
7291   const char * const *namep;
7292   struct mips_elf_link_hash_table *htab;
7293
7294   htab = mips_elf_hash_table (info);
7295   BFD_ASSERT (htab != NULL);
7296
7297   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
7298            | SEC_LINKER_CREATED | SEC_READONLY);
7299
7300   /* The psABI requires a read-only .dynamic section, but the VxWorks
7301      EABI doesn't.  */
7302   if (!htab->is_vxworks)
7303     {
7304       s = bfd_get_linker_section (abfd, ".dynamic");
7305       if (s != NULL)
7306         {
7307           if (! bfd_set_section_flags (abfd, s, flags))
7308             return FALSE;
7309         }
7310     }
7311
7312   /* We need to create .got section.  */
7313   if (!mips_elf_create_got_section (abfd, info))
7314     return FALSE;
7315
7316   if (! mips_elf_rel_dyn_section (info, TRUE))
7317     return FALSE;
7318
7319   /* Create .stub section.  */
7320   s = bfd_make_section_anyway_with_flags (abfd,
7321                                           MIPS_ELF_STUB_SECTION_NAME (abfd),
7322                                           flags | SEC_CODE);
7323   if (s == NULL
7324       || ! bfd_set_section_alignment (abfd, s,
7325                                       MIPS_ELF_LOG_FILE_ALIGN (abfd)))
7326     return FALSE;
7327   htab->sstubs = s;
7328
7329   if (!mips_elf_hash_table (info)->use_rld_obj_head
7330       && !info->shared
7331       && bfd_get_linker_section (abfd, ".rld_map") == NULL)
7332     {
7333       s = bfd_make_section_anyway_with_flags (abfd, ".rld_map",
7334                                               flags &~ (flagword) SEC_READONLY);
7335       if (s == NULL
7336           || ! bfd_set_section_alignment (abfd, s,
7337                                           MIPS_ELF_LOG_FILE_ALIGN (abfd)))
7338         return FALSE;
7339     }
7340
7341   /* On IRIX5, we adjust add some additional symbols and change the
7342      alignments of several sections.  There is no ABI documentation
7343      indicating that this is necessary on IRIX6, nor any evidence that
7344      the linker takes such action.  */
7345   if (IRIX_COMPAT (abfd) == ict_irix5)
7346     {
7347       for (namep = mips_elf_dynsym_rtproc_names; *namep != NULL; namep++)
7348         {
7349           bh = NULL;
7350           if (! (_bfd_generic_link_add_one_symbol
7351                  (info, abfd, *namep, BSF_GLOBAL, bfd_und_section_ptr, 0,
7352                   NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
7353             return FALSE;
7354
7355           h = (struct elf_link_hash_entry *) bh;
7356           h->non_elf = 0;
7357           h->def_regular = 1;
7358           h->type = STT_SECTION;
7359
7360           if (! bfd_elf_link_record_dynamic_symbol (info, h))
7361             return FALSE;
7362         }
7363
7364       /* We need to create a .compact_rel section.  */
7365       if (SGI_COMPAT (abfd))
7366         {
7367           if (!mips_elf_create_compact_rel_section (abfd, info))
7368             return FALSE;
7369         }
7370
7371       /* Change alignments of some sections.  */
7372       s = bfd_get_linker_section (abfd, ".hash");
7373       if (s != NULL)
7374         bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7375       s = bfd_get_linker_section (abfd, ".dynsym");
7376       if (s != NULL)
7377         bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7378       s = bfd_get_linker_section (abfd, ".dynstr");
7379       if (s != NULL)
7380         bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7381       /* ??? */
7382       s = bfd_get_section_by_name (abfd, ".reginfo");
7383       if (s != NULL)
7384         bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7385       s = bfd_get_linker_section (abfd, ".dynamic");
7386       if (s != NULL)
7387         bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7388     }
7389
7390   if (!info->shared)
7391     {
7392       const char *name;
7393
7394       name = SGI_COMPAT (abfd) ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING";
7395       bh = NULL;
7396       if (!(_bfd_generic_link_add_one_symbol
7397             (info, abfd, name, BSF_GLOBAL, bfd_abs_section_ptr, 0,
7398              NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
7399         return FALSE;
7400
7401       h = (struct elf_link_hash_entry *) bh;
7402       h->non_elf = 0;
7403       h->def_regular = 1;
7404       h->type = STT_SECTION;
7405
7406       if (! bfd_elf_link_record_dynamic_symbol (info, h))
7407         return FALSE;
7408
7409       if (! mips_elf_hash_table (info)->use_rld_obj_head)
7410         {
7411           /* __rld_map is a four byte word located in the .data section
7412              and is filled in by the rtld to contain a pointer to
7413              the _r_debug structure. Its symbol value will be set in
7414              _bfd_mips_elf_finish_dynamic_symbol.  */
7415           s = bfd_get_linker_section (abfd, ".rld_map");
7416           BFD_ASSERT (s != NULL);
7417
7418           name = SGI_COMPAT (abfd) ? "__rld_map" : "__RLD_MAP";
7419           bh = NULL;
7420           if (!(_bfd_generic_link_add_one_symbol
7421                 (info, abfd, name, BSF_GLOBAL, s, 0, NULL, FALSE,
7422                  get_elf_backend_data (abfd)->collect, &bh)))
7423             return FALSE;
7424
7425           h = (struct elf_link_hash_entry *) bh;
7426           h->non_elf = 0;
7427           h->def_regular = 1;
7428           h->type = STT_OBJECT;
7429
7430           if (! bfd_elf_link_record_dynamic_symbol (info, h))
7431             return FALSE;
7432           mips_elf_hash_table (info)->rld_symbol = h;
7433         }
7434     }
7435
7436   /* Create the .plt, .rel(a).plt, .dynbss and .rel(a).bss sections.
7437      Also create the _PROCEDURE_LINKAGE_TABLE symbol.  */
7438   if (!_bfd_elf_create_dynamic_sections (abfd, info))
7439     return FALSE;
7440
7441   /* Cache the sections created above.  */
7442   htab->splt = bfd_get_linker_section (abfd, ".plt");
7443   htab->sdynbss = bfd_get_linker_section (abfd, ".dynbss");
7444   if (htab->is_vxworks)
7445     {
7446       htab->srelbss = bfd_get_linker_section (abfd, ".rela.bss");
7447       htab->srelplt = bfd_get_linker_section (abfd, ".rela.plt");
7448     }
7449   else
7450     htab->srelplt = bfd_get_linker_section (abfd, ".rel.plt");
7451   if (!htab->sdynbss
7452       || (htab->is_vxworks && !htab->srelbss && !info->shared)
7453       || !htab->srelplt
7454       || !htab->splt)
7455     abort ();
7456
7457   if (htab->is_vxworks)
7458     {
7459       /* Do the usual VxWorks handling.  */
7460       if (!elf_vxworks_create_dynamic_sections (abfd, info, &htab->srelplt2))
7461         return FALSE;
7462
7463       /* Work out the PLT sizes.  */
7464       if (info->shared)
7465         {
7466           htab->plt_header_size
7467             = 4 * ARRAY_SIZE (mips_vxworks_shared_plt0_entry);
7468           htab->plt_entry_size
7469             = 4 * ARRAY_SIZE (mips_vxworks_shared_plt_entry);
7470         }
7471       else
7472         {
7473           htab->plt_header_size
7474             = 4 * ARRAY_SIZE (mips_vxworks_exec_plt0_entry);
7475           htab->plt_entry_size
7476             = 4 * ARRAY_SIZE (mips_vxworks_exec_plt_entry);
7477         }
7478     }
7479   else if (!info->shared)
7480     {
7481       /* All variants of the plt0 entry are the same size.  */
7482       htab->plt_header_size = 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry);
7483       htab->plt_entry_size = 4 * ARRAY_SIZE (mips_exec_plt_entry);
7484     }
7485
7486   return TRUE;
7487 }
7488 \f
7489 /* Return true if relocation REL against section SEC is a REL rather than
7490    RELA relocation.  RELOCS is the first relocation in the section and
7491    ABFD is the bfd that contains SEC.  */
7492
7493 static bfd_boolean
7494 mips_elf_rel_relocation_p (bfd *abfd, asection *sec,
7495                            const Elf_Internal_Rela *relocs,
7496                            const Elf_Internal_Rela *rel)
7497 {
7498   Elf_Internal_Shdr *rel_hdr;
7499   const struct elf_backend_data *bed;
7500
7501   /* To determine which flavor of relocation this is, we depend on the
7502      fact that the INPUT_SECTION's REL_HDR is read before RELA_HDR.  */
7503   rel_hdr = elf_section_data (sec)->rel.hdr;
7504   if (rel_hdr == NULL)
7505     return FALSE;
7506   bed = get_elf_backend_data (abfd);
7507   return ((size_t) (rel - relocs)
7508           < NUM_SHDR_ENTRIES (rel_hdr) * bed->s->int_rels_per_ext_rel);
7509 }
7510
7511 /* Read the addend for REL relocation REL, which belongs to bfd ABFD.
7512    HOWTO is the relocation's howto and CONTENTS points to the contents
7513    of the section that REL is against.  */
7514
7515 static bfd_vma
7516 mips_elf_read_rel_addend (bfd *abfd, const Elf_Internal_Rela *rel,
7517                           reloc_howto_type *howto, bfd_byte *contents)
7518 {
7519   bfd_byte *location;
7520   unsigned int r_type;
7521   bfd_vma addend;
7522
7523   r_type = ELF_R_TYPE (abfd, rel->r_info);
7524   location = contents + rel->r_offset;
7525
7526   /* Get the addend, which is stored in the input file.  */
7527   _bfd_mips_elf_reloc_unshuffle (abfd, r_type, FALSE, location);
7528   addend = mips_elf_obtain_contents (howto, rel, abfd, contents);
7529   _bfd_mips_elf_reloc_shuffle (abfd, r_type, FALSE, location);
7530
7531   return addend & howto->src_mask;
7532 }
7533
7534 /* REL is a relocation in ABFD that needs a partnering LO16 relocation
7535    and *ADDEND is the addend for REL itself.  Look for the LO16 relocation
7536    and update *ADDEND with the final addend.  Return true on success
7537    or false if the LO16 could not be found.  RELEND is the exclusive
7538    upper bound on the relocations for REL's section.  */
7539
7540 static bfd_boolean
7541 mips_elf_add_lo16_rel_addend (bfd *abfd,
7542                               const Elf_Internal_Rela *rel,
7543                               const Elf_Internal_Rela *relend,
7544                               bfd_byte *contents, bfd_vma *addend)
7545 {
7546   unsigned int r_type, lo16_type;
7547   const Elf_Internal_Rela *lo16_relocation;
7548   reloc_howto_type *lo16_howto;
7549   bfd_vma l;
7550
7551   r_type = ELF_R_TYPE (abfd, rel->r_info);
7552   if (mips16_reloc_p (r_type))
7553     lo16_type = R_MIPS16_LO16;
7554   else if (micromips_reloc_p (r_type))
7555     lo16_type = R_MICROMIPS_LO16;
7556   else
7557     lo16_type = R_MIPS_LO16;
7558
7559   /* The combined value is the sum of the HI16 addend, left-shifted by
7560      sixteen bits, and the LO16 addend, sign extended.  (Usually, the
7561      code does a `lui' of the HI16 value, and then an `addiu' of the
7562      LO16 value.)
7563
7564      Scan ahead to find a matching LO16 relocation.
7565
7566      According to the MIPS ELF ABI, the R_MIPS_LO16 relocation must
7567      be immediately following.  However, for the IRIX6 ABI, the next
7568      relocation may be a composed relocation consisting of several
7569      relocations for the same address.  In that case, the R_MIPS_LO16
7570      relocation may occur as one of these.  We permit a similar
7571      extension in general, as that is useful for GCC.
7572
7573      In some cases GCC dead code elimination removes the LO16 but keeps
7574      the corresponding HI16.  This is strictly speaking a violation of
7575      the ABI but not immediately harmful.  */
7576   lo16_relocation = mips_elf_next_relocation (abfd, lo16_type, rel, relend);
7577   if (lo16_relocation == NULL)
7578     return FALSE;
7579
7580   /* Obtain the addend kept there.  */
7581   lo16_howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, lo16_type, FALSE);
7582   l = mips_elf_read_rel_addend (abfd, lo16_relocation, lo16_howto, contents);
7583
7584   l <<= lo16_howto->rightshift;
7585   l = _bfd_mips_elf_sign_extend (l, 16);
7586
7587   *addend <<= 16;
7588   *addend += l;
7589   return TRUE;
7590 }
7591
7592 /* Try to read the contents of section SEC in bfd ABFD.  Return true and
7593    store the contents in *CONTENTS on success.  Assume that *CONTENTS
7594    already holds the contents if it is nonull on entry.  */
7595
7596 static bfd_boolean
7597 mips_elf_get_section_contents (bfd *abfd, asection *sec, bfd_byte **contents)
7598 {
7599   if (*contents)
7600     return TRUE;
7601
7602   /* Get cached copy if it exists.  */
7603   if (elf_section_data (sec)->this_hdr.contents != NULL)
7604     {
7605       *contents = elf_section_data (sec)->this_hdr.contents;
7606       return TRUE;
7607     }
7608
7609   return bfd_malloc_and_get_section (abfd, sec, contents);
7610 }
7611
7612 /* Look through the relocs for a section during the first phase, and
7613    allocate space in the global offset table.  */
7614
7615 bfd_boolean
7616 _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
7617                             asection *sec, const Elf_Internal_Rela *relocs)
7618 {
7619   const char *name;
7620   bfd *dynobj;
7621   Elf_Internal_Shdr *symtab_hdr;
7622   struct elf_link_hash_entry **sym_hashes;
7623   size_t extsymoff;
7624   const Elf_Internal_Rela *rel;
7625   const Elf_Internal_Rela *rel_end;
7626   asection *sreloc;
7627   const struct elf_backend_data *bed;
7628   struct mips_elf_link_hash_table *htab;
7629   bfd_byte *contents;
7630   bfd_vma addend;
7631   reloc_howto_type *howto;
7632
7633   if (info->relocatable)
7634     return TRUE;
7635
7636   htab = mips_elf_hash_table (info);
7637   BFD_ASSERT (htab != NULL);
7638
7639   dynobj = elf_hash_table (info)->dynobj;
7640   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
7641   sym_hashes = elf_sym_hashes (abfd);
7642   extsymoff = (elf_bad_symtab (abfd)) ? 0 : symtab_hdr->sh_info;
7643
7644   bed = get_elf_backend_data (abfd);
7645   rel_end = relocs + sec->reloc_count * bed->s->int_rels_per_ext_rel;
7646
7647   /* Check for the mips16 stub sections.  */
7648
7649   name = bfd_get_section_name (abfd, sec);
7650   if (FN_STUB_P (name))
7651     {
7652       unsigned long r_symndx;
7653
7654       /* Look at the relocation information to figure out which symbol
7655          this is for.  */
7656
7657       r_symndx = mips16_stub_symndx (bed, sec, relocs, rel_end);
7658       if (r_symndx == 0)
7659         {
7660           (*_bfd_error_handler)
7661             (_("%B: Warning: cannot determine the target function for"
7662                " stub section `%s'"),
7663              abfd, name);
7664           bfd_set_error (bfd_error_bad_value);
7665           return FALSE;
7666         }
7667
7668       if (r_symndx < extsymoff
7669           || sym_hashes[r_symndx - extsymoff] == NULL)
7670         {
7671           asection *o;
7672
7673           /* This stub is for a local symbol.  This stub will only be
7674              needed if there is some relocation in this BFD, other
7675              than a 16 bit function call, which refers to this symbol.  */
7676           for (o = abfd->sections; o != NULL; o = o->next)
7677             {
7678               Elf_Internal_Rela *sec_relocs;
7679               const Elf_Internal_Rela *r, *rend;
7680
7681               /* We can ignore stub sections when looking for relocs.  */
7682               if ((o->flags & SEC_RELOC) == 0
7683                   || o->reloc_count == 0
7684                   || section_allows_mips16_refs_p (o))
7685                 continue;
7686
7687               sec_relocs
7688                 = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
7689                                              info->keep_memory);
7690               if (sec_relocs == NULL)
7691                 return FALSE;
7692
7693               rend = sec_relocs + o->reloc_count;
7694               for (r = sec_relocs; r < rend; r++)
7695                 if (ELF_R_SYM (abfd, r->r_info) == r_symndx
7696                     && !mips16_call_reloc_p (ELF_R_TYPE (abfd, r->r_info)))
7697                   break;
7698
7699               if (elf_section_data (o)->relocs != sec_relocs)
7700                 free (sec_relocs);
7701
7702               if (r < rend)
7703                 break;
7704             }
7705
7706           if (o == NULL)
7707             {
7708               /* There is no non-call reloc for this stub, so we do
7709                  not need it.  Since this function is called before
7710                  the linker maps input sections to output sections, we
7711                  can easily discard it by setting the SEC_EXCLUDE
7712                  flag.  */
7713               sec->flags |= SEC_EXCLUDE;
7714               return TRUE;
7715             }
7716
7717           /* Record this stub in an array of local symbol stubs for
7718              this BFD.  */
7719           if (elf_tdata (abfd)->local_stubs == NULL)
7720             {
7721               unsigned long symcount;
7722               asection **n;
7723               bfd_size_type amt;
7724
7725               if (elf_bad_symtab (abfd))
7726                 symcount = NUM_SHDR_ENTRIES (symtab_hdr);
7727               else
7728                 symcount = symtab_hdr->sh_info;
7729               amt = symcount * sizeof (asection *);
7730               n = bfd_zalloc (abfd, amt);
7731               if (n == NULL)
7732                 return FALSE;
7733               elf_tdata (abfd)->local_stubs = n;
7734             }
7735
7736           sec->flags |= SEC_KEEP;
7737           elf_tdata (abfd)->local_stubs[r_symndx] = sec;
7738
7739           /* We don't need to set mips16_stubs_seen in this case.
7740              That flag is used to see whether we need to look through
7741              the global symbol table for stubs.  We don't need to set
7742              it here, because we just have a local stub.  */
7743         }
7744       else
7745         {
7746           struct mips_elf_link_hash_entry *h;
7747
7748           h = ((struct mips_elf_link_hash_entry *)
7749                sym_hashes[r_symndx - extsymoff]);
7750
7751           while (h->root.root.type == bfd_link_hash_indirect
7752                  || h->root.root.type == bfd_link_hash_warning)
7753             h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
7754
7755           /* H is the symbol this stub is for.  */
7756
7757           /* If we already have an appropriate stub for this function, we
7758              don't need another one, so we can discard this one.  Since
7759              this function is called before the linker maps input sections
7760              to output sections, we can easily discard it by setting the
7761              SEC_EXCLUDE flag.  */
7762           if (h->fn_stub != NULL)
7763             {
7764               sec->flags |= SEC_EXCLUDE;
7765               return TRUE;
7766             }
7767
7768           sec->flags |= SEC_KEEP;
7769           h->fn_stub = sec;
7770           mips_elf_hash_table (info)->mips16_stubs_seen = TRUE;
7771         }
7772     }
7773   else if (CALL_STUB_P (name) || CALL_FP_STUB_P (name))
7774     {
7775       unsigned long r_symndx;
7776       struct mips_elf_link_hash_entry *h;
7777       asection **loc;
7778
7779       /* Look at the relocation information to figure out which symbol
7780          this is for.  */
7781
7782       r_symndx = mips16_stub_symndx (bed, sec, relocs, rel_end);
7783       if (r_symndx == 0)
7784         {
7785           (*_bfd_error_handler)
7786             (_("%B: Warning: cannot determine the target function for"
7787                " stub section `%s'"),
7788              abfd, name);
7789           bfd_set_error (bfd_error_bad_value);
7790           return FALSE;
7791         }
7792
7793       if (r_symndx < extsymoff
7794           || sym_hashes[r_symndx - extsymoff] == NULL)
7795         {
7796           asection *o;
7797
7798           /* This stub is for a local symbol.  This stub will only be
7799              needed if there is some relocation (R_MIPS16_26) in this BFD
7800              that refers to this symbol.  */
7801           for (o = abfd->sections; o != NULL; o = o->next)
7802             {
7803               Elf_Internal_Rela *sec_relocs;
7804               const Elf_Internal_Rela *r, *rend;
7805
7806               /* We can ignore stub sections when looking for relocs.  */
7807               if ((o->flags & SEC_RELOC) == 0
7808                   || o->reloc_count == 0
7809                   || section_allows_mips16_refs_p (o))
7810                 continue;
7811
7812               sec_relocs
7813                 = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
7814                                              info->keep_memory);
7815               if (sec_relocs == NULL)
7816                 return FALSE;
7817
7818               rend = sec_relocs + o->reloc_count;
7819               for (r = sec_relocs; r < rend; r++)
7820                 if (ELF_R_SYM (abfd, r->r_info) == r_symndx
7821                     && ELF_R_TYPE (abfd, r->r_info) == R_MIPS16_26)
7822                     break;
7823
7824               if (elf_section_data (o)->relocs != sec_relocs)
7825                 free (sec_relocs);
7826
7827               if (r < rend)
7828                 break;
7829             }
7830
7831           if (o == NULL)
7832             {
7833               /* There is no non-call reloc for this stub, so we do
7834                  not need it.  Since this function is called before
7835                  the linker maps input sections to output sections, we
7836                  can easily discard it by setting the SEC_EXCLUDE
7837                  flag.  */
7838               sec->flags |= SEC_EXCLUDE;
7839               return TRUE;
7840             }
7841
7842           /* Record this stub in an array of local symbol call_stubs for
7843              this BFD.  */
7844           if (elf_tdata (abfd)->local_call_stubs == NULL)
7845             {
7846               unsigned long symcount;
7847               asection **n;
7848               bfd_size_type amt;
7849
7850               if (elf_bad_symtab (abfd))
7851                 symcount = NUM_SHDR_ENTRIES (symtab_hdr);
7852               else
7853                 symcount = symtab_hdr->sh_info;
7854               amt = symcount * sizeof (asection *);
7855               n = bfd_zalloc (abfd, amt);
7856               if (n == NULL)
7857                 return FALSE;
7858               elf_tdata (abfd)->local_call_stubs = n;
7859             }
7860
7861           sec->flags |= SEC_KEEP;
7862           elf_tdata (abfd)->local_call_stubs[r_symndx] = sec;
7863
7864           /* We don't need to set mips16_stubs_seen in this case.
7865              That flag is used to see whether we need to look through
7866              the global symbol table for stubs.  We don't need to set
7867              it here, because we just have a local stub.  */
7868         }
7869       else
7870         {
7871           h = ((struct mips_elf_link_hash_entry *)
7872                sym_hashes[r_symndx - extsymoff]);
7873
7874           /* H is the symbol this stub is for.  */
7875
7876           if (CALL_FP_STUB_P (name))
7877             loc = &h->call_fp_stub;
7878           else
7879             loc = &h->call_stub;
7880
7881           /* If we already have an appropriate stub for this function, we
7882              don't need another one, so we can discard this one.  Since
7883              this function is called before the linker maps input sections
7884              to output sections, we can easily discard it by setting the
7885              SEC_EXCLUDE flag.  */
7886           if (*loc != NULL)
7887             {
7888               sec->flags |= SEC_EXCLUDE;
7889               return TRUE;
7890             }
7891
7892           sec->flags |= SEC_KEEP;
7893           *loc = sec;
7894           mips_elf_hash_table (info)->mips16_stubs_seen = TRUE;
7895         }
7896     }
7897
7898   sreloc = NULL;
7899   contents = NULL;
7900   for (rel = relocs; rel < rel_end; ++rel)
7901     {
7902       unsigned long r_symndx;
7903       unsigned int r_type;
7904       struct elf_link_hash_entry *h;
7905       bfd_boolean can_make_dynamic_p;
7906
7907       r_symndx = ELF_R_SYM (abfd, rel->r_info);
7908       r_type = ELF_R_TYPE (abfd, rel->r_info);
7909
7910       if (r_symndx < extsymoff)
7911         h = NULL;
7912       else if (r_symndx >= extsymoff + NUM_SHDR_ENTRIES (symtab_hdr))
7913         {
7914           (*_bfd_error_handler)
7915             (_("%B: Malformed reloc detected for section %s"),
7916              abfd, name);
7917           bfd_set_error (bfd_error_bad_value);
7918           return FALSE;
7919         }
7920       else
7921         {
7922           h = sym_hashes[r_symndx - extsymoff];
7923           while (h != NULL
7924                  && (h->root.type == bfd_link_hash_indirect
7925                      || h->root.type == bfd_link_hash_warning))
7926             h = (struct elf_link_hash_entry *) h->root.u.i.link;
7927         }
7928
7929       /* Set CAN_MAKE_DYNAMIC_P to true if we can convert this
7930          relocation into a dynamic one.  */
7931       can_make_dynamic_p = FALSE;
7932       switch (r_type)
7933         {
7934         case R_MIPS_GOT16:
7935         case R_MIPS_CALL16:
7936         case R_MIPS_CALL_HI16:
7937         case R_MIPS_CALL_LO16:
7938         case R_MIPS_GOT_HI16:
7939         case R_MIPS_GOT_LO16:
7940         case R_MIPS_GOT_PAGE:
7941         case R_MIPS_GOT_OFST:
7942         case R_MIPS_GOT_DISP:
7943         case R_MIPS_TLS_GOTTPREL:
7944         case R_MIPS_TLS_GD:
7945         case R_MIPS_TLS_LDM:
7946         case R_MIPS16_GOT16:
7947         case R_MIPS16_CALL16:
7948         case R_MIPS16_TLS_GOTTPREL:
7949         case R_MIPS16_TLS_GD:
7950         case R_MIPS16_TLS_LDM:
7951         case R_MICROMIPS_GOT16:
7952         case R_MICROMIPS_CALL16:
7953         case R_MICROMIPS_CALL_HI16:
7954         case R_MICROMIPS_CALL_LO16:
7955         case R_MICROMIPS_GOT_HI16:
7956         case R_MICROMIPS_GOT_LO16:
7957         case R_MICROMIPS_GOT_PAGE:
7958         case R_MICROMIPS_GOT_OFST:
7959         case R_MICROMIPS_GOT_DISP:
7960         case R_MICROMIPS_TLS_GOTTPREL:
7961         case R_MICROMIPS_TLS_GD:
7962         case R_MICROMIPS_TLS_LDM:
7963           if (dynobj == NULL)
7964             elf_hash_table (info)->dynobj = dynobj = abfd;
7965           if (!mips_elf_create_got_section (dynobj, info))
7966             return FALSE;
7967           if (htab->is_vxworks && !info->shared)
7968             {
7969               (*_bfd_error_handler)
7970                 (_("%B: GOT reloc at 0x%lx not expected in executables"),
7971                  abfd, (unsigned long) rel->r_offset);
7972               bfd_set_error (bfd_error_bad_value);
7973               return FALSE;
7974             }
7975           break;
7976
7977           /* This is just a hint; it can safely be ignored.  Don't set
7978              has_static_relocs for the corresponding symbol.  */
7979         case R_MIPS_JALR:
7980         case R_MICROMIPS_JALR:
7981           break;
7982
7983         case R_MIPS_32:
7984         case R_MIPS_REL32:
7985         case R_MIPS_64:
7986           /* In VxWorks executables, references to external symbols
7987              must be handled using copy relocs or PLT entries; it is not
7988              possible to convert this relocation into a dynamic one.
7989
7990              For executables that use PLTs and copy-relocs, we have a
7991              choice between converting the relocation into a dynamic
7992              one or using copy relocations or PLT entries.  It is
7993              usually better to do the former, unless the relocation is
7994              against a read-only section.  */
7995           if ((info->shared
7996                || (h != NULL
7997                    && !htab->is_vxworks
7998                    && strcmp (h->root.root.string, "__gnu_local_gp") != 0
7999                    && !(!info->nocopyreloc
8000                         && !PIC_OBJECT_P (abfd)
8001                         && MIPS_ELF_READONLY_SECTION (sec))))
8002               && (sec->flags & SEC_ALLOC) != 0)
8003             {
8004               can_make_dynamic_p = TRUE;
8005               if (dynobj == NULL)
8006                 elf_hash_table (info)->dynobj = dynobj = abfd;
8007               break;
8008             }
8009           /* For sections that are not SEC_ALLOC a copy reloc would be
8010              output if possible (implying questionable semantics for
8011              read-only data objects) or otherwise the final link would
8012              fail as ld.so will not process them and could not therefore
8013              handle any outstanding dynamic relocations.
8014
8015              For such sections that are also SEC_DEBUGGING, we can avoid
8016              these problems by simply ignoring any relocs as these
8017              sections have a predefined use and we know it is safe to do
8018              so.
8019
8020              This is needed in cases such as a global symbol definition
8021              in a shared library causing a common symbol from an object
8022              file to be converted to an undefined reference.  If that
8023              happens, then all the relocations against this symbol from
8024              SEC_DEBUGGING sections in the object file will resolve to
8025              nil.  */
8026           if ((sec->flags & SEC_DEBUGGING) != 0)
8027             break;
8028           /* Fall through.  */
8029
8030         default:
8031           /* Most static relocations require pointer equality, except
8032              for branches.  */
8033           if (h)
8034             h->pointer_equality_needed = TRUE;
8035           /* Fall through.  */
8036
8037         case R_MIPS_26:
8038         case R_MIPS_PC16:
8039         case R_MIPS16_26:
8040         case R_MICROMIPS_26_S1:
8041         case R_MICROMIPS_PC7_S1:
8042         case R_MICROMIPS_PC10_S1:
8043         case R_MICROMIPS_PC16_S1:
8044         case R_MICROMIPS_PC23_S2:
8045           if (h)
8046             ((struct mips_elf_link_hash_entry *) h)->has_static_relocs = TRUE;
8047           break;
8048         }
8049
8050       if (h)
8051         {
8052           /* Relocations against the special VxWorks __GOTT_BASE__ and
8053              __GOTT_INDEX__ symbols must be left to the loader.  Allocate
8054              room for them in .rela.dyn.  */
8055           if (is_gott_symbol (info, h))
8056             {
8057               if (sreloc == NULL)
8058                 {
8059                   sreloc = mips_elf_rel_dyn_section (info, TRUE);
8060                   if (sreloc == NULL)
8061                     return FALSE;
8062                 }
8063               mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
8064               if (MIPS_ELF_READONLY_SECTION (sec))
8065                 /* We tell the dynamic linker that there are
8066                    relocations against the text segment.  */
8067                 info->flags |= DF_TEXTREL;
8068             }
8069         }
8070       else if (call_lo16_reloc_p (r_type)
8071                || got_lo16_reloc_p (r_type)
8072                || got_disp_reloc_p (r_type)
8073                || (got16_reloc_p (r_type) && htab->is_vxworks))
8074         {
8075           /* We may need a local GOT entry for this relocation.  We
8076              don't count R_MIPS_GOT_PAGE because we can estimate the
8077              maximum number of pages needed by looking at the size of
8078              the segment.  Similar comments apply to R_MIPS*_GOT16 and
8079              R_MIPS*_CALL16, except on VxWorks, where GOT relocations
8080              always evaluate to "G".  We don't count R_MIPS_GOT_HI16, or
8081              R_MIPS_CALL_HI16 because these are always followed by an
8082              R_MIPS_GOT_LO16 or R_MIPS_CALL_LO16.  */
8083           if (!mips_elf_record_local_got_symbol (abfd, r_symndx,
8084                                                  rel->r_addend, info, r_type))
8085             return FALSE;
8086         }
8087
8088       if (h != NULL
8089           && mips_elf_relocation_needs_la25_stub (abfd, r_type,
8090                                                   ELF_ST_IS_MIPS16 (h->other)))
8091         ((struct mips_elf_link_hash_entry *) h)->has_nonpic_branches = TRUE;
8092
8093       switch (r_type)
8094         {
8095         case R_MIPS_CALL16:
8096         case R_MIPS16_CALL16:
8097         case R_MICROMIPS_CALL16:
8098           if (h == NULL)
8099             {
8100               (*_bfd_error_handler)
8101                 (_("%B: CALL16 reloc at 0x%lx not against global symbol"),
8102                  abfd, (unsigned long) rel->r_offset);
8103               bfd_set_error (bfd_error_bad_value);
8104               return FALSE;
8105             }
8106           /* Fall through.  */
8107
8108         case R_MIPS_CALL_HI16:
8109         case R_MIPS_CALL_LO16:
8110         case R_MICROMIPS_CALL_HI16:
8111         case R_MICROMIPS_CALL_LO16:
8112           if (h != NULL)
8113             {
8114               /* Make sure there is room in the regular GOT to hold the
8115                  function's address.  We may eliminate it in favour of
8116                  a .got.plt entry later; see mips_elf_count_got_symbols.  */
8117               if (!mips_elf_record_global_got_symbol (h, abfd, info, TRUE,
8118                                                       r_type))
8119                 return FALSE;
8120
8121               /* We need a stub, not a plt entry for the undefined
8122                  function.  But we record it as if it needs plt.  See
8123                  _bfd_elf_adjust_dynamic_symbol.  */
8124               h->needs_plt = 1;
8125               h->type = STT_FUNC;
8126             }
8127           break;
8128
8129         case R_MIPS_GOT_PAGE:
8130         case R_MICROMIPS_GOT_PAGE:
8131           /* If this is a global, overridable symbol, GOT_PAGE will
8132              decay to GOT_DISP, so we'll need a GOT entry for it.  */
8133           if (h)
8134             {
8135               struct mips_elf_link_hash_entry *hmips =
8136                 (struct mips_elf_link_hash_entry *) h;
8137
8138               /* This symbol is definitely not overridable.  */
8139               if (hmips->root.def_regular
8140                   && ! (info->shared && ! info->symbolic
8141                         && ! hmips->root.forced_local))
8142                 h = NULL;
8143             }
8144           /* Fall through.  */
8145
8146         case R_MIPS16_GOT16:
8147         case R_MIPS_GOT16:
8148         case R_MIPS_GOT_HI16:
8149         case R_MIPS_GOT_LO16:
8150         case R_MICROMIPS_GOT16:
8151         case R_MICROMIPS_GOT_HI16:
8152         case R_MICROMIPS_GOT_LO16:
8153           if (!h || got_page_reloc_p (r_type))
8154             {
8155               /* This relocation needs (or may need, if h != NULL) a
8156                  page entry in the GOT.  For R_MIPS_GOT_PAGE we do not
8157                  know for sure until we know whether the symbol is
8158                  preemptible.  */
8159               if (mips_elf_rel_relocation_p (abfd, sec, relocs, rel))
8160                 {
8161                   if (!mips_elf_get_section_contents (abfd, sec, &contents))
8162                     return FALSE;
8163                   howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, FALSE);
8164                   addend = mips_elf_read_rel_addend (abfd, rel,
8165                                                      howto, contents);
8166                   if (got16_reloc_p (r_type))
8167                     mips_elf_add_lo16_rel_addend (abfd, rel, rel_end,
8168                                                   contents, &addend);
8169                   else
8170                     addend <<= howto->rightshift;
8171                 }
8172               else
8173                 addend = rel->r_addend;
8174               if (!mips_elf_record_got_page_entry (info, abfd, r_symndx,
8175                                                    addend))
8176                 return FALSE;
8177             }
8178           /* Fall through.  */
8179
8180         case R_MIPS_GOT_DISP:
8181         case R_MICROMIPS_GOT_DISP:
8182           if (h && !mips_elf_record_global_got_symbol (h, abfd, info,
8183                                                        FALSE, r_type))
8184             return FALSE;
8185           break;
8186
8187         case R_MIPS_TLS_GOTTPREL:
8188         case R_MIPS16_TLS_GOTTPREL:
8189         case R_MICROMIPS_TLS_GOTTPREL:
8190           if (info->shared)
8191             info->flags |= DF_STATIC_TLS;
8192           /* Fall through */
8193
8194         case R_MIPS_TLS_LDM:
8195         case R_MIPS16_TLS_LDM:
8196         case R_MICROMIPS_TLS_LDM:
8197           if (tls_ldm_reloc_p (r_type))
8198             {
8199               r_symndx = STN_UNDEF;
8200               h = NULL;
8201             }
8202           /* Fall through */
8203
8204         case R_MIPS_TLS_GD:
8205         case R_MIPS16_TLS_GD:
8206         case R_MICROMIPS_TLS_GD:
8207           /* This symbol requires a global offset table entry, or two
8208              for TLS GD relocations.  */
8209           if (h != NULL)
8210             {
8211               if (!mips_elf_record_global_got_symbol (h, abfd, info,
8212                                                       FALSE, r_type))
8213                 return FALSE;
8214             }
8215           else
8216             {
8217               if (!mips_elf_record_local_got_symbol (abfd, r_symndx,
8218                                                      rel->r_addend,
8219                                                      info, r_type))
8220                 return FALSE;
8221             }
8222           break;
8223
8224         case R_MIPS_32:
8225         case R_MIPS_REL32:
8226         case R_MIPS_64:
8227           /* In VxWorks executables, references to external symbols
8228              are handled using copy relocs or PLT stubs, so there's
8229              no need to add a .rela.dyn entry for this relocation.  */
8230           if (can_make_dynamic_p)
8231             {
8232               if (sreloc == NULL)
8233                 {
8234                   sreloc = mips_elf_rel_dyn_section (info, TRUE);
8235                   if (sreloc == NULL)
8236                     return FALSE;
8237                 }
8238               if (info->shared && h == NULL)
8239                 {
8240                   /* When creating a shared object, we must copy these
8241                      reloc types into the output file as R_MIPS_REL32
8242                      relocs.  Make room for this reloc in .rel(a).dyn.  */
8243                   mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
8244                   if (MIPS_ELF_READONLY_SECTION (sec))
8245                     /* We tell the dynamic linker that there are
8246                        relocations against the text segment.  */
8247                     info->flags |= DF_TEXTREL;
8248                 }
8249               else
8250                 {
8251                   struct mips_elf_link_hash_entry *hmips;
8252
8253                   /* For a shared object, we must copy this relocation
8254                      unless the symbol turns out to be undefined and
8255                      weak with non-default visibility, in which case
8256                      it will be left as zero.
8257
8258                      We could elide R_MIPS_REL32 for locally binding symbols
8259                      in shared libraries, but do not yet do so.
8260
8261                      For an executable, we only need to copy this
8262                      reloc if the symbol is defined in a dynamic
8263                      object.  */
8264                   hmips = (struct mips_elf_link_hash_entry *) h;
8265                   ++hmips->possibly_dynamic_relocs;
8266                   if (MIPS_ELF_READONLY_SECTION (sec))
8267                     /* We need it to tell the dynamic linker if there
8268                        are relocations against the text segment.  */
8269                     hmips->readonly_reloc = TRUE;
8270                 }
8271             }
8272
8273           if (SGI_COMPAT (abfd))
8274             mips_elf_hash_table (info)->compact_rel_size +=
8275               sizeof (Elf32_External_crinfo);
8276           break;
8277
8278         case R_MIPS_26:
8279         case R_MIPS_GPREL16:
8280         case R_MIPS_LITERAL:
8281         case R_MIPS_GPREL32:
8282         case R_MICROMIPS_26_S1:
8283         case R_MICROMIPS_GPREL16:
8284         case R_MICROMIPS_LITERAL:
8285         case R_MICROMIPS_GPREL7_S2:
8286           if (SGI_COMPAT (abfd))
8287             mips_elf_hash_table (info)->compact_rel_size +=
8288               sizeof (Elf32_External_crinfo);
8289           break;
8290
8291           /* This relocation describes the C++ object vtable hierarchy.
8292              Reconstruct it for later use during GC.  */
8293         case R_MIPS_GNU_VTINHERIT:
8294           if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
8295             return FALSE;
8296           break;
8297
8298           /* This relocation describes which C++ vtable entries are actually
8299              used.  Record for later use during GC.  */
8300         case R_MIPS_GNU_VTENTRY:
8301           BFD_ASSERT (h != NULL);
8302           if (h != NULL
8303               && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset))
8304             return FALSE;
8305           break;
8306
8307         default:
8308           break;
8309         }
8310
8311       /* We must not create a stub for a symbol that has relocations
8312          related to taking the function's address.  This doesn't apply to
8313          VxWorks, where CALL relocs refer to a .got.plt entry instead of
8314          a normal .got entry.  */
8315       if (!htab->is_vxworks && h != NULL)
8316         switch (r_type)
8317           {
8318           default:
8319             ((struct mips_elf_link_hash_entry *) h)->no_fn_stub = TRUE;
8320             break;
8321           case R_MIPS16_CALL16:
8322           case R_MIPS_CALL16:
8323           case R_MIPS_CALL_HI16:
8324           case R_MIPS_CALL_LO16:
8325           case R_MIPS_JALR:
8326           case R_MICROMIPS_CALL16:
8327           case R_MICROMIPS_CALL_HI16:
8328           case R_MICROMIPS_CALL_LO16:
8329           case R_MICROMIPS_JALR:
8330             break;
8331           }
8332
8333       /* See if this reloc would need to refer to a MIPS16 hard-float stub,
8334          if there is one.  We only need to handle global symbols here;
8335          we decide whether to keep or delete stubs for local symbols
8336          when processing the stub's relocations.  */
8337       if (h != NULL
8338           && !mips16_call_reloc_p (r_type)
8339           && !section_allows_mips16_refs_p (sec))
8340         {
8341           struct mips_elf_link_hash_entry *mh;
8342
8343           mh = (struct mips_elf_link_hash_entry *) h;
8344           mh->need_fn_stub = TRUE;
8345         }
8346
8347       /* Refuse some position-dependent relocations when creating a
8348          shared library.  Do not refuse R_MIPS_32 / R_MIPS_64; they're
8349          not PIC, but we can create dynamic relocations and the result
8350          will be fine.  Also do not refuse R_MIPS_LO16, which can be
8351          combined with R_MIPS_GOT16.  */
8352       if (info->shared)
8353         {
8354           switch (r_type)
8355             {
8356             case R_MIPS16_HI16:
8357             case R_MIPS_HI16:
8358             case R_MIPS_HIGHER:
8359             case R_MIPS_HIGHEST:
8360             case R_MICROMIPS_HI16:
8361             case R_MICROMIPS_HIGHER:
8362             case R_MICROMIPS_HIGHEST:
8363               /* Don't refuse a high part relocation if it's against
8364                  no symbol (e.g. part of a compound relocation).  */
8365               if (r_symndx == STN_UNDEF)
8366                 break;
8367
8368               /* R_MIPS_HI16 against _gp_disp is used for $gp setup,
8369                  and has a special meaning.  */
8370               if (!NEWABI_P (abfd) && h != NULL
8371                   && strcmp (h->root.root.string, "_gp_disp") == 0)
8372                 break;
8373
8374               /* Likewise __GOTT_BASE__ and __GOTT_INDEX__ on VxWorks.  */
8375               if (is_gott_symbol (info, h))
8376                 break;
8377
8378               /* FALLTHROUGH */
8379
8380             case R_MIPS16_26:
8381             case R_MIPS_26:
8382             case R_MICROMIPS_26_S1:
8383               howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, FALSE);
8384               (*_bfd_error_handler)
8385                 (_("%B: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC"),
8386                  abfd, howto->name,
8387                  (h) ? h->root.root.string : "a local symbol");
8388               bfd_set_error (bfd_error_bad_value);
8389               return FALSE;
8390             default:
8391               break;
8392             }
8393         }
8394     }
8395
8396   return TRUE;
8397 }
8398 \f
8399 bfd_boolean
8400 _bfd_mips_relax_section (bfd *abfd, asection *sec,
8401                          struct bfd_link_info *link_info,
8402                          bfd_boolean *again)
8403 {
8404   Elf_Internal_Rela *internal_relocs;
8405   Elf_Internal_Rela *irel, *irelend;
8406   Elf_Internal_Shdr *symtab_hdr;
8407   bfd_byte *contents = NULL;
8408   size_t extsymoff;
8409   bfd_boolean changed_contents = FALSE;
8410   bfd_vma sec_start = sec->output_section->vma + sec->output_offset;
8411   Elf_Internal_Sym *isymbuf = NULL;
8412
8413   /* We are not currently changing any sizes, so only one pass.  */
8414   *again = FALSE;
8415
8416   if (link_info->relocatable)
8417     return TRUE;
8418
8419   internal_relocs = _bfd_elf_link_read_relocs (abfd, sec, NULL, NULL,
8420                                                link_info->keep_memory);
8421   if (internal_relocs == NULL)
8422     return TRUE;
8423
8424   irelend = internal_relocs + sec->reloc_count
8425     * get_elf_backend_data (abfd)->s->int_rels_per_ext_rel;
8426   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
8427   extsymoff = (elf_bad_symtab (abfd)) ? 0 : symtab_hdr->sh_info;
8428
8429   for (irel = internal_relocs; irel < irelend; irel++)
8430     {
8431       bfd_vma symval;
8432       bfd_signed_vma sym_offset;
8433       unsigned int r_type;
8434       unsigned long r_symndx;
8435       asection *sym_sec;
8436       unsigned long instruction;
8437
8438       /* Turn jalr into bgezal, and jr into beq, if they're marked
8439          with a JALR relocation, that indicate where they jump to.
8440          This saves some pipeline bubbles.  */
8441       r_type = ELF_R_TYPE (abfd, irel->r_info);
8442       if (r_type != R_MIPS_JALR)
8443         continue;
8444
8445       r_symndx = ELF_R_SYM (abfd, irel->r_info);
8446       /* Compute the address of the jump target.  */
8447       if (r_symndx >= extsymoff)
8448         {
8449           struct mips_elf_link_hash_entry *h
8450             = ((struct mips_elf_link_hash_entry *)
8451                elf_sym_hashes (abfd) [r_symndx - extsymoff]);
8452
8453           while (h->root.root.type == bfd_link_hash_indirect
8454                  || h->root.root.type == bfd_link_hash_warning)
8455             h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
8456
8457           /* If a symbol is undefined, or if it may be overridden,
8458              skip it.  */
8459           if (! ((h->root.root.type == bfd_link_hash_defined
8460                   || h->root.root.type == bfd_link_hash_defweak)
8461                  && h->root.root.u.def.section)
8462               || (link_info->shared && ! link_info->symbolic
8463                   && !h->root.forced_local))
8464             continue;
8465
8466           sym_sec = h->root.root.u.def.section;
8467           if (sym_sec->output_section)
8468             symval = (h->root.root.u.def.value
8469                       + sym_sec->output_section->vma
8470                       + sym_sec->output_offset);
8471           else
8472             symval = h->root.root.u.def.value;
8473         }
8474       else
8475         {
8476           Elf_Internal_Sym *isym;
8477
8478           /* Read this BFD's symbols if we haven't done so already.  */
8479           if (isymbuf == NULL && symtab_hdr->sh_info != 0)
8480             {
8481               isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
8482               if (isymbuf == NULL)
8483                 isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
8484                                                 symtab_hdr->sh_info, 0,
8485                                                 NULL, NULL, NULL);
8486               if (isymbuf == NULL)
8487                 goto relax_return;
8488             }
8489
8490           isym = isymbuf + r_symndx;
8491           if (isym->st_shndx == SHN_UNDEF)
8492             continue;
8493           else if (isym->st_shndx == SHN_ABS)
8494             sym_sec = bfd_abs_section_ptr;
8495           else if (isym->st_shndx == SHN_COMMON)
8496             sym_sec = bfd_com_section_ptr;
8497           else
8498             sym_sec
8499               = bfd_section_from_elf_index (abfd, isym->st_shndx);
8500           symval = isym->st_value
8501             + sym_sec->output_section->vma
8502             + sym_sec->output_offset;
8503         }
8504
8505       /* Compute branch offset, from delay slot of the jump to the
8506          branch target.  */
8507       sym_offset = (symval + irel->r_addend)
8508         - (sec_start + irel->r_offset + 4);
8509
8510       /* Branch offset must be properly aligned.  */
8511       if ((sym_offset & 3) != 0)
8512         continue;
8513
8514       sym_offset >>= 2;
8515
8516       /* Check that it's in range.  */
8517       if (sym_offset < -0x8000 || sym_offset >= 0x8000)
8518         continue;
8519
8520       /* Get the section contents if we haven't done so already.  */
8521       if (!mips_elf_get_section_contents (abfd, sec, &contents))
8522         goto relax_return;
8523
8524       instruction = bfd_get_32 (abfd, contents + irel->r_offset);
8525
8526       /* If it was jalr <reg>, turn it into bgezal $zero, <target>.  */
8527       if ((instruction & 0xfc1fffff) == 0x0000f809)
8528         instruction = 0x04110000;
8529       /* If it was jr <reg>, turn it into b <target>.  */
8530       else if ((instruction & 0xfc1fffff) == 0x00000008)
8531         instruction = 0x10000000;
8532       else
8533         continue;
8534
8535       instruction |= (sym_offset & 0xffff);
8536       bfd_put_32 (abfd, instruction, contents + irel->r_offset);
8537       changed_contents = TRUE;
8538     }
8539
8540   if (contents != NULL
8541       && elf_section_data (sec)->this_hdr.contents != contents)
8542     {
8543       if (!changed_contents && !link_info->keep_memory)
8544         free (contents);
8545       else
8546         {
8547           /* Cache the section contents for elf_link_input_bfd.  */
8548           elf_section_data (sec)->this_hdr.contents = contents;
8549         }
8550     }
8551   return TRUE;
8552
8553  relax_return:
8554   if (contents != NULL
8555       && elf_section_data (sec)->this_hdr.contents != contents)
8556     free (contents);
8557   return FALSE;
8558 }
8559 \f
8560 /* Allocate space for global sym dynamic relocs.  */
8561
8562 static bfd_boolean
8563 allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
8564 {
8565   struct bfd_link_info *info = inf;
8566   bfd *dynobj;
8567   struct mips_elf_link_hash_entry *hmips;
8568   struct mips_elf_link_hash_table *htab;
8569
8570   htab = mips_elf_hash_table (info);
8571   BFD_ASSERT (htab != NULL);
8572
8573   dynobj = elf_hash_table (info)->dynobj;
8574   hmips = (struct mips_elf_link_hash_entry *) h;
8575
8576   /* VxWorks executables are handled elsewhere; we only need to
8577      allocate relocations in shared objects.  */
8578   if (htab->is_vxworks && !info->shared)
8579     return TRUE;
8580
8581   /* Ignore indirect symbols.  All relocations against such symbols
8582      will be redirected to the target symbol.  */
8583   if (h->root.type == bfd_link_hash_indirect)
8584     return TRUE;
8585
8586   /* If this symbol is defined in a dynamic object, or we are creating
8587      a shared library, we will need to copy any R_MIPS_32 or
8588      R_MIPS_REL32 relocs against it into the output file.  */
8589   if (! info->relocatable
8590       && hmips->possibly_dynamic_relocs != 0
8591       && (h->root.type == bfd_link_hash_defweak
8592           || (!h->def_regular && !ELF_COMMON_DEF_P (h))
8593           || info->shared))
8594     {
8595       bfd_boolean do_copy = TRUE;
8596
8597       if (h->root.type == bfd_link_hash_undefweak)
8598         {
8599           /* Do not copy relocations for undefined weak symbols with
8600              non-default visibility.  */
8601           if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
8602             do_copy = FALSE;
8603
8604           /* Make sure undefined weak symbols are output as a dynamic
8605              symbol in PIEs.  */
8606           else if (h->dynindx == -1 && !h->forced_local)
8607             {
8608               if (! bfd_elf_link_record_dynamic_symbol (info, h))
8609                 return FALSE;
8610             }
8611         }
8612
8613       if (do_copy)
8614         {
8615           /* Even though we don't directly need a GOT entry for this symbol,
8616              the SVR4 psABI requires it to have a dynamic symbol table
8617              index greater that DT_MIPS_GOTSYM if there are dynamic
8618              relocations against it.
8619
8620              VxWorks does not enforce the same mapping between the GOT
8621              and the symbol table, so the same requirement does not
8622              apply there.  */
8623           if (!htab->is_vxworks)
8624             {
8625               if (hmips->global_got_area > GGA_RELOC_ONLY)
8626                 hmips->global_got_area = GGA_RELOC_ONLY;
8627               hmips->got_only_for_calls = FALSE;
8628             }
8629
8630           mips_elf_allocate_dynamic_relocations
8631             (dynobj, info, hmips->possibly_dynamic_relocs);
8632           if (hmips->readonly_reloc)
8633             /* We tell the dynamic linker that there are relocations
8634                against the text segment.  */
8635             info->flags |= DF_TEXTREL;
8636         }
8637     }
8638
8639   return TRUE;
8640 }
8641
8642 /* Adjust a symbol defined by a dynamic object and referenced by a
8643    regular object.  The current definition is in some section of the
8644    dynamic object, but we're not including those sections.  We have to
8645    change the definition to something the rest of the link can
8646    understand.  */
8647
8648 bfd_boolean
8649 _bfd_mips_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
8650                                      struct elf_link_hash_entry *h)
8651 {
8652   bfd *dynobj;
8653   struct mips_elf_link_hash_entry *hmips;
8654   struct mips_elf_link_hash_table *htab;
8655
8656   htab = mips_elf_hash_table (info);
8657   BFD_ASSERT (htab != NULL);
8658
8659   dynobj = elf_hash_table (info)->dynobj;
8660   hmips = (struct mips_elf_link_hash_entry *) h;
8661
8662   /* Make sure we know what is going on here.  */
8663   BFD_ASSERT (dynobj != NULL
8664               && (h->needs_plt
8665                   || h->u.weakdef != NULL
8666                   || (h->def_dynamic
8667                       && h->ref_regular
8668                       && !h->def_regular)));
8669
8670   hmips = (struct mips_elf_link_hash_entry *) h;
8671
8672   /* If there are call relocations against an externally-defined symbol,
8673      see whether we can create a MIPS lazy-binding stub for it.  We can
8674      only do this if all references to the function are through call
8675      relocations, and in that case, the traditional lazy-binding stubs
8676      are much more efficient than PLT entries.
8677
8678      Traditional stubs are only available on SVR4 psABI-based systems;
8679      VxWorks always uses PLTs instead.  */
8680   if (!htab->is_vxworks && h->needs_plt && !hmips->no_fn_stub)
8681     {
8682       if (! elf_hash_table (info)->dynamic_sections_created)
8683         return TRUE;
8684
8685       /* If this symbol is not defined in a regular file, then set
8686          the symbol to the stub location.  This is required to make
8687          function pointers compare as equal between the normal
8688          executable and the shared library.  */
8689       if (!h->def_regular)
8690         {
8691           hmips->needs_lazy_stub = TRUE;
8692           htab->lazy_stub_count++;
8693           return TRUE;
8694         }
8695     }
8696   /* As above, VxWorks requires PLT entries for externally-defined
8697      functions that are only accessed through call relocations.
8698
8699      Both VxWorks and non-VxWorks targets also need PLT entries if there
8700      are static-only relocations against an externally-defined function.
8701      This can technically occur for shared libraries if there are
8702      branches to the symbol, although it is unlikely that this will be
8703      used in practice due to the short ranges involved.  It can occur
8704      for any relative or absolute relocation in executables; in that
8705      case, the PLT entry becomes the function's canonical address.  */
8706   else if (((h->needs_plt && !hmips->no_fn_stub)
8707             || (h->type == STT_FUNC && hmips->has_static_relocs))
8708            && htab->use_plts_and_copy_relocs
8709            && !SYMBOL_CALLS_LOCAL (info, h)
8710            && !(ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
8711                 && h->root.type == bfd_link_hash_undefweak))
8712     {
8713       /* If this is the first symbol to need a PLT entry, allocate room
8714          for the header.  */
8715       if (htab->splt->size == 0)
8716         {
8717           BFD_ASSERT (htab->sgotplt->size == 0);
8718
8719           /* If we're using the PLT additions to the psABI, each PLT
8720              entry is 16 bytes and the PLT0 entry is 32 bytes.
8721              Encourage better cache usage by aligning.  We do this
8722              lazily to avoid pessimizing traditional objects.  */
8723           if (!htab->is_vxworks
8724               && !bfd_set_section_alignment (dynobj, htab->splt, 5))
8725             return FALSE;
8726
8727           /* Make sure that .got.plt is word-aligned.  We do this lazily
8728              for the same reason as above.  */
8729           if (!bfd_set_section_alignment (dynobj, htab->sgotplt,
8730                                           MIPS_ELF_LOG_FILE_ALIGN (dynobj)))
8731             return FALSE;
8732
8733           htab->splt->size += htab->plt_header_size;
8734
8735           /* On non-VxWorks targets, the first two entries in .got.plt
8736              are reserved.  */
8737           if (!htab->is_vxworks)
8738             htab->sgotplt->size
8739               += get_elf_backend_data (dynobj)->got_header_size;
8740
8741           /* On VxWorks, also allocate room for the header's
8742              .rela.plt.unloaded entries.  */
8743           if (htab->is_vxworks && !info->shared)
8744             htab->srelplt2->size += 2 * sizeof (Elf32_External_Rela);
8745         }
8746
8747       /* Assign the next .plt entry to this symbol.  */
8748       h->plt.offset = htab->splt->size;
8749       htab->splt->size += htab->plt_entry_size;
8750
8751       /* If the output file has no definition of the symbol, set the
8752          symbol's value to the address of the stub.  */
8753       if (!info->shared && !h->def_regular)
8754         {
8755           h->root.u.def.section = htab->splt;
8756           h->root.u.def.value = h->plt.offset;
8757           /* For VxWorks, point at the PLT load stub rather than the
8758              lazy resolution stub; this stub will become the canonical
8759              function address.  */
8760           if (htab->is_vxworks)
8761             h->root.u.def.value += 8;
8762         }
8763
8764       /* Make room for the .got.plt entry and the R_MIPS_JUMP_SLOT
8765          relocation.  */
8766       htab->sgotplt->size += MIPS_ELF_GOT_SIZE (dynobj);
8767       htab->srelplt->size += (htab->is_vxworks
8768                               ? MIPS_ELF_RELA_SIZE (dynobj)
8769                               : MIPS_ELF_REL_SIZE (dynobj));
8770
8771       /* Make room for the .rela.plt.unloaded relocations.  */
8772       if (htab->is_vxworks && !info->shared)
8773         htab->srelplt2->size += 3 * sizeof (Elf32_External_Rela);
8774
8775       /* All relocations against this symbol that could have been made
8776          dynamic will now refer to the PLT entry instead.  */
8777       hmips->possibly_dynamic_relocs = 0;
8778
8779       return TRUE;
8780     }
8781
8782   /* If this is a weak symbol, and there is a real definition, the
8783      processor independent code will have arranged for us to see the
8784      real definition first, and we can just use the same value.  */
8785   if (h->u.weakdef != NULL)
8786     {
8787       BFD_ASSERT (h->u.weakdef->root.type == bfd_link_hash_defined
8788                   || h->u.weakdef->root.type == bfd_link_hash_defweak);
8789       h->root.u.def.section = h->u.weakdef->root.u.def.section;
8790       h->root.u.def.value = h->u.weakdef->root.u.def.value;
8791       return TRUE;
8792     }
8793
8794   /* Otherwise, there is nothing further to do for symbols defined
8795      in regular objects.  */
8796   if (h->def_regular)
8797     return TRUE;
8798
8799   /* There's also nothing more to do if we'll convert all relocations
8800      against this symbol into dynamic relocations.  */
8801   if (!hmips->has_static_relocs)
8802     return TRUE;
8803
8804   /* We're now relying on copy relocations.  Complain if we have
8805      some that we can't convert.  */
8806   if (!htab->use_plts_and_copy_relocs || info->shared)
8807     {
8808       (*_bfd_error_handler) (_("non-dynamic relocations refer to "
8809                                "dynamic symbol %s"),
8810                              h->root.root.string);
8811       bfd_set_error (bfd_error_bad_value);
8812       return FALSE;
8813     }
8814
8815   /* We must allocate the symbol in our .dynbss section, which will
8816      become part of the .bss section of the executable.  There will be
8817      an entry for this symbol in the .dynsym section.  The dynamic
8818      object will contain position independent code, so all references
8819      from the dynamic object to this symbol will go through the global
8820      offset table.  The dynamic linker will use the .dynsym entry to
8821      determine the address it must put in the global offset table, so
8822      both the dynamic object and the regular object will refer to the
8823      same memory location for the variable.  */
8824
8825   if ((h->root.u.def.section->flags & SEC_ALLOC) != 0)
8826     {
8827       if (htab->is_vxworks)
8828         htab->srelbss->size += sizeof (Elf32_External_Rela);
8829       else
8830         mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
8831       h->needs_copy = 1;
8832     }
8833
8834   /* All relocations against this symbol that could have been made
8835      dynamic will now refer to the local copy instead.  */
8836   hmips->possibly_dynamic_relocs = 0;
8837
8838   return _bfd_elf_adjust_dynamic_copy (h, htab->sdynbss);
8839 }
8840 \f
8841 /* This function is called after all the input files have been read,
8842    and the input sections have been assigned to output sections.  We
8843    check for any mips16 stub sections that we can discard.  */
8844
8845 bfd_boolean
8846 _bfd_mips_elf_always_size_sections (bfd *output_bfd,
8847                                     struct bfd_link_info *info)
8848 {
8849   asection *ri;
8850   struct mips_elf_link_hash_table *htab;
8851   struct mips_htab_traverse_info hti;
8852
8853   htab = mips_elf_hash_table (info);
8854   BFD_ASSERT (htab != NULL);
8855
8856   /* The .reginfo section has a fixed size.  */
8857   ri = bfd_get_section_by_name (output_bfd, ".reginfo");
8858   if (ri != NULL)
8859     bfd_set_section_size (output_bfd, ri, sizeof (Elf32_External_RegInfo));
8860
8861   hti.info = info;
8862   hti.output_bfd = output_bfd;
8863   hti.error = FALSE;
8864   mips_elf_link_hash_traverse (mips_elf_hash_table (info),
8865                                mips_elf_check_symbols, &hti);
8866   if (hti.error)
8867     return FALSE;
8868
8869   return TRUE;
8870 }
8871
8872 /* If the link uses a GOT, lay it out and work out its size.  */
8873
8874 static bfd_boolean
8875 mips_elf_lay_out_got (bfd *output_bfd, struct bfd_link_info *info)
8876 {
8877   bfd *dynobj;
8878   asection *s;
8879   struct mips_got_info *g;
8880   bfd_size_type loadable_size = 0;
8881   bfd_size_type page_gotno;
8882   bfd *sub;
8883   struct mips_elf_traverse_got_arg tga;
8884   struct mips_elf_link_hash_table *htab;
8885
8886   htab = mips_elf_hash_table (info);
8887   BFD_ASSERT (htab != NULL);
8888
8889   s = htab->sgot;
8890   if (s == NULL)
8891     return TRUE;
8892
8893   dynobj = elf_hash_table (info)->dynobj;
8894   g = htab->got_info;
8895
8896   /* Allocate room for the reserved entries.  VxWorks always reserves
8897      3 entries; other objects only reserve 2 entries.  */
8898   BFD_ASSERT (g->assigned_gotno == 0);
8899   if (htab->is_vxworks)
8900     htab->reserved_gotno = 3;
8901   else
8902     htab->reserved_gotno = 2;
8903   g->local_gotno += htab->reserved_gotno;
8904   g->assigned_gotno = htab->reserved_gotno;
8905
8906   /* Replace entries for indirect and warning symbols with entries for
8907      the target symbol.  */
8908   if (!mips_elf_resolve_final_got_entries (g))
8909     return FALSE;
8910
8911   /* Count the number of GOT symbols.  */
8912   mips_elf_link_hash_traverse (htab, mips_elf_count_got_symbols, info);
8913
8914   /* Calculate the total loadable size of the output.  That
8915      will give us the maximum number of GOT_PAGE entries
8916      required.  */
8917   for (sub = info->input_bfds; sub; sub = sub->link_next)
8918     {
8919       asection *subsection;
8920
8921       for (subsection = sub->sections;
8922            subsection;
8923            subsection = subsection->next)
8924         {
8925           if ((subsection->flags & SEC_ALLOC) == 0)
8926             continue;
8927           loadable_size += ((subsection->size + 0xf)
8928                             &~ (bfd_size_type) 0xf);
8929         }
8930     }
8931
8932   if (htab->is_vxworks)
8933     /* There's no need to allocate page entries for VxWorks; R_MIPS*_GOT16
8934        relocations against local symbols evaluate to "G", and the EABI does
8935        not include R_MIPS_GOT_PAGE.  */
8936     page_gotno = 0;
8937   else
8938     /* Assume there are two loadable segments consisting of contiguous
8939        sections.  Is 5 enough?  */
8940     page_gotno = (loadable_size >> 16) + 5;
8941
8942   /* Choose the smaller of the two estimates; both are intended to be
8943      conservative.  */
8944   if (page_gotno > g->page_gotno)
8945     page_gotno = g->page_gotno;
8946
8947   g->local_gotno += page_gotno;
8948
8949   /* Count the number of local GOT entries and TLS relocs.  */
8950   tga.info = info;
8951   tga.g = g;
8952   htab_traverse (g->got_entries, mips_elf_count_local_got_entries, &tga);
8953
8954   /* We need to calculate tls_gotno for global symbols at this point
8955      instead of building it up earlier, to avoid doublecounting
8956      entries for one global symbol from multiple input files.  */
8957   elf_link_hash_traverse (elf_hash_table (info),
8958                           mips_elf_count_global_tls_entries,
8959                           &tga);
8960
8961   s->size += g->local_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
8962   s->size += g->global_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
8963   s->size += g->tls_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
8964
8965   /* VxWorks does not support multiple GOTs.  It initializes $gp to
8966      __GOTT_BASE__[__GOTT_INDEX__], the value of which is set by the
8967      dynamic loader.  */
8968   if (htab->is_vxworks)
8969     {
8970       /* VxWorks executables do not need a GOT.  */
8971       if (info->shared)
8972         {
8973           /* Each VxWorks GOT entry needs an explicit relocation.  */
8974           unsigned int count;
8975
8976           count = g->global_gotno + g->local_gotno - htab->reserved_gotno;
8977           if (count)
8978             mips_elf_allocate_dynamic_relocations (dynobj, info, count);
8979         }
8980     }
8981   else if (s->size > MIPS_ELF_GOT_MAX_SIZE (info))
8982     {
8983       if (!mips_elf_multi_got (output_bfd, info, s, page_gotno))
8984         return FALSE;
8985     }
8986   else
8987     {
8988       /* Set up TLS entries.  */
8989       g->tls_assigned_gotno = g->global_gotno + g->local_gotno;
8990       tga.info = info;
8991       tga.g = g;
8992       tga.value = MIPS_ELF_GOT_SIZE (output_bfd);
8993       htab_traverse (g->got_entries, mips_elf_initialize_tls_index, &tga);
8994       if (!tga.g)
8995         return FALSE;
8996       BFD_ASSERT (g->tls_assigned_gotno
8997                   == g->global_gotno + g->local_gotno + g->tls_gotno);
8998
8999       /* Allocate room for the TLS relocations.  */
9000       if (g->relocs)
9001         mips_elf_allocate_dynamic_relocations (dynobj, info, g->relocs);
9002     }
9003
9004   return TRUE;
9005 }
9006
9007 /* Estimate the size of the .MIPS.stubs section.  */
9008
9009 static void
9010 mips_elf_estimate_stub_size (bfd *output_bfd, struct bfd_link_info *info)
9011 {
9012   struct mips_elf_link_hash_table *htab;
9013   bfd_size_type dynsymcount;
9014
9015   htab = mips_elf_hash_table (info);
9016   BFD_ASSERT (htab != NULL);
9017
9018   if (htab->lazy_stub_count == 0)
9019     return;
9020
9021   /* IRIX rld assumes that a function stub isn't at the end of the .text
9022      section, so add a dummy entry to the end.  */
9023   htab->lazy_stub_count++;
9024
9025   /* Get a worst-case estimate of the number of dynamic symbols needed.
9026      At this point, dynsymcount does not account for section symbols
9027      and count_section_dynsyms may overestimate the number that will
9028      be needed.  */
9029   dynsymcount = (elf_hash_table (info)->dynsymcount
9030                  + count_section_dynsyms (output_bfd, info));
9031
9032   /* Determine the size of one stub entry.  */
9033   htab->function_stub_size = (dynsymcount > 0x10000
9034                               ? MIPS_FUNCTION_STUB_BIG_SIZE
9035                               : MIPS_FUNCTION_STUB_NORMAL_SIZE);
9036
9037   htab->sstubs->size = htab->lazy_stub_count * htab->function_stub_size;
9038 }
9039
9040 /* A mips_elf_link_hash_traverse callback for which DATA points to the
9041    MIPS hash table.  If H needs a traditional MIPS lazy-binding stub,
9042    allocate an entry in the stubs section.  */
9043
9044 static bfd_boolean
9045 mips_elf_allocate_lazy_stub (struct mips_elf_link_hash_entry *h, void **data)
9046 {
9047   struct mips_elf_link_hash_table *htab;
9048
9049   htab = (struct mips_elf_link_hash_table *) data;
9050   if (h->needs_lazy_stub)
9051     {
9052       h->root.root.u.def.section = htab->sstubs;
9053       h->root.root.u.def.value = htab->sstubs->size;
9054       h->root.plt.offset = htab->sstubs->size;
9055       htab->sstubs->size += htab->function_stub_size;
9056     }
9057   return TRUE;
9058 }
9059
9060 /* Allocate offsets in the stubs section to each symbol that needs one.
9061    Set the final size of the .MIPS.stub section.  */
9062
9063 static void
9064 mips_elf_lay_out_lazy_stubs (struct bfd_link_info *info)
9065 {
9066   struct mips_elf_link_hash_table *htab;
9067
9068   htab = mips_elf_hash_table (info);
9069   BFD_ASSERT (htab != NULL);
9070
9071   if (htab->lazy_stub_count == 0)
9072     return;
9073
9074   htab->sstubs->size = 0;
9075   mips_elf_link_hash_traverse (htab, mips_elf_allocate_lazy_stub, htab);
9076   htab->sstubs->size += htab->function_stub_size;
9077   BFD_ASSERT (htab->sstubs->size
9078               == htab->lazy_stub_count * htab->function_stub_size);
9079 }
9080
9081 /* Set the sizes of the dynamic sections.  */
9082
9083 bfd_boolean
9084 _bfd_mips_elf_size_dynamic_sections (bfd *output_bfd,
9085                                      struct bfd_link_info *info)
9086 {
9087   bfd *dynobj;
9088   asection *s, *sreldyn;
9089   bfd_boolean reltext;
9090   struct mips_elf_link_hash_table *htab;
9091
9092   htab = mips_elf_hash_table (info);
9093   BFD_ASSERT (htab != NULL);
9094   dynobj = elf_hash_table (info)->dynobj;
9095   BFD_ASSERT (dynobj != NULL);
9096
9097   if (elf_hash_table (info)->dynamic_sections_created)
9098     {
9099       /* Set the contents of the .interp section to the interpreter.  */
9100       if (info->executable)
9101         {
9102           s = bfd_get_linker_section (dynobj, ".interp");
9103           BFD_ASSERT (s != NULL);
9104           s->size
9105             = strlen (ELF_DYNAMIC_INTERPRETER (output_bfd)) + 1;
9106           s->contents
9107             = (bfd_byte *) ELF_DYNAMIC_INTERPRETER (output_bfd);
9108         }
9109
9110       /* Create a symbol for the PLT, if we know that we are using it.  */
9111       if (htab->splt && htab->splt->size > 0 && htab->root.hplt == NULL)
9112         {
9113           struct elf_link_hash_entry *h;
9114
9115           BFD_ASSERT (htab->use_plts_and_copy_relocs);
9116
9117           h = _bfd_elf_define_linkage_sym (dynobj, info, htab->splt,
9118                                            "_PROCEDURE_LINKAGE_TABLE_");
9119           htab->root.hplt = h;
9120           if (h == NULL)
9121             return FALSE;
9122           h->type = STT_FUNC;
9123         }
9124     }
9125
9126   /* Allocate space for global sym dynamic relocs.  */
9127   elf_link_hash_traverse (&htab->root, allocate_dynrelocs, info);
9128
9129   mips_elf_estimate_stub_size (output_bfd, info);
9130
9131   if (!mips_elf_lay_out_got (output_bfd, info))
9132     return FALSE;
9133
9134   mips_elf_lay_out_lazy_stubs (info);
9135
9136   /* The check_relocs and adjust_dynamic_symbol entry points have
9137      determined the sizes of the various dynamic sections.  Allocate
9138      memory for them.  */
9139   reltext = FALSE;
9140   for (s = dynobj->sections; s != NULL; s = s->next)
9141     {
9142       const char *name;
9143
9144       /* It's OK to base decisions on the section name, because none
9145          of the dynobj section names depend upon the input files.  */
9146       name = bfd_get_section_name (dynobj, s);
9147
9148       if ((s->flags & SEC_LINKER_CREATED) == 0)
9149         continue;
9150
9151       if (CONST_STRNEQ (name, ".rel"))
9152         {
9153           if (s->size != 0)
9154             {
9155               const char *outname;
9156               asection *target;
9157
9158               /* If this relocation section applies to a read only
9159                  section, then we probably need a DT_TEXTREL entry.
9160                  If the relocation section is .rel(a).dyn, we always
9161                  assert a DT_TEXTREL entry rather than testing whether
9162                  there exists a relocation to a read only section or
9163                  not.  */
9164               outname = bfd_get_section_name (output_bfd,
9165                                               s->output_section);
9166               target = bfd_get_section_by_name (output_bfd, outname + 4);
9167               if ((target != NULL
9168                    && (target->flags & SEC_READONLY) != 0
9169                    && (target->flags & SEC_ALLOC) != 0)
9170                   || strcmp (outname, MIPS_ELF_REL_DYN_NAME (info)) == 0)
9171                 reltext = TRUE;
9172
9173               /* We use the reloc_count field as a counter if we need
9174                  to copy relocs into the output file.  */
9175               if (strcmp (name, MIPS_ELF_REL_DYN_NAME (info)) != 0)
9176                 s->reloc_count = 0;
9177
9178               /* If combreloc is enabled, elf_link_sort_relocs() will
9179                  sort relocations, but in a different way than we do,
9180                  and before we're done creating relocations.  Also, it
9181                  will move them around between input sections'
9182                  relocation's contents, so our sorting would be
9183                  broken, so don't let it run.  */
9184               info->combreloc = 0;
9185             }
9186         }
9187       else if (! info->shared
9188                && ! mips_elf_hash_table (info)->use_rld_obj_head
9189                && CONST_STRNEQ (name, ".rld_map"))
9190         {
9191           /* We add a room for __rld_map.  It will be filled in by the
9192              rtld to contain a pointer to the _r_debug structure.  */
9193           s->size += MIPS_ELF_RLD_MAP_SIZE (output_bfd);
9194         }
9195       else if (SGI_COMPAT (output_bfd)
9196                && CONST_STRNEQ (name, ".compact_rel"))
9197         s->size += mips_elf_hash_table (info)->compact_rel_size;
9198       else if (s == htab->splt)
9199         {
9200           /* If the last PLT entry has a branch delay slot, allocate
9201              room for an extra nop to fill the delay slot.  This is
9202              for CPUs without load interlocking.  */
9203           if (! LOAD_INTERLOCKS_P (output_bfd)
9204               && ! htab->is_vxworks && s->size > 0)
9205             s->size += 4;
9206         }
9207       else if (! CONST_STRNEQ (name, ".init")
9208                && s != htab->sgot
9209                && s != htab->sgotplt
9210                && s != htab->sstubs
9211                && s != htab->sdynbss)
9212         {
9213           /* It's not one of our sections, so don't allocate space.  */
9214           continue;
9215         }
9216
9217       if (s->size == 0)
9218         {
9219           s->flags |= SEC_EXCLUDE;
9220           continue;
9221         }
9222
9223       if ((s->flags & SEC_HAS_CONTENTS) == 0)
9224         continue;
9225
9226       /* Allocate memory for the section contents.  */
9227       s->contents = bfd_zalloc (dynobj, s->size);
9228       if (s->contents == NULL)
9229         {
9230           bfd_set_error (bfd_error_no_memory);
9231           return FALSE;
9232         }
9233     }
9234
9235   if (elf_hash_table (info)->dynamic_sections_created)
9236     {
9237       /* Add some entries to the .dynamic section.  We fill in the
9238          values later, in _bfd_mips_elf_finish_dynamic_sections, but we
9239          must add the entries now so that we get the correct size for
9240          the .dynamic section.  */
9241
9242       /* SGI object has the equivalence of DT_DEBUG in the
9243          DT_MIPS_RLD_MAP entry.  This must come first because glibc
9244          only fills in DT_MIPS_RLD_MAP (not DT_DEBUG) and some tools
9245          may only look at the first one they see.  */
9246       if (!info->shared
9247           && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_MAP, 0))
9248         return FALSE;
9249
9250       /* The DT_DEBUG entry may be filled in by the dynamic linker and
9251          used by the debugger.  */
9252       if (info->executable
9253           && !SGI_COMPAT (output_bfd)
9254           && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_DEBUG, 0))
9255         return FALSE;
9256
9257       if (reltext && (SGI_COMPAT (output_bfd) || htab->is_vxworks))
9258         info->flags |= DF_TEXTREL;
9259
9260       if ((info->flags & DF_TEXTREL) != 0)
9261         {
9262           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_TEXTREL, 0))
9263             return FALSE;
9264
9265           /* Clear the DF_TEXTREL flag.  It will be set again if we
9266              write out an actual text relocation; we may not, because
9267              at this point we do not know whether e.g. any .eh_frame
9268              absolute relocations have been converted to PC-relative.  */
9269           info->flags &= ~DF_TEXTREL;
9270         }
9271
9272       if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTGOT, 0))
9273         return FALSE;
9274
9275       sreldyn = mips_elf_rel_dyn_section (info, FALSE);
9276       if (htab->is_vxworks)
9277         {
9278           /* VxWorks uses .rela.dyn instead of .rel.dyn.  It does not
9279              use any of the DT_MIPS_* tags.  */
9280           if (sreldyn && sreldyn->size > 0)
9281             {
9282               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELA, 0))
9283                 return FALSE;
9284
9285               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELASZ, 0))
9286                 return FALSE;
9287
9288               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELAENT, 0))
9289                 return FALSE;
9290             }
9291         }
9292       else
9293         {
9294           if (sreldyn && sreldyn->size > 0)
9295             {
9296               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_REL, 0))
9297                 return FALSE;
9298
9299               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELSZ, 0))
9300                 return FALSE;
9301
9302               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELENT, 0))
9303                 return FALSE;
9304             }
9305
9306           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_VERSION, 0))
9307             return FALSE;
9308
9309           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_FLAGS, 0))
9310             return FALSE;
9311
9312           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_BASE_ADDRESS, 0))
9313             return FALSE;
9314
9315           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_LOCAL_GOTNO, 0))
9316             return FALSE;
9317
9318           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_SYMTABNO, 0))
9319             return FALSE;
9320
9321           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_UNREFEXTNO, 0))
9322             return FALSE;
9323
9324           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_GOTSYM, 0))
9325             return FALSE;
9326
9327           if (IRIX_COMPAT (dynobj) == ict_irix5
9328               && ! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_HIPAGENO, 0))
9329             return FALSE;
9330
9331           if (IRIX_COMPAT (dynobj) == ict_irix6
9332               && (bfd_get_section_by_name
9333                   (output_bfd, MIPS_ELF_OPTIONS_SECTION_NAME (dynobj)))
9334               && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_OPTIONS, 0))
9335             return FALSE;
9336         }
9337       if (htab->splt->size > 0)
9338         {
9339           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTREL, 0))
9340             return FALSE;
9341
9342           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_JMPREL, 0))
9343             return FALSE;
9344
9345           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTRELSZ, 0))
9346             return FALSE;
9347
9348           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_PLTGOT, 0))
9349             return FALSE;
9350         }
9351       if (htab->is_vxworks
9352           && !elf_vxworks_add_dynamic_entries (output_bfd, info))
9353         return FALSE;
9354     }
9355
9356   return TRUE;
9357 }
9358 \f
9359 /* REL is a relocation in INPUT_BFD that is being copied to OUTPUT_BFD.
9360    Adjust its R_ADDEND field so that it is correct for the output file.
9361    LOCAL_SYMS and LOCAL_SECTIONS are arrays of INPUT_BFD's local symbols
9362    and sections respectively; both use symbol indexes.  */
9363
9364 static void
9365 mips_elf_adjust_addend (bfd *output_bfd, struct bfd_link_info *info,
9366                         bfd *input_bfd, Elf_Internal_Sym *local_syms,
9367                         asection **local_sections, Elf_Internal_Rela *rel)
9368 {
9369   unsigned int r_type, r_symndx;
9370   Elf_Internal_Sym *sym;
9371   asection *sec;
9372
9373   if (mips_elf_local_relocation_p (input_bfd, rel, local_sections))
9374     {
9375       r_type = ELF_R_TYPE (output_bfd, rel->r_info);
9376       if (gprel16_reloc_p (r_type)
9377           || r_type == R_MIPS_GPREL32
9378           || literal_reloc_p (r_type))
9379         {
9380           rel->r_addend += _bfd_get_gp_value (input_bfd);
9381           rel->r_addend -= _bfd_get_gp_value (output_bfd);
9382         }
9383
9384       r_symndx = ELF_R_SYM (output_bfd, rel->r_info);
9385       sym = local_syms + r_symndx;
9386
9387       /* Adjust REL's addend to account for section merging.  */
9388       if (!info->relocatable)
9389         {
9390           sec = local_sections[r_symndx];
9391           _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
9392         }
9393
9394       /* This would normally be done by the rela_normal code in elflink.c.  */
9395       if (ELF_ST_TYPE (sym->st_info) == STT_SECTION)
9396         rel->r_addend += local_sections[r_symndx]->output_offset;
9397     }
9398 }
9399
9400 /* Handle relocations against symbols from removed linkonce sections,
9401    or sections discarded by a linker script.  We use this wrapper around
9402    RELOC_AGAINST_DISCARDED_SECTION to handle triplets of compound relocs
9403    on 64-bit ELF targets.  In this case for any relocation handled, which
9404    always be the first in a triplet, the remaining two have to be processed
9405    together with the first, even if they are R_MIPS_NONE.  It is the symbol
9406    index referred by the first reloc that applies to all the three and the
9407    remaining two never refer to an object symbol.  And it is the final
9408    relocation (the last non-null one) that determines the output field of
9409    the whole relocation so retrieve the corresponding howto structure for
9410    the relocatable field to be cleared by RELOC_AGAINST_DISCARDED_SECTION.
9411
9412    Note that RELOC_AGAINST_DISCARDED_SECTION is a macro that uses "continue"
9413    and therefore requires to be pasted in a loop.  It also defines a block
9414    and does not protect any of its arguments, hence the extra brackets.  */
9415
9416 static void
9417 mips_reloc_against_discarded_section (bfd *output_bfd,
9418                                       struct bfd_link_info *info,
9419                                       bfd *input_bfd, asection *input_section,
9420                                       Elf_Internal_Rela **rel,
9421                                       const Elf_Internal_Rela **relend,
9422                                       bfd_boolean rel_reloc,
9423                                       reloc_howto_type *howto,
9424                                       bfd_byte *contents)
9425 {
9426   const struct elf_backend_data *bed = get_elf_backend_data (output_bfd);
9427   int count = bed->s->int_rels_per_ext_rel;
9428   unsigned int r_type;
9429   int i;
9430
9431   for (i = count - 1; i > 0; i--)
9432     {
9433       r_type = ELF_R_TYPE (output_bfd, (*rel)[i].r_info);
9434       if (r_type != R_MIPS_NONE)
9435         {
9436           howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, r_type, !rel_reloc);
9437           break;
9438         }
9439     }
9440   do
9441     {
9442        RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
9443                                         (*rel), count, (*relend),
9444                                         howto, i, contents);
9445     }
9446   while (0);
9447 }
9448
9449 /* Relocate a MIPS ELF section.  */
9450
9451 bfd_boolean
9452 _bfd_mips_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
9453                                 bfd *input_bfd, asection *input_section,
9454                                 bfd_byte *contents, Elf_Internal_Rela *relocs,
9455                                 Elf_Internal_Sym *local_syms,
9456                                 asection **local_sections)
9457 {
9458   Elf_Internal_Rela *rel;
9459   const Elf_Internal_Rela *relend;
9460   bfd_vma addend = 0;
9461   bfd_boolean use_saved_addend_p = FALSE;
9462   const struct elf_backend_data *bed;
9463
9464   bed = get_elf_backend_data (output_bfd);
9465   relend = relocs + input_section->reloc_count * bed->s->int_rels_per_ext_rel;
9466   for (rel = relocs; rel < relend; ++rel)
9467     {
9468       const char *name;
9469       bfd_vma value = 0;
9470       reloc_howto_type *howto;
9471       bfd_boolean cross_mode_jump_p;
9472       /* TRUE if the relocation is a RELA relocation, rather than a
9473          REL relocation.  */
9474       bfd_boolean rela_relocation_p = TRUE;
9475       unsigned int r_type = ELF_R_TYPE (output_bfd, rel->r_info);
9476       const char *msg;
9477       unsigned long r_symndx;
9478       asection *sec;
9479       Elf_Internal_Shdr *symtab_hdr;
9480       struct elf_link_hash_entry *h;
9481       bfd_boolean rel_reloc;
9482
9483       rel_reloc = (NEWABI_P (input_bfd)
9484                    && mips_elf_rel_relocation_p (input_bfd, input_section,
9485                                                  relocs, rel));
9486       /* Find the relocation howto for this relocation.  */
9487       howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, r_type, !rel_reloc);
9488
9489       r_symndx = ELF_R_SYM (input_bfd, rel->r_info);
9490       symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
9491       if (mips_elf_local_relocation_p (input_bfd, rel, local_sections))
9492         {
9493           sec = local_sections[r_symndx];
9494           h = NULL;
9495         }
9496       else
9497         {
9498           unsigned long extsymoff;
9499
9500           extsymoff = 0;
9501           if (!elf_bad_symtab (input_bfd))
9502             extsymoff = symtab_hdr->sh_info;
9503           h = elf_sym_hashes (input_bfd) [r_symndx - extsymoff];
9504           while (h->root.type == bfd_link_hash_indirect
9505                  || h->root.type == bfd_link_hash_warning)
9506             h = (struct elf_link_hash_entry *) h->root.u.i.link;
9507
9508           sec = NULL;
9509           if (h->root.type == bfd_link_hash_defined
9510               || h->root.type == bfd_link_hash_defweak)
9511             sec = h->root.u.def.section;
9512         }
9513
9514       if (sec != NULL && discarded_section (sec))
9515         {
9516           mips_reloc_against_discarded_section (output_bfd, info, input_bfd,
9517                                                 input_section, &rel, &relend,
9518                                                 rel_reloc, howto, contents);
9519           continue;
9520         }
9521
9522       if (r_type == R_MIPS_64 && ! NEWABI_P (input_bfd))
9523         {
9524           /* Some 32-bit code uses R_MIPS_64.  In particular, people use
9525              64-bit code, but make sure all their addresses are in the
9526              lowermost or uppermost 32-bit section of the 64-bit address
9527              space.  Thus, when they use an R_MIPS_64 they mean what is
9528              usually meant by R_MIPS_32, with the exception that the
9529              stored value is sign-extended to 64 bits.  */
9530           howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, R_MIPS_32, FALSE);
9531
9532           /* On big-endian systems, we need to lie about the position
9533              of the reloc.  */
9534           if (bfd_big_endian (input_bfd))
9535             rel->r_offset += 4;
9536         }
9537
9538       if (!use_saved_addend_p)
9539         {
9540           /* If these relocations were originally of the REL variety,
9541              we must pull the addend out of the field that will be
9542              relocated.  Otherwise, we simply use the contents of the
9543              RELA relocation.  */
9544           if (mips_elf_rel_relocation_p (input_bfd, input_section,
9545                                          relocs, rel))
9546             {
9547               rela_relocation_p = FALSE;
9548               addend = mips_elf_read_rel_addend (input_bfd, rel,
9549                                                  howto, contents);
9550               if (hi16_reloc_p (r_type)
9551                   || (got16_reloc_p (r_type)
9552                       && mips_elf_local_relocation_p (input_bfd, rel,
9553                                                       local_sections)))
9554                 {
9555                   if (!mips_elf_add_lo16_rel_addend (input_bfd, rel, relend,
9556                                                      contents, &addend))
9557                     {
9558                       if (h)
9559                         name = h->root.root.string;
9560                       else
9561                         name = bfd_elf_sym_name (input_bfd, symtab_hdr,
9562                                                  local_syms + r_symndx,
9563                                                  sec);
9564                       (*_bfd_error_handler)
9565                         (_("%B: Can't find matching LO16 reloc against `%s' for %s at 0x%lx in section `%A'"),
9566                          input_bfd, input_section, name, howto->name,
9567                          rel->r_offset);
9568                     }
9569                 }
9570               else
9571                 addend <<= howto->rightshift;
9572             }
9573           else
9574             addend = rel->r_addend;
9575           mips_elf_adjust_addend (output_bfd, info, input_bfd,
9576                                   local_syms, local_sections, rel);
9577         }
9578
9579       if (info->relocatable)
9580         {
9581           if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd)
9582               && bfd_big_endian (input_bfd))
9583             rel->r_offset -= 4;
9584
9585           if (!rela_relocation_p && rel->r_addend)
9586             {
9587               addend += rel->r_addend;
9588               if (hi16_reloc_p (r_type) || got16_reloc_p (r_type))
9589                 addend = mips_elf_high (addend);
9590               else if (r_type == R_MIPS_HIGHER)
9591                 addend = mips_elf_higher (addend);
9592               else if (r_type == R_MIPS_HIGHEST)
9593                 addend = mips_elf_highest (addend);
9594               else
9595                 addend >>= howto->rightshift;
9596
9597               /* We use the source mask, rather than the destination
9598                  mask because the place to which we are writing will be
9599                  source of the addend in the final link.  */
9600               addend &= howto->src_mask;
9601
9602               if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd))
9603                 /* See the comment above about using R_MIPS_64 in the 32-bit
9604                    ABI.  Here, we need to update the addend.  It would be
9605                    possible to get away with just using the R_MIPS_32 reloc
9606                    but for endianness.  */
9607                 {
9608                   bfd_vma sign_bits;
9609                   bfd_vma low_bits;
9610                   bfd_vma high_bits;
9611
9612                   if (addend & ((bfd_vma) 1 << 31))
9613 #ifdef BFD64
9614                     sign_bits = ((bfd_vma) 1 << 32) - 1;
9615 #else
9616                     sign_bits = -1;
9617 #endif
9618                   else
9619                     sign_bits = 0;
9620
9621                   /* If we don't know that we have a 64-bit type,
9622                      do two separate stores.  */
9623                   if (bfd_big_endian (input_bfd))
9624                     {
9625                       /* Store the sign-bits (which are most significant)
9626                          first.  */
9627                       low_bits = sign_bits;
9628                       high_bits = addend;
9629                     }
9630                   else
9631                     {
9632                       low_bits = addend;
9633                       high_bits = sign_bits;
9634                     }
9635                   bfd_put_32 (input_bfd, low_bits,
9636                               contents + rel->r_offset);
9637                   bfd_put_32 (input_bfd, high_bits,
9638                               contents + rel->r_offset + 4);
9639                   continue;
9640                 }
9641
9642               if (! mips_elf_perform_relocation (info, howto, rel, addend,
9643                                                  input_bfd, input_section,
9644                                                  contents, FALSE))
9645                 return FALSE;
9646             }
9647
9648           /* Go on to the next relocation.  */
9649           continue;
9650         }
9651
9652       /* In the N32 and 64-bit ABIs there may be multiple consecutive
9653          relocations for the same offset.  In that case we are
9654          supposed to treat the output of each relocation as the addend
9655          for the next.  */
9656       if (rel + 1 < relend
9657           && rel->r_offset == rel[1].r_offset
9658           && ELF_R_TYPE (input_bfd, rel[1].r_info) != R_MIPS_NONE)
9659         use_saved_addend_p = TRUE;
9660       else
9661         use_saved_addend_p = FALSE;
9662
9663       /* Figure out what value we are supposed to relocate.  */
9664       switch (mips_elf_calculate_relocation (output_bfd, input_bfd,
9665                                              input_section, info, rel,
9666                                              addend, howto, local_syms,
9667                                              local_sections, &value,
9668                                              &name, &cross_mode_jump_p,
9669                                              use_saved_addend_p))
9670         {
9671         case bfd_reloc_continue:
9672           /* There's nothing to do.  */
9673           continue;
9674
9675         case bfd_reloc_undefined:
9676           /* mips_elf_calculate_relocation already called the
9677              undefined_symbol callback.  There's no real point in
9678              trying to perform the relocation at this point, so we
9679              just skip ahead to the next relocation.  */
9680           continue;
9681
9682         case bfd_reloc_notsupported:
9683           msg = _("internal error: unsupported relocation error");
9684           info->callbacks->warning
9685             (info, msg, name, input_bfd, input_section, rel->r_offset);
9686           return FALSE;
9687
9688         case bfd_reloc_overflow:
9689           if (use_saved_addend_p)
9690             /* Ignore overflow until we reach the last relocation for
9691                a given location.  */
9692             ;
9693           else
9694             {
9695               struct mips_elf_link_hash_table *htab;
9696
9697               htab = mips_elf_hash_table (info);
9698               BFD_ASSERT (htab != NULL);
9699               BFD_ASSERT (name != NULL);
9700               if (!htab->small_data_overflow_reported
9701                   && (gprel16_reloc_p (howto->type)
9702                       || literal_reloc_p (howto->type)))
9703                 {
9704                   msg = _("small-data section exceeds 64KB;"
9705                           " lower small-data size limit (see option -G)");
9706
9707                   htab->small_data_overflow_reported = TRUE;
9708                   (*info->callbacks->einfo) ("%P: %s\n", msg);
9709                 }
9710               if (! ((*info->callbacks->reloc_overflow)
9711                      (info, NULL, name, howto->name, (bfd_vma) 0,
9712                       input_bfd, input_section, rel->r_offset)))
9713                 return FALSE;
9714             }
9715           break;
9716
9717         case bfd_reloc_ok:
9718           break;
9719
9720         case bfd_reloc_outofrange:
9721           if (jal_reloc_p (howto->type))
9722             {
9723               msg = _("JALX to a non-word-aligned address");
9724               info->callbacks->warning
9725                 (info, msg, name, input_bfd, input_section, rel->r_offset);
9726               return FALSE;
9727             }
9728           /* Fall through.  */
9729
9730         default:
9731           abort ();
9732           break;
9733         }
9734
9735       /* If we've got another relocation for the address, keep going
9736          until we reach the last one.  */
9737       if (use_saved_addend_p)
9738         {
9739           addend = value;
9740           continue;
9741         }
9742
9743       if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd))
9744         /* See the comment above about using R_MIPS_64 in the 32-bit
9745            ABI.  Until now, we've been using the HOWTO for R_MIPS_32;
9746            that calculated the right value.  Now, however, we
9747            sign-extend the 32-bit result to 64-bits, and store it as a
9748            64-bit value.  We are especially generous here in that we
9749            go to extreme lengths to support this usage on systems with
9750            only a 32-bit VMA.  */
9751         {
9752           bfd_vma sign_bits;
9753           bfd_vma low_bits;
9754           bfd_vma high_bits;
9755
9756           if (value & ((bfd_vma) 1 << 31))
9757 #ifdef BFD64
9758             sign_bits = ((bfd_vma) 1 << 32) - 1;
9759 #else
9760             sign_bits = -1;
9761 #endif
9762           else
9763             sign_bits = 0;
9764
9765           /* If we don't know that we have a 64-bit type,
9766              do two separate stores.  */
9767           if (bfd_big_endian (input_bfd))
9768             {
9769               /* Undo what we did above.  */
9770               rel->r_offset -= 4;
9771               /* Store the sign-bits (which are most significant)
9772                  first.  */
9773               low_bits = sign_bits;
9774               high_bits = value;
9775             }
9776           else
9777             {
9778               low_bits = value;
9779               high_bits = sign_bits;
9780             }
9781           bfd_put_32 (input_bfd, low_bits,
9782                       contents + rel->r_offset);
9783           bfd_put_32 (input_bfd, high_bits,
9784                       contents + rel->r_offset + 4);
9785           continue;
9786         }
9787
9788       /* Actually perform the relocation.  */
9789       if (! mips_elf_perform_relocation (info, howto, rel, value,
9790                                          input_bfd, input_section,
9791                                          contents, cross_mode_jump_p))
9792         return FALSE;
9793     }
9794
9795   return TRUE;
9796 }
9797 \f
9798 /* A function that iterates over each entry in la25_stubs and fills
9799    in the code for each one.  DATA points to a mips_htab_traverse_info.  */
9800
9801 static int
9802 mips_elf_create_la25_stub (void **slot, void *data)
9803 {
9804   struct mips_htab_traverse_info *hti;
9805   struct mips_elf_link_hash_table *htab;
9806   struct mips_elf_la25_stub *stub;
9807   asection *s;
9808   bfd_byte *loc;
9809   bfd_vma offset, target, target_high, target_low;
9810
9811   stub = (struct mips_elf_la25_stub *) *slot;
9812   hti = (struct mips_htab_traverse_info *) data;
9813   htab = mips_elf_hash_table (hti->info);
9814   BFD_ASSERT (htab != NULL);
9815
9816   /* Create the section contents, if we haven't already.  */
9817   s = stub->stub_section;
9818   loc = s->contents;
9819   if (loc == NULL)
9820     {
9821       loc = bfd_malloc (s->size);
9822       if (loc == NULL)
9823         {
9824           hti->error = TRUE;
9825           return FALSE;
9826         }
9827       s->contents = loc;
9828     }
9829
9830   /* Work out where in the section this stub should go.  */
9831   offset = stub->offset;
9832
9833   /* Work out the target address.  */
9834   target = mips_elf_get_la25_target (stub, &s);
9835   target += s->output_section->vma + s->output_offset;
9836
9837   target_high = ((target + 0x8000) >> 16) & 0xffff;
9838   target_low = (target & 0xffff);
9839
9840   if (stub->stub_section != htab->strampoline)
9841     {
9842       /* This is a simple LUI/ADDIU stub.  Zero out the beginning
9843          of the section and write the two instructions at the end.  */
9844       memset (loc, 0, offset);
9845       loc += offset;
9846       if (ELF_ST_IS_MICROMIPS (stub->h->root.other))
9847         {
9848           bfd_put_micromips_32 (hti->output_bfd,
9849                                 LA25_LUI_MICROMIPS (target_high),
9850                                 loc);
9851           bfd_put_micromips_32 (hti->output_bfd,
9852                                 LA25_ADDIU_MICROMIPS (target_low),
9853                                 loc + 4);
9854         }
9855       else
9856         {
9857           bfd_put_32 (hti->output_bfd, LA25_LUI (target_high), loc);
9858           bfd_put_32 (hti->output_bfd, LA25_ADDIU (target_low), loc + 4);
9859         }
9860     }
9861   else
9862     {
9863       /* This is trampoline.  */
9864       loc += offset;
9865       if (ELF_ST_IS_MICROMIPS (stub->h->root.other))
9866         {
9867           bfd_put_micromips_32 (hti->output_bfd,
9868                                 LA25_LUI_MICROMIPS (target_high), loc);
9869           bfd_put_micromips_32 (hti->output_bfd,
9870                                 LA25_J_MICROMIPS (target), loc + 4);
9871           bfd_put_micromips_32 (hti->output_bfd,
9872                                 LA25_ADDIU_MICROMIPS (target_low), loc + 8);
9873           bfd_put_32 (hti->output_bfd, 0, loc + 12);
9874         }
9875       else
9876         {
9877           bfd_put_32 (hti->output_bfd, LA25_LUI (target_high), loc);
9878           bfd_put_32 (hti->output_bfd, LA25_J (target), loc + 4);
9879           bfd_put_32 (hti->output_bfd, LA25_ADDIU (target_low), loc + 8);
9880           bfd_put_32 (hti->output_bfd, 0, loc + 12);
9881         }
9882     }
9883   return TRUE;
9884 }
9885
9886 /* If NAME is one of the special IRIX6 symbols defined by the linker,
9887    adjust it appropriately now.  */
9888
9889 static void
9890 mips_elf_irix6_finish_dynamic_symbol (bfd *abfd ATTRIBUTE_UNUSED,
9891                                       const char *name, Elf_Internal_Sym *sym)
9892 {
9893   /* The linker script takes care of providing names and values for
9894      these, but we must place them into the right sections.  */
9895   static const char* const text_section_symbols[] = {
9896     "_ftext",
9897     "_etext",
9898     "__dso_displacement",
9899     "__elf_header",
9900     "__program_header_table",
9901     NULL
9902   };
9903
9904   static const char* const data_section_symbols[] = {
9905     "_fdata",
9906     "_edata",
9907     "_end",
9908     "_fbss",
9909     NULL
9910   };
9911
9912   const char* const *p;
9913   int i;
9914
9915   for (i = 0; i < 2; ++i)
9916     for (p = (i == 0) ? text_section_symbols : data_section_symbols;
9917          *p;
9918          ++p)
9919       if (strcmp (*p, name) == 0)
9920         {
9921           /* All of these symbols are given type STT_SECTION by the
9922              IRIX6 linker.  */
9923           sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
9924           sym->st_other = STO_PROTECTED;
9925
9926           /* The IRIX linker puts these symbols in special sections.  */
9927           if (i == 0)
9928             sym->st_shndx = SHN_MIPS_TEXT;
9929           else
9930             sym->st_shndx = SHN_MIPS_DATA;
9931
9932           break;
9933         }
9934 }
9935
9936 /* Finish up dynamic symbol handling.  We set the contents of various
9937    dynamic sections here.  */
9938
9939 bfd_boolean
9940 _bfd_mips_elf_finish_dynamic_symbol (bfd *output_bfd,
9941                                      struct bfd_link_info *info,
9942                                      struct elf_link_hash_entry *h,
9943                                      Elf_Internal_Sym *sym)
9944 {
9945   bfd *dynobj;
9946   asection *sgot;
9947   struct mips_got_info *g, *gg;
9948   const char *name;
9949   int idx;
9950   struct mips_elf_link_hash_table *htab;
9951   struct mips_elf_link_hash_entry *hmips;
9952
9953   htab = mips_elf_hash_table (info);
9954   BFD_ASSERT (htab != NULL);
9955   dynobj = elf_hash_table (info)->dynobj;
9956   hmips = (struct mips_elf_link_hash_entry *) h;
9957
9958   BFD_ASSERT (!htab->is_vxworks);
9959
9960   if (h->plt.offset != MINUS_ONE && hmips->no_fn_stub)
9961     {
9962       /* We've decided to create a PLT entry for this symbol.  */
9963       bfd_byte *loc;
9964       bfd_vma header_address, plt_index, got_address;
9965       bfd_vma got_address_high, got_address_low, load;
9966       const bfd_vma *plt_entry;
9967
9968       BFD_ASSERT (htab->use_plts_and_copy_relocs);
9969       BFD_ASSERT (h->dynindx != -1);
9970       BFD_ASSERT (htab->splt != NULL);
9971       BFD_ASSERT (h->plt.offset <= htab->splt->size);
9972       BFD_ASSERT (!h->def_regular);
9973
9974       /* Calculate the address of the PLT header.  */
9975       header_address = (htab->splt->output_section->vma
9976                         + htab->splt->output_offset);
9977
9978       /* Calculate the index of the entry.  */
9979       plt_index = ((h->plt.offset - htab->plt_header_size)
9980                    / htab->plt_entry_size);
9981
9982       /* Calculate the address of the .got.plt entry.  */
9983       got_address = (htab->sgotplt->output_section->vma
9984                      + htab->sgotplt->output_offset
9985                      + (2 + plt_index) * MIPS_ELF_GOT_SIZE (dynobj));
9986       got_address_high = ((got_address + 0x8000) >> 16) & 0xffff;
9987       got_address_low = got_address & 0xffff;
9988
9989       /* Initially point the .got.plt entry at the PLT header.  */
9990       loc = (htab->sgotplt->contents
9991              + (2 + plt_index) * MIPS_ELF_GOT_SIZE (dynobj));
9992       if (ABI_64_P (output_bfd))
9993         bfd_put_64 (output_bfd, header_address, loc);
9994       else
9995         bfd_put_32 (output_bfd, header_address, loc);
9996
9997       /* Find out where the .plt entry should go.  */
9998       loc = htab->splt->contents + h->plt.offset;
9999
10000       /* Pick the load opcode.  */
10001       load = MIPS_ELF_LOAD_WORD (output_bfd);
10002
10003       /* Fill in the PLT entry itself.  */
10004       plt_entry = mips_exec_plt_entry;
10005       bfd_put_32 (output_bfd, plt_entry[0] | got_address_high, loc);
10006       bfd_put_32 (output_bfd, plt_entry[1] | got_address_low | load, loc + 4);
10007
10008       if (! LOAD_INTERLOCKS_P (output_bfd))
10009         {
10010           bfd_put_32 (output_bfd, plt_entry[2] | got_address_low, loc + 8);
10011           bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
10012         }
10013       else
10014         {
10015           bfd_put_32 (output_bfd, plt_entry[3], loc + 8);
10016           bfd_put_32 (output_bfd, plt_entry[2] | got_address_low, loc + 12);
10017         }
10018
10019       /* Emit an R_MIPS_JUMP_SLOT relocation against the .got.plt entry.  */
10020       mips_elf_output_dynamic_relocation (output_bfd, htab->srelplt,
10021                                           plt_index, h->dynindx,
10022                                           R_MIPS_JUMP_SLOT, got_address);
10023
10024       /* We distinguish between PLT entries and lazy-binding stubs by
10025          giving the former an st_other value of STO_MIPS_PLT.  Set the
10026          flag and leave the value if there are any relocations in the
10027          binary where pointer equality matters.  */
10028       sym->st_shndx = SHN_UNDEF;
10029       if (h->pointer_equality_needed)
10030         sym->st_other = STO_MIPS_PLT;
10031       else
10032         sym->st_value = 0;
10033     }
10034   else if (h->plt.offset != MINUS_ONE)
10035     {
10036       /* We've decided to create a lazy-binding stub.  */
10037       bfd_byte stub[MIPS_FUNCTION_STUB_BIG_SIZE];
10038
10039       /* This symbol has a stub.  Set it up.  */
10040
10041       BFD_ASSERT (h->dynindx != -1);
10042
10043       BFD_ASSERT ((htab->function_stub_size == MIPS_FUNCTION_STUB_BIG_SIZE)
10044                   || (h->dynindx <= 0xffff));
10045
10046       /* Values up to 2^31 - 1 are allowed.  Larger values would cause
10047          sign extension at runtime in the stub, resulting in a negative
10048          index value.  */
10049       if (h->dynindx & ~0x7fffffff)
10050         return FALSE;
10051
10052       /* Fill the stub.  */
10053       idx = 0;
10054       bfd_put_32 (output_bfd, STUB_LW (output_bfd), stub + idx);
10055       idx += 4;
10056       bfd_put_32 (output_bfd, STUB_MOVE (output_bfd), stub + idx);
10057       idx += 4;
10058       if (htab->function_stub_size == MIPS_FUNCTION_STUB_BIG_SIZE)
10059         {
10060           bfd_put_32 (output_bfd, STUB_LUI ((h->dynindx >> 16) & 0x7fff),
10061                       stub + idx);
10062           idx += 4;
10063         }
10064       bfd_put_32 (output_bfd, STUB_JALR, stub + idx);
10065       idx += 4;
10066
10067       /* If a large stub is not required and sign extension is not a
10068          problem, then use legacy code in the stub.  */
10069       if (htab->function_stub_size == MIPS_FUNCTION_STUB_BIG_SIZE)
10070         bfd_put_32 (output_bfd, STUB_ORI (h->dynindx & 0xffff), stub + idx);
10071       else if (h->dynindx & ~0x7fff)
10072         bfd_put_32 (output_bfd, STUB_LI16U (h->dynindx & 0xffff), stub + idx);
10073       else
10074         bfd_put_32 (output_bfd, STUB_LI16S (output_bfd, h->dynindx),
10075                     stub + idx);
10076
10077       BFD_ASSERT (h->plt.offset <= htab->sstubs->size);
10078       memcpy (htab->sstubs->contents + h->plt.offset,
10079               stub, htab->function_stub_size);
10080
10081       /* Mark the symbol as undefined.  plt.offset != -1 occurs
10082          only for the referenced symbol.  */
10083       sym->st_shndx = SHN_UNDEF;
10084
10085       /* The run-time linker uses the st_value field of the symbol
10086          to reset the global offset table entry for this external
10087          to its stub address when unlinking a shared object.  */
10088       sym->st_value = (htab->sstubs->output_section->vma
10089                        + htab->sstubs->output_offset
10090                        + h->plt.offset);
10091     }
10092
10093   /* If we have a MIPS16 function with a stub, the dynamic symbol must
10094      refer to the stub, since only the stub uses the standard calling
10095      conventions.  */
10096   if (h->dynindx != -1 && hmips->fn_stub != NULL)
10097     {
10098       BFD_ASSERT (hmips->need_fn_stub);
10099       sym->st_value = (hmips->fn_stub->output_section->vma
10100                        + hmips->fn_stub->output_offset);
10101       sym->st_size = hmips->fn_stub->size;
10102       sym->st_other = ELF_ST_VISIBILITY (sym->st_other);
10103     }
10104
10105   BFD_ASSERT (h->dynindx != -1
10106               || h->forced_local);
10107
10108   sgot = htab->sgot;
10109   g = htab->got_info;
10110   BFD_ASSERT (g != NULL);
10111
10112   /* Run through the global symbol table, creating GOT entries for all
10113      the symbols that need them.  */
10114   if (hmips->global_got_area != GGA_NONE)
10115     {
10116       bfd_vma offset;
10117       bfd_vma value;
10118
10119       value = sym->st_value;
10120       offset = mips_elf_global_got_index (dynobj, output_bfd, h,
10121                                           R_MIPS_GOT16, info);
10122       MIPS_ELF_PUT_WORD (output_bfd, value, sgot->contents + offset);
10123     }
10124
10125   if (hmips->global_got_area != GGA_NONE && g->next)
10126     {
10127       struct mips_got_entry e, *p;
10128       bfd_vma entry;
10129       bfd_vma offset;
10130
10131       gg = g;
10132
10133       e.abfd = output_bfd;
10134       e.symndx = -1;
10135       e.d.h = hmips;
10136       e.tls_type = 0;
10137
10138       for (g = g->next; g->next != gg; g = g->next)
10139         {
10140           if (g->got_entries
10141               && (p = (struct mips_got_entry *) htab_find (g->got_entries,
10142                                                            &e)))
10143             {
10144               offset = p->gotidx;
10145               if (info->shared
10146                   || (elf_hash_table (info)->dynamic_sections_created
10147                       && p->d.h != NULL
10148                       && p->d.h->root.def_dynamic
10149                       && !p->d.h->root.def_regular))
10150                 {
10151                   /* Create an R_MIPS_REL32 relocation for this entry.  Due to
10152                      the various compatibility problems, it's easier to mock
10153                      up an R_MIPS_32 or R_MIPS_64 relocation and leave
10154                      mips_elf_create_dynamic_relocation to calculate the
10155                      appropriate addend.  */
10156                   Elf_Internal_Rela rel[3];
10157
10158                   memset (rel, 0, sizeof (rel));
10159                   if (ABI_64_P (output_bfd))
10160                     rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_64);
10161                   else
10162                     rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_32);
10163                   rel[0].r_offset = rel[1].r_offset = rel[2].r_offset = offset;
10164
10165                   entry = 0;
10166                   if (! (mips_elf_create_dynamic_relocation
10167                          (output_bfd, info, rel,
10168                           e.d.h, NULL, sym->st_value, &entry, sgot)))
10169                     return FALSE;
10170                 }
10171               else
10172                 entry = sym->st_value;
10173               MIPS_ELF_PUT_WORD (output_bfd, entry, sgot->contents + offset);
10174             }
10175         }
10176     }
10177
10178   /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute.  */
10179   name = h->root.root.string;
10180   if (h == elf_hash_table (info)->hdynamic
10181       || h == elf_hash_table (info)->hgot)
10182     sym->st_shndx = SHN_ABS;
10183   else if (strcmp (name, "_DYNAMIC_LINK") == 0
10184            || strcmp (name, "_DYNAMIC_LINKING") == 0)
10185     {
10186       sym->st_shndx = SHN_ABS;
10187       sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10188       sym->st_value = 1;
10189     }
10190   else if (strcmp (name, "_gp_disp") == 0 && ! NEWABI_P (output_bfd))
10191     {
10192       sym->st_shndx = SHN_ABS;
10193       sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10194       sym->st_value = elf_gp (output_bfd);
10195     }
10196   else if (SGI_COMPAT (output_bfd))
10197     {
10198       if (strcmp (name, mips_elf_dynsym_rtproc_names[0]) == 0
10199           || strcmp (name, mips_elf_dynsym_rtproc_names[1]) == 0)
10200         {
10201           sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10202           sym->st_other = STO_PROTECTED;
10203           sym->st_value = 0;
10204           sym->st_shndx = SHN_MIPS_DATA;
10205         }
10206       else if (strcmp (name, mips_elf_dynsym_rtproc_names[2]) == 0)
10207         {
10208           sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10209           sym->st_other = STO_PROTECTED;
10210           sym->st_value = mips_elf_hash_table (info)->procedure_count;
10211           sym->st_shndx = SHN_ABS;
10212         }
10213       else if (sym->st_shndx != SHN_UNDEF && sym->st_shndx != SHN_ABS)
10214         {
10215           if (h->type == STT_FUNC)
10216             sym->st_shndx = SHN_MIPS_TEXT;
10217           else if (h->type == STT_OBJECT)
10218             sym->st_shndx = SHN_MIPS_DATA;
10219         }
10220     }
10221
10222   /* Emit a copy reloc, if needed.  */
10223   if (h->needs_copy)
10224     {
10225       asection *s;
10226       bfd_vma symval;
10227
10228       BFD_ASSERT (h->dynindx != -1);
10229       BFD_ASSERT (htab->use_plts_and_copy_relocs);
10230
10231       s = mips_elf_rel_dyn_section (info, FALSE);
10232       symval = (h->root.u.def.section->output_section->vma
10233                 + h->root.u.def.section->output_offset
10234                 + h->root.u.def.value);
10235       mips_elf_output_dynamic_relocation (output_bfd, s, s->reloc_count++,
10236                                           h->dynindx, R_MIPS_COPY, symval);
10237     }
10238
10239   /* Handle the IRIX6-specific symbols.  */
10240   if (IRIX_COMPAT (output_bfd) == ict_irix6)
10241     mips_elf_irix6_finish_dynamic_symbol (output_bfd, name, sym);
10242
10243   /* Keep dynamic MIPS16 symbols odd.  This allows the dynamic linker to
10244      treat MIPS16 symbols like any other.  */
10245   if (ELF_ST_IS_MIPS16 (sym->st_other))
10246     {
10247       BFD_ASSERT (sym->st_value & 1);
10248       sym->st_other -= STO_MIPS16;
10249     }
10250
10251   return TRUE;
10252 }
10253
10254 /* Likewise, for VxWorks.  */
10255
10256 bfd_boolean
10257 _bfd_mips_vxworks_finish_dynamic_symbol (bfd *output_bfd,
10258                                          struct bfd_link_info *info,
10259                                          struct elf_link_hash_entry *h,
10260                                          Elf_Internal_Sym *sym)
10261 {
10262   bfd *dynobj;
10263   asection *sgot;
10264   struct mips_got_info *g;
10265   struct mips_elf_link_hash_table *htab;
10266   struct mips_elf_link_hash_entry *hmips;
10267
10268   htab = mips_elf_hash_table (info);
10269   BFD_ASSERT (htab != NULL);
10270   dynobj = elf_hash_table (info)->dynobj;
10271   hmips = (struct mips_elf_link_hash_entry *) h;
10272
10273   if (h->plt.offset != (bfd_vma) -1)
10274     {
10275       bfd_byte *loc;
10276       bfd_vma plt_address, plt_index, got_address, got_offset, branch_offset;
10277       Elf_Internal_Rela rel;
10278       static const bfd_vma *plt_entry;
10279
10280       BFD_ASSERT (h->dynindx != -1);
10281       BFD_ASSERT (htab->splt != NULL);
10282       BFD_ASSERT (h->plt.offset <= htab->splt->size);
10283
10284       /* Calculate the address of the .plt entry.  */
10285       plt_address = (htab->splt->output_section->vma
10286                      + htab->splt->output_offset
10287                      + h->plt.offset);
10288
10289       /* Calculate the index of the entry.  */
10290       plt_index = ((h->plt.offset - htab->plt_header_size)
10291                    / htab->plt_entry_size);
10292
10293       /* Calculate the address of the .got.plt entry.  */
10294       got_address = (htab->sgotplt->output_section->vma
10295                      + htab->sgotplt->output_offset
10296                      + plt_index * 4);
10297
10298       /* Calculate the offset of the .got.plt entry from
10299          _GLOBAL_OFFSET_TABLE_.  */
10300       got_offset = mips_elf_gotplt_index (info, h);
10301
10302       /* Calculate the offset for the branch at the start of the PLT
10303          entry.  The branch jumps to the beginning of .plt.  */
10304       branch_offset = -(h->plt.offset / 4 + 1) & 0xffff;
10305
10306       /* Fill in the initial value of the .got.plt entry.  */
10307       bfd_put_32 (output_bfd, plt_address,
10308                   htab->sgotplt->contents + plt_index * 4);
10309
10310       /* Find out where the .plt entry should go.  */
10311       loc = htab->splt->contents + h->plt.offset;
10312
10313       if (info->shared)
10314         {
10315           plt_entry = mips_vxworks_shared_plt_entry;
10316           bfd_put_32 (output_bfd, plt_entry[0] | branch_offset, loc);
10317           bfd_put_32 (output_bfd, plt_entry[1] | plt_index, loc + 4);
10318         }
10319       else
10320         {
10321           bfd_vma got_address_high, got_address_low;
10322
10323           plt_entry = mips_vxworks_exec_plt_entry;
10324           got_address_high = ((got_address + 0x8000) >> 16) & 0xffff;
10325           got_address_low = got_address & 0xffff;
10326
10327           bfd_put_32 (output_bfd, plt_entry[0] | branch_offset, loc);
10328           bfd_put_32 (output_bfd, plt_entry[1] | plt_index, loc + 4);
10329           bfd_put_32 (output_bfd, plt_entry[2] | got_address_high, loc + 8);
10330           bfd_put_32 (output_bfd, plt_entry[3] | got_address_low, loc + 12);
10331           bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
10332           bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
10333           bfd_put_32 (output_bfd, plt_entry[6], loc + 24);
10334           bfd_put_32 (output_bfd, plt_entry[7], loc + 28);
10335
10336           loc = (htab->srelplt2->contents
10337                  + (plt_index * 3 + 2) * sizeof (Elf32_External_Rela));
10338
10339           /* Emit a relocation for the .got.plt entry.  */
10340           rel.r_offset = got_address;
10341           rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_MIPS_32);
10342           rel.r_addend = h->plt.offset;
10343           bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10344
10345           /* Emit a relocation for the lui of %hi(<.got.plt slot>).  */
10346           loc += sizeof (Elf32_External_Rela);
10347           rel.r_offset = plt_address + 8;
10348           rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
10349           rel.r_addend = got_offset;
10350           bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10351
10352           /* Emit a relocation for the addiu of %lo(<.got.plt slot>).  */
10353           loc += sizeof (Elf32_External_Rela);
10354           rel.r_offset += 4;
10355           rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
10356           bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10357         }
10358
10359       /* Emit an R_MIPS_JUMP_SLOT relocation against the .got.plt entry.  */
10360       loc = htab->srelplt->contents + plt_index * sizeof (Elf32_External_Rela);
10361       rel.r_offset = got_address;
10362       rel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_JUMP_SLOT);
10363       rel.r_addend = 0;
10364       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10365
10366       if (!h->def_regular)
10367         sym->st_shndx = SHN_UNDEF;
10368     }
10369
10370   BFD_ASSERT (h->dynindx != -1 || h->forced_local);
10371
10372   sgot = htab->sgot;
10373   g = htab->got_info;
10374   BFD_ASSERT (g != NULL);
10375
10376   /* See if this symbol has an entry in the GOT.  */
10377   if (hmips->global_got_area != GGA_NONE)
10378     {
10379       bfd_vma offset;
10380       Elf_Internal_Rela outrel;
10381       bfd_byte *loc;
10382       asection *s;
10383
10384       /* Install the symbol value in the GOT.   */
10385       offset = mips_elf_global_got_index (dynobj, output_bfd, h,
10386                                           R_MIPS_GOT16, info);
10387       MIPS_ELF_PUT_WORD (output_bfd, sym->st_value, sgot->contents + offset);
10388
10389       /* Add a dynamic relocation for it.  */
10390       s = mips_elf_rel_dyn_section (info, FALSE);
10391       loc = s->contents + (s->reloc_count++ * sizeof (Elf32_External_Rela));
10392       outrel.r_offset = (sgot->output_section->vma
10393                          + sgot->output_offset
10394                          + offset);
10395       outrel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_32);
10396       outrel.r_addend = 0;
10397       bfd_elf32_swap_reloca_out (dynobj, &outrel, loc);
10398     }
10399
10400   /* Emit a copy reloc, if needed.  */
10401   if (h->needs_copy)
10402     {
10403       Elf_Internal_Rela rel;
10404
10405       BFD_ASSERT (h->dynindx != -1);
10406
10407       rel.r_offset = (h->root.u.def.section->output_section->vma
10408                       + h->root.u.def.section->output_offset
10409                       + h->root.u.def.value);
10410       rel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_COPY);
10411       rel.r_addend = 0;
10412       bfd_elf32_swap_reloca_out (output_bfd, &rel,
10413                                  htab->srelbss->contents
10414                                  + (htab->srelbss->reloc_count
10415                                     * sizeof (Elf32_External_Rela)));
10416       ++htab->srelbss->reloc_count;
10417     }
10418
10419   /* If this is a mips16/microMIPS symbol, force the value to be even.  */
10420   if (ELF_ST_IS_COMPRESSED (sym->st_other))
10421     sym->st_value &= ~1;
10422
10423   return TRUE;
10424 }
10425
10426 /* Write out a plt0 entry to the beginning of .plt.  */
10427
10428 static void
10429 mips_finish_exec_plt (bfd *output_bfd, struct bfd_link_info *info)
10430 {
10431   bfd_byte *loc;
10432   bfd_vma gotplt_value, gotplt_value_high, gotplt_value_low;
10433   static const bfd_vma *plt_entry;
10434   struct mips_elf_link_hash_table *htab;
10435
10436   htab = mips_elf_hash_table (info);
10437   BFD_ASSERT (htab != NULL);
10438
10439   if (ABI_64_P (output_bfd))
10440     plt_entry = mips_n64_exec_plt0_entry;
10441   else if (ABI_N32_P (output_bfd))
10442     plt_entry = mips_n32_exec_plt0_entry;
10443   else
10444     plt_entry = mips_o32_exec_plt0_entry;
10445
10446   /* Calculate the value of .got.plt.  */
10447   gotplt_value = (htab->sgotplt->output_section->vma
10448                   + htab->sgotplt->output_offset);
10449   gotplt_value_high = ((gotplt_value + 0x8000) >> 16) & 0xffff;
10450   gotplt_value_low = gotplt_value & 0xffff;
10451
10452   /* The PLT sequence is not safe for N64 if .got.plt's address can
10453      not be loaded in two instructions.  */
10454   BFD_ASSERT ((gotplt_value & ~(bfd_vma) 0x7fffffff) == 0
10455               || ~(gotplt_value | 0x7fffffff) == 0);
10456
10457   /* Install the PLT header.  */
10458   loc = htab->splt->contents;
10459   bfd_put_32 (output_bfd, plt_entry[0] | gotplt_value_high, loc);
10460   bfd_put_32 (output_bfd, plt_entry[1] | gotplt_value_low, loc + 4);
10461   bfd_put_32 (output_bfd, plt_entry[2] | gotplt_value_low, loc + 8);
10462   bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
10463   bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
10464   bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
10465   bfd_put_32 (output_bfd, plt_entry[6], loc + 24);
10466   bfd_put_32 (output_bfd, plt_entry[7], loc + 28);
10467 }
10468
10469 /* Install the PLT header for a VxWorks executable and finalize the
10470    contents of .rela.plt.unloaded.  */
10471
10472 static void
10473 mips_vxworks_finish_exec_plt (bfd *output_bfd, struct bfd_link_info *info)
10474 {
10475   Elf_Internal_Rela rela;
10476   bfd_byte *loc;
10477   bfd_vma got_value, got_value_high, got_value_low, plt_address;
10478   static const bfd_vma *plt_entry;
10479   struct mips_elf_link_hash_table *htab;
10480
10481   htab = mips_elf_hash_table (info);
10482   BFD_ASSERT (htab != NULL);
10483
10484   plt_entry = mips_vxworks_exec_plt0_entry;
10485
10486   /* Calculate the value of _GLOBAL_OFFSET_TABLE_.  */
10487   got_value = (htab->root.hgot->root.u.def.section->output_section->vma
10488                + htab->root.hgot->root.u.def.section->output_offset
10489                + htab->root.hgot->root.u.def.value);
10490
10491   got_value_high = ((got_value + 0x8000) >> 16) & 0xffff;
10492   got_value_low = got_value & 0xffff;
10493
10494   /* Calculate the address of the PLT header.  */
10495   plt_address = htab->splt->output_section->vma + htab->splt->output_offset;
10496
10497   /* Install the PLT header.  */
10498   loc = htab->splt->contents;
10499   bfd_put_32 (output_bfd, plt_entry[0] | got_value_high, loc);
10500   bfd_put_32 (output_bfd, plt_entry[1] | got_value_low, loc + 4);
10501   bfd_put_32 (output_bfd, plt_entry[2], loc + 8);
10502   bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
10503   bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
10504   bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
10505
10506   /* Output the relocation for the lui of %hi(_GLOBAL_OFFSET_TABLE_).  */
10507   loc = htab->srelplt2->contents;
10508   rela.r_offset = plt_address;
10509   rela.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
10510   rela.r_addend = 0;
10511   bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
10512   loc += sizeof (Elf32_External_Rela);
10513
10514   /* Output the relocation for the following addiu of
10515      %lo(_GLOBAL_OFFSET_TABLE_).  */
10516   rela.r_offset += 4;
10517   rela.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
10518   bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
10519   loc += sizeof (Elf32_External_Rela);
10520
10521   /* Fix up the remaining relocations.  They may have the wrong
10522      symbol index for _G_O_T_ or _P_L_T_ depending on the order
10523      in which symbols were output.  */
10524   while (loc < htab->srelplt2->contents + htab->srelplt2->size)
10525     {
10526       Elf_Internal_Rela rel;
10527
10528       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
10529       rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_MIPS_32);
10530       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10531       loc += sizeof (Elf32_External_Rela);
10532
10533       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
10534       rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
10535       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10536       loc += sizeof (Elf32_External_Rela);
10537
10538       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
10539       rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
10540       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10541       loc += sizeof (Elf32_External_Rela);
10542     }
10543 }
10544
10545 /* Install the PLT header for a VxWorks shared library.  */
10546
10547 static void
10548 mips_vxworks_finish_shared_plt (bfd *output_bfd, struct bfd_link_info *info)
10549 {
10550   unsigned int i;
10551   struct mips_elf_link_hash_table *htab;
10552
10553   htab = mips_elf_hash_table (info);
10554   BFD_ASSERT (htab != NULL);
10555
10556   /* We just need to copy the entry byte-by-byte.  */
10557   for (i = 0; i < ARRAY_SIZE (mips_vxworks_shared_plt0_entry); i++)
10558     bfd_put_32 (output_bfd, mips_vxworks_shared_plt0_entry[i],
10559                 htab->splt->contents + i * 4);
10560 }
10561
10562 /* Finish up the dynamic sections.  */
10563
10564 bfd_boolean
10565 _bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd,
10566                                        struct bfd_link_info *info)
10567 {
10568   bfd *dynobj;
10569   asection *sdyn;
10570   asection *sgot;
10571   struct mips_got_info *gg, *g;
10572   struct mips_elf_link_hash_table *htab;
10573
10574   htab = mips_elf_hash_table (info);
10575   BFD_ASSERT (htab != NULL);
10576
10577   dynobj = elf_hash_table (info)->dynobj;
10578
10579   sdyn = bfd_get_linker_section (dynobj, ".dynamic");
10580
10581   sgot = htab->sgot;
10582   gg = htab->got_info;
10583
10584   if (elf_hash_table (info)->dynamic_sections_created)
10585     {
10586       bfd_byte *b;
10587       int dyn_to_skip = 0, dyn_skipped = 0;
10588
10589       BFD_ASSERT (sdyn != NULL);
10590       BFD_ASSERT (gg != NULL);
10591
10592       g = mips_elf_got_for_ibfd (gg, output_bfd);
10593       BFD_ASSERT (g != NULL);
10594
10595       for (b = sdyn->contents;
10596            b < sdyn->contents + sdyn->size;
10597            b += MIPS_ELF_DYN_SIZE (dynobj))
10598         {
10599           Elf_Internal_Dyn dyn;
10600           const char *name;
10601           size_t elemsize;
10602           asection *s;
10603           bfd_boolean swap_out_p;
10604
10605           /* Read in the current dynamic entry.  */
10606           (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
10607
10608           /* Assume that we're going to modify it and write it out.  */
10609           swap_out_p = TRUE;
10610
10611           switch (dyn.d_tag)
10612             {
10613             case DT_RELENT:
10614               dyn.d_un.d_val = MIPS_ELF_REL_SIZE (dynobj);
10615               break;
10616
10617             case DT_RELAENT:
10618               BFD_ASSERT (htab->is_vxworks);
10619               dyn.d_un.d_val = MIPS_ELF_RELA_SIZE (dynobj);
10620               break;
10621
10622             case DT_STRSZ:
10623               /* Rewrite DT_STRSZ.  */
10624               dyn.d_un.d_val =
10625                 _bfd_elf_strtab_size (elf_hash_table (info)->dynstr);
10626               break;
10627
10628             case DT_PLTGOT:
10629               s = htab->sgot;
10630               dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
10631               break;
10632
10633             case DT_MIPS_PLTGOT:
10634               s = htab->sgotplt;
10635               dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
10636               break;
10637
10638             case DT_MIPS_RLD_VERSION:
10639               dyn.d_un.d_val = 1; /* XXX */
10640               break;
10641
10642             case DT_MIPS_FLAGS:
10643               dyn.d_un.d_val = RHF_NOTPOT; /* XXX */
10644               break;
10645
10646             case DT_MIPS_TIME_STAMP:
10647               {
10648                 time_t t;
10649                 time (&t);
10650                 dyn.d_un.d_val = t;
10651               }
10652               break;
10653
10654             case DT_MIPS_ICHECKSUM:
10655               /* XXX FIXME: */
10656               swap_out_p = FALSE;
10657               break;
10658
10659             case DT_MIPS_IVERSION:
10660               /* XXX FIXME: */
10661               swap_out_p = FALSE;
10662               break;
10663
10664             case DT_MIPS_BASE_ADDRESS:
10665               s = output_bfd->sections;
10666               BFD_ASSERT (s != NULL);
10667               dyn.d_un.d_ptr = s->vma & ~(bfd_vma) 0xffff;
10668               break;
10669
10670             case DT_MIPS_LOCAL_GOTNO:
10671               dyn.d_un.d_val = g->local_gotno;
10672               break;
10673
10674             case DT_MIPS_UNREFEXTNO:
10675               /* The index into the dynamic symbol table which is the
10676                  entry of the first external symbol that is not
10677                  referenced within the same object.  */
10678               dyn.d_un.d_val = bfd_count_sections (output_bfd) + 1;
10679               break;
10680
10681             case DT_MIPS_GOTSYM:
10682               if (htab->global_gotsym)
10683                 {
10684                   dyn.d_un.d_val = htab->global_gotsym->dynindx;
10685                   break;
10686                 }
10687               /* In case if we don't have global got symbols we default
10688                  to setting DT_MIPS_GOTSYM to the same value as
10689                  DT_MIPS_SYMTABNO, so we just fall through.  */
10690
10691             case DT_MIPS_SYMTABNO:
10692               name = ".dynsym";
10693               elemsize = MIPS_ELF_SYM_SIZE (output_bfd);
10694               s = bfd_get_section_by_name (output_bfd, name);
10695               BFD_ASSERT (s != NULL);
10696
10697               dyn.d_un.d_val = s->size / elemsize;
10698               break;
10699
10700             case DT_MIPS_HIPAGENO:
10701               dyn.d_un.d_val = g->local_gotno - htab->reserved_gotno;
10702               break;
10703
10704             case DT_MIPS_RLD_MAP:
10705               {
10706                 struct elf_link_hash_entry *h;
10707                 h = mips_elf_hash_table (info)->rld_symbol;
10708                 if (!h)
10709                   {
10710                     dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
10711                     swap_out_p = FALSE;
10712                     break;
10713                   }
10714                 s = h->root.u.def.section;
10715                 dyn.d_un.d_ptr = (s->output_section->vma + s->output_offset
10716                                   + h->root.u.def.value);
10717               }
10718               break;
10719
10720             case DT_MIPS_OPTIONS:
10721               s = (bfd_get_section_by_name
10722                    (output_bfd, MIPS_ELF_OPTIONS_SECTION_NAME (output_bfd)));
10723               dyn.d_un.d_ptr = s->vma;
10724               break;
10725
10726             case DT_RELASZ:
10727               BFD_ASSERT (htab->is_vxworks);
10728               /* The count does not include the JUMP_SLOT relocations.  */
10729               if (htab->srelplt)
10730                 dyn.d_un.d_val -= htab->srelplt->size;
10731               break;
10732
10733             case DT_PLTREL:
10734               BFD_ASSERT (htab->use_plts_and_copy_relocs);
10735               if (htab->is_vxworks)
10736                 dyn.d_un.d_val = DT_RELA;
10737               else
10738                 dyn.d_un.d_val = DT_REL;
10739               break;
10740
10741             case DT_PLTRELSZ:
10742               BFD_ASSERT (htab->use_plts_and_copy_relocs);
10743               dyn.d_un.d_val = htab->srelplt->size;
10744               break;
10745
10746             case DT_JMPREL:
10747               BFD_ASSERT (htab->use_plts_and_copy_relocs);
10748               dyn.d_un.d_ptr = (htab->srelplt->output_section->vma
10749                                 + htab->srelplt->output_offset);
10750               break;
10751
10752             case DT_TEXTREL:
10753               /* If we didn't need any text relocations after all, delete
10754                  the dynamic tag.  */
10755               if (!(info->flags & DF_TEXTREL))
10756                 {
10757                   dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
10758                   swap_out_p = FALSE;
10759                 }
10760               break;
10761
10762             case DT_FLAGS:
10763               /* If we didn't need any text relocations after all, clear
10764                  DF_TEXTREL from DT_FLAGS.  */
10765               if (!(info->flags & DF_TEXTREL))
10766                 dyn.d_un.d_val &= ~DF_TEXTREL;
10767               else
10768                 swap_out_p = FALSE;
10769               break;
10770
10771             default:
10772               swap_out_p = FALSE;
10773               if (htab->is_vxworks
10774                   && elf_vxworks_finish_dynamic_entry (output_bfd, &dyn))
10775                 swap_out_p = TRUE;
10776               break;
10777             }
10778
10779           if (swap_out_p || dyn_skipped)
10780             (*get_elf_backend_data (dynobj)->s->swap_dyn_out)
10781               (dynobj, &dyn, b - dyn_skipped);
10782
10783           if (dyn_to_skip)
10784             {
10785               dyn_skipped += dyn_to_skip;
10786               dyn_to_skip = 0;
10787             }
10788         }
10789
10790       /* Wipe out any trailing entries if we shifted down a dynamic tag.  */
10791       if (dyn_skipped > 0)
10792         memset (b - dyn_skipped, 0, dyn_skipped);
10793     }
10794
10795   if (sgot != NULL && sgot->size > 0
10796       && !bfd_is_abs_section (sgot->output_section))
10797     {
10798       if (htab->is_vxworks)
10799         {
10800           /* The first entry of the global offset table points to the
10801              ".dynamic" section.  The second is initialized by the
10802              loader and contains the shared library identifier.
10803              The third is also initialized by the loader and points
10804              to the lazy resolution stub.  */
10805           MIPS_ELF_PUT_WORD (output_bfd,
10806                              sdyn->output_offset + sdyn->output_section->vma,
10807                              sgot->contents);
10808           MIPS_ELF_PUT_WORD (output_bfd, 0,
10809                              sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd));
10810           MIPS_ELF_PUT_WORD (output_bfd, 0,
10811                              sgot->contents
10812                              + 2 * MIPS_ELF_GOT_SIZE (output_bfd));
10813         }
10814       else
10815         {
10816           /* The first entry of the global offset table will be filled at
10817              runtime. The second entry will be used by some runtime loaders.
10818              This isn't the case of IRIX rld.  */
10819           MIPS_ELF_PUT_WORD (output_bfd, (bfd_vma) 0, sgot->contents);
10820           MIPS_ELF_PUT_WORD (output_bfd, MIPS_ELF_GNU_GOT1_MASK (output_bfd),
10821                              sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd));
10822         }
10823
10824       elf_section_data (sgot->output_section)->this_hdr.sh_entsize
10825          = MIPS_ELF_GOT_SIZE (output_bfd);
10826     }
10827
10828   /* Generate dynamic relocations for the non-primary gots.  */
10829   if (gg != NULL && gg->next)
10830     {
10831       Elf_Internal_Rela rel[3];
10832       bfd_vma addend = 0;
10833
10834       memset (rel, 0, sizeof (rel));
10835       rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_REL32);
10836
10837       for (g = gg->next; g->next != gg; g = g->next)
10838         {
10839           bfd_vma got_index = g->next->local_gotno + g->next->global_gotno
10840             + g->next->tls_gotno;
10841
10842           MIPS_ELF_PUT_WORD (output_bfd, 0, sgot->contents
10843                              + got_index++ * MIPS_ELF_GOT_SIZE (output_bfd));
10844           MIPS_ELF_PUT_WORD (output_bfd, MIPS_ELF_GNU_GOT1_MASK (output_bfd),
10845                              sgot->contents
10846                              + got_index++ * MIPS_ELF_GOT_SIZE (output_bfd));
10847
10848           if (! info->shared)
10849             continue;
10850
10851           while (got_index < g->assigned_gotno)
10852             {
10853               rel[0].r_offset = rel[1].r_offset = rel[2].r_offset
10854                 = got_index++ * MIPS_ELF_GOT_SIZE (output_bfd);
10855               if (!(mips_elf_create_dynamic_relocation
10856                     (output_bfd, info, rel, NULL,
10857                      bfd_abs_section_ptr,
10858                      0, &addend, sgot)))
10859                 return FALSE;
10860               BFD_ASSERT (addend == 0);
10861             }
10862         }
10863     }
10864
10865   /* The generation of dynamic relocations for the non-primary gots
10866      adds more dynamic relocations.  We cannot count them until
10867      here.  */
10868
10869   if (elf_hash_table (info)->dynamic_sections_created)
10870     {
10871       bfd_byte *b;
10872       bfd_boolean swap_out_p;
10873
10874       BFD_ASSERT (sdyn != NULL);
10875
10876       for (b = sdyn->contents;
10877            b < sdyn->contents + sdyn->size;
10878            b += MIPS_ELF_DYN_SIZE (dynobj))
10879         {
10880           Elf_Internal_Dyn dyn;
10881           asection *s;
10882
10883           /* Read in the current dynamic entry.  */
10884           (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
10885
10886           /* Assume that we're going to modify it and write it out.  */
10887           swap_out_p = TRUE;
10888
10889           switch (dyn.d_tag)
10890             {
10891             case DT_RELSZ:
10892               /* Reduce DT_RELSZ to account for any relocations we
10893                  decided not to make.  This is for the n64 irix rld,
10894                  which doesn't seem to apply any relocations if there
10895                  are trailing null entries.  */
10896               s = mips_elf_rel_dyn_section (info, FALSE);
10897               dyn.d_un.d_val = (s->reloc_count
10898                                 * (ABI_64_P (output_bfd)
10899                                    ? sizeof (Elf64_Mips_External_Rel)
10900                                    : sizeof (Elf32_External_Rel)));
10901               /* Adjust the section size too.  Tools like the prelinker
10902                  can reasonably expect the values to the same.  */
10903               elf_section_data (s->output_section)->this_hdr.sh_size
10904                 = dyn.d_un.d_val;
10905               break;
10906
10907             default:
10908               swap_out_p = FALSE;
10909               break;
10910             }
10911
10912           if (swap_out_p)
10913             (*get_elf_backend_data (dynobj)->s->swap_dyn_out)
10914               (dynobj, &dyn, b);
10915         }
10916     }
10917
10918   {
10919     asection *s;
10920     Elf32_compact_rel cpt;
10921
10922     if (SGI_COMPAT (output_bfd))
10923       {
10924         /* Write .compact_rel section out.  */
10925         s = bfd_get_linker_section (dynobj, ".compact_rel");
10926         if (s != NULL)
10927           {
10928             cpt.id1 = 1;
10929             cpt.num = s->reloc_count;
10930             cpt.id2 = 2;
10931             cpt.offset = (s->output_section->filepos
10932                           + sizeof (Elf32_External_compact_rel));
10933             cpt.reserved0 = 0;
10934             cpt.reserved1 = 0;
10935             bfd_elf32_swap_compact_rel_out (output_bfd, &cpt,
10936                                             ((Elf32_External_compact_rel *)
10937                                              s->contents));
10938
10939             /* Clean up a dummy stub function entry in .text.  */
10940             if (htab->sstubs != NULL)
10941               {
10942                 file_ptr dummy_offset;
10943
10944                 BFD_ASSERT (htab->sstubs->size >= htab->function_stub_size);
10945                 dummy_offset = htab->sstubs->size - htab->function_stub_size;
10946                 memset (htab->sstubs->contents + dummy_offset, 0,
10947                         htab->function_stub_size);
10948               }
10949           }
10950       }
10951
10952     /* The psABI says that the dynamic relocations must be sorted in
10953        increasing order of r_symndx.  The VxWorks EABI doesn't require
10954        this, and because the code below handles REL rather than RELA
10955        relocations, using it for VxWorks would be outright harmful.  */
10956     if (!htab->is_vxworks)
10957       {
10958         s = mips_elf_rel_dyn_section (info, FALSE);
10959         if (s != NULL
10960             && s->size > (bfd_vma)2 * MIPS_ELF_REL_SIZE (output_bfd))
10961           {
10962             reldyn_sorting_bfd = output_bfd;
10963
10964             if (ABI_64_P (output_bfd))
10965               qsort ((Elf64_External_Rel *) s->contents + 1,
10966                      s->reloc_count - 1, sizeof (Elf64_Mips_External_Rel),
10967                      sort_dynamic_relocs_64);
10968             else
10969               qsort ((Elf32_External_Rel *) s->contents + 1,
10970                      s->reloc_count - 1, sizeof (Elf32_External_Rel),
10971                      sort_dynamic_relocs);
10972           }
10973       }
10974   }
10975
10976   if (htab->splt && htab->splt->size > 0)
10977     {
10978       if (htab->is_vxworks)
10979         {
10980           if (info->shared)
10981             mips_vxworks_finish_shared_plt (output_bfd, info);
10982           else
10983             mips_vxworks_finish_exec_plt (output_bfd, info);
10984         }
10985       else
10986         {
10987           BFD_ASSERT (!info->shared);
10988           mips_finish_exec_plt (output_bfd, info);
10989         }
10990     }
10991   return TRUE;
10992 }
10993
10994
10995 /* Set ABFD's EF_MIPS_ARCH and EF_MIPS_MACH flags.  */
10996
10997 static void
10998 mips_set_isa_flags (bfd *abfd)
10999 {
11000   flagword val;
11001
11002   switch (bfd_get_mach (abfd))
11003     {
11004     default:
11005     case bfd_mach_mips3000:
11006       val = E_MIPS_ARCH_1;
11007       break;
11008
11009     case bfd_mach_mips3900:
11010       val = E_MIPS_ARCH_1 | E_MIPS_MACH_3900;
11011       break;
11012
11013     case bfd_mach_mips6000:
11014       val = E_MIPS_ARCH_2;
11015       break;
11016
11017     case bfd_mach_mips4000:
11018     case bfd_mach_mips4300:
11019     case bfd_mach_mips4400:
11020     case bfd_mach_mips4600:
11021       val = E_MIPS_ARCH_3;
11022       break;
11023
11024     case bfd_mach_mips4010:
11025       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4010;
11026       break;
11027
11028     case bfd_mach_mips4100:
11029       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4100;
11030       break;
11031
11032     case bfd_mach_mips4111:
11033       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4111;
11034       break;
11035
11036     case bfd_mach_mips4120:
11037       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4120;
11038       break;
11039
11040     case bfd_mach_mips4650:
11041       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4650;
11042       break;
11043
11044     case bfd_mach_mips5400:
11045       val = E_MIPS_ARCH_4 | E_MIPS_MACH_5400;
11046       break;
11047
11048     case bfd_mach_mips5500:
11049       val = E_MIPS_ARCH_4 | E_MIPS_MACH_5500;
11050       break;
11051
11052     case bfd_mach_mips5900:
11053       val = E_MIPS_ARCH_3 | E_MIPS_MACH_5900;
11054       break;
11055
11056     case bfd_mach_mips9000:
11057       val = E_MIPS_ARCH_4 | E_MIPS_MACH_9000;
11058       break;
11059
11060     case bfd_mach_mips5000:
11061     case bfd_mach_mips7000:
11062     case bfd_mach_mips8000:
11063     case bfd_mach_mips10000:
11064     case bfd_mach_mips12000:
11065     case bfd_mach_mips14000:
11066     case bfd_mach_mips16000:
11067       val = E_MIPS_ARCH_4;
11068       break;
11069
11070     case bfd_mach_mips5:
11071       val = E_MIPS_ARCH_5;
11072       break;
11073
11074     case bfd_mach_mips_loongson_2e:
11075       val = E_MIPS_ARCH_3 | E_MIPS_MACH_LS2E;
11076       break;
11077
11078     case bfd_mach_mips_loongson_2f:
11079       val = E_MIPS_ARCH_3 | E_MIPS_MACH_LS2F;
11080       break;
11081
11082     case bfd_mach_mips_sb1:
11083       val = E_MIPS_ARCH_64 | E_MIPS_MACH_SB1;
11084       break;
11085
11086     case bfd_mach_mips_loongson_3a:
11087       val = E_MIPS_ARCH_64 | E_MIPS_MACH_LS3A;
11088       break;
11089
11090     case bfd_mach_mips_octeon:
11091     case bfd_mach_mips_octeonp:
11092       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON;
11093       break;
11094
11095     case bfd_mach_mips_xlr:
11096       val = E_MIPS_ARCH_64 | E_MIPS_MACH_XLR;
11097       break;
11098
11099     case bfd_mach_mips_octeon2:
11100       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON2;
11101       break;
11102
11103     case bfd_mach_mipsisa32:
11104       val = E_MIPS_ARCH_32;
11105       break;
11106
11107     case bfd_mach_mipsisa64:
11108       val = E_MIPS_ARCH_64;
11109       break;
11110
11111     case bfd_mach_mipsisa32r2:
11112       val = E_MIPS_ARCH_32R2;
11113       break;
11114
11115     case bfd_mach_mipsisa64r2:
11116       val = E_MIPS_ARCH_64R2;
11117       break;
11118     }
11119   elf_elfheader (abfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH);
11120   elf_elfheader (abfd)->e_flags |= val;
11121
11122 }
11123
11124
11125 /* The final processing done just before writing out a MIPS ELF object
11126    file.  This gets the MIPS architecture right based on the machine
11127    number.  This is used by both the 32-bit and the 64-bit ABI.  */
11128
11129 void
11130 _bfd_mips_elf_final_write_processing (bfd *abfd,
11131                                       bfd_boolean linker ATTRIBUTE_UNUSED)
11132 {
11133   unsigned int i;
11134   Elf_Internal_Shdr **hdrpp;
11135   const char *name;
11136   asection *sec;
11137
11138   /* Keep the existing EF_MIPS_MACH and EF_MIPS_ARCH flags if the former
11139      is nonzero.  This is for compatibility with old objects, which used
11140      a combination of a 32-bit EF_MIPS_ARCH and a 64-bit EF_MIPS_MACH.  */
11141   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == 0)
11142     mips_set_isa_flags (abfd);
11143
11144   /* Set the sh_info field for .gptab sections and other appropriate
11145      info for each special section.  */
11146   for (i = 1, hdrpp = elf_elfsections (abfd) + 1;
11147        i < elf_numsections (abfd);
11148        i++, hdrpp++)
11149     {
11150       switch ((*hdrpp)->sh_type)
11151         {
11152         case SHT_MIPS_MSYM:
11153         case SHT_MIPS_LIBLIST:
11154           sec = bfd_get_section_by_name (abfd, ".dynstr");
11155           if (sec != NULL)
11156             (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
11157           break;
11158
11159         case SHT_MIPS_GPTAB:
11160           BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
11161           name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
11162           BFD_ASSERT (name != NULL
11163                       && CONST_STRNEQ (name, ".gptab."));
11164           sec = bfd_get_section_by_name (abfd, name + sizeof ".gptab" - 1);
11165           BFD_ASSERT (sec != NULL);
11166           (*hdrpp)->sh_info = elf_section_data (sec)->this_idx;
11167           break;
11168
11169         case SHT_MIPS_CONTENT:
11170           BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
11171           name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
11172           BFD_ASSERT (name != NULL
11173                       && CONST_STRNEQ (name, ".MIPS.content"));
11174           sec = bfd_get_section_by_name (abfd,
11175                                          name + sizeof ".MIPS.content" - 1);
11176           BFD_ASSERT (sec != NULL);
11177           (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
11178           break;
11179
11180         case SHT_MIPS_SYMBOL_LIB:
11181           sec = bfd_get_section_by_name (abfd, ".dynsym");
11182           if (sec != NULL)
11183             (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
11184           sec = bfd_get_section_by_name (abfd, ".liblist");
11185           if (sec != NULL)
11186             (*hdrpp)->sh_info = elf_section_data (sec)->this_idx;
11187           break;
11188
11189         case SHT_MIPS_EVENTS:
11190           BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
11191           name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
11192           BFD_ASSERT (name != NULL);
11193           if (CONST_STRNEQ (name, ".MIPS.events"))
11194             sec = bfd_get_section_by_name (abfd,
11195                                            name + sizeof ".MIPS.events" - 1);
11196           else
11197             {
11198               BFD_ASSERT (CONST_STRNEQ (name, ".MIPS.post_rel"));
11199               sec = bfd_get_section_by_name (abfd,
11200                                              (name
11201                                               + sizeof ".MIPS.post_rel" - 1));
11202             }
11203           BFD_ASSERT (sec != NULL);
11204           (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
11205           break;
11206
11207         }
11208     }
11209 }
11210 \f
11211 /* When creating an IRIX5 executable, we need REGINFO and RTPROC
11212    segments.  */
11213
11214 int
11215 _bfd_mips_elf_additional_program_headers (bfd *abfd,
11216                                           struct bfd_link_info *info ATTRIBUTE_UNUSED)
11217 {
11218   asection *s;
11219   int ret = 0;
11220
11221   /* See if we need a PT_MIPS_REGINFO segment.  */
11222   s = bfd_get_section_by_name (abfd, ".reginfo");
11223   if (s && (s->flags & SEC_LOAD))
11224     ++ret;
11225
11226   /* See if we need a PT_MIPS_OPTIONS segment.  */
11227   if (IRIX_COMPAT (abfd) == ict_irix6
11228       && bfd_get_section_by_name (abfd,
11229                                   MIPS_ELF_OPTIONS_SECTION_NAME (abfd)))
11230     ++ret;
11231
11232   /* See if we need a PT_MIPS_RTPROC segment.  */
11233   if (IRIX_COMPAT (abfd) == ict_irix5
11234       && bfd_get_section_by_name (abfd, ".dynamic")
11235       && bfd_get_section_by_name (abfd, ".mdebug"))
11236     ++ret;
11237
11238   /* Allocate a PT_NULL header in dynamic objects.  See
11239      _bfd_mips_elf_modify_segment_map for details.  */
11240   if (!SGI_COMPAT (abfd)
11241       && bfd_get_section_by_name (abfd, ".dynamic"))
11242     ++ret;
11243
11244   return ret;
11245 }
11246
11247 /* Modify the segment map for an IRIX5 executable.  */
11248
11249 bfd_boolean
11250 _bfd_mips_elf_modify_segment_map (bfd *abfd,
11251                                   struct bfd_link_info *info)
11252 {
11253   asection *s;
11254   struct elf_segment_map *m, **pm;
11255   bfd_size_type amt;
11256
11257   /* If there is a .reginfo section, we need a PT_MIPS_REGINFO
11258      segment.  */
11259   s = bfd_get_section_by_name (abfd, ".reginfo");
11260   if (s != NULL && (s->flags & SEC_LOAD) != 0)
11261     {
11262       for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
11263         if (m->p_type == PT_MIPS_REGINFO)
11264           break;
11265       if (m == NULL)
11266         {
11267           amt = sizeof *m;
11268           m = bfd_zalloc (abfd, amt);
11269           if (m == NULL)
11270             return FALSE;
11271
11272           m->p_type = PT_MIPS_REGINFO;
11273           m->count = 1;
11274           m->sections[0] = s;
11275
11276           /* We want to put it after the PHDR and INTERP segments.  */
11277           pm = &elf_tdata (abfd)->segment_map;
11278           while (*pm != NULL
11279                  && ((*pm)->p_type == PT_PHDR
11280                      || (*pm)->p_type == PT_INTERP))
11281             pm = &(*pm)->next;
11282
11283           m->next = *pm;
11284           *pm = m;
11285         }
11286     }
11287
11288   /* For IRIX 6, we don't have .mdebug sections, nor does anything but
11289      .dynamic end up in PT_DYNAMIC.  However, we do have to insert a
11290      PT_MIPS_OPTIONS segment immediately following the program header
11291      table.  */
11292   if (NEWABI_P (abfd)
11293       /* On non-IRIX6 new abi, we'll have already created a segment
11294          for this section, so don't create another.  I'm not sure this
11295          is not also the case for IRIX 6, but I can't test it right
11296          now.  */
11297       && IRIX_COMPAT (abfd) == ict_irix6)
11298     {
11299       for (s = abfd->sections; s; s = s->next)
11300         if (elf_section_data (s)->this_hdr.sh_type == SHT_MIPS_OPTIONS)
11301           break;
11302
11303       if (s)
11304         {
11305           struct elf_segment_map *options_segment;
11306
11307           pm = &elf_tdata (abfd)->segment_map;
11308           while (*pm != NULL
11309                  && ((*pm)->p_type == PT_PHDR
11310                      || (*pm)->p_type == PT_INTERP))
11311             pm = &(*pm)->next;
11312
11313           if (*pm == NULL || (*pm)->p_type != PT_MIPS_OPTIONS)
11314             {
11315               amt = sizeof (struct elf_segment_map);
11316               options_segment = bfd_zalloc (abfd, amt);
11317               options_segment->next = *pm;
11318               options_segment->p_type = PT_MIPS_OPTIONS;
11319               options_segment->p_flags = PF_R;
11320               options_segment->p_flags_valid = TRUE;
11321               options_segment->count = 1;
11322               options_segment->sections[0] = s;
11323               *pm = options_segment;
11324             }
11325         }
11326     }
11327   else
11328     {
11329       if (IRIX_COMPAT (abfd) == ict_irix5)
11330         {
11331           /* If there are .dynamic and .mdebug sections, we make a room
11332              for the RTPROC header.  FIXME: Rewrite without section names.  */
11333           if (bfd_get_section_by_name (abfd, ".interp") == NULL
11334               && bfd_get_section_by_name (abfd, ".dynamic") != NULL
11335               && bfd_get_section_by_name (abfd, ".mdebug") != NULL)
11336             {
11337               for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
11338                 if (m->p_type == PT_MIPS_RTPROC)
11339                   break;
11340               if (m == NULL)
11341                 {
11342                   amt = sizeof *m;
11343                   m = bfd_zalloc (abfd, amt);
11344                   if (m == NULL)
11345                     return FALSE;
11346
11347                   m->p_type = PT_MIPS_RTPROC;
11348
11349                   s = bfd_get_section_by_name (abfd, ".rtproc");
11350                   if (s == NULL)
11351                     {
11352                       m->count = 0;
11353                       m->p_flags = 0;
11354                       m->p_flags_valid = 1;
11355                     }
11356                   else
11357                     {
11358                       m->count = 1;
11359                       m->sections[0] = s;
11360                     }
11361
11362                   /* We want to put it after the DYNAMIC segment.  */
11363                   pm = &elf_tdata (abfd)->segment_map;
11364                   while (*pm != NULL && (*pm)->p_type != PT_DYNAMIC)
11365                     pm = &(*pm)->next;
11366                   if (*pm != NULL)
11367                     pm = &(*pm)->next;
11368
11369                   m->next = *pm;
11370                   *pm = m;
11371                 }
11372             }
11373         }
11374       /* On IRIX5, the PT_DYNAMIC segment includes the .dynamic,
11375          .dynstr, .dynsym, and .hash sections, and everything in
11376          between.  */
11377       for (pm = &elf_tdata (abfd)->segment_map; *pm != NULL;
11378            pm = &(*pm)->next)
11379         if ((*pm)->p_type == PT_DYNAMIC)
11380           break;
11381       m = *pm;
11382       if (m != NULL && IRIX_COMPAT (abfd) == ict_none)
11383         {
11384           /* For a normal mips executable the permissions for the PT_DYNAMIC
11385              segment are read, write and execute. We do that here since
11386              the code in elf.c sets only the read permission. This matters
11387              sometimes for the dynamic linker.  */
11388           if (bfd_get_section_by_name (abfd, ".dynamic") != NULL)
11389             {
11390               m->p_flags = PF_R | PF_W | PF_X;
11391               m->p_flags_valid = 1;
11392             }
11393         }
11394       /* GNU/Linux binaries do not need the extended PT_DYNAMIC section.
11395          glibc's dynamic linker has traditionally derived the number of
11396          tags from the p_filesz field, and sometimes allocates stack
11397          arrays of that size.  An overly-big PT_DYNAMIC segment can
11398          be actively harmful in such cases.  Making PT_DYNAMIC contain
11399          other sections can also make life hard for the prelinker,
11400          which might move one of the other sections to a different
11401          PT_LOAD segment.  */
11402       if (SGI_COMPAT (abfd)
11403           && m != NULL
11404           && m->count == 1
11405           && strcmp (m->sections[0]->name, ".dynamic") == 0)
11406         {
11407           static const char *sec_names[] =
11408           {
11409             ".dynamic", ".dynstr", ".dynsym", ".hash"
11410           };
11411           bfd_vma low, high;
11412           unsigned int i, c;
11413           struct elf_segment_map *n;
11414
11415           low = ~(bfd_vma) 0;
11416           high = 0;
11417           for (i = 0; i < sizeof sec_names / sizeof sec_names[0]; i++)
11418             {
11419               s = bfd_get_section_by_name (abfd, sec_names[i]);
11420               if (s != NULL && (s->flags & SEC_LOAD) != 0)
11421                 {
11422                   bfd_size_type sz;
11423
11424                   if (low > s->vma)
11425                     low = s->vma;
11426                   sz = s->size;
11427                   if (high < s->vma + sz)
11428                     high = s->vma + sz;
11429                 }
11430             }
11431
11432           c = 0;
11433           for (s = abfd->sections; s != NULL; s = s->next)
11434             if ((s->flags & SEC_LOAD) != 0
11435                 && s->vma >= low
11436                 && s->vma + s->size <= high)
11437               ++c;
11438
11439           amt = sizeof *n + (bfd_size_type) (c - 1) * sizeof (asection *);
11440           n = bfd_zalloc (abfd, amt);
11441           if (n == NULL)
11442             return FALSE;
11443           *n = *m;
11444           n->count = c;
11445
11446           i = 0;
11447           for (s = abfd->sections; s != NULL; s = s->next)
11448             {
11449               if ((s->flags & SEC_LOAD) != 0
11450                   && s->vma >= low
11451                   && s->vma + s->size <= high)
11452                 {
11453                   n->sections[i] = s;
11454                   ++i;
11455                 }
11456             }
11457
11458           *pm = n;
11459         }
11460     }
11461
11462   /* Allocate a spare program header in dynamic objects so that tools
11463      like the prelinker can add an extra PT_LOAD entry.
11464
11465      If the prelinker needs to make room for a new PT_LOAD entry, its
11466      standard procedure is to move the first (read-only) sections into
11467      the new (writable) segment.  However, the MIPS ABI requires
11468      .dynamic to be in a read-only segment, and the section will often
11469      start within sizeof (ElfNN_Phdr) bytes of the last program header.
11470
11471      Although the prelinker could in principle move .dynamic to a
11472      writable segment, it seems better to allocate a spare program
11473      header instead, and avoid the need to move any sections.
11474      There is a long tradition of allocating spare dynamic tags,
11475      so allocating a spare program header seems like a natural
11476      extension.
11477
11478      If INFO is NULL, we may be copying an already prelinked binary
11479      with objcopy or strip, so do not add this header.  */
11480   if (info != NULL
11481       && !SGI_COMPAT (abfd)
11482       && bfd_get_section_by_name (abfd, ".dynamic"))
11483     {
11484       for (pm = &elf_tdata (abfd)->segment_map; *pm != NULL; pm = &(*pm)->next)
11485         if ((*pm)->p_type == PT_NULL)
11486           break;
11487       if (*pm == NULL)
11488         {
11489           m = bfd_zalloc (abfd, sizeof (*m));
11490           if (m == NULL)
11491             return FALSE;
11492
11493           m->p_type = PT_NULL;
11494           *pm = m;
11495         }
11496     }
11497
11498   return TRUE;
11499 }
11500 \f
11501 /* Return the section that should be marked against GC for a given
11502    relocation.  */
11503
11504 asection *
11505 _bfd_mips_elf_gc_mark_hook (asection *sec,
11506                             struct bfd_link_info *info,
11507                             Elf_Internal_Rela *rel,
11508                             struct elf_link_hash_entry *h,
11509                             Elf_Internal_Sym *sym)
11510 {
11511   /* ??? Do mips16 stub sections need to be handled special?  */
11512
11513   if (h != NULL)
11514     switch (ELF_R_TYPE (sec->owner, rel->r_info))
11515       {
11516       case R_MIPS_GNU_VTINHERIT:
11517       case R_MIPS_GNU_VTENTRY:
11518         return NULL;
11519       }
11520
11521   return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
11522 }
11523
11524 /* Update the got entry reference counts for the section being removed.  */
11525
11526 bfd_boolean
11527 _bfd_mips_elf_gc_sweep_hook (bfd *abfd ATTRIBUTE_UNUSED,
11528                              struct bfd_link_info *info ATTRIBUTE_UNUSED,
11529                              asection *sec ATTRIBUTE_UNUSED,
11530                              const Elf_Internal_Rela *relocs ATTRIBUTE_UNUSED)
11531 {
11532 #if 0
11533   Elf_Internal_Shdr *symtab_hdr;
11534   struct elf_link_hash_entry **sym_hashes;
11535   bfd_signed_vma *local_got_refcounts;
11536   const Elf_Internal_Rela *rel, *relend;
11537   unsigned long r_symndx;
11538   struct elf_link_hash_entry *h;
11539
11540   if (info->relocatable)
11541     return TRUE;
11542
11543   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
11544   sym_hashes = elf_sym_hashes (abfd);
11545   local_got_refcounts = elf_local_got_refcounts (abfd);
11546
11547   relend = relocs + sec->reloc_count;
11548   for (rel = relocs; rel < relend; rel++)
11549     switch (ELF_R_TYPE (abfd, rel->r_info))
11550       {
11551       case R_MIPS16_GOT16:
11552       case R_MIPS16_CALL16:
11553       case R_MIPS_GOT16:
11554       case R_MIPS_CALL16:
11555       case R_MIPS_CALL_HI16:
11556       case R_MIPS_CALL_LO16:
11557       case R_MIPS_GOT_HI16:
11558       case R_MIPS_GOT_LO16:
11559       case R_MIPS_GOT_DISP:
11560       case R_MIPS_GOT_PAGE:
11561       case R_MIPS_GOT_OFST:
11562       case R_MICROMIPS_GOT16:
11563       case R_MICROMIPS_CALL16:
11564       case R_MICROMIPS_CALL_HI16:
11565       case R_MICROMIPS_CALL_LO16:
11566       case R_MICROMIPS_GOT_HI16:
11567       case R_MICROMIPS_GOT_LO16:
11568       case R_MICROMIPS_GOT_DISP:
11569       case R_MICROMIPS_GOT_PAGE:
11570       case R_MICROMIPS_GOT_OFST:
11571         /* ??? It would seem that the existing MIPS code does no sort
11572            of reference counting or whatnot on its GOT and PLT entries,
11573            so it is not possible to garbage collect them at this time.  */
11574         break;
11575
11576       default:
11577         break;
11578       }
11579 #endif
11580
11581   return TRUE;
11582 }
11583 \f
11584 /* Copy data from a MIPS ELF indirect symbol to its direct symbol,
11585    hiding the old indirect symbol.  Process additional relocation
11586    information.  Also called for weakdefs, in which case we just let
11587    _bfd_elf_link_hash_copy_indirect copy the flags for us.  */
11588
11589 void
11590 _bfd_mips_elf_copy_indirect_symbol (struct bfd_link_info *info,
11591                                     struct elf_link_hash_entry *dir,
11592                                     struct elf_link_hash_entry *ind)
11593 {
11594   struct mips_elf_link_hash_entry *dirmips, *indmips;
11595
11596   _bfd_elf_link_hash_copy_indirect (info, dir, ind);
11597
11598   dirmips = (struct mips_elf_link_hash_entry *) dir;
11599   indmips = (struct mips_elf_link_hash_entry *) ind;
11600   /* Any absolute non-dynamic relocations against an indirect or weak
11601      definition will be against the target symbol.  */
11602   if (indmips->has_static_relocs)
11603     dirmips->has_static_relocs = TRUE;
11604
11605   if (ind->root.type != bfd_link_hash_indirect)
11606     return;
11607
11608   dirmips->possibly_dynamic_relocs += indmips->possibly_dynamic_relocs;
11609   if (indmips->readonly_reloc)
11610     dirmips->readonly_reloc = TRUE;
11611   if (indmips->no_fn_stub)
11612     dirmips->no_fn_stub = TRUE;
11613   if (indmips->fn_stub)
11614     {
11615       dirmips->fn_stub = indmips->fn_stub;
11616       indmips->fn_stub = NULL;
11617     }
11618   if (indmips->need_fn_stub)
11619     {
11620       dirmips->need_fn_stub = TRUE;
11621       indmips->need_fn_stub = FALSE;
11622     }
11623   if (indmips->call_stub)
11624     {
11625       dirmips->call_stub = indmips->call_stub;
11626       indmips->call_stub = NULL;
11627     }
11628   if (indmips->call_fp_stub)
11629     {
11630       dirmips->call_fp_stub = indmips->call_fp_stub;
11631       indmips->call_fp_stub = NULL;
11632     }
11633   if (indmips->global_got_area < dirmips->global_got_area)
11634     dirmips->global_got_area = indmips->global_got_area;
11635   if (indmips->global_got_area < GGA_NONE)
11636     indmips->global_got_area = GGA_NONE;
11637   if (indmips->has_nonpic_branches)
11638     dirmips->has_nonpic_branches = TRUE;
11639
11640   if (dirmips->tls_ie_type == 0)
11641     dirmips->tls_ie_type = indmips->tls_ie_type;
11642   if (dirmips->tls_gd_type == 0)
11643     dirmips->tls_gd_type = indmips->tls_gd_type;
11644 }
11645 \f
11646 #define PDR_SIZE 32
11647
11648 bfd_boolean
11649 _bfd_mips_elf_discard_info (bfd *abfd, struct elf_reloc_cookie *cookie,
11650                             struct bfd_link_info *info)
11651 {
11652   asection *o;
11653   bfd_boolean ret = FALSE;
11654   unsigned char *tdata;
11655   size_t i, skip;
11656
11657   o = bfd_get_section_by_name (abfd, ".pdr");
11658   if (! o)
11659     return FALSE;
11660   if (o->size == 0)
11661     return FALSE;
11662   if (o->size % PDR_SIZE != 0)
11663     return FALSE;
11664   if (o->output_section != NULL
11665       && bfd_is_abs_section (o->output_section))
11666     return FALSE;
11667
11668   tdata = bfd_zmalloc (o->size / PDR_SIZE);
11669   if (! tdata)
11670     return FALSE;
11671
11672   cookie->rels = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
11673                                             info->keep_memory);
11674   if (!cookie->rels)
11675     {
11676       free (tdata);
11677       return FALSE;
11678     }
11679
11680   cookie->rel = cookie->rels;
11681   cookie->relend = cookie->rels + o->reloc_count;
11682
11683   for (i = 0, skip = 0; i < o->size / PDR_SIZE; i ++)
11684     {
11685       if (bfd_elf_reloc_symbol_deleted_p (i * PDR_SIZE, cookie))
11686         {
11687           tdata[i] = 1;
11688           skip ++;
11689         }
11690     }
11691
11692   if (skip != 0)
11693     {
11694       mips_elf_section_data (o)->u.tdata = tdata;
11695       o->size -= skip * PDR_SIZE;
11696       ret = TRUE;
11697     }
11698   else
11699     free (tdata);
11700
11701   if (! info->keep_memory)
11702     free (cookie->rels);
11703
11704   return ret;
11705 }
11706
11707 bfd_boolean
11708 _bfd_mips_elf_ignore_discarded_relocs (asection *sec)
11709 {
11710   if (strcmp (sec->name, ".pdr") == 0)
11711     return TRUE;
11712   return FALSE;
11713 }
11714
11715 bfd_boolean
11716 _bfd_mips_elf_write_section (bfd *output_bfd,
11717                              struct bfd_link_info *link_info ATTRIBUTE_UNUSED,
11718                              asection *sec, bfd_byte *contents)
11719 {
11720   bfd_byte *to, *from, *end;
11721   int i;
11722
11723   if (strcmp (sec->name, ".pdr") != 0)
11724     return FALSE;
11725
11726   if (mips_elf_section_data (sec)->u.tdata == NULL)
11727     return FALSE;
11728
11729   to = contents;
11730   end = contents + sec->size;
11731   for (from = contents, i = 0;
11732        from < end;
11733        from += PDR_SIZE, i++)
11734     {
11735       if ((mips_elf_section_data (sec)->u.tdata)[i] == 1)
11736         continue;
11737       if (to != from)
11738         memcpy (to, from, PDR_SIZE);
11739       to += PDR_SIZE;
11740     }
11741   bfd_set_section_contents (output_bfd, sec->output_section, contents,
11742                             sec->output_offset, sec->size);
11743   return TRUE;
11744 }
11745 \f
11746 /* microMIPS code retains local labels for linker relaxation.  Omit them
11747    from output by default for clarity.  */
11748
11749 bfd_boolean
11750 _bfd_mips_elf_is_target_special_symbol (bfd *abfd, asymbol *sym)
11751 {
11752   return _bfd_elf_is_local_label_name (abfd, sym->name);
11753 }
11754
11755 /* MIPS ELF uses a special find_nearest_line routine in order the
11756    handle the ECOFF debugging information.  */
11757
11758 struct mips_elf_find_line
11759 {
11760   struct ecoff_debug_info d;
11761   struct ecoff_find_line i;
11762 };
11763
11764 bfd_boolean
11765 _bfd_mips_elf_find_nearest_line (bfd *abfd, asection *section,
11766                                  asymbol **symbols, bfd_vma offset,
11767                                  const char **filename_ptr,
11768                                  const char **functionname_ptr,
11769                                  unsigned int *line_ptr)
11770 {
11771   asection *msec;
11772
11773   if (_bfd_dwarf1_find_nearest_line (abfd, section, symbols, offset,
11774                                      filename_ptr, functionname_ptr,
11775                                      line_ptr))
11776     return TRUE;
11777
11778   if (_bfd_dwarf2_find_nearest_line (abfd, dwarf_debug_sections,
11779                                      section, symbols, offset,
11780                                      filename_ptr, functionname_ptr,
11781                                      line_ptr, NULL, ABI_64_P (abfd) ? 8 : 0,
11782                                      &elf_tdata (abfd)->dwarf2_find_line_info))
11783     return TRUE;
11784
11785   msec = bfd_get_section_by_name (abfd, ".mdebug");
11786   if (msec != NULL)
11787     {
11788       flagword origflags;
11789       struct mips_elf_find_line *fi;
11790       const struct ecoff_debug_swap * const swap =
11791         get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
11792
11793       /* If we are called during a link, mips_elf_final_link may have
11794          cleared the SEC_HAS_CONTENTS field.  We force it back on here
11795          if appropriate (which it normally will be).  */
11796       origflags = msec->flags;
11797       if (elf_section_data (msec)->this_hdr.sh_type != SHT_NOBITS)
11798         msec->flags |= SEC_HAS_CONTENTS;
11799
11800       fi = elf_tdata (abfd)->find_line_info;
11801       if (fi == NULL)
11802         {
11803           bfd_size_type external_fdr_size;
11804           char *fraw_src;
11805           char *fraw_end;
11806           struct fdr *fdr_ptr;
11807           bfd_size_type amt = sizeof (struct mips_elf_find_line);
11808
11809           fi = bfd_zalloc (abfd, amt);
11810           if (fi == NULL)
11811             {
11812               msec->flags = origflags;
11813               return FALSE;
11814             }
11815
11816           if (! _bfd_mips_elf_read_ecoff_info (abfd, msec, &fi->d))
11817             {
11818               msec->flags = origflags;
11819               return FALSE;
11820             }
11821
11822           /* Swap in the FDR information.  */
11823           amt = fi->d.symbolic_header.ifdMax * sizeof (struct fdr);
11824           fi->d.fdr = bfd_alloc (abfd, amt);
11825           if (fi->d.fdr == NULL)
11826             {
11827               msec->flags = origflags;
11828               return FALSE;
11829             }
11830           external_fdr_size = swap->external_fdr_size;
11831           fdr_ptr = fi->d.fdr;
11832           fraw_src = (char *) fi->d.external_fdr;
11833           fraw_end = (fraw_src
11834                       + fi->d.symbolic_header.ifdMax * external_fdr_size);
11835           for (; fraw_src < fraw_end; fraw_src += external_fdr_size, fdr_ptr++)
11836             (*swap->swap_fdr_in) (abfd, fraw_src, fdr_ptr);
11837
11838           elf_tdata (abfd)->find_line_info = fi;
11839
11840           /* Note that we don't bother to ever free this information.
11841              find_nearest_line is either called all the time, as in
11842              objdump -l, so the information should be saved, or it is
11843              rarely called, as in ld error messages, so the memory
11844              wasted is unimportant.  Still, it would probably be a
11845              good idea for free_cached_info to throw it away.  */
11846         }
11847
11848       if (_bfd_ecoff_locate_line (abfd, section, offset, &fi->d, swap,
11849                                   &fi->i, filename_ptr, functionname_ptr,
11850                                   line_ptr))
11851         {
11852           msec->flags = origflags;
11853           return TRUE;
11854         }
11855
11856       msec->flags = origflags;
11857     }
11858
11859   /* Fall back on the generic ELF find_nearest_line routine.  */
11860
11861   return _bfd_elf_find_nearest_line (abfd, section, symbols, offset,
11862                                      filename_ptr, functionname_ptr,
11863                                      line_ptr);
11864 }
11865
11866 bfd_boolean
11867 _bfd_mips_elf_find_inliner_info (bfd *abfd,
11868                                  const char **filename_ptr,
11869                                  const char **functionname_ptr,
11870                                  unsigned int *line_ptr)
11871 {
11872   bfd_boolean found;
11873   found = _bfd_dwarf2_find_inliner_info (abfd, filename_ptr,
11874                                          functionname_ptr, line_ptr,
11875                                          & elf_tdata (abfd)->dwarf2_find_line_info);
11876   return found;
11877 }
11878
11879 \f
11880 /* When are writing out the .options or .MIPS.options section,
11881    remember the bytes we are writing out, so that we can install the
11882    GP value in the section_processing routine.  */
11883
11884 bfd_boolean
11885 _bfd_mips_elf_set_section_contents (bfd *abfd, sec_ptr section,
11886                                     const void *location,
11887                                     file_ptr offset, bfd_size_type count)
11888 {
11889   if (MIPS_ELF_OPTIONS_SECTION_NAME_P (section->name))
11890     {
11891       bfd_byte *c;
11892
11893       if (elf_section_data (section) == NULL)
11894         {
11895           bfd_size_type amt = sizeof (struct bfd_elf_section_data);
11896           section->used_by_bfd = bfd_zalloc (abfd, amt);
11897           if (elf_section_data (section) == NULL)
11898             return FALSE;
11899         }
11900       c = mips_elf_section_data (section)->u.tdata;
11901       if (c == NULL)
11902         {
11903           c = bfd_zalloc (abfd, section->size);
11904           if (c == NULL)
11905             return FALSE;
11906           mips_elf_section_data (section)->u.tdata = c;
11907         }
11908
11909       memcpy (c + offset, location, count);
11910     }
11911
11912   return _bfd_elf_set_section_contents (abfd, section, location, offset,
11913                                         count);
11914 }
11915
11916 /* This is almost identical to bfd_generic_get_... except that some
11917    MIPS relocations need to be handled specially.  Sigh.  */
11918
11919 bfd_byte *
11920 _bfd_elf_mips_get_relocated_section_contents
11921   (bfd *abfd,
11922    struct bfd_link_info *link_info,
11923    struct bfd_link_order *link_order,
11924    bfd_byte *data,
11925    bfd_boolean relocatable,
11926    asymbol **symbols)
11927 {
11928   /* Get enough memory to hold the stuff */
11929   bfd *input_bfd = link_order->u.indirect.section->owner;
11930   asection *input_section = link_order->u.indirect.section;
11931   bfd_size_type sz;
11932
11933   long reloc_size = bfd_get_reloc_upper_bound (input_bfd, input_section);
11934   arelent **reloc_vector = NULL;
11935   long reloc_count;
11936
11937   if (reloc_size < 0)
11938     goto error_return;
11939
11940   reloc_vector = bfd_malloc (reloc_size);
11941   if (reloc_vector == NULL && reloc_size != 0)
11942     goto error_return;
11943
11944   /* read in the section */
11945   sz = input_section->rawsize ? input_section->rawsize : input_section->size;
11946   if (!bfd_get_section_contents (input_bfd, input_section, data, 0, sz))
11947     goto error_return;
11948
11949   reloc_count = bfd_canonicalize_reloc (input_bfd,
11950                                         input_section,
11951                                         reloc_vector,
11952                                         symbols);
11953   if (reloc_count < 0)
11954     goto error_return;
11955
11956   if (reloc_count > 0)
11957     {
11958       arelent **parent;
11959       /* for mips */
11960       int gp_found;
11961       bfd_vma gp = 0x12345678;  /* initialize just to shut gcc up */
11962
11963       {
11964         struct bfd_hash_entry *h;
11965         struct bfd_link_hash_entry *lh;
11966         /* Skip all this stuff if we aren't mixing formats.  */
11967         if (abfd && input_bfd
11968             && abfd->xvec == input_bfd->xvec)
11969           lh = 0;
11970         else
11971           {
11972             h = bfd_hash_lookup (&link_info->hash->table, "_gp", FALSE, FALSE);
11973             lh = (struct bfd_link_hash_entry *) h;
11974           }
11975       lookup:
11976         if (lh)
11977           {
11978             switch (lh->type)
11979               {
11980               case bfd_link_hash_undefined:
11981               case bfd_link_hash_undefweak:
11982               case bfd_link_hash_common:
11983                 gp_found = 0;
11984                 break;
11985               case bfd_link_hash_defined:
11986               case bfd_link_hash_defweak:
11987                 gp_found = 1;
11988                 gp = lh->u.def.value;
11989                 break;
11990               case bfd_link_hash_indirect:
11991               case bfd_link_hash_warning:
11992                 lh = lh->u.i.link;
11993                 /* @@FIXME  ignoring warning for now */
11994                 goto lookup;
11995               case bfd_link_hash_new:
11996               default:
11997                 abort ();
11998               }
11999           }
12000         else
12001           gp_found = 0;
12002       }
12003       /* end mips */
12004       for (parent = reloc_vector; *parent != NULL; parent++)
12005         {
12006           char *error_message = NULL;
12007           bfd_reloc_status_type r;
12008
12009           /* Specific to MIPS: Deal with relocation types that require
12010              knowing the gp of the output bfd.  */
12011           asymbol *sym = *(*parent)->sym_ptr_ptr;
12012
12013           /* If we've managed to find the gp and have a special
12014              function for the relocation then go ahead, else default
12015              to the generic handling.  */
12016           if (gp_found
12017               && (*parent)->howto->special_function
12018               == _bfd_mips_elf32_gprel16_reloc)
12019             r = _bfd_mips_elf_gprel16_with_gp (input_bfd, sym, *parent,
12020                                                input_section, relocatable,
12021                                                data, gp);
12022           else
12023             r = bfd_perform_relocation (input_bfd, *parent, data,
12024                                         input_section,
12025                                         relocatable ? abfd : NULL,
12026                                         &error_message);
12027
12028           if (relocatable)
12029             {
12030               asection *os = input_section->output_section;
12031
12032               /* A partial link, so keep the relocs */
12033               os->orelocation[os->reloc_count] = *parent;
12034               os->reloc_count++;
12035             }
12036
12037           if (r != bfd_reloc_ok)
12038             {
12039               switch (r)
12040                 {
12041                 case bfd_reloc_undefined:
12042                   if (!((*link_info->callbacks->undefined_symbol)
12043                         (link_info, bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
12044                          input_bfd, input_section, (*parent)->address, TRUE)))
12045                     goto error_return;
12046                   break;
12047                 case bfd_reloc_dangerous:
12048                   BFD_ASSERT (error_message != NULL);
12049                   if (!((*link_info->callbacks->reloc_dangerous)
12050                         (link_info, error_message, input_bfd, input_section,
12051                          (*parent)->address)))
12052                     goto error_return;
12053                   break;
12054                 case bfd_reloc_overflow:
12055                   if (!((*link_info->callbacks->reloc_overflow)
12056                         (link_info, NULL,
12057                          bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
12058                          (*parent)->howto->name, (*parent)->addend,
12059                          input_bfd, input_section, (*parent)->address)))
12060                     goto error_return;
12061                   break;
12062                 case bfd_reloc_outofrange:
12063                 default:
12064                   abort ();
12065                   break;
12066                 }
12067
12068             }
12069         }
12070     }
12071   if (reloc_vector != NULL)
12072     free (reloc_vector);
12073   return data;
12074
12075 error_return:
12076   if (reloc_vector != NULL)
12077     free (reloc_vector);
12078   return NULL;
12079 }
12080 \f
12081 static bfd_boolean
12082 mips_elf_relax_delete_bytes (bfd *abfd,
12083                              asection *sec, bfd_vma addr, int count)
12084 {
12085   Elf_Internal_Shdr *symtab_hdr;
12086   unsigned int sec_shndx;
12087   bfd_byte *contents;
12088   Elf_Internal_Rela *irel, *irelend;
12089   Elf_Internal_Sym *isym;
12090   Elf_Internal_Sym *isymend;
12091   struct elf_link_hash_entry **sym_hashes;
12092   struct elf_link_hash_entry **end_hashes;
12093   struct elf_link_hash_entry **start_hashes;
12094   unsigned int symcount;
12095
12096   sec_shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
12097   contents = elf_section_data (sec)->this_hdr.contents;
12098
12099   irel = elf_section_data (sec)->relocs;
12100   irelend = irel + sec->reloc_count;
12101
12102   /* Actually delete the bytes.  */
12103   memmove (contents + addr, contents + addr + count,
12104            (size_t) (sec->size - addr - count));
12105   sec->size -= count;
12106
12107   /* Adjust all the relocs.  */
12108   for (irel = elf_section_data (sec)->relocs; irel < irelend; irel++)
12109     {
12110       /* Get the new reloc address.  */
12111       if (irel->r_offset > addr)
12112         irel->r_offset -= count;
12113     }
12114
12115   BFD_ASSERT (addr % 2 == 0);
12116   BFD_ASSERT (count % 2 == 0);
12117
12118   /* Adjust the local symbols defined in this section.  */
12119   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
12120   isym = (Elf_Internal_Sym *) symtab_hdr->contents;
12121   for (isymend = isym + symtab_hdr->sh_info; isym < isymend; isym++)
12122     if (isym->st_shndx == sec_shndx && isym->st_value > addr)
12123       isym->st_value -= count;
12124
12125   /* Now adjust the global symbols defined in this section.  */
12126   symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym)
12127               - symtab_hdr->sh_info);
12128   sym_hashes = start_hashes = elf_sym_hashes (abfd);
12129   end_hashes = sym_hashes + symcount;
12130
12131   for (; sym_hashes < end_hashes; sym_hashes++)
12132     {
12133       struct elf_link_hash_entry *sym_hash = *sym_hashes;
12134
12135       if ((sym_hash->root.type == bfd_link_hash_defined
12136            || sym_hash->root.type == bfd_link_hash_defweak)
12137           && sym_hash->root.u.def.section == sec)
12138         {
12139           bfd_vma value = sym_hash->root.u.def.value;
12140
12141           if (ELF_ST_IS_MICROMIPS (sym_hash->other))
12142             value &= MINUS_TWO;
12143           if (value > addr)
12144             sym_hash->root.u.def.value -= count;
12145         }
12146     }
12147
12148   return TRUE;
12149 }
12150
12151
12152 /* Opcodes needed for microMIPS relaxation as found in
12153    opcodes/micromips-opc.c.  */
12154
12155 struct opcode_descriptor {
12156   unsigned long match;
12157   unsigned long mask;
12158 };
12159
12160 /* The $ra register aka $31.  */
12161
12162 #define RA 31
12163
12164 /* 32-bit instruction format register fields.  */
12165
12166 #define OP32_SREG(opcode) (((opcode) >> 16) & 0x1f)
12167 #define OP32_TREG(opcode) (((opcode) >> 21) & 0x1f)
12168
12169 /* Check if a 5-bit register index can be abbreviated to 3 bits.  */
12170
12171 #define OP16_VALID_REG(r) \
12172   ((2 <= (r) && (r) <= 7) || (16 <= (r) && (r) <= 17))
12173
12174
12175 /* 32-bit and 16-bit branches.  */
12176
12177 static const struct opcode_descriptor b_insns_32[] = {
12178   { /* "b",     "p",            */ 0x40400000, 0xffff0000 }, /* bgez 0 */
12179   { /* "b",     "p",            */ 0x94000000, 0xffff0000 }, /* beq 0, 0 */
12180   { 0, 0 }  /* End marker for find_match().  */
12181 };
12182
12183 static const struct opcode_descriptor bc_insn_32 =
12184   { /* "bc(1|2)(ft)", "N,p",    */ 0x42800000, 0xfec30000 };
12185
12186 static const struct opcode_descriptor bz_insn_32 =
12187   { /* "b(g|l)(e|t)z", "s,p",   */ 0x40000000, 0xff200000 };
12188
12189 static const struct opcode_descriptor bzal_insn_32 =
12190   { /* "b(ge|lt)zal", "s,p",    */ 0x40200000, 0xffa00000 };
12191
12192 static const struct opcode_descriptor beq_insn_32 =
12193   { /* "b(eq|ne)", "s,t,p",     */ 0x94000000, 0xdc000000 };
12194
12195 static const struct opcode_descriptor b_insn_16 =
12196   { /* "b",     "mD",           */ 0xcc00,     0xfc00 };
12197
12198 static const struct opcode_descriptor bz_insn_16 =
12199   { /* "b(eq|ne)z", "md,mE",    */ 0x8c00,     0xdc00 };
12200
12201
12202 /* 32-bit and 16-bit branch EQ and NE zero.  */
12203
12204 /* NOTE: All opcode tables have BEQ/BNE in the same order: first the
12205    eq and second the ne.  This convention is used when replacing a
12206    32-bit BEQ/BNE with the 16-bit version.  */
12207
12208 #define BZC32_REG_FIELD(r) (((r) & 0x1f) << 16)
12209
12210 static const struct opcode_descriptor bz_rs_insns_32[] = {
12211   { /* "beqz",  "s,p",          */ 0x94000000, 0xffe00000 },
12212   { /* "bnez",  "s,p",          */ 0xb4000000, 0xffe00000 },
12213   { 0, 0 }  /* End marker for find_match().  */
12214 };
12215
12216 static const struct opcode_descriptor bz_rt_insns_32[] = {
12217   { /* "beqz",  "t,p",          */ 0x94000000, 0xfc01f000 },
12218   { /* "bnez",  "t,p",          */ 0xb4000000, 0xfc01f000 },
12219   { 0, 0 }  /* End marker for find_match().  */
12220 };
12221
12222 static const struct opcode_descriptor bzc_insns_32[] = {
12223   { /* "beqzc", "s,p",          */ 0x40e00000, 0xffe00000 },
12224   { /* "bnezc", "s,p",          */ 0x40a00000, 0xffe00000 },
12225   { 0, 0 }  /* End marker for find_match().  */
12226 };
12227
12228 static const struct opcode_descriptor bz_insns_16[] = {
12229   { /* "beqz",  "md,mE",        */ 0x8c00,     0xfc00 },
12230   { /* "bnez",  "md,mE",        */ 0xac00,     0xfc00 },
12231   { 0, 0 }  /* End marker for find_match().  */
12232 };
12233
12234 /* Switch between a 5-bit register index and its 3-bit shorthand.  */
12235
12236 #define BZ16_REG(opcode) ((((((opcode) >> 7) & 7) + 0x1e) & 0x17) + 2)
12237 #define BZ16_REG_FIELD(r) \
12238   (((2 <= (r) && (r) <= 7) ? (r) : ((r) - 16)) << 7)
12239
12240
12241 /* 32-bit instructions with a delay slot.  */
12242
12243 static const struct opcode_descriptor jal_insn_32_bd16 =
12244   { /* "jals",  "a",            */ 0x74000000, 0xfc000000 };
12245
12246 static const struct opcode_descriptor jal_insn_32_bd32 =
12247   { /* "jal",   "a",            */ 0xf4000000, 0xfc000000 };
12248
12249 static const struct opcode_descriptor jal_x_insn_32_bd32 =
12250   { /* "jal[x]", "a",           */ 0xf0000000, 0xf8000000 };
12251
12252 static const struct opcode_descriptor j_insn_32 =
12253   { /* "j",     "a",            */ 0xd4000000, 0xfc000000 };
12254
12255 static const struct opcode_descriptor jalr_insn_32 =
12256   { /* "jalr[.hb]", "t,s",      */ 0x00000f3c, 0xfc00efff };
12257
12258 /* This table can be compacted, because no opcode replacement is made.  */
12259
12260 static const struct opcode_descriptor ds_insns_32_bd16[] = {
12261   { /* "jals",  "a",            */ 0x74000000, 0xfc000000 },
12262
12263   { /* "jalrs[.hb]", "t,s",     */ 0x00004f3c, 0xfc00efff },
12264   { /* "b(ge|lt)zals", "s,p",   */ 0x42200000, 0xffa00000 },
12265
12266   { /* "b(g|l)(e|t)z", "s,p",   */ 0x40000000, 0xff200000 },
12267   { /* "b(eq|ne)", "s,t,p",     */ 0x94000000, 0xdc000000 },
12268   { /* "j",     "a",            */ 0xd4000000, 0xfc000000 },
12269   { 0, 0 }  /* End marker for find_match().  */
12270 };
12271
12272 /* This table can be compacted, because no opcode replacement is made.  */
12273
12274 static const struct opcode_descriptor ds_insns_32_bd32[] = {
12275   { /* "jal[x]", "a",           */ 0xf0000000, 0xf8000000 },
12276
12277   { /* "jalr[.hb]", "t,s",      */ 0x00000f3c, 0xfc00efff },
12278   { /* "b(ge|lt)zal", "s,p",    */ 0x40200000, 0xffa00000 },
12279   { 0, 0 }  /* End marker for find_match().  */
12280 };
12281
12282
12283 /* 16-bit instructions with a delay slot.  */
12284
12285 static const struct opcode_descriptor jalr_insn_16_bd16 =
12286   { /* "jalrs", "my,mj",        */ 0x45e0,     0xffe0 };
12287
12288 static const struct opcode_descriptor jalr_insn_16_bd32 =
12289   { /* "jalr",  "my,mj",        */ 0x45c0,     0xffe0 };
12290
12291 static const struct opcode_descriptor jr_insn_16 =
12292   { /* "jr",    "mj",           */ 0x4580,     0xffe0 };
12293
12294 #define JR16_REG(opcode) ((opcode) & 0x1f)
12295
12296 /* This table can be compacted, because no opcode replacement is made.  */
12297
12298 static const struct opcode_descriptor ds_insns_16_bd16[] = {
12299   { /* "jalrs", "my,mj",        */ 0x45e0,     0xffe0 },
12300
12301   { /* "b",     "mD",           */ 0xcc00,     0xfc00 },
12302   { /* "b(eq|ne)z", "md,mE",    */ 0x8c00,     0xdc00 },
12303   { /* "jr",    "mj",           */ 0x4580,     0xffe0 },
12304   { 0, 0 }  /* End marker for find_match().  */
12305 };
12306
12307
12308 /* LUI instruction.  */
12309
12310 static const struct opcode_descriptor lui_insn =
12311  { /* "lui",    "s,u",          */ 0x41a00000, 0xffe00000 };
12312
12313
12314 /* ADDIU instruction.  */
12315
12316 static const struct opcode_descriptor addiu_insn =
12317   { /* "addiu", "t,r,j",        */ 0x30000000, 0xfc000000 };
12318
12319 static const struct opcode_descriptor addiupc_insn =
12320   { /* "addiu", "mb,$pc,mQ",    */ 0x78000000, 0xfc000000 };
12321
12322 #define ADDIUPC_REG_FIELD(r) \
12323   (((2 <= (r) && (r) <= 7) ? (r) : ((r) - 16)) << 23)
12324
12325
12326 /* Relaxable instructions in a JAL delay slot: MOVE.  */
12327
12328 /* The 16-bit move has rd in 9:5 and rs in 4:0.  The 32-bit moves
12329    (ADDU, OR) have rd in 15:11 and rs in 10:16.  */
12330 #define MOVE32_RD(opcode) (((opcode) >> 11) & 0x1f)
12331 #define MOVE32_RS(opcode) (((opcode) >> 16) & 0x1f)
12332
12333 #define MOVE16_RD_FIELD(r) (((r) & 0x1f) << 5)
12334 #define MOVE16_RS_FIELD(r) (((r) & 0x1f)     )
12335
12336 static const struct opcode_descriptor move_insns_32[] = {
12337   { /* "move",  "d,s",          */ 0x00000150, 0xffe007ff }, /* addu d,s,$0 */
12338   { /* "move",  "d,s",          */ 0x00000290, 0xffe007ff }, /* or   d,s,$0 */
12339   { 0, 0 }  /* End marker for find_match().  */
12340 };
12341
12342 static const struct opcode_descriptor move_insn_16 =
12343   { /* "move",  "mp,mj",        */ 0x0c00,     0xfc00 };
12344
12345
12346 /* NOP instructions.  */
12347
12348 static const struct opcode_descriptor nop_insn_32 =
12349   { /* "nop",   "",             */ 0x00000000, 0xffffffff };
12350
12351 static const struct opcode_descriptor nop_insn_16 =
12352   { /* "nop",   "",             */ 0x0c00,     0xffff };
12353
12354
12355 /* Instruction match support.  */
12356
12357 #define MATCH(opcode, insn) ((opcode & insn.mask) == insn.match)
12358
12359 static int
12360 find_match (unsigned long opcode, const struct opcode_descriptor insn[])
12361 {
12362   unsigned long indx;
12363
12364   for (indx = 0; insn[indx].mask != 0; indx++)
12365     if (MATCH (opcode, insn[indx]))
12366       return indx;
12367
12368   return -1;
12369 }
12370
12371
12372 /* Branch and delay slot decoding support.  */
12373
12374 /* If PTR points to what *might* be a 16-bit branch or jump, then
12375    return the minimum length of its delay slot, otherwise return 0.
12376    Non-zero results are not definitive as we might be checking against
12377    the second half of another instruction.  */
12378
12379 static int
12380 check_br16_dslot (bfd *abfd, bfd_byte *ptr)
12381 {
12382   unsigned long opcode;
12383   int bdsize;
12384
12385   opcode = bfd_get_16 (abfd, ptr);
12386   if (MATCH (opcode, jalr_insn_16_bd32) != 0)
12387     /* 16-bit branch/jump with a 32-bit delay slot.  */
12388     bdsize = 4;
12389   else if (MATCH (opcode, jalr_insn_16_bd16) != 0
12390            || find_match (opcode, ds_insns_16_bd16) >= 0)
12391     /* 16-bit branch/jump with a 16-bit delay slot.  */
12392     bdsize = 2;
12393   else
12394     /* No delay slot.  */
12395     bdsize = 0;
12396
12397   return bdsize;
12398 }
12399
12400 /* If PTR points to what *might* be a 32-bit branch or jump, then
12401    return the minimum length of its delay slot, otherwise return 0.
12402    Non-zero results are not definitive as we might be checking against
12403    the second half of another instruction.  */
12404
12405 static int
12406 check_br32_dslot (bfd *abfd, bfd_byte *ptr)
12407 {
12408   unsigned long opcode;
12409   int bdsize;
12410
12411   opcode = bfd_get_micromips_32 (abfd, ptr);
12412   if (find_match (opcode, ds_insns_32_bd32) >= 0)
12413     /* 32-bit branch/jump with a 32-bit delay slot.  */
12414     bdsize = 4;
12415   else if (find_match (opcode, ds_insns_32_bd16) >= 0)
12416     /* 32-bit branch/jump with a 16-bit delay slot.  */
12417     bdsize = 2;
12418   else
12419     /* No delay slot.  */
12420     bdsize = 0;
12421
12422   return bdsize;
12423 }
12424
12425 /* If PTR points to a 16-bit branch or jump with a 32-bit delay slot
12426    that doesn't fiddle with REG, then return TRUE, otherwise FALSE.  */
12427
12428 static bfd_boolean
12429 check_br16 (bfd *abfd, bfd_byte *ptr, unsigned long reg)
12430 {
12431   unsigned long opcode;
12432
12433   opcode = bfd_get_16 (abfd, ptr);
12434   if (MATCH (opcode, b_insn_16)
12435                                                 /* B16  */
12436       || (MATCH (opcode, jr_insn_16) && reg != JR16_REG (opcode))
12437                                                 /* JR16  */
12438       || (MATCH (opcode, bz_insn_16) && reg != BZ16_REG (opcode))
12439                                                 /* BEQZ16, BNEZ16  */
12440       || (MATCH (opcode, jalr_insn_16_bd32)
12441                                                 /* JALR16  */
12442           && reg != JR16_REG (opcode) && reg != RA))
12443     return TRUE;
12444
12445   return FALSE;
12446 }
12447
12448 /* If PTR points to a 32-bit branch or jump that doesn't fiddle with REG,
12449    then return TRUE, otherwise FALSE.  */
12450
12451 static bfd_boolean
12452 check_br32 (bfd *abfd, bfd_byte *ptr, unsigned long reg)
12453 {
12454   unsigned long opcode;
12455
12456   opcode = bfd_get_micromips_32 (abfd, ptr);
12457   if (MATCH (opcode, j_insn_32)
12458                                                 /* J  */
12459       || MATCH (opcode, bc_insn_32)
12460                                                 /* BC1F, BC1T, BC2F, BC2T  */
12461       || (MATCH (opcode, jal_x_insn_32_bd32) && reg != RA)
12462                                                 /* JAL, JALX  */
12463       || (MATCH (opcode, bz_insn_32) && reg != OP32_SREG (opcode))
12464                                                 /* BGEZ, BGTZ, BLEZ, BLTZ  */
12465       || (MATCH (opcode, bzal_insn_32)
12466                                                 /* BGEZAL, BLTZAL  */
12467           && reg != OP32_SREG (opcode) && reg != RA)
12468       || ((MATCH (opcode, jalr_insn_32) || MATCH (opcode, beq_insn_32))
12469                                                 /* JALR, JALR.HB, BEQ, BNE  */
12470           && reg != OP32_SREG (opcode) && reg != OP32_TREG (opcode)))
12471     return TRUE;
12472
12473   return FALSE;
12474 }
12475
12476 /* If the instruction encoding at PTR and relocations [INTERNAL_RELOCS,
12477    IRELEND) at OFFSET indicate that there must be a compact branch there,
12478    then return TRUE, otherwise FALSE.  */
12479
12480 static bfd_boolean
12481 check_relocated_bzc (bfd *abfd, const bfd_byte *ptr, bfd_vma offset,
12482                      const Elf_Internal_Rela *internal_relocs,
12483                      const Elf_Internal_Rela *irelend)
12484 {
12485   const Elf_Internal_Rela *irel;
12486   unsigned long opcode;
12487
12488   opcode = bfd_get_micromips_32 (abfd, ptr);
12489   if (find_match (opcode, bzc_insns_32) < 0)
12490     return FALSE;
12491
12492   for (irel = internal_relocs; irel < irelend; irel++)
12493     if (irel->r_offset == offset
12494         && ELF32_R_TYPE (irel->r_info) == R_MICROMIPS_PC16_S1)
12495       return TRUE;
12496
12497   return FALSE;
12498 }
12499
12500 /* Bitsize checking.  */
12501 #define IS_BITSIZE(val, N)                                              \
12502   (((((val) & ((1ULL << (N)) - 1)) ^ (1ULL << ((N) - 1)))               \
12503     - (1ULL << ((N) - 1))) == (val))
12504
12505 \f
12506 bfd_boolean
12507 _bfd_mips_elf_relax_section (bfd *abfd, asection *sec,
12508                              struct bfd_link_info *link_info,
12509                              bfd_boolean *again)
12510 {
12511   Elf_Internal_Shdr *symtab_hdr;
12512   Elf_Internal_Rela *internal_relocs;
12513   Elf_Internal_Rela *irel, *irelend;
12514   bfd_byte *contents = NULL;
12515   Elf_Internal_Sym *isymbuf = NULL;
12516
12517   /* Assume nothing changes.  */
12518   *again = FALSE;
12519
12520   /* We don't have to do anything for a relocatable link, if
12521      this section does not have relocs, or if this is not a
12522      code section.  */
12523
12524   if (link_info->relocatable
12525       || (sec->flags & SEC_RELOC) == 0
12526       || sec->reloc_count == 0
12527       || (sec->flags & SEC_CODE) == 0)
12528     return TRUE;
12529
12530   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
12531
12532   /* Get a copy of the native relocations.  */
12533   internal_relocs = (_bfd_elf_link_read_relocs
12534                      (abfd, sec, NULL, (Elf_Internal_Rela *) NULL,
12535                       link_info->keep_memory));
12536   if (internal_relocs == NULL)
12537     goto error_return;
12538
12539   /* Walk through them looking for relaxing opportunities.  */
12540   irelend = internal_relocs + sec->reloc_count;
12541   for (irel = internal_relocs; irel < irelend; irel++)
12542     {
12543       unsigned long r_symndx = ELF32_R_SYM (irel->r_info);
12544       unsigned int r_type = ELF32_R_TYPE (irel->r_info);
12545       bfd_boolean target_is_micromips_code_p;
12546       unsigned long opcode;
12547       bfd_vma symval;
12548       bfd_vma pcrval;
12549       bfd_byte *ptr;
12550       int fndopc;
12551
12552       /* The number of bytes to delete for relaxation and from where
12553          to delete these bytes starting at irel->r_offset.  */
12554       int delcnt = 0;
12555       int deloff = 0;
12556
12557       /* If this isn't something that can be relaxed, then ignore
12558          this reloc.  */
12559       if (r_type != R_MICROMIPS_HI16
12560           && r_type != R_MICROMIPS_PC16_S1
12561           && r_type != R_MICROMIPS_26_S1)
12562         continue;
12563
12564       /* Get the section contents if we haven't done so already.  */
12565       if (contents == NULL)
12566         {
12567           /* Get cached copy if it exists.  */
12568           if (elf_section_data (sec)->this_hdr.contents != NULL)
12569             contents = elf_section_data (sec)->this_hdr.contents;
12570           /* Go get them off disk.  */
12571           else if (!bfd_malloc_and_get_section (abfd, sec, &contents))
12572             goto error_return;
12573         }
12574       ptr = contents + irel->r_offset;
12575
12576       /* Read this BFD's local symbols if we haven't done so already.  */
12577       if (isymbuf == NULL && symtab_hdr->sh_info != 0)
12578         {
12579           isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
12580           if (isymbuf == NULL)
12581             isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
12582                                             symtab_hdr->sh_info, 0,
12583                                             NULL, NULL, NULL);
12584           if (isymbuf == NULL)
12585             goto error_return;
12586         }
12587
12588       /* Get the value of the symbol referred to by the reloc.  */
12589       if (r_symndx < symtab_hdr->sh_info)
12590         {
12591           /* A local symbol.  */
12592           Elf_Internal_Sym *isym;
12593           asection *sym_sec;
12594
12595           isym = isymbuf + r_symndx;
12596           if (isym->st_shndx == SHN_UNDEF)
12597             sym_sec = bfd_und_section_ptr;
12598           else if (isym->st_shndx == SHN_ABS)
12599             sym_sec = bfd_abs_section_ptr;
12600           else if (isym->st_shndx == SHN_COMMON)
12601             sym_sec = bfd_com_section_ptr;
12602           else
12603             sym_sec = bfd_section_from_elf_index (abfd, isym->st_shndx);
12604           symval = (isym->st_value
12605                     + sym_sec->output_section->vma
12606                     + sym_sec->output_offset);
12607           target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (isym->st_other);
12608         }
12609       else
12610         {
12611           unsigned long indx;
12612           struct elf_link_hash_entry *h;
12613
12614           /* An external symbol.  */
12615           indx = r_symndx - symtab_hdr->sh_info;
12616           h = elf_sym_hashes (abfd)[indx];
12617           BFD_ASSERT (h != NULL);
12618
12619           if (h->root.type != bfd_link_hash_defined
12620               && h->root.type != bfd_link_hash_defweak)
12621             /* This appears to be a reference to an undefined
12622                symbol.  Just ignore it -- it will be caught by the
12623                regular reloc processing.  */
12624             continue;
12625
12626           symval = (h->root.u.def.value
12627                     + h->root.u.def.section->output_section->vma
12628                     + h->root.u.def.section->output_offset);
12629           target_is_micromips_code_p = (!h->needs_plt
12630                                         && ELF_ST_IS_MICROMIPS (h->other));
12631         }
12632
12633
12634       /* For simplicity of coding, we are going to modify the
12635          section contents, the section relocs, and the BFD symbol
12636          table.  We must tell the rest of the code not to free up this
12637          information.  It would be possible to instead create a table
12638          of changes which have to be made, as is done in coff-mips.c;
12639          that would be more work, but would require less memory when
12640          the linker is run.  */
12641
12642       /* Only 32-bit instructions relaxed.  */
12643       if (irel->r_offset + 4 > sec->size)
12644         continue;
12645
12646       opcode = bfd_get_micromips_32 (abfd, ptr);
12647
12648       /* This is the pc-relative distance from the instruction the
12649          relocation is applied to, to the symbol referred.  */
12650       pcrval = (symval
12651                 - (sec->output_section->vma + sec->output_offset)
12652                 - irel->r_offset);
12653
12654       /* R_MICROMIPS_HI16 / LUI relaxation to nil, performing relaxation
12655          of corresponding R_MICROMIPS_LO16 to R_MICROMIPS_HI0_LO16 or
12656          R_MICROMIPS_PC23_S2.  The R_MICROMIPS_PC23_S2 condition is
12657
12658            (symval % 4 == 0 && IS_BITSIZE (pcrval, 25))
12659
12660          where pcrval has first to be adjusted to apply against the LO16
12661          location (we make the adjustment later on, when we have figured
12662          out the offset).  */
12663       if (r_type == R_MICROMIPS_HI16 && MATCH (opcode, lui_insn))
12664         {
12665           bfd_boolean bzc = FALSE;
12666           unsigned long nextopc;
12667           unsigned long reg;
12668           bfd_vma offset;
12669
12670           /* Give up if the previous reloc was a HI16 against this symbol
12671              too.  */
12672           if (irel > internal_relocs
12673               && ELF32_R_TYPE (irel[-1].r_info) == R_MICROMIPS_HI16
12674               && ELF32_R_SYM (irel[-1].r_info) == r_symndx)
12675             continue;
12676
12677           /* Or if the next reloc is not a LO16 against this symbol.  */
12678           if (irel + 1 >= irelend
12679               || ELF32_R_TYPE (irel[1].r_info) != R_MICROMIPS_LO16
12680               || ELF32_R_SYM (irel[1].r_info) != r_symndx)
12681             continue;
12682
12683           /* Or if the second next reloc is a LO16 against this symbol too.  */
12684           if (irel + 2 >= irelend
12685               && ELF32_R_TYPE (irel[2].r_info) == R_MICROMIPS_LO16
12686               && ELF32_R_SYM (irel[2].r_info) == r_symndx)
12687             continue;
12688
12689           /* See if the LUI instruction *might* be in a branch delay slot.
12690              We check whether what looks like a 16-bit branch or jump is
12691              actually an immediate argument to a compact branch, and let
12692              it through if so.  */
12693           if (irel->r_offset >= 2
12694               && check_br16_dslot (abfd, ptr - 2)
12695               && !(irel->r_offset >= 4
12696                    && (bzc = check_relocated_bzc (abfd,
12697                                                   ptr - 4, irel->r_offset - 4,
12698                                                   internal_relocs, irelend))))
12699             continue;
12700           if (irel->r_offset >= 4
12701               && !bzc
12702               && check_br32_dslot (abfd, ptr - 4))
12703             continue;
12704
12705           reg = OP32_SREG (opcode);
12706
12707           /* We only relax adjacent instructions or ones separated with
12708              a branch or jump that has a delay slot.  The branch or jump
12709              must not fiddle with the register used to hold the address.
12710              Subtract 4 for the LUI itself.  */
12711           offset = irel[1].r_offset - irel[0].r_offset;
12712           switch (offset - 4)
12713             {
12714             case 0:
12715               break;
12716             case 2:
12717               if (check_br16 (abfd, ptr + 4, reg))
12718                 break;
12719               continue;
12720             case 4:
12721               if (check_br32 (abfd, ptr + 4, reg))
12722                 break;
12723               continue;
12724             default:
12725               continue;
12726             }
12727
12728           nextopc = bfd_get_micromips_32 (abfd, contents + irel[1].r_offset);
12729
12730           /* Give up unless the same register is used with both
12731              relocations.  */
12732           if (OP32_SREG (nextopc) != reg)
12733             continue;
12734
12735           /* Now adjust pcrval, subtracting the offset to the LO16 reloc
12736              and rounding up to take masking of the two LSBs into account.  */
12737           pcrval = ((pcrval - offset + 3) | 3) ^ 3;
12738
12739           /* R_MICROMIPS_LO16 relaxation to R_MICROMIPS_HI0_LO16.  */
12740           if (IS_BITSIZE (symval, 16))
12741             {
12742               /* Fix the relocation's type.  */
12743               irel[1].r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_HI0_LO16);
12744
12745               /* Instructions using R_MICROMIPS_LO16 have the base or
12746                  source register in bits 20:16.  This register becomes $0
12747                  (zero) as the result of the R_MICROMIPS_HI16 being 0.  */
12748               nextopc &= ~0x001f0000;
12749               bfd_put_16 (abfd, (nextopc >> 16) & 0xffff,
12750                           contents + irel[1].r_offset);
12751             }
12752
12753           /* R_MICROMIPS_LO16 / ADDIU relaxation to R_MICROMIPS_PC23_S2.
12754              We add 4 to take LUI deletion into account while checking
12755              the PC-relative distance.  */
12756           else if (symval % 4 == 0
12757                    && IS_BITSIZE (pcrval + 4, 25)
12758                    && MATCH (nextopc, addiu_insn)
12759                    && OP32_TREG (nextopc) == OP32_SREG (nextopc)
12760                    && OP16_VALID_REG (OP32_TREG (nextopc)))
12761             {
12762               /* Fix the relocation's type.  */
12763               irel[1].r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC23_S2);
12764
12765               /* Replace ADDIU with the ADDIUPC version.  */
12766               nextopc = (addiupc_insn.match
12767                          | ADDIUPC_REG_FIELD (OP32_TREG (nextopc)));
12768
12769               bfd_put_micromips_32 (abfd, nextopc,
12770                                     contents + irel[1].r_offset);
12771             }
12772
12773           /* Can't do anything, give up, sigh...  */
12774           else
12775             continue;
12776
12777           /* Fix the relocation's type.  */
12778           irel->r_info = ELF32_R_INFO (r_symndx, R_MIPS_NONE);
12779
12780           /* Delete the LUI instruction: 4 bytes at irel->r_offset.  */
12781           delcnt = 4;
12782           deloff = 0;
12783         }
12784
12785       /* Compact branch relaxation -- due to the multitude of macros
12786          employed by the compiler/assembler, compact branches are not
12787          always generated.  Obviously, this can/will be fixed elsewhere,
12788          but there is no drawback in double checking it here.  */
12789       else if (r_type == R_MICROMIPS_PC16_S1
12790                && irel->r_offset + 5 < sec->size
12791                && ((fndopc = find_match (opcode, bz_rs_insns_32)) >= 0
12792                    || (fndopc = find_match (opcode, bz_rt_insns_32)) >= 0)
12793                && MATCH (bfd_get_16 (abfd, ptr + 4), nop_insn_16))
12794         {
12795           unsigned long reg;
12796
12797           reg = OP32_SREG (opcode) ? OP32_SREG (opcode) : OP32_TREG (opcode);
12798
12799           /* Replace BEQZ/BNEZ with the compact version.  */
12800           opcode = (bzc_insns_32[fndopc].match
12801                     | BZC32_REG_FIELD (reg)
12802                     | (opcode & 0xffff));               /* Addend value.  */
12803
12804           bfd_put_micromips_32 (abfd, opcode, ptr);
12805
12806           /* Delete the 16-bit delay slot NOP: two bytes from
12807              irel->offset + 4.  */
12808           delcnt = 2;
12809           deloff = 4;
12810         }
12811
12812       /* R_MICROMIPS_PC16_S1 relaxation to R_MICROMIPS_PC10_S1.  We need
12813          to check the distance from the next instruction, so subtract 2.  */
12814       else if (r_type == R_MICROMIPS_PC16_S1
12815                && IS_BITSIZE (pcrval - 2, 11)
12816                && find_match (opcode, b_insns_32) >= 0)
12817         {
12818           /* Fix the relocation's type.  */
12819           irel->r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC10_S1);
12820
12821           /* Replace the 32-bit opcode with a 16-bit opcode.  */
12822           bfd_put_16 (abfd,
12823                       (b_insn_16.match
12824                        | (opcode & 0x3ff)),             /* Addend value.  */
12825                       ptr);
12826
12827           /* Delete 2 bytes from irel->r_offset + 2.  */
12828           delcnt = 2;
12829           deloff = 2;
12830         }
12831
12832       /* R_MICROMIPS_PC16_S1 relaxation to R_MICROMIPS_PC7_S1.  We need
12833          to check the distance from the next instruction, so subtract 2.  */
12834       else if (r_type == R_MICROMIPS_PC16_S1
12835                && IS_BITSIZE (pcrval - 2, 8)
12836                && (((fndopc = find_match (opcode, bz_rs_insns_32)) >= 0
12837                     && OP16_VALID_REG (OP32_SREG (opcode)))
12838                    || ((fndopc = find_match (opcode, bz_rt_insns_32)) >= 0
12839                        && OP16_VALID_REG (OP32_TREG (opcode)))))
12840         {
12841           unsigned long reg;
12842
12843           reg = OP32_SREG (opcode) ? OP32_SREG (opcode) : OP32_TREG (opcode);
12844
12845           /* Fix the relocation's type.  */
12846           irel->r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC7_S1);
12847
12848           /* Replace the 32-bit opcode with a 16-bit opcode.  */
12849           bfd_put_16 (abfd,
12850                       (bz_insns_16[fndopc].match
12851                        | BZ16_REG_FIELD (reg)
12852                        | (opcode & 0x7f)),              /* Addend value.  */
12853                       ptr);
12854
12855           /* Delete 2 bytes from irel->r_offset + 2.  */
12856           delcnt = 2;
12857           deloff = 2;
12858         }
12859
12860       /* R_MICROMIPS_26_S1 -- JAL to JALS relaxation for microMIPS targets.  */
12861       else if (r_type == R_MICROMIPS_26_S1
12862                && target_is_micromips_code_p
12863                && irel->r_offset + 7 < sec->size
12864                && MATCH (opcode, jal_insn_32_bd32))
12865         {
12866           unsigned long n32opc;
12867           bfd_boolean relaxed = FALSE;
12868
12869           n32opc = bfd_get_micromips_32 (abfd, ptr + 4);
12870
12871           if (MATCH (n32opc, nop_insn_32))
12872             {
12873               /* Replace delay slot 32-bit NOP with a 16-bit NOP.  */
12874               bfd_put_16 (abfd, nop_insn_16.match, ptr + 4);
12875
12876               relaxed = TRUE;
12877             }
12878           else if (find_match (n32opc, move_insns_32) >= 0)
12879             {
12880               /* Replace delay slot 32-bit MOVE with 16-bit MOVE.  */
12881               bfd_put_16 (abfd,
12882                           (move_insn_16.match
12883                            | MOVE16_RD_FIELD (MOVE32_RD (n32opc))
12884                            | MOVE16_RS_FIELD (MOVE32_RS (n32opc))),
12885                           ptr + 4);
12886
12887               relaxed = TRUE;
12888             }
12889           /* Other 32-bit instructions relaxable to 16-bit
12890              instructions will be handled here later.  */
12891
12892           if (relaxed)
12893             {
12894               /* JAL with 32-bit delay slot that is changed to a JALS
12895                  with 16-bit delay slot.  */
12896               bfd_put_micromips_32 (abfd, jal_insn_32_bd16.match, ptr);
12897
12898               /* Delete 2 bytes from irel->r_offset + 6.  */
12899               delcnt = 2;
12900               deloff = 6;
12901             }
12902         }
12903
12904       if (delcnt != 0)
12905         {
12906           /* Note that we've changed the relocs, section contents, etc.  */
12907           elf_section_data (sec)->relocs = internal_relocs;
12908           elf_section_data (sec)->this_hdr.contents = contents;
12909           symtab_hdr->contents = (unsigned char *) isymbuf;
12910
12911           /* Delete bytes depending on the delcnt and deloff.  */
12912           if (!mips_elf_relax_delete_bytes (abfd, sec,
12913                                             irel->r_offset + deloff, delcnt))
12914             goto error_return;
12915
12916           /* That will change things, so we should relax again.
12917              Note that this is not required, and it may be slow.  */
12918           *again = TRUE;
12919         }
12920     }
12921
12922   if (isymbuf != NULL
12923       && symtab_hdr->contents != (unsigned char *) isymbuf)
12924     {
12925       if (! link_info->keep_memory)
12926         free (isymbuf);
12927       else
12928         {
12929           /* Cache the symbols for elf_link_input_bfd.  */
12930           symtab_hdr->contents = (unsigned char *) isymbuf;
12931         }
12932     }
12933
12934   if (contents != NULL
12935       && elf_section_data (sec)->this_hdr.contents != contents)
12936     {
12937       if (! link_info->keep_memory)
12938         free (contents);
12939       else
12940         {
12941           /* Cache the section contents for elf_link_input_bfd.  */
12942           elf_section_data (sec)->this_hdr.contents = contents;
12943         }
12944     }
12945
12946   if (internal_relocs != NULL
12947       && elf_section_data (sec)->relocs != internal_relocs)
12948     free (internal_relocs);
12949
12950   return TRUE;
12951
12952  error_return:
12953   if (isymbuf != NULL
12954       && symtab_hdr->contents != (unsigned char *) isymbuf)
12955     free (isymbuf);
12956   if (contents != NULL
12957       && elf_section_data (sec)->this_hdr.contents != contents)
12958     free (contents);
12959   if (internal_relocs != NULL
12960       && elf_section_data (sec)->relocs != internal_relocs)
12961     free (internal_relocs);
12962
12963   return FALSE;
12964 }
12965 \f
12966 /* Create a MIPS ELF linker hash table.  */
12967
12968 struct bfd_link_hash_table *
12969 _bfd_mips_elf_link_hash_table_create (bfd *abfd)
12970 {
12971   struct mips_elf_link_hash_table *ret;
12972   bfd_size_type amt = sizeof (struct mips_elf_link_hash_table);
12973
12974   ret = bfd_zmalloc (amt);
12975   if (ret == NULL)
12976     return NULL;
12977
12978   if (!_bfd_elf_link_hash_table_init (&ret->root, abfd,
12979                                       mips_elf_link_hash_newfunc,
12980                                       sizeof (struct mips_elf_link_hash_entry),
12981                                       MIPS_ELF_DATA))
12982     {
12983       free (ret);
12984       return NULL;
12985     }
12986
12987   return &ret->root.root;
12988 }
12989
12990 /* Likewise, but indicate that the target is VxWorks.  */
12991
12992 struct bfd_link_hash_table *
12993 _bfd_mips_vxworks_link_hash_table_create (bfd *abfd)
12994 {
12995   struct bfd_link_hash_table *ret;
12996
12997   ret = _bfd_mips_elf_link_hash_table_create (abfd);
12998   if (ret)
12999     {
13000       struct mips_elf_link_hash_table *htab;
13001
13002       htab = (struct mips_elf_link_hash_table *) ret;
13003       htab->use_plts_and_copy_relocs = TRUE;
13004       htab->is_vxworks = TRUE;
13005     }
13006   return ret;
13007 }
13008
13009 /* A function that the linker calls if we are allowed to use PLTs
13010    and copy relocs.  */
13011
13012 void
13013 _bfd_mips_elf_use_plts_and_copy_relocs (struct bfd_link_info *info)
13014 {
13015   mips_elf_hash_table (info)->use_plts_and_copy_relocs = TRUE;
13016 }
13017 \f
13018 /* We need to use a special link routine to handle the .reginfo and
13019    the .mdebug sections.  We need to merge all instances of these
13020    sections together, not write them all out sequentially.  */
13021
13022 bfd_boolean
13023 _bfd_mips_elf_final_link (bfd *abfd, struct bfd_link_info *info)
13024 {
13025   asection *o;
13026   struct bfd_link_order *p;
13027   asection *reginfo_sec, *mdebug_sec, *gptab_data_sec, *gptab_bss_sec;
13028   asection *rtproc_sec;
13029   Elf32_RegInfo reginfo;
13030   struct ecoff_debug_info debug;
13031   struct mips_htab_traverse_info hti;
13032   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
13033   const struct ecoff_debug_swap *swap = bed->elf_backend_ecoff_debug_swap;
13034   HDRR *symhdr = &debug.symbolic_header;
13035   void *mdebug_handle = NULL;
13036   asection *s;
13037   EXTR esym;
13038   unsigned int i;
13039   bfd_size_type amt;
13040   struct mips_elf_link_hash_table *htab;
13041
13042   static const char * const secname[] =
13043   {
13044     ".text", ".init", ".fini", ".data",
13045     ".rodata", ".sdata", ".sbss", ".bss"
13046   };
13047   static const int sc[] =
13048   {
13049     scText, scInit, scFini, scData,
13050     scRData, scSData, scSBss, scBss
13051   };
13052
13053   /* Sort the dynamic symbols so that those with GOT entries come after
13054      those without.  */
13055   htab = mips_elf_hash_table (info);
13056   BFD_ASSERT (htab != NULL);
13057
13058   if (!mips_elf_sort_hash_table (abfd, info))
13059     return FALSE;
13060
13061   /* Create any scheduled LA25 stubs.  */
13062   hti.info = info;
13063   hti.output_bfd = abfd;
13064   hti.error = FALSE;
13065   htab_traverse (htab->la25_stubs, mips_elf_create_la25_stub, &hti);
13066   if (hti.error)
13067     return FALSE;
13068
13069   /* Get a value for the GP register.  */
13070   if (elf_gp (abfd) == 0)
13071     {
13072       struct bfd_link_hash_entry *h;
13073
13074       h = bfd_link_hash_lookup (info->hash, "_gp", FALSE, FALSE, TRUE);
13075       if (h != NULL && h->type == bfd_link_hash_defined)
13076         elf_gp (abfd) = (h->u.def.value
13077                          + h->u.def.section->output_section->vma
13078                          + h->u.def.section->output_offset);
13079       else if (htab->is_vxworks
13080                && (h = bfd_link_hash_lookup (info->hash,
13081                                              "_GLOBAL_OFFSET_TABLE_",
13082                                              FALSE, FALSE, TRUE))
13083                && h->type == bfd_link_hash_defined)
13084         elf_gp (abfd) = (h->u.def.section->output_section->vma
13085                          + h->u.def.section->output_offset
13086                          + h->u.def.value);
13087       else if (info->relocatable)
13088         {
13089           bfd_vma lo = MINUS_ONE;
13090
13091           /* Find the GP-relative section with the lowest offset.  */
13092           for (o = abfd->sections; o != NULL; o = o->next)
13093             if (o->vma < lo
13094                 && (elf_section_data (o)->this_hdr.sh_flags & SHF_MIPS_GPREL))
13095               lo = o->vma;
13096
13097           /* And calculate GP relative to that.  */
13098           elf_gp (abfd) = lo + ELF_MIPS_GP_OFFSET (info);
13099         }
13100       else
13101         {
13102           /* If the relocate_section function needs to do a reloc
13103              involving the GP value, it should make a reloc_dangerous
13104              callback to warn that GP is not defined.  */
13105         }
13106     }
13107
13108   /* Go through the sections and collect the .reginfo and .mdebug
13109      information.  */
13110   reginfo_sec = NULL;
13111   mdebug_sec = NULL;
13112   gptab_data_sec = NULL;
13113   gptab_bss_sec = NULL;
13114   for (o = abfd->sections; o != NULL; o = o->next)
13115     {
13116       if (strcmp (o->name, ".reginfo") == 0)
13117         {
13118           memset (&reginfo, 0, sizeof reginfo);
13119
13120           /* We have found the .reginfo section in the output file.
13121              Look through all the link_orders comprising it and merge
13122              the information together.  */
13123           for (p = o->map_head.link_order; p != NULL; p = p->next)
13124             {
13125               asection *input_section;
13126               bfd *input_bfd;
13127               Elf32_External_RegInfo ext;
13128               Elf32_RegInfo sub;
13129
13130               if (p->type != bfd_indirect_link_order)
13131                 {
13132                   if (p->type == bfd_data_link_order)
13133                     continue;
13134                   abort ();
13135                 }
13136
13137               input_section = p->u.indirect.section;
13138               input_bfd = input_section->owner;
13139
13140               if (! bfd_get_section_contents (input_bfd, input_section,
13141                                               &ext, 0, sizeof ext))
13142                 return FALSE;
13143
13144               bfd_mips_elf32_swap_reginfo_in (input_bfd, &ext, &sub);
13145
13146               reginfo.ri_gprmask |= sub.ri_gprmask;
13147               reginfo.ri_cprmask[0] |= sub.ri_cprmask[0];
13148               reginfo.ri_cprmask[1] |= sub.ri_cprmask[1];
13149               reginfo.ri_cprmask[2] |= sub.ri_cprmask[2];
13150               reginfo.ri_cprmask[3] |= sub.ri_cprmask[3];
13151
13152               /* ri_gp_value is set by the function
13153                  mips_elf32_section_processing when the section is
13154                  finally written out.  */
13155
13156               /* Hack: reset the SEC_HAS_CONTENTS flag so that
13157                  elf_link_input_bfd ignores this section.  */
13158               input_section->flags &= ~SEC_HAS_CONTENTS;
13159             }
13160
13161           /* Size has been set in _bfd_mips_elf_always_size_sections.  */
13162           BFD_ASSERT(o->size == sizeof (Elf32_External_RegInfo));
13163
13164           /* Skip this section later on (I don't think this currently
13165              matters, but someday it might).  */
13166           o->map_head.link_order = NULL;
13167
13168           reginfo_sec = o;
13169         }
13170
13171       if (strcmp (o->name, ".mdebug") == 0)
13172         {
13173           struct extsym_info einfo;
13174           bfd_vma last;
13175
13176           /* We have found the .mdebug section in the output file.
13177              Look through all the link_orders comprising it and merge
13178              the information together.  */
13179           symhdr->magic = swap->sym_magic;
13180           /* FIXME: What should the version stamp be?  */
13181           symhdr->vstamp = 0;
13182           symhdr->ilineMax = 0;
13183           symhdr->cbLine = 0;
13184           symhdr->idnMax = 0;
13185           symhdr->ipdMax = 0;
13186           symhdr->isymMax = 0;
13187           symhdr->ioptMax = 0;
13188           symhdr->iauxMax = 0;
13189           symhdr->issMax = 0;
13190           symhdr->issExtMax = 0;
13191           symhdr->ifdMax = 0;
13192           symhdr->crfd = 0;
13193           symhdr->iextMax = 0;
13194
13195           /* We accumulate the debugging information itself in the
13196              debug_info structure.  */
13197           debug.line = NULL;
13198           debug.external_dnr = NULL;
13199           debug.external_pdr = NULL;
13200           debug.external_sym = NULL;
13201           debug.external_opt = NULL;
13202           debug.external_aux = NULL;
13203           debug.ss = NULL;
13204           debug.ssext = debug.ssext_end = NULL;
13205           debug.external_fdr = NULL;
13206           debug.external_rfd = NULL;
13207           debug.external_ext = debug.external_ext_end = NULL;
13208
13209           mdebug_handle = bfd_ecoff_debug_init (abfd, &debug, swap, info);
13210           if (mdebug_handle == NULL)
13211             return FALSE;
13212
13213           esym.jmptbl = 0;
13214           esym.cobol_main = 0;
13215           esym.weakext = 0;
13216           esym.reserved = 0;
13217           esym.ifd = ifdNil;
13218           esym.asym.iss = issNil;
13219           esym.asym.st = stLocal;
13220           esym.asym.reserved = 0;
13221           esym.asym.index = indexNil;
13222           last = 0;
13223           for (i = 0; i < sizeof (secname) / sizeof (secname[0]); i++)
13224             {
13225               esym.asym.sc = sc[i];
13226               s = bfd_get_section_by_name (abfd, secname[i]);
13227               if (s != NULL)
13228                 {
13229                   esym.asym.value = s->vma;
13230                   last = s->vma + s->size;
13231                 }
13232               else
13233                 esym.asym.value = last;
13234               if (!bfd_ecoff_debug_one_external (abfd, &debug, swap,
13235                                                  secname[i], &esym))
13236                 return FALSE;
13237             }
13238
13239           for (p = o->map_head.link_order; p != NULL; p = p->next)
13240             {
13241               asection *input_section;
13242               bfd *input_bfd;
13243               const struct ecoff_debug_swap *input_swap;
13244               struct ecoff_debug_info input_debug;
13245               char *eraw_src;
13246               char *eraw_end;
13247
13248               if (p->type != bfd_indirect_link_order)
13249                 {
13250                   if (p->type == bfd_data_link_order)
13251                     continue;
13252                   abort ();
13253                 }
13254
13255               input_section = p->u.indirect.section;
13256               input_bfd = input_section->owner;
13257
13258               if (!is_mips_elf (input_bfd))
13259                 {
13260                   /* I don't know what a non MIPS ELF bfd would be
13261                      doing with a .mdebug section, but I don't really
13262                      want to deal with it.  */
13263                   continue;
13264                 }
13265
13266               input_swap = (get_elf_backend_data (input_bfd)
13267                             ->elf_backend_ecoff_debug_swap);
13268
13269               BFD_ASSERT (p->size == input_section->size);
13270
13271               /* The ECOFF linking code expects that we have already
13272                  read in the debugging information and set up an
13273                  ecoff_debug_info structure, so we do that now.  */
13274               if (! _bfd_mips_elf_read_ecoff_info (input_bfd, input_section,
13275                                                    &input_debug))
13276                 return FALSE;
13277
13278               if (! (bfd_ecoff_debug_accumulate
13279                      (mdebug_handle, abfd, &debug, swap, input_bfd,
13280                       &input_debug, input_swap, info)))
13281                 return FALSE;
13282
13283               /* Loop through the external symbols.  For each one with
13284                  interesting information, try to find the symbol in
13285                  the linker global hash table and save the information
13286                  for the output external symbols.  */
13287               eraw_src = input_debug.external_ext;
13288               eraw_end = (eraw_src
13289                           + (input_debug.symbolic_header.iextMax
13290                              * input_swap->external_ext_size));
13291               for (;
13292                    eraw_src < eraw_end;
13293                    eraw_src += input_swap->external_ext_size)
13294                 {
13295                   EXTR ext;
13296                   const char *name;
13297                   struct mips_elf_link_hash_entry *h;
13298
13299                   (*input_swap->swap_ext_in) (input_bfd, eraw_src, &ext);
13300                   if (ext.asym.sc == scNil
13301                       || ext.asym.sc == scUndefined
13302                       || ext.asym.sc == scSUndefined)
13303                     continue;
13304
13305                   name = input_debug.ssext + ext.asym.iss;
13306                   h = mips_elf_link_hash_lookup (mips_elf_hash_table (info),
13307                                                  name, FALSE, FALSE, TRUE);
13308                   if (h == NULL || h->esym.ifd != -2)
13309                     continue;
13310
13311                   if (ext.ifd != -1)
13312                     {
13313                       BFD_ASSERT (ext.ifd
13314                                   < input_debug.symbolic_header.ifdMax);
13315                       ext.ifd = input_debug.ifdmap[ext.ifd];
13316                     }
13317
13318                   h->esym = ext;
13319                 }
13320
13321               /* Free up the information we just read.  */
13322               free (input_debug.line);
13323               free (input_debug.external_dnr);
13324               free (input_debug.external_pdr);
13325               free (input_debug.external_sym);
13326               free (input_debug.external_opt);
13327               free (input_debug.external_aux);
13328               free (input_debug.ss);
13329               free (input_debug.ssext);
13330               free (input_debug.external_fdr);
13331               free (input_debug.external_rfd);
13332               free (input_debug.external_ext);
13333
13334               /* Hack: reset the SEC_HAS_CONTENTS flag so that
13335                  elf_link_input_bfd ignores this section.  */
13336               input_section->flags &= ~SEC_HAS_CONTENTS;
13337             }
13338
13339           if (SGI_COMPAT (abfd) && info->shared)
13340             {
13341               /* Create .rtproc section.  */
13342               rtproc_sec = bfd_get_linker_section (abfd, ".rtproc");
13343               if (rtproc_sec == NULL)
13344                 {
13345                   flagword flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY
13346                                     | SEC_LINKER_CREATED | SEC_READONLY);
13347
13348                   rtproc_sec = bfd_make_section_anyway_with_flags (abfd,
13349                                                                    ".rtproc",
13350                                                                    flags);
13351                   if (rtproc_sec == NULL
13352                       || ! bfd_set_section_alignment (abfd, rtproc_sec, 4))
13353                     return FALSE;
13354                 }
13355
13356               if (! mips_elf_create_procedure_table (mdebug_handle, abfd,
13357                                                      info, rtproc_sec,
13358                                                      &debug))
13359                 return FALSE;
13360             }
13361
13362           /* Build the external symbol information.  */
13363           einfo.abfd = abfd;
13364           einfo.info = info;
13365           einfo.debug = &debug;
13366           einfo.swap = swap;
13367           einfo.failed = FALSE;
13368           mips_elf_link_hash_traverse (mips_elf_hash_table (info),
13369                                        mips_elf_output_extsym, &einfo);
13370           if (einfo.failed)
13371             return FALSE;
13372
13373           /* Set the size of the .mdebug section.  */
13374           o->size = bfd_ecoff_debug_size (abfd, &debug, swap);
13375
13376           /* Skip this section later on (I don't think this currently
13377              matters, but someday it might).  */
13378           o->map_head.link_order = NULL;
13379
13380           mdebug_sec = o;
13381         }
13382
13383       if (CONST_STRNEQ (o->name, ".gptab."))
13384         {
13385           const char *subname;
13386           unsigned int c;
13387           Elf32_gptab *tab;
13388           Elf32_External_gptab *ext_tab;
13389           unsigned int j;
13390
13391           /* The .gptab.sdata and .gptab.sbss sections hold
13392              information describing how the small data area would
13393              change depending upon the -G switch.  These sections
13394              not used in executables files.  */
13395           if (! info->relocatable)
13396             {
13397               for (p = o->map_head.link_order; p != NULL; p = p->next)
13398                 {
13399                   asection *input_section;
13400
13401                   if (p->type != bfd_indirect_link_order)
13402                     {
13403                       if (p->type == bfd_data_link_order)
13404                         continue;
13405                       abort ();
13406                     }
13407
13408                   input_section = p->u.indirect.section;
13409
13410                   /* Hack: reset the SEC_HAS_CONTENTS flag so that
13411                      elf_link_input_bfd ignores this section.  */
13412                   input_section->flags &= ~SEC_HAS_CONTENTS;
13413                 }
13414
13415               /* Skip this section later on (I don't think this
13416                  currently matters, but someday it might).  */
13417               o->map_head.link_order = NULL;
13418
13419               /* Really remove the section.  */
13420               bfd_section_list_remove (abfd, o);
13421               --abfd->section_count;
13422
13423               continue;
13424             }
13425
13426           /* There is one gptab for initialized data, and one for
13427              uninitialized data.  */
13428           if (strcmp (o->name, ".gptab.sdata") == 0)
13429             gptab_data_sec = o;
13430           else if (strcmp (o->name, ".gptab.sbss") == 0)
13431             gptab_bss_sec = o;
13432           else
13433             {
13434               (*_bfd_error_handler)
13435                 (_("%s: illegal section name `%s'"),
13436                  bfd_get_filename (abfd), o->name);
13437               bfd_set_error (bfd_error_nonrepresentable_section);
13438               return FALSE;
13439             }
13440
13441           /* The linker script always combines .gptab.data and
13442              .gptab.sdata into .gptab.sdata, and likewise for
13443              .gptab.bss and .gptab.sbss.  It is possible that there is
13444              no .sdata or .sbss section in the output file, in which
13445              case we must change the name of the output section.  */
13446           subname = o->name + sizeof ".gptab" - 1;
13447           if (bfd_get_section_by_name (abfd, subname) == NULL)
13448             {
13449               if (o == gptab_data_sec)
13450                 o->name = ".gptab.data";
13451               else
13452                 o->name = ".gptab.bss";
13453               subname = o->name + sizeof ".gptab" - 1;
13454               BFD_ASSERT (bfd_get_section_by_name (abfd, subname) != NULL);
13455             }
13456
13457           /* Set up the first entry.  */
13458           c = 1;
13459           amt = c * sizeof (Elf32_gptab);
13460           tab = bfd_malloc (amt);
13461           if (tab == NULL)
13462             return FALSE;
13463           tab[0].gt_header.gt_current_g_value = elf_gp_size (abfd);
13464           tab[0].gt_header.gt_unused = 0;
13465
13466           /* Combine the input sections.  */
13467           for (p = o->map_head.link_order; p != NULL; p = p->next)
13468             {
13469               asection *input_section;
13470               bfd *input_bfd;
13471               bfd_size_type size;
13472               unsigned long last;
13473               bfd_size_type gpentry;
13474
13475               if (p->type != bfd_indirect_link_order)
13476                 {
13477                   if (p->type == bfd_data_link_order)
13478                     continue;
13479                   abort ();
13480                 }
13481
13482               input_section = p->u.indirect.section;
13483               input_bfd = input_section->owner;
13484
13485               /* Combine the gptab entries for this input section one
13486                  by one.  We know that the input gptab entries are
13487                  sorted by ascending -G value.  */
13488               size = input_section->size;
13489               last = 0;
13490               for (gpentry = sizeof (Elf32_External_gptab);
13491                    gpentry < size;
13492                    gpentry += sizeof (Elf32_External_gptab))
13493                 {
13494                   Elf32_External_gptab ext_gptab;
13495                   Elf32_gptab int_gptab;
13496                   unsigned long val;
13497                   unsigned long add;
13498                   bfd_boolean exact;
13499                   unsigned int look;
13500
13501                   if (! (bfd_get_section_contents
13502                          (input_bfd, input_section, &ext_gptab, gpentry,
13503                           sizeof (Elf32_External_gptab))))
13504                     {
13505                       free (tab);
13506                       return FALSE;
13507                     }
13508
13509                   bfd_mips_elf32_swap_gptab_in (input_bfd, &ext_gptab,
13510                                                 &int_gptab);
13511                   val = int_gptab.gt_entry.gt_g_value;
13512                   add = int_gptab.gt_entry.gt_bytes - last;
13513
13514                   exact = FALSE;
13515                   for (look = 1; look < c; look++)
13516                     {
13517                       if (tab[look].gt_entry.gt_g_value >= val)
13518                         tab[look].gt_entry.gt_bytes += add;
13519
13520                       if (tab[look].gt_entry.gt_g_value == val)
13521                         exact = TRUE;
13522                     }
13523
13524                   if (! exact)
13525                     {
13526                       Elf32_gptab *new_tab;
13527                       unsigned int max;
13528
13529                       /* We need a new table entry.  */
13530                       amt = (bfd_size_type) (c + 1) * sizeof (Elf32_gptab);
13531                       new_tab = bfd_realloc (tab, amt);
13532                       if (new_tab == NULL)
13533                         {
13534                           free (tab);
13535                           return FALSE;
13536                         }
13537                       tab = new_tab;
13538                       tab[c].gt_entry.gt_g_value = val;
13539                       tab[c].gt_entry.gt_bytes = add;
13540
13541                       /* Merge in the size for the next smallest -G
13542                          value, since that will be implied by this new
13543                          value.  */
13544                       max = 0;
13545                       for (look = 1; look < c; look++)
13546                         {
13547                           if (tab[look].gt_entry.gt_g_value < val
13548                               && (max == 0
13549                                   || (tab[look].gt_entry.gt_g_value
13550                                       > tab[max].gt_entry.gt_g_value)))
13551                             max = look;
13552                         }
13553                       if (max != 0)
13554                         tab[c].gt_entry.gt_bytes +=
13555                           tab[max].gt_entry.gt_bytes;
13556
13557                       ++c;
13558                     }
13559
13560                   last = int_gptab.gt_entry.gt_bytes;
13561                 }
13562
13563               /* Hack: reset the SEC_HAS_CONTENTS flag so that
13564                  elf_link_input_bfd ignores this section.  */
13565               input_section->flags &= ~SEC_HAS_CONTENTS;
13566             }
13567
13568           /* The table must be sorted by -G value.  */
13569           if (c > 2)
13570             qsort (tab + 1, c - 1, sizeof (tab[0]), gptab_compare);
13571
13572           /* Swap out the table.  */
13573           amt = (bfd_size_type) c * sizeof (Elf32_External_gptab);
13574           ext_tab = bfd_alloc (abfd, amt);
13575           if (ext_tab == NULL)
13576             {
13577               free (tab);
13578               return FALSE;
13579             }
13580
13581           for (j = 0; j < c; j++)
13582             bfd_mips_elf32_swap_gptab_out (abfd, tab + j, ext_tab + j);
13583           free (tab);
13584
13585           o->size = c * sizeof (Elf32_External_gptab);
13586           o->contents = (bfd_byte *) ext_tab;
13587
13588           /* Skip this section later on (I don't think this currently
13589              matters, but someday it might).  */
13590           o->map_head.link_order = NULL;
13591         }
13592     }
13593
13594   /* Invoke the regular ELF backend linker to do all the work.  */
13595   if (!bfd_elf_final_link (abfd, info))
13596     return FALSE;
13597
13598   /* Now write out the computed sections.  */
13599
13600   if (reginfo_sec != NULL)
13601     {
13602       Elf32_External_RegInfo ext;
13603
13604       bfd_mips_elf32_swap_reginfo_out (abfd, &reginfo, &ext);
13605       if (! bfd_set_section_contents (abfd, reginfo_sec, &ext, 0, sizeof ext))
13606         return FALSE;
13607     }
13608
13609   if (mdebug_sec != NULL)
13610     {
13611       BFD_ASSERT (abfd->output_has_begun);
13612       if (! bfd_ecoff_write_accumulated_debug (mdebug_handle, abfd, &debug,
13613                                                swap, info,
13614                                                mdebug_sec->filepos))
13615         return FALSE;
13616
13617       bfd_ecoff_debug_free (mdebug_handle, abfd, &debug, swap, info);
13618     }
13619
13620   if (gptab_data_sec != NULL)
13621     {
13622       if (! bfd_set_section_contents (abfd, gptab_data_sec,
13623                                       gptab_data_sec->contents,
13624                                       0, gptab_data_sec->size))
13625         return FALSE;
13626     }
13627
13628   if (gptab_bss_sec != NULL)
13629     {
13630       if (! bfd_set_section_contents (abfd, gptab_bss_sec,
13631                                       gptab_bss_sec->contents,
13632                                       0, gptab_bss_sec->size))
13633         return FALSE;
13634     }
13635
13636   if (SGI_COMPAT (abfd))
13637     {
13638       rtproc_sec = bfd_get_section_by_name (abfd, ".rtproc");
13639       if (rtproc_sec != NULL)
13640         {
13641           if (! bfd_set_section_contents (abfd, rtproc_sec,
13642                                           rtproc_sec->contents,
13643                                           0, rtproc_sec->size))
13644             return FALSE;
13645         }
13646     }
13647
13648   return TRUE;
13649 }
13650 \f
13651 /* Structure for saying that BFD machine EXTENSION extends BASE.  */
13652
13653 struct mips_mach_extension {
13654   unsigned long extension, base;
13655 };
13656
13657
13658 /* An array describing how BFD machines relate to one another.  The entries
13659    are ordered topologically with MIPS I extensions listed last.  */
13660
13661 static const struct mips_mach_extension mips_mach_extensions[] = {
13662   /* MIPS64r2 extensions.  */
13663   { bfd_mach_mips_octeon2, bfd_mach_mips_octeonp },
13664   { bfd_mach_mips_octeonp, bfd_mach_mips_octeon },
13665   { bfd_mach_mips_octeon, bfd_mach_mipsisa64r2 },
13666
13667   /* MIPS64 extensions.  */
13668   { bfd_mach_mipsisa64r2, bfd_mach_mipsisa64 },
13669   { bfd_mach_mips_sb1, bfd_mach_mipsisa64 },
13670   { bfd_mach_mips_xlr, bfd_mach_mipsisa64 },
13671   { bfd_mach_mips_loongson_3a, bfd_mach_mipsisa64 },
13672
13673   /* MIPS V extensions.  */
13674   { bfd_mach_mipsisa64, bfd_mach_mips5 },
13675
13676   /* R10000 extensions.  */
13677   { bfd_mach_mips12000, bfd_mach_mips10000 },
13678   { bfd_mach_mips14000, bfd_mach_mips10000 },
13679   { bfd_mach_mips16000, bfd_mach_mips10000 },
13680
13681   /* R5000 extensions.  Note: the vr5500 ISA is an extension of the core
13682      vr5400 ISA, but doesn't include the multimedia stuff.  It seems
13683      better to allow vr5400 and vr5500 code to be merged anyway, since
13684      many libraries will just use the core ISA.  Perhaps we could add
13685      some sort of ASE flag if this ever proves a problem.  */
13686   { bfd_mach_mips5500, bfd_mach_mips5400 },
13687   { bfd_mach_mips5400, bfd_mach_mips5000 },
13688
13689   /* MIPS IV extensions.  */
13690   { bfd_mach_mips5, bfd_mach_mips8000 },
13691   { bfd_mach_mips10000, bfd_mach_mips8000 },
13692   { bfd_mach_mips5000, bfd_mach_mips8000 },
13693   { bfd_mach_mips7000, bfd_mach_mips8000 },
13694   { bfd_mach_mips9000, bfd_mach_mips8000 },
13695
13696   /* VR4100 extensions.  */
13697   { bfd_mach_mips4120, bfd_mach_mips4100 },
13698   { bfd_mach_mips4111, bfd_mach_mips4100 },
13699
13700   /* MIPS III extensions.  */
13701   { bfd_mach_mips_loongson_2e, bfd_mach_mips4000 },
13702   { bfd_mach_mips_loongson_2f, bfd_mach_mips4000 },
13703   { bfd_mach_mips8000, bfd_mach_mips4000 },
13704   { bfd_mach_mips4650, bfd_mach_mips4000 },
13705   { bfd_mach_mips4600, bfd_mach_mips4000 },
13706   { bfd_mach_mips4400, bfd_mach_mips4000 },
13707   { bfd_mach_mips4300, bfd_mach_mips4000 },
13708   { bfd_mach_mips4100, bfd_mach_mips4000 },
13709   { bfd_mach_mips4010, bfd_mach_mips4000 },
13710   { bfd_mach_mips5900, bfd_mach_mips4000 },
13711
13712   /* MIPS32 extensions.  */
13713   { bfd_mach_mipsisa32r2, bfd_mach_mipsisa32 },
13714
13715   /* MIPS II extensions.  */
13716   { bfd_mach_mips4000, bfd_mach_mips6000 },
13717   { bfd_mach_mipsisa32, bfd_mach_mips6000 },
13718
13719   /* MIPS I extensions.  */
13720   { bfd_mach_mips6000, bfd_mach_mips3000 },
13721   { bfd_mach_mips3900, bfd_mach_mips3000 }
13722 };
13723
13724
13725 /* Return true if bfd machine EXTENSION is an extension of machine BASE.  */
13726
13727 static bfd_boolean
13728 mips_mach_extends_p (unsigned long base, unsigned long extension)
13729 {
13730   size_t i;
13731
13732   if (extension == base)
13733     return TRUE;
13734
13735   if (base == bfd_mach_mipsisa32
13736       && mips_mach_extends_p (bfd_mach_mipsisa64, extension))
13737     return TRUE;
13738
13739   if (base == bfd_mach_mipsisa32r2
13740       && mips_mach_extends_p (bfd_mach_mipsisa64r2, extension))
13741     return TRUE;
13742
13743   for (i = 0; i < ARRAY_SIZE (mips_mach_extensions); i++)
13744     if (extension == mips_mach_extensions[i].extension)
13745       {
13746         extension = mips_mach_extensions[i].base;
13747         if (extension == base)
13748           return TRUE;
13749       }
13750
13751   return FALSE;
13752 }
13753
13754
13755 /* Return true if the given ELF header flags describe a 32-bit binary.  */
13756
13757 static bfd_boolean
13758 mips_32bit_flags_p (flagword flags)
13759 {
13760   return ((flags & EF_MIPS_32BITMODE) != 0
13761           || (flags & EF_MIPS_ABI) == E_MIPS_ABI_O32
13762           || (flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32
13763           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1
13764           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2
13765           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32
13766           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2);
13767 }
13768
13769
13770 /* Merge object attributes from IBFD into OBFD.  Raise an error if
13771    there are conflicting attributes.  */
13772 static bfd_boolean
13773 mips_elf_merge_obj_attributes (bfd *ibfd, bfd *obfd)
13774 {
13775   obj_attribute *in_attr;
13776   obj_attribute *out_attr;
13777   bfd *abi_fp_bfd;
13778
13779   abi_fp_bfd = mips_elf_tdata (obfd)->abi_fp_bfd;
13780   in_attr = elf_known_obj_attributes (ibfd)[OBJ_ATTR_GNU];
13781   if (!abi_fp_bfd && in_attr[Tag_GNU_MIPS_ABI_FP].i != 0)
13782     mips_elf_tdata (obfd)->abi_fp_bfd = ibfd;
13783
13784   if (!elf_known_obj_attributes_proc (obfd)[0].i)
13785     {
13786       /* This is the first object.  Copy the attributes.  */
13787       _bfd_elf_copy_obj_attributes (ibfd, obfd);
13788
13789       /* Use the Tag_null value to indicate the attributes have been
13790          initialized.  */
13791       elf_known_obj_attributes_proc (obfd)[0].i = 1;
13792
13793       return TRUE;
13794     }
13795
13796   /* Check for conflicting Tag_GNU_MIPS_ABI_FP attributes and merge
13797      non-conflicting ones.  */
13798   out_attr = elf_known_obj_attributes (obfd)[OBJ_ATTR_GNU];
13799   if (in_attr[Tag_GNU_MIPS_ABI_FP].i != out_attr[Tag_GNU_MIPS_ABI_FP].i)
13800     {
13801       out_attr[Tag_GNU_MIPS_ABI_FP].type = 1;
13802       if (out_attr[Tag_GNU_MIPS_ABI_FP].i == 0)
13803         out_attr[Tag_GNU_MIPS_ABI_FP].i = in_attr[Tag_GNU_MIPS_ABI_FP].i;
13804       else if (in_attr[Tag_GNU_MIPS_ABI_FP].i != 0)
13805         switch (out_attr[Tag_GNU_MIPS_ABI_FP].i)
13806           {
13807           case 1:
13808             switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
13809               {
13810               case 2:
13811                 _bfd_error_handler
13812                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13813                    obfd, abi_fp_bfd, ibfd, "-mdouble-float", "-msingle-float");
13814                 break;
13815
13816               case 3:
13817                 _bfd_error_handler
13818                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13819                    obfd, abi_fp_bfd, ibfd, "-mhard-float", "-msoft-float");
13820                 break;
13821
13822               case 4:
13823                 _bfd_error_handler
13824                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13825                    obfd, abi_fp_bfd, ibfd,
13826                    "-mdouble-float", "-mips32r2 -mfp64");
13827                 break;
13828
13829               default:
13830                 _bfd_error_handler
13831                   (_("Warning: %B uses %s (set by %B), "
13832                      "%B uses unknown floating point ABI %d"),
13833                    obfd, abi_fp_bfd, ibfd,
13834                    "-mdouble-float", in_attr[Tag_GNU_MIPS_ABI_FP].i);
13835                 break;
13836               }
13837             break;
13838
13839           case 2:
13840             switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
13841               {
13842               case 1:
13843                 _bfd_error_handler
13844                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13845                    obfd, abi_fp_bfd, ibfd, "-msingle-float", "-mdouble-float");
13846                 break;
13847
13848               case 3:
13849                 _bfd_error_handler
13850                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13851                    obfd, abi_fp_bfd, ibfd, "-mhard-float", "-msoft-float");
13852                 break;
13853
13854               case 4:
13855                 _bfd_error_handler
13856                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13857                    obfd, abi_fp_bfd, ibfd,
13858                    "-msingle-float", "-mips32r2 -mfp64");
13859                 break;
13860
13861               default:
13862                 _bfd_error_handler
13863                   (_("Warning: %B uses %s (set by %B), "
13864                      "%B uses unknown floating point ABI %d"),
13865                    obfd, abi_fp_bfd, ibfd,
13866                    "-msingle-float", in_attr[Tag_GNU_MIPS_ABI_FP].i);
13867                 break;
13868               }
13869             break;
13870
13871           case 3:
13872             switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
13873               {
13874               case 1:
13875               case 2:
13876               case 4:
13877                 _bfd_error_handler
13878                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13879                    obfd, abi_fp_bfd, ibfd, "-msoft-float", "-mhard-float");
13880                 break;
13881
13882               default:
13883                 _bfd_error_handler
13884                   (_("Warning: %B uses %s (set by %B), "
13885                      "%B uses unknown floating point ABI %d"),
13886                    obfd, abi_fp_bfd, ibfd,
13887                    "-msoft-float", in_attr[Tag_GNU_MIPS_ABI_FP].i);
13888                 break;
13889               }
13890             break;
13891
13892           case 4:
13893             switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
13894               {
13895               case 1:
13896                 _bfd_error_handler
13897                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13898                    obfd, abi_fp_bfd, ibfd,
13899                    "-mips32r2 -mfp64", "-mdouble-float");
13900                 break;
13901
13902               case 2:
13903                 _bfd_error_handler
13904                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13905                    obfd, abi_fp_bfd, ibfd,
13906                    "-mips32r2 -mfp64", "-msingle-float");
13907                 break;
13908
13909               case 3:
13910                 _bfd_error_handler
13911                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13912                    obfd, abi_fp_bfd, ibfd, "-mhard-float", "-msoft-float");
13913                 break;
13914
13915               default:
13916                 _bfd_error_handler
13917                   (_("Warning: %B uses %s (set by %B), "
13918                      "%B uses unknown floating point ABI %d"),
13919                    obfd, abi_fp_bfd, ibfd,
13920                    "-mips32r2 -mfp64", in_attr[Tag_GNU_MIPS_ABI_FP].i);
13921                 break;
13922               }
13923             break;
13924
13925           default:
13926             switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
13927               {
13928               case 1:
13929                 _bfd_error_handler
13930                   (_("Warning: %B uses unknown floating point ABI %d "
13931                      "(set by %B), %B uses %s"),
13932                    obfd, abi_fp_bfd, ibfd,
13933                    out_attr[Tag_GNU_MIPS_ABI_FP].i, "-mdouble-float");
13934                 break;
13935
13936               case 2:
13937                 _bfd_error_handler
13938                   (_("Warning: %B uses unknown floating point ABI %d "
13939                      "(set by %B), %B uses %s"),
13940                    obfd, abi_fp_bfd, ibfd,
13941                    out_attr[Tag_GNU_MIPS_ABI_FP].i, "-msingle-float");
13942                 break;
13943
13944               case 3:
13945                 _bfd_error_handler
13946                   (_("Warning: %B uses unknown floating point ABI %d "
13947                      "(set by %B), %B uses %s"),
13948                    obfd, abi_fp_bfd, ibfd,
13949                    out_attr[Tag_GNU_MIPS_ABI_FP].i, "-msoft-float");
13950                 break;
13951
13952               case 4:
13953                 _bfd_error_handler
13954                   (_("Warning: %B uses unknown floating point ABI %d "
13955                      "(set by %B), %B uses %s"),
13956                    obfd, abi_fp_bfd, ibfd,
13957                    out_attr[Tag_GNU_MIPS_ABI_FP].i, "-mips32r2 -mfp64");
13958                 break;
13959
13960               default:
13961                 _bfd_error_handler
13962                   (_("Warning: %B uses unknown floating point ABI %d "
13963                      "(set by %B), %B uses unknown floating point ABI %d"),
13964                    obfd, abi_fp_bfd, ibfd,
13965                    out_attr[Tag_GNU_MIPS_ABI_FP].i,
13966                    in_attr[Tag_GNU_MIPS_ABI_FP].i);
13967                 break;
13968               }
13969             break;
13970           }
13971     }
13972
13973   /* Merge Tag_compatibility attributes and any common GNU ones.  */
13974   _bfd_elf_merge_object_attributes (ibfd, obfd);
13975
13976   return TRUE;
13977 }
13978
13979 /* Merge backend specific data from an object file to the output
13980    object file when linking.  */
13981
13982 bfd_boolean
13983 _bfd_mips_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
13984 {
13985   flagword old_flags;
13986   flagword new_flags;
13987   bfd_boolean ok;
13988   bfd_boolean null_input_bfd = TRUE;
13989   asection *sec;
13990
13991   /* Check if we have the same endianness.  */
13992   if (! _bfd_generic_verify_endian_match (ibfd, obfd))
13993     {
13994       (*_bfd_error_handler)
13995         (_("%B: endianness incompatible with that of the selected emulation"),
13996          ibfd);
13997       return FALSE;
13998     }
13999
14000   if (!is_mips_elf (ibfd) || !is_mips_elf (obfd))
14001     return TRUE;
14002
14003   if (strcmp (bfd_get_target (ibfd), bfd_get_target (obfd)) != 0)
14004     {
14005       (*_bfd_error_handler)
14006         (_("%B: ABI is incompatible with that of the selected emulation"),
14007          ibfd);
14008       return FALSE;
14009     }
14010
14011   if (!mips_elf_merge_obj_attributes (ibfd, obfd))
14012     return FALSE;
14013
14014   new_flags = elf_elfheader (ibfd)->e_flags;
14015   elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_NOREORDER;
14016   old_flags = elf_elfheader (obfd)->e_flags;
14017
14018   if (! elf_flags_init (obfd))
14019     {
14020       elf_flags_init (obfd) = TRUE;
14021       elf_elfheader (obfd)->e_flags = new_flags;
14022       elf_elfheader (obfd)->e_ident[EI_CLASS]
14023         = elf_elfheader (ibfd)->e_ident[EI_CLASS];
14024
14025       if (bfd_get_arch (obfd) == bfd_get_arch (ibfd)
14026           && (bfd_get_arch_info (obfd)->the_default
14027               || mips_mach_extends_p (bfd_get_mach (obfd),
14028                                       bfd_get_mach (ibfd))))
14029         {
14030           if (! bfd_set_arch_mach (obfd, bfd_get_arch (ibfd),
14031                                    bfd_get_mach (ibfd)))
14032             return FALSE;
14033         }
14034
14035       return TRUE;
14036     }
14037
14038   /* Check flag compatibility.  */
14039
14040   new_flags &= ~EF_MIPS_NOREORDER;
14041   old_flags &= ~EF_MIPS_NOREORDER;
14042
14043   /* Some IRIX 6 BSD-compatibility objects have this bit set.  It
14044      doesn't seem to matter.  */
14045   new_flags &= ~EF_MIPS_XGOT;
14046   old_flags &= ~EF_MIPS_XGOT;
14047
14048   /* MIPSpro generates ucode info in n64 objects.  Again, we should
14049      just be able to ignore this.  */
14050   new_flags &= ~EF_MIPS_UCODE;
14051   old_flags &= ~EF_MIPS_UCODE;
14052
14053   /* DSOs should only be linked with CPIC code.  */
14054   if ((ibfd->flags & DYNAMIC) != 0)
14055     new_flags |= EF_MIPS_PIC | EF_MIPS_CPIC;
14056
14057   if (new_flags == old_flags)
14058     return TRUE;
14059
14060   /* Check to see if the input BFD actually contains any sections.
14061      If not, its flags may not have been initialised either, but it cannot
14062      actually cause any incompatibility.  */
14063   for (sec = ibfd->sections; sec != NULL; sec = sec->next)
14064     {
14065       /* Ignore synthetic sections and empty .text, .data and .bss sections
14066          which are automatically generated by gas.  Also ignore fake
14067          (s)common sections, since merely defining a common symbol does
14068          not affect compatibility.  */
14069       if ((sec->flags & SEC_IS_COMMON) == 0
14070           && strcmp (sec->name, ".reginfo")
14071           && strcmp (sec->name, ".mdebug")
14072           && (sec->size != 0
14073               || (strcmp (sec->name, ".text")
14074                   && strcmp (sec->name, ".data")
14075                   && strcmp (sec->name, ".bss"))))
14076         {
14077           null_input_bfd = FALSE;
14078           break;
14079         }
14080     }
14081   if (null_input_bfd)
14082     return TRUE;
14083
14084   ok = TRUE;
14085
14086   if (((new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0)
14087       != ((old_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0))
14088     {
14089       (*_bfd_error_handler)
14090         (_("%B: warning: linking abicalls files with non-abicalls files"),
14091          ibfd);
14092       ok = TRUE;
14093     }
14094
14095   if (new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC))
14096     elf_elfheader (obfd)->e_flags |= EF_MIPS_CPIC;
14097   if (! (new_flags & EF_MIPS_PIC))
14098     elf_elfheader (obfd)->e_flags &= ~EF_MIPS_PIC;
14099
14100   new_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC);
14101   old_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC);
14102
14103   /* Compare the ISAs.  */
14104   if (mips_32bit_flags_p (old_flags) != mips_32bit_flags_p (new_flags))
14105     {
14106       (*_bfd_error_handler)
14107         (_("%B: linking 32-bit code with 64-bit code"),
14108          ibfd);
14109       ok = FALSE;
14110     }
14111   else if (!mips_mach_extends_p (bfd_get_mach (ibfd), bfd_get_mach (obfd)))
14112     {
14113       /* OBFD's ISA isn't the same as, or an extension of, IBFD's.  */
14114       if (mips_mach_extends_p (bfd_get_mach (obfd), bfd_get_mach (ibfd)))
14115         {
14116           /* Copy the architecture info from IBFD to OBFD.  Also copy
14117              the 32-bit flag (if set) so that we continue to recognise
14118              OBFD as a 32-bit binary.  */
14119           bfd_set_arch_info (obfd, bfd_get_arch_info (ibfd));
14120           elf_elfheader (obfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH);
14121           elf_elfheader (obfd)->e_flags
14122             |= new_flags & (EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
14123
14124           /* Copy across the ABI flags if OBFD doesn't use them
14125              and if that was what caused us to treat IBFD as 32-bit.  */
14126           if ((old_flags & EF_MIPS_ABI) == 0
14127               && mips_32bit_flags_p (new_flags)
14128               && !mips_32bit_flags_p (new_flags & ~EF_MIPS_ABI))
14129             elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ABI;
14130         }
14131       else
14132         {
14133           /* The ISAs aren't compatible.  */
14134           (*_bfd_error_handler)
14135             (_("%B: linking %s module with previous %s modules"),
14136              ibfd,
14137              bfd_printable_name (ibfd),
14138              bfd_printable_name (obfd));
14139           ok = FALSE;
14140         }
14141     }
14142
14143   new_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
14144   old_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
14145
14146   /* Compare ABIs.  The 64-bit ABI does not use EF_MIPS_ABI.  But, it
14147      does set EI_CLASS differently from any 32-bit ABI.  */
14148   if ((new_flags & EF_MIPS_ABI) != (old_flags & EF_MIPS_ABI)
14149       || (elf_elfheader (ibfd)->e_ident[EI_CLASS]
14150           != elf_elfheader (obfd)->e_ident[EI_CLASS]))
14151     {
14152       /* Only error if both are set (to different values).  */
14153       if (((new_flags & EF_MIPS_ABI) && (old_flags & EF_MIPS_ABI))
14154           || (elf_elfheader (ibfd)->e_ident[EI_CLASS]
14155               != elf_elfheader (obfd)->e_ident[EI_CLASS]))
14156         {
14157           (*_bfd_error_handler)
14158             (_("%B: ABI mismatch: linking %s module with previous %s modules"),
14159              ibfd,
14160              elf_mips_abi_name (ibfd),
14161              elf_mips_abi_name (obfd));
14162           ok = FALSE;
14163         }
14164       new_flags &= ~EF_MIPS_ABI;
14165       old_flags &= ~EF_MIPS_ABI;
14166     }
14167
14168   /* Compare ASEs.  Forbid linking MIPS16 and microMIPS ASE modules together
14169      and allow arbitrary mixing of the remaining ASEs (retain the union).  */
14170   if ((new_flags & EF_MIPS_ARCH_ASE) != (old_flags & EF_MIPS_ARCH_ASE))
14171     {
14172       int old_micro = old_flags & EF_MIPS_ARCH_ASE_MICROMIPS;
14173       int new_micro = new_flags & EF_MIPS_ARCH_ASE_MICROMIPS;
14174       int old_m16 = old_flags & EF_MIPS_ARCH_ASE_M16;
14175       int new_m16 = new_flags & EF_MIPS_ARCH_ASE_M16;
14176       int micro_mis = old_m16 && new_micro;
14177       int m16_mis = old_micro && new_m16;
14178
14179       if (m16_mis || micro_mis)
14180         {
14181           (*_bfd_error_handler)
14182             (_("%B: ASE mismatch: linking %s module with previous %s modules"),
14183              ibfd,
14184              m16_mis ? "MIPS16" : "microMIPS",
14185              m16_mis ? "microMIPS" : "MIPS16");
14186           ok = FALSE;
14187         }
14188
14189       elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ARCH_ASE;
14190
14191       new_flags &= ~ EF_MIPS_ARCH_ASE;
14192       old_flags &= ~ EF_MIPS_ARCH_ASE;
14193     }
14194
14195   /* Warn about any other mismatches */
14196   if (new_flags != old_flags)
14197     {
14198       (*_bfd_error_handler)
14199         (_("%B: uses different e_flags (0x%lx) fields than previous modules (0x%lx)"),
14200          ibfd, (unsigned long) new_flags,
14201          (unsigned long) old_flags);
14202       ok = FALSE;
14203     }
14204
14205   if (! ok)
14206     {
14207       bfd_set_error (bfd_error_bad_value);
14208       return FALSE;
14209     }
14210
14211   return TRUE;
14212 }
14213
14214 /* Function to keep MIPS specific file flags like as EF_MIPS_PIC.  */
14215
14216 bfd_boolean
14217 _bfd_mips_elf_set_private_flags (bfd *abfd, flagword flags)
14218 {
14219   BFD_ASSERT (!elf_flags_init (abfd)
14220               || elf_elfheader (abfd)->e_flags == flags);
14221
14222   elf_elfheader (abfd)->e_flags = flags;
14223   elf_flags_init (abfd) = TRUE;
14224   return TRUE;
14225 }
14226
14227 char *
14228 _bfd_mips_elf_get_target_dtag (bfd_vma dtag)
14229 {
14230   switch (dtag)
14231     {
14232     default: return "";
14233     case DT_MIPS_RLD_VERSION:
14234       return "MIPS_RLD_VERSION";
14235     case DT_MIPS_TIME_STAMP:
14236       return "MIPS_TIME_STAMP";
14237     case DT_MIPS_ICHECKSUM:
14238       return "MIPS_ICHECKSUM";
14239     case DT_MIPS_IVERSION:
14240       return "MIPS_IVERSION";
14241     case DT_MIPS_FLAGS:
14242       return "MIPS_FLAGS";
14243     case DT_MIPS_BASE_ADDRESS:
14244       return "MIPS_BASE_ADDRESS";
14245     case DT_MIPS_MSYM:
14246       return "MIPS_MSYM";
14247     case DT_MIPS_CONFLICT:
14248       return "MIPS_CONFLICT";
14249     case DT_MIPS_LIBLIST:
14250       return "MIPS_LIBLIST";
14251     case DT_MIPS_LOCAL_GOTNO:
14252       return "MIPS_LOCAL_GOTNO";
14253     case DT_MIPS_CONFLICTNO:
14254       return "MIPS_CONFLICTNO";
14255     case DT_MIPS_LIBLISTNO:
14256       return "MIPS_LIBLISTNO";
14257     case DT_MIPS_SYMTABNO:
14258       return "MIPS_SYMTABNO";
14259     case DT_MIPS_UNREFEXTNO:
14260       return "MIPS_UNREFEXTNO";
14261     case DT_MIPS_GOTSYM:
14262       return "MIPS_GOTSYM";
14263     case DT_MIPS_HIPAGENO:
14264       return "MIPS_HIPAGENO";
14265     case DT_MIPS_RLD_MAP:
14266       return "MIPS_RLD_MAP";
14267     case DT_MIPS_DELTA_CLASS:
14268       return "MIPS_DELTA_CLASS";
14269     case DT_MIPS_DELTA_CLASS_NO:
14270       return "MIPS_DELTA_CLASS_NO";
14271     case DT_MIPS_DELTA_INSTANCE:
14272       return "MIPS_DELTA_INSTANCE";
14273     case DT_MIPS_DELTA_INSTANCE_NO:
14274       return "MIPS_DELTA_INSTANCE_NO";
14275     case DT_MIPS_DELTA_RELOC:
14276       return "MIPS_DELTA_RELOC";
14277     case DT_MIPS_DELTA_RELOC_NO:
14278       return "MIPS_DELTA_RELOC_NO";
14279     case DT_MIPS_DELTA_SYM:
14280       return "MIPS_DELTA_SYM";
14281     case DT_MIPS_DELTA_SYM_NO:
14282       return "MIPS_DELTA_SYM_NO";
14283     case DT_MIPS_DELTA_CLASSSYM:
14284       return "MIPS_DELTA_CLASSSYM";
14285     case DT_MIPS_DELTA_CLASSSYM_NO:
14286       return "MIPS_DELTA_CLASSSYM_NO";
14287     case DT_MIPS_CXX_FLAGS:
14288       return "MIPS_CXX_FLAGS";
14289     case DT_MIPS_PIXIE_INIT:
14290       return "MIPS_PIXIE_INIT";
14291     case DT_MIPS_SYMBOL_LIB:
14292       return "MIPS_SYMBOL_LIB";
14293     case DT_MIPS_LOCALPAGE_GOTIDX:
14294       return "MIPS_LOCALPAGE_GOTIDX";
14295     case DT_MIPS_LOCAL_GOTIDX:
14296       return "MIPS_LOCAL_GOTIDX";
14297     case DT_MIPS_HIDDEN_GOTIDX:
14298       return "MIPS_HIDDEN_GOTIDX";
14299     case DT_MIPS_PROTECTED_GOTIDX:
14300       return "MIPS_PROTECTED_GOT_IDX";
14301     case DT_MIPS_OPTIONS:
14302       return "MIPS_OPTIONS";
14303     case DT_MIPS_INTERFACE:
14304       return "MIPS_INTERFACE";
14305     case DT_MIPS_DYNSTR_ALIGN:
14306       return "DT_MIPS_DYNSTR_ALIGN";
14307     case DT_MIPS_INTERFACE_SIZE:
14308       return "DT_MIPS_INTERFACE_SIZE";
14309     case DT_MIPS_RLD_TEXT_RESOLVE_ADDR:
14310       return "DT_MIPS_RLD_TEXT_RESOLVE_ADDR";
14311     case DT_MIPS_PERF_SUFFIX:
14312       return "DT_MIPS_PERF_SUFFIX";
14313     case DT_MIPS_COMPACT_SIZE:
14314       return "DT_MIPS_COMPACT_SIZE";
14315     case DT_MIPS_GP_VALUE:
14316       return "DT_MIPS_GP_VALUE";
14317     case DT_MIPS_AUX_DYNAMIC:
14318       return "DT_MIPS_AUX_DYNAMIC";
14319     case DT_MIPS_PLTGOT:
14320       return "DT_MIPS_PLTGOT";
14321     case DT_MIPS_RWPLT:
14322       return "DT_MIPS_RWPLT";
14323     }
14324 }
14325
14326 bfd_boolean
14327 _bfd_mips_elf_print_private_bfd_data (bfd *abfd, void *ptr)
14328 {
14329   FILE *file = ptr;
14330
14331   BFD_ASSERT (abfd != NULL && ptr != NULL);
14332
14333   /* Print normal ELF private data.  */
14334   _bfd_elf_print_private_bfd_data (abfd, ptr);
14335
14336   /* xgettext:c-format */
14337   fprintf (file, _("private flags = %lx:"), elf_elfheader (abfd)->e_flags);
14338
14339   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O32)
14340     fprintf (file, _(" [abi=O32]"));
14341   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O64)
14342     fprintf (file, _(" [abi=O64]"));
14343   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32)
14344     fprintf (file, _(" [abi=EABI32]"));
14345   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI64)
14346     fprintf (file, _(" [abi=EABI64]"));
14347   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI))
14348     fprintf (file, _(" [abi unknown]"));
14349   else if (ABI_N32_P (abfd))
14350     fprintf (file, _(" [abi=N32]"));
14351   else if (ABI_64_P (abfd))
14352     fprintf (file, _(" [abi=64]"));
14353   else
14354     fprintf (file, _(" [no abi set]"));
14355
14356   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1)
14357     fprintf (file, " [mips1]");
14358   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2)
14359     fprintf (file, " [mips2]");
14360   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_3)
14361     fprintf (file, " [mips3]");
14362   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_4)
14363     fprintf (file, " [mips4]");
14364   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_5)
14365     fprintf (file, " [mips5]");
14366   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32)
14367     fprintf (file, " [mips32]");
14368   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64)
14369     fprintf (file, " [mips64]");
14370   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2)
14371     fprintf (file, " [mips32r2]");
14372   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64R2)
14373     fprintf (file, " [mips64r2]");
14374   else
14375     fprintf (file, _(" [unknown ISA]"));
14376
14377   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MDMX)
14378     fprintf (file, " [mdmx]");
14379
14380   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_M16)
14381     fprintf (file, " [mips16]");
14382
14383   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MICROMIPS)
14384     fprintf (file, " [micromips]");
14385
14386   if (elf_elfheader (abfd)->e_flags & EF_MIPS_32BITMODE)
14387     fprintf (file, " [32bitmode]");
14388   else
14389     fprintf (file, _(" [not 32bitmode]"));
14390
14391   if (elf_elfheader (abfd)->e_flags & EF_MIPS_NOREORDER)
14392     fprintf (file, " [noreorder]");
14393
14394   if (elf_elfheader (abfd)->e_flags & EF_MIPS_PIC)
14395     fprintf (file, " [PIC]");
14396
14397   if (elf_elfheader (abfd)->e_flags & EF_MIPS_CPIC)
14398     fprintf (file, " [CPIC]");
14399
14400   if (elf_elfheader (abfd)->e_flags & EF_MIPS_XGOT)
14401     fprintf (file, " [XGOT]");
14402
14403   if (elf_elfheader (abfd)->e_flags & EF_MIPS_UCODE)
14404     fprintf (file, " [UCODE]");
14405
14406   fputc ('\n', file);
14407
14408   return TRUE;
14409 }
14410
14411 const struct bfd_elf_special_section _bfd_mips_elf_special_sections[] =
14412 {
14413   { STRING_COMMA_LEN (".lit4"),   0, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
14414   { STRING_COMMA_LEN (".lit8"),   0, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
14415   { STRING_COMMA_LEN (".mdebug"), 0, SHT_MIPS_DEBUG, 0 },
14416   { STRING_COMMA_LEN (".sbss"),  -2, SHT_NOBITS,     SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
14417   { STRING_COMMA_LEN (".sdata"), -2, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
14418   { STRING_COMMA_LEN (".ucode"),  0, SHT_MIPS_UCODE, 0 },
14419   { NULL,                     0,  0, 0,              0 }
14420 };
14421
14422 /* Merge non visibility st_other attributes.  Ensure that the
14423    STO_OPTIONAL flag is copied into h->other, even if this is not a
14424    definiton of the symbol.  */
14425 void
14426 _bfd_mips_elf_merge_symbol_attribute (struct elf_link_hash_entry *h,
14427                                       const Elf_Internal_Sym *isym,
14428                                       bfd_boolean definition,
14429                                       bfd_boolean dynamic ATTRIBUTE_UNUSED)
14430 {
14431   if ((isym->st_other & ~ELF_ST_VISIBILITY (-1)) != 0)
14432     {
14433       unsigned char other;
14434
14435       other = (definition ? isym->st_other : h->other);
14436       other &= ~ELF_ST_VISIBILITY (-1);
14437       h->other = other | ELF_ST_VISIBILITY (h->other);
14438     }
14439
14440   if (!definition
14441       && ELF_MIPS_IS_OPTIONAL (isym->st_other))
14442     h->other |= STO_OPTIONAL;
14443 }
14444
14445 /* Decide whether an undefined symbol is special and can be ignored.
14446    This is the case for OPTIONAL symbols on IRIX.  */
14447 bfd_boolean
14448 _bfd_mips_elf_ignore_undef_symbol (struct elf_link_hash_entry *h)
14449 {
14450   return ELF_MIPS_IS_OPTIONAL (h->other) ? TRUE : FALSE;
14451 }
14452
14453 bfd_boolean
14454 _bfd_mips_elf_common_definition (Elf_Internal_Sym *sym)
14455 {
14456   return (sym->st_shndx == SHN_COMMON
14457           || sym->st_shndx == SHN_MIPS_ACOMMON
14458           || sym->st_shndx == SHN_MIPS_SCOMMON);
14459 }
14460
14461 /* Return address for Ith PLT stub in section PLT, for relocation REL
14462    or (bfd_vma) -1 if it should not be included.  */
14463
14464 bfd_vma
14465 _bfd_mips_elf_plt_sym_val (bfd_vma i, const asection *plt,
14466                            const arelent *rel ATTRIBUTE_UNUSED)
14467 {
14468   return (plt->vma
14469           + 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry)
14470           + i * 4 * ARRAY_SIZE (mips_exec_plt_entry));
14471 }
14472
14473 void
14474 _bfd_mips_post_process_headers (bfd *abfd, struct bfd_link_info *link_info)
14475 {
14476   struct mips_elf_link_hash_table *htab;
14477   Elf_Internal_Ehdr *i_ehdrp;
14478
14479   i_ehdrp = elf_elfheader (abfd);
14480   if (link_info)
14481     {
14482       htab = mips_elf_hash_table (link_info);
14483       BFD_ASSERT (htab != NULL);
14484
14485       if (htab->use_plts_and_copy_relocs && !htab->is_vxworks)
14486         i_ehdrp->e_ident[EI_ABIVERSION] = 1;
14487     }
14488 }