bfd/
[external/binutils.git] / bfd / elfxx-mips.c
1 /* MIPS-specific support for ELF
2    Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
3    2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
4    Free Software Foundation, Inc.
5
6    Most of the information added by Ian Lance Taylor, Cygnus Support,
7    <ian@cygnus.com>.
8    N32/64 ABI support added by Mark Mitchell, CodeSourcery, LLC.
9    <mark@codesourcery.com>
10    Traditional MIPS targets support added by Koundinya.K, Dansk Data
11    Elektronik & Operations Research Group. <kk@ddeorg.soft.net>
12
13    This file is part of BFD, the Binary File Descriptor library.
14
15    This program is free software; you can redistribute it and/or modify
16    it under the terms of the GNU General Public License as published by
17    the Free Software Foundation; either version 3 of the License, or
18    (at your option) any later version.
19
20    This program is distributed in the hope that it will be useful,
21    but WITHOUT ANY WARRANTY; without even the implied warranty of
22    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
23    GNU General Public License for more details.
24
25    You should have received a copy of the GNU General Public License
26    along with this program; if not, write to the Free Software
27    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
28    MA 02110-1301, USA.  */
29
30
31 /* This file handles functionality common to the different MIPS ABI's.  */
32
33 #include "sysdep.h"
34 #include "bfd.h"
35 #include "libbfd.h"
36 #include "libiberty.h"
37 #include "elf-bfd.h"
38 #include "elfxx-mips.h"
39 #include "elf/mips.h"
40 #include "elf-vxworks.h"
41
42 /* Get the ECOFF swapping routines.  */
43 #include "coff/sym.h"
44 #include "coff/symconst.h"
45 #include "coff/ecoff.h"
46 #include "coff/mips.h"
47
48 #include "hashtab.h"
49
50 /* This structure is used to hold information about one GOT entry.
51    There are three types of entry:
52
53       (1) absolute addresses
54             (abfd == NULL)
55       (2) SYMBOL + OFFSET addresses, where SYMBOL is local to an input bfd
56             (abfd != NULL, symndx >= 0)
57       (3) SYMBOL addresses, where SYMBOL is not local to an input bfd
58             (abfd != NULL, symndx == -1)
59
60    Type (3) entries are treated differently for different types of GOT.
61    In the "master" GOT -- i.e.  the one that describes every GOT
62    reference needed in the link -- the mips_got_entry is keyed on both
63    the symbol and the input bfd that references it.  If it turns out
64    that we need multiple GOTs, we can then use this information to
65    create separate GOTs for each input bfd.
66
67    However, we want each of these separate GOTs to have at most one
68    entry for a given symbol, so their type (3) entries are keyed only
69    on the symbol.  The input bfd given by the "abfd" field is somewhat
70    arbitrary in this case.
71
72    This means that when there are multiple GOTs, each GOT has a unique
73    mips_got_entry for every symbol within it.  We can therefore use the
74    mips_got_entry fields (tls_type and gotidx) to track the symbol's
75    GOT index.
76
77    However, if it turns out that we need only a single GOT, we continue
78    to use the master GOT to describe it.  There may therefore be several
79    mips_got_entries for the same symbol, each with a different input bfd.
80    We want to make sure that each symbol gets a unique GOT entry, so when
81    there's a single GOT, we use the symbol's hash entry, not the
82    mips_got_entry fields, to track a symbol's GOT index.  */
83 struct mips_got_entry
84 {
85   /* The input bfd in which the symbol is defined.  */
86   bfd *abfd;
87   /* The index of the symbol, as stored in the relocation r_info, if
88      we have a local symbol; -1 otherwise.  */
89   long symndx;
90   union
91   {
92     /* If abfd == NULL, an address that must be stored in the got.  */
93     bfd_vma address;
94     /* If abfd != NULL && symndx != -1, the addend of the relocation
95        that should be added to the symbol value.  */
96     bfd_vma addend;
97     /* If abfd != NULL && symndx == -1, the hash table entry
98        corresponding to symbol in the GOT.  The symbol's entry
99        is in the local area if h->global_got_area is GGA_NONE,
100        otherwise it is in the global area.  */
101     struct mips_elf_link_hash_entry *h;
102   } d;
103
104   /* The TLS types included in this GOT entry (specifically, GD and
105      IE).  The GD and IE flags can be added as we encounter new
106      relocations.  LDM can also be set; it will always be alone, not
107      combined with any GD or IE flags.  An LDM GOT entry will be
108      a local symbol entry with r_symndx == 0.  */
109   unsigned char tls_type;
110
111   /* The offset from the beginning of the .got section to the entry
112      corresponding to this symbol+addend.  If it's a global symbol
113      whose offset is yet to be decided, it's going to be -1.  */
114   long gotidx;
115 };
116
117 /* This structure describes a range of addends: [MIN_ADDEND, MAX_ADDEND].
118    The structures form a non-overlapping list that is sorted by increasing
119    MIN_ADDEND.  */
120 struct mips_got_page_range
121 {
122   struct mips_got_page_range *next;
123   bfd_signed_vma min_addend;
124   bfd_signed_vma max_addend;
125 };
126
127 /* This structure describes the range of addends that are applied to page
128    relocations against a given symbol.  */
129 struct mips_got_page_entry
130 {
131   /* The input bfd in which the symbol is defined.  */
132   bfd *abfd;
133   /* The index of the symbol, as stored in the relocation r_info.  */
134   long symndx;
135   /* The ranges for this page entry.  */
136   struct mips_got_page_range *ranges;
137   /* The maximum number of page entries needed for RANGES.  */
138   bfd_vma num_pages;
139 };
140
141 /* This structure is used to hold .got information when linking.  */
142
143 struct mips_got_info
144 {
145   /* The global symbol in the GOT with the lowest index in the dynamic
146      symbol table.  */
147   struct elf_link_hash_entry *global_gotsym;
148   /* The number of global .got entries.  */
149   unsigned int global_gotno;
150   /* The number of global .got entries that are in the GGA_RELOC_ONLY area.  */
151   unsigned int reloc_only_gotno;
152   /* The number of .got slots used for TLS.  */
153   unsigned int tls_gotno;
154   /* The first unused TLS .got entry.  Used only during
155      mips_elf_initialize_tls_index.  */
156   unsigned int tls_assigned_gotno;
157   /* The number of local .got entries, eventually including page entries.  */
158   unsigned int local_gotno;
159   /* The maximum number of page entries needed.  */
160   unsigned int page_gotno;
161   /* The number of local .got entries we have used.  */
162   unsigned int assigned_gotno;
163   /* A hash table holding members of the got.  */
164   struct htab *got_entries;
165   /* A hash table of mips_got_page_entry structures.  */
166   struct htab *got_page_entries;
167   /* A hash table mapping input bfds to other mips_got_info.  NULL
168      unless multi-got was necessary.  */
169   struct htab *bfd2got;
170   /* In multi-got links, a pointer to the next got (err, rather, most
171      of the time, it points to the previous got).  */
172   struct mips_got_info *next;
173   /* This is the GOT index of the TLS LDM entry for the GOT, MINUS_ONE
174      for none, or MINUS_TWO for not yet assigned.  This is needed
175      because a single-GOT link may have multiple hash table entries
176      for the LDM.  It does not get initialized in multi-GOT mode.  */
177   bfd_vma tls_ldm_offset;
178 };
179
180 /* Map an input bfd to a got in a multi-got link.  */
181
182 struct mips_elf_bfd2got_hash
183 {
184   bfd *bfd;
185   struct mips_got_info *g;
186 };
187
188 /* Structure passed when traversing the bfd2got hash table, used to
189    create and merge bfd's gots.  */
190
191 struct mips_elf_got_per_bfd_arg
192 {
193   /* A hashtable that maps bfds to gots.  */
194   htab_t bfd2got;
195   /* The output bfd.  */
196   bfd *obfd;
197   /* The link information.  */
198   struct bfd_link_info *info;
199   /* A pointer to the primary got, i.e., the one that's going to get
200      the implicit relocations from DT_MIPS_LOCAL_GOTNO and
201      DT_MIPS_GOTSYM.  */
202   struct mips_got_info *primary;
203   /* A non-primary got we're trying to merge with other input bfd's
204      gots.  */
205   struct mips_got_info *current;
206   /* The maximum number of got entries that can be addressed with a
207      16-bit offset.  */
208   unsigned int max_count;
209   /* The maximum number of page entries needed by each got.  */
210   unsigned int max_pages;
211   /* The total number of global entries which will live in the
212      primary got and be automatically relocated.  This includes
213      those not referenced by the primary GOT but included in
214      the "master" GOT.  */
215   unsigned int global_count;
216 };
217
218 /* Another structure used to pass arguments for got entries traversal.  */
219
220 struct mips_elf_set_global_got_offset_arg
221 {
222   struct mips_got_info *g;
223   int value;
224   unsigned int needed_relocs;
225   struct bfd_link_info *info;
226 };
227
228 /* A structure used to count TLS relocations or GOT entries, for GOT
229    entry or ELF symbol table traversal.  */
230
231 struct mips_elf_count_tls_arg
232 {
233   struct bfd_link_info *info;
234   unsigned int needed;
235 };
236
237 struct _mips_elf_section_data
238 {
239   struct bfd_elf_section_data elf;
240   union
241   {
242     bfd_byte *tdata;
243   } u;
244 };
245
246 #define mips_elf_section_data(sec) \
247   ((struct _mips_elf_section_data *) elf_section_data (sec))
248
249 #define is_mips_elf(bfd)                                \
250   (bfd_get_flavour (bfd) == bfd_target_elf_flavour      \
251    && elf_tdata (bfd) != NULL                           \
252    && elf_object_id (bfd) == MIPS_ELF_DATA)
253
254 /* The ABI says that every symbol used by dynamic relocations must have
255    a global GOT entry.  Among other things, this provides the dynamic
256    linker with a free, directly-indexed cache.  The GOT can therefore
257    contain symbols that are not referenced by GOT relocations themselves
258    (in other words, it may have symbols that are not referenced by things
259    like R_MIPS_GOT16 and R_MIPS_GOT_PAGE).
260
261    GOT relocations are less likely to overflow if we put the associated
262    GOT entries towards the beginning.  We therefore divide the global
263    GOT entries into two areas: "normal" and "reloc-only".  Entries in
264    the first area can be used for both dynamic relocations and GP-relative
265    accesses, while those in the "reloc-only" area are for dynamic
266    relocations only.
267
268    These GGA_* ("Global GOT Area") values are organised so that lower
269    values are more general than higher values.  Also, non-GGA_NONE
270    values are ordered by the position of the area in the GOT.  */
271 #define GGA_NORMAL 0
272 #define GGA_RELOC_ONLY 1
273 #define GGA_NONE 2
274
275 /* Information about a non-PIC interface to a PIC function.  There are
276    two ways of creating these interfaces.  The first is to add:
277
278         lui     $25,%hi(func)
279         addiu   $25,$25,%lo(func)
280
281    immediately before a PIC function "func".  The second is to add:
282
283         lui     $25,%hi(func)
284         j       func
285         addiu   $25,$25,%lo(func)
286
287    to a separate trampoline section.
288
289    Stubs of the first kind go in a new section immediately before the
290    target function.  Stubs of the second kind go in a single section
291    pointed to by the hash table's "strampoline" field.  */
292 struct mips_elf_la25_stub {
293   /* The generated section that contains this stub.  */
294   asection *stub_section;
295
296   /* The offset of the stub from the start of STUB_SECTION.  */
297   bfd_vma offset;
298
299   /* One symbol for the original function.  Its location is available
300      in H->root.root.u.def.  */
301   struct mips_elf_link_hash_entry *h;
302 };
303
304 /* Macros for populating a mips_elf_la25_stub.  */
305
306 #define LA25_LUI(VAL) (0x3c190000 | (VAL))      /* lui t9,VAL */
307 #define LA25_J(VAL) (0x08000000 | (((VAL) >> 2) & 0x3ffffff)) /* j VAL */
308 #define LA25_ADDIU(VAL) (0x27390000 | (VAL))    /* addiu t9,t9,VAL */
309 #define LA25_LUI_MICROMIPS(VAL)                                         \
310   (0x41b90000 | (VAL))                          /* lui t9,VAL */
311 #define LA25_J_MICROMIPS(VAL)                                           \
312   (0xd4000000 | (((VAL) >> 1) & 0x3ffffff))     /* j VAL */
313 #define LA25_ADDIU_MICROMIPS(VAL)                                       \
314   (0x33390000 | (VAL))                          /* addiu t9,t9,VAL */
315
316 /* This structure is passed to mips_elf_sort_hash_table_f when sorting
317    the dynamic symbols.  */
318
319 struct mips_elf_hash_sort_data
320 {
321   /* The symbol in the global GOT with the lowest dynamic symbol table
322      index.  */
323   struct elf_link_hash_entry *low;
324   /* The least dynamic symbol table index corresponding to a non-TLS
325      symbol with a GOT entry.  */
326   long min_got_dynindx;
327   /* The greatest dynamic symbol table index corresponding to a symbol
328      with a GOT entry that is not referenced (e.g., a dynamic symbol
329      with dynamic relocations pointing to it from non-primary GOTs).  */
330   long max_unref_got_dynindx;
331   /* The greatest dynamic symbol table index not corresponding to a
332      symbol without a GOT entry.  */
333   long max_non_got_dynindx;
334 };
335
336 /* The MIPS ELF linker needs additional information for each symbol in
337    the global hash table.  */
338
339 struct mips_elf_link_hash_entry
340 {
341   struct elf_link_hash_entry root;
342
343   /* External symbol information.  */
344   EXTR esym;
345
346   /* The la25 stub we have created for ths symbol, if any.  */
347   struct mips_elf_la25_stub *la25_stub;
348
349   /* Number of R_MIPS_32, R_MIPS_REL32, or R_MIPS_64 relocs against
350      this symbol.  */
351   unsigned int possibly_dynamic_relocs;
352
353   /* If there is a stub that 32 bit functions should use to call this
354      16 bit function, this points to the section containing the stub.  */
355   asection *fn_stub;
356
357   /* If there is a stub that 16 bit functions should use to call this
358      32 bit function, this points to the section containing the stub.  */
359   asection *call_stub;
360
361   /* This is like the call_stub field, but it is used if the function
362      being called returns a floating point value.  */
363   asection *call_fp_stub;
364
365 #define GOT_NORMAL      0
366 #define GOT_TLS_GD      1
367 #define GOT_TLS_LDM     2
368 #define GOT_TLS_IE      4
369 #define GOT_TLS_OFFSET_DONE    0x40
370 #define GOT_TLS_DONE    0x80
371   unsigned char tls_type;
372
373   /* This is only used in single-GOT mode; in multi-GOT mode there
374      is one mips_got_entry per GOT entry, so the offset is stored
375      there.  In single-GOT mode there may be many mips_got_entry
376      structures all referring to the same GOT slot.  It might be
377      possible to use root.got.offset instead, but that field is
378      overloaded already.  */
379   bfd_vma tls_got_offset;
380
381   /* The highest GGA_* value that satisfies all references to this symbol.  */
382   unsigned int global_got_area : 2;
383
384   /* True if all GOT relocations against this symbol are for calls.  This is
385      a looser condition than no_fn_stub below, because there may be other
386      non-call non-GOT relocations against the symbol.  */
387   unsigned int got_only_for_calls : 1;
388
389   /* True if one of the relocations described by possibly_dynamic_relocs
390      is against a readonly section.  */
391   unsigned int readonly_reloc : 1;
392
393   /* True if there is a relocation against this symbol that must be
394      resolved by the static linker (in other words, if the relocation
395      cannot possibly be made dynamic).  */
396   unsigned int has_static_relocs : 1;
397
398   /* True if we must not create a .MIPS.stubs entry for this symbol.
399      This is set, for example, if there are relocations related to
400      taking the function's address, i.e. any but R_MIPS_CALL*16 ones.
401      See "MIPS ABI Supplement, 3rd Edition", p. 4-20.  */
402   unsigned int no_fn_stub : 1;
403
404   /* Whether we need the fn_stub; this is true if this symbol appears
405      in any relocs other than a 16 bit call.  */
406   unsigned int need_fn_stub : 1;
407
408   /* True if this symbol is referenced by branch relocations from
409      any non-PIC input file.  This is used to determine whether an
410      la25 stub is required.  */
411   unsigned int has_nonpic_branches : 1;
412
413   /* Does this symbol need a traditional MIPS lazy-binding stub
414      (as opposed to a PLT entry)?  */
415   unsigned int needs_lazy_stub : 1;
416 };
417
418 /* MIPS ELF linker hash table.  */
419
420 struct mips_elf_link_hash_table
421 {
422   struct elf_link_hash_table root;
423
424   /* The number of .rtproc entries.  */
425   bfd_size_type procedure_count;
426
427   /* The size of the .compact_rel section (if SGI_COMPAT).  */
428   bfd_size_type compact_rel_size;
429
430   /* This flag indicates that the value of DT_MIPS_RLD_MAP dynamic entry
431      is set to the address of __rld_obj_head as in IRIX5 and IRIX6.  */
432   bfd_boolean use_rld_obj_head;
433
434   /* The  __rld_map or __rld_obj_head symbol. */
435   struct elf_link_hash_entry *rld_symbol;
436
437   /* This is set if we see any mips16 stub sections.  */
438   bfd_boolean mips16_stubs_seen;
439
440   /* True if we can generate copy relocs and PLTs.  */
441   bfd_boolean use_plts_and_copy_relocs;
442
443   /* True if we're generating code for VxWorks.  */
444   bfd_boolean is_vxworks;
445
446   /* True if we already reported the small-data section overflow.  */
447   bfd_boolean small_data_overflow_reported;
448
449   /* Shortcuts to some dynamic sections, or NULL if they are not
450      being used.  */
451   asection *srelbss;
452   asection *sdynbss;
453   asection *srelplt;
454   asection *srelplt2;
455   asection *sgotplt;
456   asection *splt;
457   asection *sstubs;
458   asection *sgot;
459
460   /* The master GOT information.  */
461   struct mips_got_info *got_info;
462
463   /* The size of the PLT header in bytes.  */
464   bfd_vma plt_header_size;
465
466   /* The size of a PLT entry in bytes.  */
467   bfd_vma plt_entry_size;
468
469   /* The number of functions that need a lazy-binding stub.  */
470   bfd_vma lazy_stub_count;
471
472   /* The size of a function stub entry in bytes.  */
473   bfd_vma function_stub_size;
474
475   /* The number of reserved entries at the beginning of the GOT.  */
476   unsigned int reserved_gotno;
477
478   /* The section used for mips_elf_la25_stub trampolines.
479      See the comment above that structure for details.  */
480   asection *strampoline;
481
482   /* A table of mips_elf_la25_stubs, indexed by (input_section, offset)
483      pairs.  */
484   htab_t la25_stubs;
485
486   /* A function FN (NAME, IS, OS) that creates a new input section
487      called NAME and links it to output section OS.  If IS is nonnull,
488      the new section should go immediately before it, otherwise it
489      should go at the (current) beginning of OS.
490
491      The function returns the new section on success, otherwise it
492      returns null.  */
493   asection *(*add_stub_section) (const char *, asection *, asection *);
494 };
495
496 /* Get the MIPS ELF linker hash table from a link_info structure.  */
497
498 #define mips_elf_hash_table(p) \
499   (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
500   == MIPS_ELF_DATA ? ((struct mips_elf_link_hash_table *) ((p)->hash)) : NULL)
501
502 /* A structure used to communicate with htab_traverse callbacks.  */
503 struct mips_htab_traverse_info
504 {
505   /* The usual link-wide information.  */
506   struct bfd_link_info *info;
507   bfd *output_bfd;
508
509   /* Starts off FALSE and is set to TRUE if the link should be aborted.  */
510   bfd_boolean error;
511 };
512
513 /* MIPS ELF private object data.  */
514
515 struct mips_elf_obj_tdata
516 {
517   /* Generic ELF private object data.  */
518   struct elf_obj_tdata root;
519
520   /* Input BFD providing Tag_GNU_MIPS_ABI_FP attribute for output.  */
521   bfd *abi_fp_bfd;
522 };
523
524 /* Get MIPS ELF private object data from BFD's tdata.  */
525
526 #define mips_elf_tdata(bfd) \
527   ((struct mips_elf_obj_tdata *) (bfd)->tdata.any)
528
529 #define TLS_RELOC_P(r_type) \
530   (r_type == R_MIPS_TLS_DTPMOD32                \
531    || r_type == R_MIPS_TLS_DTPMOD64             \
532    || r_type == R_MIPS_TLS_DTPREL32             \
533    || r_type == R_MIPS_TLS_DTPREL64             \
534    || r_type == R_MIPS_TLS_GD                   \
535    || r_type == R_MIPS_TLS_LDM                  \
536    || r_type == R_MIPS_TLS_DTPREL_HI16          \
537    || r_type == R_MIPS_TLS_DTPREL_LO16          \
538    || r_type == R_MIPS_TLS_GOTTPREL             \
539    || r_type == R_MIPS_TLS_TPREL32              \
540    || r_type == R_MIPS_TLS_TPREL64              \
541    || r_type == R_MIPS_TLS_TPREL_HI16           \
542    || r_type == R_MIPS_TLS_TPREL_LO16           \
543    || r_type == R_MIPS16_TLS_GD                 \
544    || r_type == R_MIPS16_TLS_LDM                \
545    || r_type == R_MIPS16_TLS_DTPREL_HI16        \
546    || r_type == R_MIPS16_TLS_DTPREL_LO16        \
547    || r_type == R_MIPS16_TLS_GOTTPREL           \
548    || r_type == R_MIPS16_TLS_TPREL_HI16         \
549    || r_type == R_MIPS16_TLS_TPREL_LO16         \
550    || r_type == R_MICROMIPS_TLS_GD              \
551    || r_type == R_MICROMIPS_TLS_LDM             \
552    || r_type == R_MICROMIPS_TLS_DTPREL_HI16     \
553    || r_type == R_MICROMIPS_TLS_DTPREL_LO16     \
554    || r_type == R_MICROMIPS_TLS_GOTTPREL        \
555    || r_type == R_MICROMIPS_TLS_TPREL_HI16      \
556    || r_type == R_MICROMIPS_TLS_TPREL_LO16)
557
558 /* Structure used to pass information to mips_elf_output_extsym.  */
559
560 struct extsym_info
561 {
562   bfd *abfd;
563   struct bfd_link_info *info;
564   struct ecoff_debug_info *debug;
565   const struct ecoff_debug_swap *swap;
566   bfd_boolean failed;
567 };
568
569 /* The names of the runtime procedure table symbols used on IRIX5.  */
570
571 static const char * const mips_elf_dynsym_rtproc_names[] =
572 {
573   "_procedure_table",
574   "_procedure_string_table",
575   "_procedure_table_size",
576   NULL
577 };
578
579 /* These structures are used to generate the .compact_rel section on
580    IRIX5.  */
581
582 typedef struct
583 {
584   unsigned long id1;            /* Always one?  */
585   unsigned long num;            /* Number of compact relocation entries.  */
586   unsigned long id2;            /* Always two?  */
587   unsigned long offset;         /* The file offset of the first relocation.  */
588   unsigned long reserved0;      /* Zero?  */
589   unsigned long reserved1;      /* Zero?  */
590 } Elf32_compact_rel;
591
592 typedef struct
593 {
594   bfd_byte id1[4];
595   bfd_byte num[4];
596   bfd_byte id2[4];
597   bfd_byte offset[4];
598   bfd_byte reserved0[4];
599   bfd_byte reserved1[4];
600 } Elf32_External_compact_rel;
601
602 typedef struct
603 {
604   unsigned int ctype : 1;       /* 1: long 0: short format. See below.  */
605   unsigned int rtype : 4;       /* Relocation types. See below.  */
606   unsigned int dist2to : 8;
607   unsigned int relvaddr : 19;   /* (VADDR - vaddr of the previous entry)/ 4 */
608   unsigned long konst;          /* KONST field. See below.  */
609   unsigned long vaddr;          /* VADDR to be relocated.  */
610 } Elf32_crinfo;
611
612 typedef struct
613 {
614   unsigned int ctype : 1;       /* 1: long 0: short format. See below.  */
615   unsigned int rtype : 4;       /* Relocation types. See below.  */
616   unsigned int dist2to : 8;
617   unsigned int relvaddr : 19;   /* (VADDR - vaddr of the previous entry)/ 4 */
618   unsigned long konst;          /* KONST field. See below.  */
619 } Elf32_crinfo2;
620
621 typedef struct
622 {
623   bfd_byte info[4];
624   bfd_byte konst[4];
625   bfd_byte vaddr[4];
626 } Elf32_External_crinfo;
627
628 typedef struct
629 {
630   bfd_byte info[4];
631   bfd_byte konst[4];
632 } Elf32_External_crinfo2;
633
634 /* These are the constants used to swap the bitfields in a crinfo.  */
635
636 #define CRINFO_CTYPE (0x1)
637 #define CRINFO_CTYPE_SH (31)
638 #define CRINFO_RTYPE (0xf)
639 #define CRINFO_RTYPE_SH (27)
640 #define CRINFO_DIST2TO (0xff)
641 #define CRINFO_DIST2TO_SH (19)
642 #define CRINFO_RELVADDR (0x7ffff)
643 #define CRINFO_RELVADDR_SH (0)
644
645 /* A compact relocation info has long (3 words) or short (2 words)
646    formats.  A short format doesn't have VADDR field and relvaddr
647    fields contains ((VADDR - vaddr of the previous entry) >> 2).  */
648 #define CRF_MIPS_LONG                   1
649 #define CRF_MIPS_SHORT                  0
650
651 /* There are 4 types of compact relocation at least. The value KONST
652    has different meaning for each type:
653
654    (type)               (konst)
655    CT_MIPS_REL32        Address in data
656    CT_MIPS_WORD         Address in word (XXX)
657    CT_MIPS_GPHI_LO      GP - vaddr
658    CT_MIPS_JMPAD        Address to jump
659    */
660
661 #define CRT_MIPS_REL32                  0xa
662 #define CRT_MIPS_WORD                   0xb
663 #define CRT_MIPS_GPHI_LO                0xc
664 #define CRT_MIPS_JMPAD                  0xd
665
666 #define mips_elf_set_cr_format(x,format)        ((x).ctype = (format))
667 #define mips_elf_set_cr_type(x,type)            ((x).rtype = (type))
668 #define mips_elf_set_cr_dist2to(x,v)            ((x).dist2to = (v))
669 #define mips_elf_set_cr_relvaddr(x,d)           ((x).relvaddr = (d)<<2)
670 \f
671 /* The structure of the runtime procedure descriptor created by the
672    loader for use by the static exception system.  */
673
674 typedef struct runtime_pdr {
675         bfd_vma adr;            /* Memory address of start of procedure.  */
676         long    regmask;        /* Save register mask.  */
677         long    regoffset;      /* Save register offset.  */
678         long    fregmask;       /* Save floating point register mask.  */
679         long    fregoffset;     /* Save floating point register offset.  */
680         long    frameoffset;    /* Frame size.  */
681         short   framereg;       /* Frame pointer register.  */
682         short   pcreg;          /* Offset or reg of return pc.  */
683         long    irpss;          /* Index into the runtime string table.  */
684         long    reserved;
685         struct exception_info *exception_info;/* Pointer to exception array.  */
686 } RPDR, *pRPDR;
687 #define cbRPDR sizeof (RPDR)
688 #define rpdNil ((pRPDR) 0)
689 \f
690 static struct mips_got_entry *mips_elf_create_local_got_entry
691   (bfd *, struct bfd_link_info *, bfd *, bfd_vma, unsigned long,
692    struct mips_elf_link_hash_entry *, int);
693 static bfd_boolean mips_elf_sort_hash_table_f
694   (struct mips_elf_link_hash_entry *, void *);
695 static bfd_vma mips_elf_high
696   (bfd_vma);
697 static bfd_boolean mips_elf_create_dynamic_relocation
698   (bfd *, struct bfd_link_info *, const Elf_Internal_Rela *,
699    struct mips_elf_link_hash_entry *, asection *, bfd_vma,
700    bfd_vma *, asection *);
701 static hashval_t mips_elf_got_entry_hash
702   (const void *);
703 static bfd_vma mips_elf_adjust_gp
704   (bfd *, struct mips_got_info *, bfd *);
705 static struct mips_got_info *mips_elf_got_for_ibfd
706   (struct mips_got_info *, bfd *);
707
708 /* This will be used when we sort the dynamic relocation records.  */
709 static bfd *reldyn_sorting_bfd;
710
711 /* True if ABFD is for CPUs with load interlocking that include
712    non-MIPS1 CPUs and R3900.  */
713 #define LOAD_INTERLOCKS_P(abfd) \
714   (   ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) != E_MIPS_ARCH_1) \
715    || ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == E_MIPS_MACH_3900))
716
717 /* True if ABFD is for CPUs that are faster if JAL is converted to BAL.
718    This should be safe for all architectures.  We enable this predicate
719    for RM9000 for now.  */
720 #define JAL_TO_BAL_P(abfd) \
721   ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == E_MIPS_MACH_9000)
722
723 /* True if ABFD is for CPUs that are faster if JALR is converted to BAL.
724    This should be safe for all architectures.  We enable this predicate for
725    all CPUs.  */
726 #define JALR_TO_BAL_P(abfd) 1
727
728 /* True if ABFD is for CPUs that are faster if JR is converted to B.
729    This should be safe for all architectures.  We enable this predicate for
730    all CPUs.  */
731 #define JR_TO_B_P(abfd) 1
732
733 /* True if ABFD is a PIC object.  */
734 #define PIC_OBJECT_P(abfd) \
735   ((elf_elfheader (abfd)->e_flags & EF_MIPS_PIC) != 0)
736
737 /* Nonzero if ABFD is using the N32 ABI.  */
738 #define ABI_N32_P(abfd) \
739   ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI2) != 0)
740
741 /* Nonzero if ABFD is using the N64 ABI.  */
742 #define ABI_64_P(abfd) \
743   (get_elf_backend_data (abfd)->s->elfclass == ELFCLASS64)
744
745 /* Nonzero if ABFD is using NewABI conventions.  */
746 #define NEWABI_P(abfd) (ABI_N32_P (abfd) || ABI_64_P (abfd))
747
748 /* The IRIX compatibility level we are striving for.  */
749 #define IRIX_COMPAT(abfd) \
750   (get_elf_backend_data (abfd)->elf_backend_mips_irix_compat (abfd))
751
752 /* Whether we are trying to be compatible with IRIX at all.  */
753 #define SGI_COMPAT(abfd) \
754   (IRIX_COMPAT (abfd) != ict_none)
755
756 /* The name of the options section.  */
757 #define MIPS_ELF_OPTIONS_SECTION_NAME(abfd) \
758   (NEWABI_P (abfd) ? ".MIPS.options" : ".options")
759
760 /* True if NAME is the recognized name of any SHT_MIPS_OPTIONS section.
761    Some IRIX system files do not use MIPS_ELF_OPTIONS_SECTION_NAME.  */
762 #define MIPS_ELF_OPTIONS_SECTION_NAME_P(NAME) \
763   (strcmp (NAME, ".MIPS.options") == 0 || strcmp (NAME, ".options") == 0)
764
765 /* Whether the section is readonly.  */
766 #define MIPS_ELF_READONLY_SECTION(sec) \
767   ((sec->flags & (SEC_ALLOC | SEC_LOAD | SEC_READONLY))         \
768    == (SEC_ALLOC | SEC_LOAD | SEC_READONLY))
769
770 /* The name of the stub section.  */
771 #define MIPS_ELF_STUB_SECTION_NAME(abfd) ".MIPS.stubs"
772
773 /* The size of an external REL relocation.  */
774 #define MIPS_ELF_REL_SIZE(abfd) \
775   (get_elf_backend_data (abfd)->s->sizeof_rel)
776
777 /* The size of an external RELA relocation.  */
778 #define MIPS_ELF_RELA_SIZE(abfd) \
779   (get_elf_backend_data (abfd)->s->sizeof_rela)
780
781 /* The size of an external dynamic table entry.  */
782 #define MIPS_ELF_DYN_SIZE(abfd) \
783   (get_elf_backend_data (abfd)->s->sizeof_dyn)
784
785 /* The size of a GOT entry.  */
786 #define MIPS_ELF_GOT_SIZE(abfd) \
787   (get_elf_backend_data (abfd)->s->arch_size / 8)
788
789 /* The size of the .rld_map section. */
790 #define MIPS_ELF_RLD_MAP_SIZE(abfd) \
791   (get_elf_backend_data (abfd)->s->arch_size / 8)
792
793 /* The size of a symbol-table entry.  */
794 #define MIPS_ELF_SYM_SIZE(abfd) \
795   (get_elf_backend_data (abfd)->s->sizeof_sym)
796
797 /* The default alignment for sections, as a power of two.  */
798 #define MIPS_ELF_LOG_FILE_ALIGN(abfd)                           \
799   (get_elf_backend_data (abfd)->s->log_file_align)
800
801 /* Get word-sized data.  */
802 #define MIPS_ELF_GET_WORD(abfd, ptr) \
803   (ABI_64_P (abfd) ? bfd_get_64 (abfd, ptr) : bfd_get_32 (abfd, ptr))
804
805 /* Put out word-sized data.  */
806 #define MIPS_ELF_PUT_WORD(abfd, val, ptr)       \
807   (ABI_64_P (abfd)                              \
808    ? bfd_put_64 (abfd, val, ptr)                \
809    : bfd_put_32 (abfd, val, ptr))
810
811 /* The opcode for word-sized loads (LW or LD).  */
812 #define MIPS_ELF_LOAD_WORD(abfd) \
813   (ABI_64_P (abfd) ? 0xdc000000 : 0x8c000000)
814
815 /* Add a dynamic symbol table-entry.  */
816 #define MIPS_ELF_ADD_DYNAMIC_ENTRY(info, tag, val)      \
817   _bfd_elf_add_dynamic_entry (info, tag, val)
818
819 #define MIPS_ELF_RTYPE_TO_HOWTO(abfd, rtype, rela)                      \
820   (get_elf_backend_data (abfd)->elf_backend_mips_rtype_to_howto (rtype, rela))
821
822 /* The name of the dynamic relocation section.  */
823 #define MIPS_ELF_REL_DYN_NAME(INFO) \
824   (mips_elf_hash_table (INFO)->is_vxworks ? ".rela.dyn" : ".rel.dyn")
825
826 /* In case we're on a 32-bit machine, construct a 64-bit "-1" value
827    from smaller values.  Start with zero, widen, *then* decrement.  */
828 #define MINUS_ONE       (((bfd_vma)0) - 1)
829 #define MINUS_TWO       (((bfd_vma)0) - 2)
830
831 /* The value to write into got[1] for SVR4 targets, to identify it is
832    a GNU object.  The dynamic linker can then use got[1] to store the
833    module pointer.  */
834 #define MIPS_ELF_GNU_GOT1_MASK(abfd) \
835   ((bfd_vma) 1 << (ABI_64_P (abfd) ? 63 : 31))
836
837 /* The offset of $gp from the beginning of the .got section.  */
838 #define ELF_MIPS_GP_OFFSET(INFO) \
839   (mips_elf_hash_table (INFO)->is_vxworks ? 0x0 : 0x7ff0)
840
841 /* The maximum size of the GOT for it to be addressable using 16-bit
842    offsets from $gp.  */
843 #define MIPS_ELF_GOT_MAX_SIZE(INFO) (ELF_MIPS_GP_OFFSET (INFO) + 0x7fff)
844
845 /* Instructions which appear in a stub.  */
846 #define STUB_LW(abfd)                                                   \
847   ((ABI_64_P (abfd)                                                     \
848     ? 0xdf998010                                /* ld t9,0x8010(gp) */  \
849     : 0x8f998010))                              /* lw t9,0x8010(gp) */
850 #define STUB_MOVE(abfd)                                                 \
851    ((ABI_64_P (abfd)                                                    \
852      ? 0x03e0782d                               /* daddu t7,ra */       \
853      : 0x03e07821))                             /* addu t7,ra */
854 #define STUB_LUI(VAL) (0x3c180000 + (VAL))      /* lui t8,VAL */
855 #define STUB_JALR 0x0320f809                    /* jalr t9,ra */
856 #define STUB_ORI(VAL) (0x37180000 + (VAL))      /* ori t8,t8,VAL */
857 #define STUB_LI16U(VAL) (0x34180000 + (VAL))    /* ori t8,zero,VAL unsigned */
858 #define STUB_LI16S(abfd, VAL)                                           \
859    ((ABI_64_P (abfd)                                                    \
860     ? (0x64180000 + (VAL))      /* daddiu t8,zero,VAL sign extended */  \
861     : (0x24180000 + (VAL))))    /* addiu t8,zero,VAL sign extended */
862
863 #define MIPS_FUNCTION_STUB_NORMAL_SIZE 16
864 #define MIPS_FUNCTION_STUB_BIG_SIZE 20
865
866 /* The name of the dynamic interpreter.  This is put in the .interp
867    section.  */
868
869 #define ELF_DYNAMIC_INTERPRETER(abfd)           \
870    (ABI_N32_P (abfd) ? "/usr/lib32/libc.so.1"   \
871     : ABI_64_P (abfd) ? "/usr/lib64/libc.so.1"  \
872     : "/usr/lib/libc.so.1")
873
874 #ifdef BFD64
875 #define MNAME(bfd,pre,pos) \
876   (ABI_64_P (bfd) ? CONCAT4 (pre,64,_,pos) : CONCAT4 (pre,32,_,pos))
877 #define ELF_R_SYM(bfd, i)                                       \
878   (ABI_64_P (bfd) ? ELF64_R_SYM (i) : ELF32_R_SYM (i))
879 #define ELF_R_TYPE(bfd, i)                                      \
880   (ABI_64_P (bfd) ? ELF64_MIPS_R_TYPE (i) : ELF32_R_TYPE (i))
881 #define ELF_R_INFO(bfd, s, t)                                   \
882   (ABI_64_P (bfd) ? ELF64_R_INFO (s, t) : ELF32_R_INFO (s, t))
883 #else
884 #define MNAME(bfd,pre,pos) CONCAT4 (pre,32,_,pos)
885 #define ELF_R_SYM(bfd, i)                                       \
886   (ELF32_R_SYM (i))
887 #define ELF_R_TYPE(bfd, i)                                      \
888   (ELF32_R_TYPE (i))
889 #define ELF_R_INFO(bfd, s, t)                                   \
890   (ELF32_R_INFO (s, t))
891 #endif
892 \f
893   /* The mips16 compiler uses a couple of special sections to handle
894      floating point arguments.
895
896      Section names that look like .mips16.fn.FNNAME contain stubs that
897      copy floating point arguments from the fp regs to the gp regs and
898      then jump to FNNAME.  If any 32 bit function calls FNNAME, the
899      call should be redirected to the stub instead.  If no 32 bit
900      function calls FNNAME, the stub should be discarded.  We need to
901      consider any reference to the function, not just a call, because
902      if the address of the function is taken we will need the stub,
903      since the address might be passed to a 32 bit function.
904
905      Section names that look like .mips16.call.FNNAME contain stubs
906      that copy floating point arguments from the gp regs to the fp
907      regs and then jump to FNNAME.  If FNNAME is a 32 bit function,
908      then any 16 bit function that calls FNNAME should be redirected
909      to the stub instead.  If FNNAME is not a 32 bit function, the
910      stub should be discarded.
911
912      .mips16.call.fp.FNNAME sections are similar, but contain stubs
913      which call FNNAME and then copy the return value from the fp regs
914      to the gp regs.  These stubs store the return value in $18 while
915      calling FNNAME; any function which might call one of these stubs
916      must arrange to save $18 around the call.  (This case is not
917      needed for 32 bit functions that call 16 bit functions, because
918      16 bit functions always return floating point values in both
919      $f0/$f1 and $2/$3.)
920
921      Note that in all cases FNNAME might be defined statically.
922      Therefore, FNNAME is not used literally.  Instead, the relocation
923      information will indicate which symbol the section is for.
924
925      We record any stubs that we find in the symbol table.  */
926
927 #define FN_STUB ".mips16.fn."
928 #define CALL_STUB ".mips16.call."
929 #define CALL_FP_STUB ".mips16.call.fp."
930
931 #define FN_STUB_P(name) CONST_STRNEQ (name, FN_STUB)
932 #define CALL_STUB_P(name) CONST_STRNEQ (name, CALL_STUB)
933 #define CALL_FP_STUB_P(name) CONST_STRNEQ (name, CALL_FP_STUB)
934 \f
935 /* The format of the first PLT entry in an O32 executable.  */
936 static const bfd_vma mips_o32_exec_plt0_entry[] =
937 {
938   0x3c1c0000,   /* lui $28, %hi(&GOTPLT[0])                             */
939   0x8f990000,   /* lw $25, %lo(&GOTPLT[0])($28)                         */
940   0x279c0000,   /* addiu $28, $28, %lo(&GOTPLT[0])                      */
941   0x031cc023,   /* subu $24, $24, $28                                   */
942   0x03e07821,   /* move $15, $31        # 32-bit move (addu)            */
943   0x0018c082,   /* srl $24, $24, 2                                      */
944   0x0320f809,   /* jalr $25                                             */
945   0x2718fffe    /* subu $24, $24, 2                                     */
946 };
947
948 /* The format of the first PLT entry in an N32 executable.  Different
949    because gp ($28) is not available; we use t2 ($14) instead.  */
950 static const bfd_vma mips_n32_exec_plt0_entry[] =
951 {
952   0x3c0e0000,   /* lui $14, %hi(&GOTPLT[0])                             */
953   0x8dd90000,   /* lw $25, %lo(&GOTPLT[0])($14)                         */
954   0x25ce0000,   /* addiu $14, $14, %lo(&GOTPLT[0])                      */
955   0x030ec023,   /* subu $24, $24, $14                                   */
956   0x03e07821,   /* move $15, $31        # 32-bit move (addu)            */
957   0x0018c082,   /* srl $24, $24, 2                                      */
958   0x0320f809,   /* jalr $25                                             */
959   0x2718fffe    /* subu $24, $24, 2                                     */
960 };
961
962 /* The format of the first PLT entry in an N64 executable.  Different
963    from N32 because of the increased size of GOT entries.  */
964 static const bfd_vma mips_n64_exec_plt0_entry[] =
965 {
966   0x3c0e0000,   /* lui $14, %hi(&GOTPLT[0])                             */
967   0xddd90000,   /* ld $25, %lo(&GOTPLT[0])($14)                         */
968   0x25ce0000,   /* addiu $14, $14, %lo(&GOTPLT[0])                      */
969   0x030ec023,   /* subu $24, $24, $14                                   */
970   0x03e0782d,   /* move $15, $31        # 64-bit move (daddu)           */
971   0x0018c0c2,   /* srl $24, $24, 3                                      */
972   0x0320f809,   /* jalr $25                                             */
973   0x2718fffe    /* subu $24, $24, 2                                     */
974 };
975
976 /* The format of subsequent PLT entries.  */
977 static const bfd_vma mips_exec_plt_entry[] =
978 {
979   0x3c0f0000,   /* lui $15, %hi(.got.plt entry)                 */
980   0x01f90000,   /* l[wd] $25, %lo(.got.plt entry)($15)          */
981   0x25f80000,   /* addiu $24, $15, %lo(.got.plt entry)          */
982   0x03200008    /* jr $25                                       */
983 };
984
985 /* The format of the first PLT entry in a VxWorks executable.  */
986 static const bfd_vma mips_vxworks_exec_plt0_entry[] =
987 {
988   0x3c190000,   /* lui t9, %hi(_GLOBAL_OFFSET_TABLE_)           */
989   0x27390000,   /* addiu t9, t9, %lo(_GLOBAL_OFFSET_TABLE_)     */
990   0x8f390008,   /* lw t9, 8(t9)                                 */
991   0x00000000,   /* nop                                          */
992   0x03200008,   /* jr t9                                        */
993   0x00000000    /* nop                                          */
994 };
995
996 /* The format of subsequent PLT entries.  */
997 static const bfd_vma mips_vxworks_exec_plt_entry[] =
998 {
999   0x10000000,   /* b .PLT_resolver                      */
1000   0x24180000,   /* li t8, <pltindex>                    */
1001   0x3c190000,   /* lui t9, %hi(<.got.plt slot>)         */
1002   0x27390000,   /* addiu t9, t9, %lo(<.got.plt slot>)   */
1003   0x8f390000,   /* lw t9, 0(t9)                         */
1004   0x00000000,   /* nop                                  */
1005   0x03200008,   /* jr t9                                */
1006   0x00000000    /* nop                                  */
1007 };
1008
1009 /* The format of the first PLT entry in a VxWorks shared object.  */
1010 static const bfd_vma mips_vxworks_shared_plt0_entry[] =
1011 {
1012   0x8f990008,   /* lw t9, 8(gp)         */
1013   0x00000000,   /* nop                  */
1014   0x03200008,   /* jr t9                */
1015   0x00000000,   /* nop                  */
1016   0x00000000,   /* nop                  */
1017   0x00000000    /* nop                  */
1018 };
1019
1020 /* The format of subsequent PLT entries.  */
1021 static const bfd_vma mips_vxworks_shared_plt_entry[] =
1022 {
1023   0x10000000,   /* b .PLT_resolver      */
1024   0x24180000    /* li t8, <pltindex>    */
1025 };
1026 \f
1027 /* microMIPS 32-bit opcode helper installer.  */
1028
1029 static void
1030 bfd_put_micromips_32 (const bfd *abfd, bfd_vma opcode, bfd_byte *ptr)
1031 {
1032   bfd_put_16 (abfd, (opcode >> 16) & 0xffff, ptr);
1033   bfd_put_16 (abfd,  opcode        & 0xffff, ptr + 2);
1034 }
1035
1036 /* microMIPS 32-bit opcode helper retriever.  */
1037
1038 static bfd_vma
1039 bfd_get_micromips_32 (const bfd *abfd, const bfd_byte *ptr)
1040 {
1041   return (bfd_get_16 (abfd, ptr) << 16) | bfd_get_16 (abfd, ptr + 2);
1042 }
1043 \f
1044 /* Look up an entry in a MIPS ELF linker hash table.  */
1045
1046 #define mips_elf_link_hash_lookup(table, string, create, copy, follow)  \
1047   ((struct mips_elf_link_hash_entry *)                                  \
1048    elf_link_hash_lookup (&(table)->root, (string), (create),            \
1049                          (copy), (follow)))
1050
1051 /* Traverse a MIPS ELF linker hash table.  */
1052
1053 #define mips_elf_link_hash_traverse(table, func, info)                  \
1054   (elf_link_hash_traverse                                               \
1055    (&(table)->root,                                                     \
1056     (bfd_boolean (*) (struct elf_link_hash_entry *, void *)) (func),    \
1057     (info)))
1058
1059 /* Find the base offsets for thread-local storage in this object,
1060    for GD/LD and IE/LE respectively.  */
1061
1062 #define TP_OFFSET 0x7000
1063 #define DTP_OFFSET 0x8000
1064
1065 static bfd_vma
1066 dtprel_base (struct bfd_link_info *info)
1067 {
1068   /* If tls_sec is NULL, we should have signalled an error already.  */
1069   if (elf_hash_table (info)->tls_sec == NULL)
1070     return 0;
1071   return elf_hash_table (info)->tls_sec->vma + DTP_OFFSET;
1072 }
1073
1074 static bfd_vma
1075 tprel_base (struct bfd_link_info *info)
1076 {
1077   /* If tls_sec is NULL, we should have signalled an error already.  */
1078   if (elf_hash_table (info)->tls_sec == NULL)
1079     return 0;
1080   return elf_hash_table (info)->tls_sec->vma + TP_OFFSET;
1081 }
1082
1083 /* Create an entry in a MIPS ELF linker hash table.  */
1084
1085 static struct bfd_hash_entry *
1086 mips_elf_link_hash_newfunc (struct bfd_hash_entry *entry,
1087                             struct bfd_hash_table *table, const char *string)
1088 {
1089   struct mips_elf_link_hash_entry *ret =
1090     (struct mips_elf_link_hash_entry *) entry;
1091
1092   /* Allocate the structure if it has not already been allocated by a
1093      subclass.  */
1094   if (ret == NULL)
1095     ret = bfd_hash_allocate (table, sizeof (struct mips_elf_link_hash_entry));
1096   if (ret == NULL)
1097     return (struct bfd_hash_entry *) ret;
1098
1099   /* Call the allocation method of the superclass.  */
1100   ret = ((struct mips_elf_link_hash_entry *)
1101          _bfd_elf_link_hash_newfunc ((struct bfd_hash_entry *) ret,
1102                                      table, string));
1103   if (ret != NULL)
1104     {
1105       /* Set local fields.  */
1106       memset (&ret->esym, 0, sizeof (EXTR));
1107       /* We use -2 as a marker to indicate that the information has
1108          not been set.  -1 means there is no associated ifd.  */
1109       ret->esym.ifd = -2;
1110       ret->la25_stub = 0;
1111       ret->possibly_dynamic_relocs = 0;
1112       ret->fn_stub = NULL;
1113       ret->call_stub = NULL;
1114       ret->call_fp_stub = NULL;
1115       ret->tls_type = GOT_NORMAL;
1116       ret->global_got_area = GGA_NONE;
1117       ret->got_only_for_calls = TRUE;
1118       ret->readonly_reloc = FALSE;
1119       ret->has_static_relocs = FALSE;
1120       ret->no_fn_stub = FALSE;
1121       ret->need_fn_stub = FALSE;
1122       ret->has_nonpic_branches = FALSE;
1123       ret->needs_lazy_stub = FALSE;
1124     }
1125
1126   return (struct bfd_hash_entry *) ret;
1127 }
1128
1129 /* Allocate MIPS ELF private object data.  */
1130
1131 bfd_boolean
1132 _bfd_mips_elf_mkobject (bfd *abfd)
1133 {
1134   return bfd_elf_allocate_object (abfd, sizeof (struct mips_elf_obj_tdata),
1135                                   MIPS_ELF_DATA);
1136 }
1137
1138 bfd_boolean
1139 _bfd_mips_elf_new_section_hook (bfd *abfd, asection *sec)
1140 {
1141   if (!sec->used_by_bfd)
1142     {
1143       struct _mips_elf_section_data *sdata;
1144       bfd_size_type amt = sizeof (*sdata);
1145
1146       sdata = bfd_zalloc (abfd, amt);
1147       if (sdata == NULL)
1148         return FALSE;
1149       sec->used_by_bfd = sdata;
1150     }
1151
1152   return _bfd_elf_new_section_hook (abfd, sec);
1153 }
1154 \f
1155 /* Read ECOFF debugging information from a .mdebug section into a
1156    ecoff_debug_info structure.  */
1157
1158 bfd_boolean
1159 _bfd_mips_elf_read_ecoff_info (bfd *abfd, asection *section,
1160                                struct ecoff_debug_info *debug)
1161 {
1162   HDRR *symhdr;
1163   const struct ecoff_debug_swap *swap;
1164   char *ext_hdr;
1165
1166   swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
1167   memset (debug, 0, sizeof (*debug));
1168
1169   ext_hdr = bfd_malloc (swap->external_hdr_size);
1170   if (ext_hdr == NULL && swap->external_hdr_size != 0)
1171     goto error_return;
1172
1173   if (! bfd_get_section_contents (abfd, section, ext_hdr, 0,
1174                                   swap->external_hdr_size))
1175     goto error_return;
1176
1177   symhdr = &debug->symbolic_header;
1178   (*swap->swap_hdr_in) (abfd, ext_hdr, symhdr);
1179
1180   /* The symbolic header contains absolute file offsets and sizes to
1181      read.  */
1182 #define READ(ptr, offset, count, size, type)                            \
1183   if (symhdr->count == 0)                                               \
1184     debug->ptr = NULL;                                                  \
1185   else                                                                  \
1186     {                                                                   \
1187       bfd_size_type amt = (bfd_size_type) size * symhdr->count;         \
1188       debug->ptr = bfd_malloc (amt);                                    \
1189       if (debug->ptr == NULL)                                           \
1190         goto error_return;                                              \
1191       if (bfd_seek (abfd, symhdr->offset, SEEK_SET) != 0                \
1192           || bfd_bread (debug->ptr, amt, abfd) != amt)                  \
1193         goto error_return;                                              \
1194     }
1195
1196   READ (line, cbLineOffset, cbLine, sizeof (unsigned char), unsigned char *);
1197   READ (external_dnr, cbDnOffset, idnMax, swap->external_dnr_size, void *);
1198   READ (external_pdr, cbPdOffset, ipdMax, swap->external_pdr_size, void *);
1199   READ (external_sym, cbSymOffset, isymMax, swap->external_sym_size, void *);
1200   READ (external_opt, cbOptOffset, ioptMax, swap->external_opt_size, void *);
1201   READ (external_aux, cbAuxOffset, iauxMax, sizeof (union aux_ext),
1202         union aux_ext *);
1203   READ (ss, cbSsOffset, issMax, sizeof (char), char *);
1204   READ (ssext, cbSsExtOffset, issExtMax, sizeof (char), char *);
1205   READ (external_fdr, cbFdOffset, ifdMax, swap->external_fdr_size, void *);
1206   READ (external_rfd, cbRfdOffset, crfd, swap->external_rfd_size, void *);
1207   READ (external_ext, cbExtOffset, iextMax, swap->external_ext_size, void *);
1208 #undef READ
1209
1210   debug->fdr = NULL;
1211
1212   return TRUE;
1213
1214  error_return:
1215   if (ext_hdr != NULL)
1216     free (ext_hdr);
1217   if (debug->line != NULL)
1218     free (debug->line);
1219   if (debug->external_dnr != NULL)
1220     free (debug->external_dnr);
1221   if (debug->external_pdr != NULL)
1222     free (debug->external_pdr);
1223   if (debug->external_sym != NULL)
1224     free (debug->external_sym);
1225   if (debug->external_opt != NULL)
1226     free (debug->external_opt);
1227   if (debug->external_aux != NULL)
1228     free (debug->external_aux);
1229   if (debug->ss != NULL)
1230     free (debug->ss);
1231   if (debug->ssext != NULL)
1232     free (debug->ssext);
1233   if (debug->external_fdr != NULL)
1234     free (debug->external_fdr);
1235   if (debug->external_rfd != NULL)
1236     free (debug->external_rfd);
1237   if (debug->external_ext != NULL)
1238     free (debug->external_ext);
1239   return FALSE;
1240 }
1241 \f
1242 /* Swap RPDR (runtime procedure table entry) for output.  */
1243
1244 static void
1245 ecoff_swap_rpdr_out (bfd *abfd, const RPDR *in, struct rpdr_ext *ex)
1246 {
1247   H_PUT_S32 (abfd, in->adr, ex->p_adr);
1248   H_PUT_32 (abfd, in->regmask, ex->p_regmask);
1249   H_PUT_32 (abfd, in->regoffset, ex->p_regoffset);
1250   H_PUT_32 (abfd, in->fregmask, ex->p_fregmask);
1251   H_PUT_32 (abfd, in->fregoffset, ex->p_fregoffset);
1252   H_PUT_32 (abfd, in->frameoffset, ex->p_frameoffset);
1253
1254   H_PUT_16 (abfd, in->framereg, ex->p_framereg);
1255   H_PUT_16 (abfd, in->pcreg, ex->p_pcreg);
1256
1257   H_PUT_32 (abfd, in->irpss, ex->p_irpss);
1258 }
1259
1260 /* Create a runtime procedure table from the .mdebug section.  */
1261
1262 static bfd_boolean
1263 mips_elf_create_procedure_table (void *handle, bfd *abfd,
1264                                  struct bfd_link_info *info, asection *s,
1265                                  struct ecoff_debug_info *debug)
1266 {
1267   const struct ecoff_debug_swap *swap;
1268   HDRR *hdr = &debug->symbolic_header;
1269   RPDR *rpdr, *rp;
1270   struct rpdr_ext *erp;
1271   void *rtproc;
1272   struct pdr_ext *epdr;
1273   struct sym_ext *esym;
1274   char *ss, **sv;
1275   char *str;
1276   bfd_size_type size;
1277   bfd_size_type count;
1278   unsigned long sindex;
1279   unsigned long i;
1280   PDR pdr;
1281   SYMR sym;
1282   const char *no_name_func = _("static procedure (no name)");
1283
1284   epdr = NULL;
1285   rpdr = NULL;
1286   esym = NULL;
1287   ss = NULL;
1288   sv = NULL;
1289
1290   swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
1291
1292   sindex = strlen (no_name_func) + 1;
1293   count = hdr->ipdMax;
1294   if (count > 0)
1295     {
1296       size = swap->external_pdr_size;
1297
1298       epdr = bfd_malloc (size * count);
1299       if (epdr == NULL)
1300         goto error_return;
1301
1302       if (! _bfd_ecoff_get_accumulated_pdr (handle, (bfd_byte *) epdr))
1303         goto error_return;
1304
1305       size = sizeof (RPDR);
1306       rp = rpdr = bfd_malloc (size * count);
1307       if (rpdr == NULL)
1308         goto error_return;
1309
1310       size = sizeof (char *);
1311       sv = bfd_malloc (size * count);
1312       if (sv == NULL)
1313         goto error_return;
1314
1315       count = hdr->isymMax;
1316       size = swap->external_sym_size;
1317       esym = bfd_malloc (size * count);
1318       if (esym == NULL)
1319         goto error_return;
1320
1321       if (! _bfd_ecoff_get_accumulated_sym (handle, (bfd_byte *) esym))
1322         goto error_return;
1323
1324       count = hdr->issMax;
1325       ss = bfd_malloc (count);
1326       if (ss == NULL)
1327         goto error_return;
1328       if (! _bfd_ecoff_get_accumulated_ss (handle, (bfd_byte *) ss))
1329         goto error_return;
1330
1331       count = hdr->ipdMax;
1332       for (i = 0; i < (unsigned long) count; i++, rp++)
1333         {
1334           (*swap->swap_pdr_in) (abfd, epdr + i, &pdr);
1335           (*swap->swap_sym_in) (abfd, &esym[pdr.isym], &sym);
1336           rp->adr = sym.value;
1337           rp->regmask = pdr.regmask;
1338           rp->regoffset = pdr.regoffset;
1339           rp->fregmask = pdr.fregmask;
1340           rp->fregoffset = pdr.fregoffset;
1341           rp->frameoffset = pdr.frameoffset;
1342           rp->framereg = pdr.framereg;
1343           rp->pcreg = pdr.pcreg;
1344           rp->irpss = sindex;
1345           sv[i] = ss + sym.iss;
1346           sindex += strlen (sv[i]) + 1;
1347         }
1348     }
1349
1350   size = sizeof (struct rpdr_ext) * (count + 2) + sindex;
1351   size = BFD_ALIGN (size, 16);
1352   rtproc = bfd_alloc (abfd, size);
1353   if (rtproc == NULL)
1354     {
1355       mips_elf_hash_table (info)->procedure_count = 0;
1356       goto error_return;
1357     }
1358
1359   mips_elf_hash_table (info)->procedure_count = count + 2;
1360
1361   erp = rtproc;
1362   memset (erp, 0, sizeof (struct rpdr_ext));
1363   erp++;
1364   str = (char *) rtproc + sizeof (struct rpdr_ext) * (count + 2);
1365   strcpy (str, no_name_func);
1366   str += strlen (no_name_func) + 1;
1367   for (i = 0; i < count; i++)
1368     {
1369       ecoff_swap_rpdr_out (abfd, rpdr + i, erp + i);
1370       strcpy (str, sv[i]);
1371       str += strlen (sv[i]) + 1;
1372     }
1373   H_PUT_S32 (abfd, -1, (erp + count)->p_adr);
1374
1375   /* Set the size and contents of .rtproc section.  */
1376   s->size = size;
1377   s->contents = rtproc;
1378
1379   /* Skip this section later on (I don't think this currently
1380      matters, but someday it might).  */
1381   s->map_head.link_order = NULL;
1382
1383   if (epdr != NULL)
1384     free (epdr);
1385   if (rpdr != NULL)
1386     free (rpdr);
1387   if (esym != NULL)
1388     free (esym);
1389   if (ss != NULL)
1390     free (ss);
1391   if (sv != NULL)
1392     free (sv);
1393
1394   return TRUE;
1395
1396  error_return:
1397   if (epdr != NULL)
1398     free (epdr);
1399   if (rpdr != NULL)
1400     free (rpdr);
1401   if (esym != NULL)
1402     free (esym);
1403   if (ss != NULL)
1404     free (ss);
1405   if (sv != NULL)
1406     free (sv);
1407   return FALSE;
1408 }
1409 \f
1410 /* We're going to create a stub for H.  Create a symbol for the stub's
1411    value and size, to help make the disassembly easier to read.  */
1412
1413 static bfd_boolean
1414 mips_elf_create_stub_symbol (struct bfd_link_info *info,
1415                              struct mips_elf_link_hash_entry *h,
1416                              const char *prefix, asection *s, bfd_vma value,
1417                              bfd_vma size)
1418 {
1419   struct bfd_link_hash_entry *bh;
1420   struct elf_link_hash_entry *elfh;
1421   const char *name;
1422
1423   if (ELF_ST_IS_MICROMIPS (h->root.other))
1424     value |= 1;
1425
1426   /* Create a new symbol.  */
1427   name = ACONCAT ((prefix, h->root.root.root.string, NULL));
1428   bh = NULL;
1429   if (!_bfd_generic_link_add_one_symbol (info, s->owner, name,
1430                                          BSF_LOCAL, s, value, NULL,
1431                                          TRUE, FALSE, &bh))
1432     return FALSE;
1433
1434   /* Make it a local function.  */
1435   elfh = (struct elf_link_hash_entry *) bh;
1436   elfh->type = ELF_ST_INFO (STB_LOCAL, STT_FUNC);
1437   elfh->size = size;
1438   elfh->forced_local = 1;
1439   return TRUE;
1440 }
1441
1442 /* We're about to redefine H.  Create a symbol to represent H's
1443    current value and size, to help make the disassembly easier
1444    to read.  */
1445
1446 static bfd_boolean
1447 mips_elf_create_shadow_symbol (struct bfd_link_info *info,
1448                                struct mips_elf_link_hash_entry *h,
1449                                const char *prefix)
1450 {
1451   struct bfd_link_hash_entry *bh;
1452   struct elf_link_hash_entry *elfh;
1453   const char *name;
1454   asection *s;
1455   bfd_vma value;
1456
1457   /* Read the symbol's value.  */
1458   BFD_ASSERT (h->root.root.type == bfd_link_hash_defined
1459               || h->root.root.type == bfd_link_hash_defweak);
1460   s = h->root.root.u.def.section;
1461   value = h->root.root.u.def.value;
1462
1463   /* Create a new symbol.  */
1464   name = ACONCAT ((prefix, h->root.root.root.string, NULL));
1465   bh = NULL;
1466   if (!_bfd_generic_link_add_one_symbol (info, s->owner, name,
1467                                          BSF_LOCAL, s, value, NULL,
1468                                          TRUE, FALSE, &bh))
1469     return FALSE;
1470
1471   /* Make it local and copy the other attributes from H.  */
1472   elfh = (struct elf_link_hash_entry *) bh;
1473   elfh->type = ELF_ST_INFO (STB_LOCAL, ELF_ST_TYPE (h->root.type));
1474   elfh->other = h->root.other;
1475   elfh->size = h->root.size;
1476   elfh->forced_local = 1;
1477   return TRUE;
1478 }
1479
1480 /* Return TRUE if relocations in SECTION can refer directly to a MIPS16
1481    function rather than to a hard-float stub.  */
1482
1483 static bfd_boolean
1484 section_allows_mips16_refs_p (asection *section)
1485 {
1486   const char *name;
1487
1488   name = bfd_get_section_name (section->owner, section);
1489   return (FN_STUB_P (name)
1490           || CALL_STUB_P (name)
1491           || CALL_FP_STUB_P (name)
1492           || strcmp (name, ".pdr") == 0);
1493 }
1494
1495 /* [RELOCS, RELEND) are the relocations against SEC, which is a MIPS16
1496    stub section of some kind.  Return the R_SYMNDX of the target
1497    function, or 0 if we can't decide which function that is.  */
1498
1499 static unsigned long
1500 mips16_stub_symndx (const struct elf_backend_data *bed,
1501                     asection *sec ATTRIBUTE_UNUSED,
1502                     const Elf_Internal_Rela *relocs,
1503                     const Elf_Internal_Rela *relend)
1504 {
1505   int int_rels_per_ext_rel = bed->s->int_rels_per_ext_rel;
1506   const Elf_Internal_Rela *rel;
1507
1508   /* Trust the first R_MIPS_NONE relocation, if any, but not a subsequent
1509      one in a compound relocation.  */
1510   for (rel = relocs; rel < relend; rel += int_rels_per_ext_rel)
1511     if (ELF_R_TYPE (sec->owner, rel->r_info) == R_MIPS_NONE)
1512       return ELF_R_SYM (sec->owner, rel->r_info);
1513
1514   /* Otherwise trust the first relocation, whatever its kind.  This is
1515      the traditional behavior.  */
1516   if (relocs < relend)
1517     return ELF_R_SYM (sec->owner, relocs->r_info);
1518
1519   return 0;
1520 }
1521
1522 /* Check the mips16 stubs for a particular symbol, and see if we can
1523    discard them.  */
1524
1525 static void
1526 mips_elf_check_mips16_stubs (struct bfd_link_info *info,
1527                              struct mips_elf_link_hash_entry *h)
1528 {
1529   /* Dynamic symbols must use the standard call interface, in case other
1530      objects try to call them.  */
1531   if (h->fn_stub != NULL
1532       && h->root.dynindx != -1)
1533     {
1534       mips_elf_create_shadow_symbol (info, h, ".mips16.");
1535       h->need_fn_stub = TRUE;
1536     }
1537
1538   if (h->fn_stub != NULL
1539       && ! h->need_fn_stub)
1540     {
1541       /* We don't need the fn_stub; the only references to this symbol
1542          are 16 bit calls.  Clobber the size to 0 to prevent it from
1543          being included in the link.  */
1544       h->fn_stub->size = 0;
1545       h->fn_stub->flags &= ~SEC_RELOC;
1546       h->fn_stub->reloc_count = 0;
1547       h->fn_stub->flags |= SEC_EXCLUDE;
1548     }
1549
1550   if (h->call_stub != NULL
1551       && ELF_ST_IS_MIPS16 (h->root.other))
1552     {
1553       /* We don't need the call_stub; this is a 16 bit function, so
1554          calls from other 16 bit functions are OK.  Clobber the size
1555          to 0 to prevent it from being included in the link.  */
1556       h->call_stub->size = 0;
1557       h->call_stub->flags &= ~SEC_RELOC;
1558       h->call_stub->reloc_count = 0;
1559       h->call_stub->flags |= SEC_EXCLUDE;
1560     }
1561
1562   if (h->call_fp_stub != NULL
1563       && ELF_ST_IS_MIPS16 (h->root.other))
1564     {
1565       /* We don't need the call_stub; this is a 16 bit function, so
1566          calls from other 16 bit functions are OK.  Clobber the size
1567          to 0 to prevent it from being included in the link.  */
1568       h->call_fp_stub->size = 0;
1569       h->call_fp_stub->flags &= ~SEC_RELOC;
1570       h->call_fp_stub->reloc_count = 0;
1571       h->call_fp_stub->flags |= SEC_EXCLUDE;
1572     }
1573 }
1574
1575 /* Hashtable callbacks for mips_elf_la25_stubs.  */
1576
1577 static hashval_t
1578 mips_elf_la25_stub_hash (const void *entry_)
1579 {
1580   const struct mips_elf_la25_stub *entry;
1581
1582   entry = (struct mips_elf_la25_stub *) entry_;
1583   return entry->h->root.root.u.def.section->id
1584     + entry->h->root.root.u.def.value;
1585 }
1586
1587 static int
1588 mips_elf_la25_stub_eq (const void *entry1_, const void *entry2_)
1589 {
1590   const struct mips_elf_la25_stub *entry1, *entry2;
1591
1592   entry1 = (struct mips_elf_la25_stub *) entry1_;
1593   entry2 = (struct mips_elf_la25_stub *) entry2_;
1594   return ((entry1->h->root.root.u.def.section
1595            == entry2->h->root.root.u.def.section)
1596           && (entry1->h->root.root.u.def.value
1597               == entry2->h->root.root.u.def.value));
1598 }
1599
1600 /* Called by the linker to set up the la25 stub-creation code.  FN is
1601    the linker's implementation of add_stub_function.  Return true on
1602    success.  */
1603
1604 bfd_boolean
1605 _bfd_mips_elf_init_stubs (struct bfd_link_info *info,
1606                           asection *(*fn) (const char *, asection *,
1607                                            asection *))
1608 {
1609   struct mips_elf_link_hash_table *htab;
1610
1611   htab = mips_elf_hash_table (info);
1612   if (htab == NULL)
1613     return FALSE;
1614
1615   htab->add_stub_section = fn;
1616   htab->la25_stubs = htab_try_create (1, mips_elf_la25_stub_hash,
1617                                       mips_elf_la25_stub_eq, NULL);
1618   if (htab->la25_stubs == NULL)
1619     return FALSE;
1620
1621   return TRUE;
1622 }
1623
1624 /* Return true if H is a locally-defined PIC function, in the sense
1625    that it or its fn_stub might need $25 to be valid on entry.
1626    Note that MIPS16 functions set up $gp using PC-relative instructions,
1627    so they themselves never need $25 to be valid.  Only non-MIPS16
1628    entry points are of interest here.  */
1629
1630 static bfd_boolean
1631 mips_elf_local_pic_function_p (struct mips_elf_link_hash_entry *h)
1632 {
1633   return ((h->root.root.type == bfd_link_hash_defined
1634            || h->root.root.type == bfd_link_hash_defweak)
1635           && h->root.def_regular
1636           && !bfd_is_abs_section (h->root.root.u.def.section)
1637           && (!ELF_ST_IS_MIPS16 (h->root.other)
1638               || (h->fn_stub && h->need_fn_stub))
1639           && (PIC_OBJECT_P (h->root.root.u.def.section->owner)
1640               || ELF_ST_IS_MIPS_PIC (h->root.other)));
1641 }
1642
1643 /* Set *SEC to the input section that contains the target of STUB.
1644    Return the offset of the target from the start of that section.  */
1645
1646 static bfd_vma
1647 mips_elf_get_la25_target (struct mips_elf_la25_stub *stub,
1648                           asection **sec)
1649 {
1650   if (ELF_ST_IS_MIPS16 (stub->h->root.other))
1651     {
1652       BFD_ASSERT (stub->h->need_fn_stub);
1653       *sec = stub->h->fn_stub;
1654       return 0;
1655     }
1656   else
1657     {
1658       *sec = stub->h->root.root.u.def.section;
1659       return stub->h->root.root.u.def.value;
1660     }
1661 }
1662
1663 /* STUB describes an la25 stub that we have decided to implement
1664    by inserting an LUI/ADDIU pair before the target function.
1665    Create the section and redirect the function symbol to it.  */
1666
1667 static bfd_boolean
1668 mips_elf_add_la25_intro (struct mips_elf_la25_stub *stub,
1669                          struct bfd_link_info *info)
1670 {
1671   struct mips_elf_link_hash_table *htab;
1672   char *name;
1673   asection *s, *input_section;
1674   unsigned int align;
1675
1676   htab = mips_elf_hash_table (info);
1677   if (htab == NULL)
1678     return FALSE;
1679
1680   /* Create a unique name for the new section.  */
1681   name = bfd_malloc (11 + sizeof (".text.stub."));
1682   if (name == NULL)
1683     return FALSE;
1684   sprintf (name, ".text.stub.%d", (int) htab_elements (htab->la25_stubs));
1685
1686   /* Create the section.  */
1687   mips_elf_get_la25_target (stub, &input_section);
1688   s = htab->add_stub_section (name, input_section,
1689                               input_section->output_section);
1690   if (s == NULL)
1691     return FALSE;
1692
1693   /* Make sure that any padding goes before the stub.  */
1694   align = input_section->alignment_power;
1695   if (!bfd_set_section_alignment (s->owner, s, align))
1696     return FALSE;
1697   if (align > 3)
1698     s->size = (1 << align) - 8;
1699
1700   /* Create a symbol for the stub.  */
1701   mips_elf_create_stub_symbol (info, stub->h, ".pic.", s, s->size, 8);
1702   stub->stub_section = s;
1703   stub->offset = s->size;
1704
1705   /* Allocate room for it.  */
1706   s->size += 8;
1707   return TRUE;
1708 }
1709
1710 /* STUB describes an la25 stub that we have decided to implement
1711    with a separate trampoline.  Allocate room for it and redirect
1712    the function symbol to it.  */
1713
1714 static bfd_boolean
1715 mips_elf_add_la25_trampoline (struct mips_elf_la25_stub *stub,
1716                               struct bfd_link_info *info)
1717 {
1718   struct mips_elf_link_hash_table *htab;
1719   asection *s;
1720
1721   htab = mips_elf_hash_table (info);
1722   if (htab == NULL)
1723     return FALSE;
1724
1725   /* Create a trampoline section, if we haven't already.  */
1726   s = htab->strampoline;
1727   if (s == NULL)
1728     {
1729       asection *input_section = stub->h->root.root.u.def.section;
1730       s = htab->add_stub_section (".text", NULL,
1731                                   input_section->output_section);
1732       if (s == NULL || !bfd_set_section_alignment (s->owner, s, 4))
1733         return FALSE;
1734       htab->strampoline = s;
1735     }
1736
1737   /* Create a symbol for the stub.  */
1738   mips_elf_create_stub_symbol (info, stub->h, ".pic.", s, s->size, 16);
1739   stub->stub_section = s;
1740   stub->offset = s->size;
1741
1742   /* Allocate room for it.  */
1743   s->size += 16;
1744   return TRUE;
1745 }
1746
1747 /* H describes a symbol that needs an la25 stub.  Make sure that an
1748    appropriate stub exists and point H at it.  */
1749
1750 static bfd_boolean
1751 mips_elf_add_la25_stub (struct bfd_link_info *info,
1752                         struct mips_elf_link_hash_entry *h)
1753 {
1754   struct mips_elf_link_hash_table *htab;
1755   struct mips_elf_la25_stub search, *stub;
1756   bfd_boolean use_trampoline_p;
1757   asection *s;
1758   bfd_vma value;
1759   void **slot;
1760
1761   /* Describe the stub we want.  */
1762   search.stub_section = NULL;
1763   search.offset = 0;
1764   search.h = h;
1765
1766   /* See if we've already created an equivalent stub.  */
1767   htab = mips_elf_hash_table (info);
1768   if (htab == NULL)
1769     return FALSE;
1770
1771   slot = htab_find_slot (htab->la25_stubs, &search, INSERT);
1772   if (slot == NULL)
1773     return FALSE;
1774
1775   stub = (struct mips_elf_la25_stub *) *slot;
1776   if (stub != NULL)
1777     {
1778       /* We can reuse the existing stub.  */
1779       h->la25_stub = stub;
1780       return TRUE;
1781     }
1782
1783   /* Create a permanent copy of ENTRY and add it to the hash table.  */
1784   stub = bfd_malloc (sizeof (search));
1785   if (stub == NULL)
1786     return FALSE;
1787   *stub = search;
1788   *slot = stub;
1789
1790   /* Prefer to use LUI/ADDIU stubs if the function is at the beginning
1791      of the section and if we would need no more than 2 nops.  */
1792   value = mips_elf_get_la25_target (stub, &s);
1793   use_trampoline_p = (value != 0 || s->alignment_power > 4);
1794
1795   h->la25_stub = stub;
1796   return (use_trampoline_p
1797           ? mips_elf_add_la25_trampoline (stub, info)
1798           : mips_elf_add_la25_intro (stub, info));
1799 }
1800
1801 /* A mips_elf_link_hash_traverse callback that is called before sizing
1802    sections.  DATA points to a mips_htab_traverse_info structure.  */
1803
1804 static bfd_boolean
1805 mips_elf_check_symbols (struct mips_elf_link_hash_entry *h, void *data)
1806 {
1807   struct mips_htab_traverse_info *hti;
1808
1809   hti = (struct mips_htab_traverse_info *) data;
1810   if (!hti->info->relocatable)
1811     mips_elf_check_mips16_stubs (hti->info, h);
1812
1813   if (mips_elf_local_pic_function_p (h))
1814     {
1815       /* PR 12845: If H is in a section that has been garbage
1816          collected it will have its output section set to *ABS*.  */
1817       if (bfd_is_abs_section (h->root.root.u.def.section->output_section))
1818         return TRUE;
1819
1820       /* H is a function that might need $25 to be valid on entry.
1821          If we're creating a non-PIC relocatable object, mark H as
1822          being PIC.  If we're creating a non-relocatable object with
1823          non-PIC branches and jumps to H, make sure that H has an la25
1824          stub.  */
1825       if (hti->info->relocatable)
1826         {
1827           if (!PIC_OBJECT_P (hti->output_bfd))
1828             h->root.other = ELF_ST_SET_MIPS_PIC (h->root.other);
1829         }
1830       else if (h->has_nonpic_branches && !mips_elf_add_la25_stub (hti->info, h))
1831         {
1832           hti->error = TRUE;
1833           return FALSE;
1834         }
1835     }
1836   return TRUE;
1837 }
1838 \f
1839 /* R_MIPS16_26 is used for the mips16 jal and jalx instructions.
1840    Most mips16 instructions are 16 bits, but these instructions
1841    are 32 bits.
1842
1843    The format of these instructions is:
1844
1845    +--------------+--------------------------------+
1846    |     JALX     | X|   Imm 20:16  |   Imm 25:21  |
1847    +--------------+--------------------------------+
1848    |                Immediate  15:0                |
1849    +-----------------------------------------------+
1850
1851    JALX is the 5-bit value 00011.  X is 0 for jal, 1 for jalx.
1852    Note that the immediate value in the first word is swapped.
1853
1854    When producing a relocatable object file, R_MIPS16_26 is
1855    handled mostly like R_MIPS_26.  In particular, the addend is
1856    stored as a straight 26-bit value in a 32-bit instruction.
1857    (gas makes life simpler for itself by never adjusting a
1858    R_MIPS16_26 reloc to be against a section, so the addend is
1859    always zero).  However, the 32 bit instruction is stored as 2
1860    16-bit values, rather than a single 32-bit value.  In a
1861    big-endian file, the result is the same; in a little-endian
1862    file, the two 16-bit halves of the 32 bit value are swapped.
1863    This is so that a disassembler can recognize the jal
1864    instruction.
1865
1866    When doing a final link, R_MIPS16_26 is treated as a 32 bit
1867    instruction stored as two 16-bit values.  The addend A is the
1868    contents of the targ26 field.  The calculation is the same as
1869    R_MIPS_26.  When storing the calculated value, reorder the
1870    immediate value as shown above, and don't forget to store the
1871    value as two 16-bit values.
1872
1873    To put it in MIPS ABI terms, the relocation field is T-targ26-16,
1874    defined as
1875
1876    big-endian:
1877    +--------+----------------------+
1878    |        |                      |
1879    |        |    targ26-16         |
1880    |31    26|25                   0|
1881    +--------+----------------------+
1882
1883    little-endian:
1884    +----------+------+-------------+
1885    |          |      |             |
1886    |  sub1    |      |     sub2    |
1887    |0        9|10  15|16         31|
1888    +----------+--------------------+
1889    where targ26-16 is sub1 followed by sub2 (i.e., the addend field A is
1890    ((sub1 << 16) | sub2)).
1891
1892    When producing a relocatable object file, the calculation is
1893    (((A < 2) | ((P + 4) & 0xf0000000) + S) >> 2)
1894    When producing a fully linked file, the calculation is
1895    let R = (((A < 2) | ((P + 4) & 0xf0000000) + S) >> 2)
1896    ((R & 0x1f0000) << 5) | ((R & 0x3e00000) >> 5) | (R & 0xffff)
1897
1898    The table below lists the other MIPS16 instruction relocations.
1899    Each one is calculated in the same way as the non-MIPS16 relocation
1900    given on the right, but using the extended MIPS16 layout of 16-bit
1901    immediate fields:
1902
1903         R_MIPS16_GPREL          R_MIPS_GPREL16
1904         R_MIPS16_GOT16          R_MIPS_GOT16
1905         R_MIPS16_CALL16         R_MIPS_CALL16
1906         R_MIPS16_HI16           R_MIPS_HI16
1907         R_MIPS16_LO16           R_MIPS_LO16
1908
1909    A typical instruction will have a format like this:
1910
1911    +--------------+--------------------------------+
1912    |    EXTEND    |     Imm 10:5    |   Imm 15:11  |
1913    +--------------+--------------------------------+
1914    |    Major     |   rx   |   ry   |   Imm  4:0   |
1915    +--------------+--------------------------------+
1916
1917    EXTEND is the five bit value 11110.  Major is the instruction
1918    opcode.
1919
1920    All we need to do here is shuffle the bits appropriately.
1921    As above, the two 16-bit halves must be swapped on a
1922    little-endian system.  */
1923
1924 static inline bfd_boolean
1925 mips16_reloc_p (int r_type)
1926 {
1927   switch (r_type)
1928     {
1929     case R_MIPS16_26:
1930     case R_MIPS16_GPREL:
1931     case R_MIPS16_GOT16:
1932     case R_MIPS16_CALL16:
1933     case R_MIPS16_HI16:
1934     case R_MIPS16_LO16:
1935     case R_MIPS16_TLS_GD:
1936     case R_MIPS16_TLS_LDM:
1937     case R_MIPS16_TLS_DTPREL_HI16:
1938     case R_MIPS16_TLS_DTPREL_LO16:
1939     case R_MIPS16_TLS_GOTTPREL:
1940     case R_MIPS16_TLS_TPREL_HI16:
1941     case R_MIPS16_TLS_TPREL_LO16:
1942       return TRUE;
1943
1944     default:
1945       return FALSE;
1946     }
1947 }
1948
1949 /* Check if a microMIPS reloc.  */
1950
1951 static inline bfd_boolean
1952 micromips_reloc_p (unsigned int r_type)
1953 {
1954   return r_type >= R_MICROMIPS_min && r_type < R_MICROMIPS_max;
1955 }
1956
1957 /* Similar to MIPS16, the two 16-bit halves in microMIPS must be swapped
1958    on a little-endian system.  This does not apply to R_MICROMIPS_PC7_S1
1959    and R_MICROMIPS_PC10_S1 relocs that apply to 16-bit instructions.  */
1960
1961 static inline bfd_boolean
1962 micromips_reloc_shuffle_p (unsigned int r_type)
1963 {
1964   return (micromips_reloc_p (r_type)
1965           && r_type != R_MICROMIPS_PC7_S1
1966           && r_type != R_MICROMIPS_PC10_S1);
1967 }
1968
1969 static inline bfd_boolean
1970 got16_reloc_p (int r_type)
1971 {
1972   return (r_type == R_MIPS_GOT16
1973           || r_type == R_MIPS16_GOT16
1974           || r_type == R_MICROMIPS_GOT16);
1975 }
1976
1977 static inline bfd_boolean
1978 call16_reloc_p (int r_type)
1979 {
1980   return (r_type == R_MIPS_CALL16
1981           || r_type == R_MIPS16_CALL16
1982           || r_type == R_MICROMIPS_CALL16);
1983 }
1984
1985 static inline bfd_boolean
1986 got_disp_reloc_p (unsigned int r_type)
1987 {
1988   return r_type == R_MIPS_GOT_DISP || r_type == R_MICROMIPS_GOT_DISP;
1989 }
1990
1991 static inline bfd_boolean
1992 got_page_reloc_p (unsigned int r_type)
1993 {
1994   return r_type == R_MIPS_GOT_PAGE || r_type == R_MICROMIPS_GOT_PAGE;
1995 }
1996
1997 static inline bfd_boolean
1998 got_ofst_reloc_p (unsigned int r_type)
1999 {
2000   return r_type == R_MIPS_GOT_OFST || r_type == R_MICROMIPS_GOT_OFST;
2001 }
2002
2003 static inline bfd_boolean
2004 got_hi16_reloc_p (unsigned int r_type)
2005 {
2006   return r_type == R_MIPS_GOT_HI16 || r_type == R_MICROMIPS_GOT_HI16;
2007 }
2008
2009 static inline bfd_boolean
2010 got_lo16_reloc_p (unsigned int r_type)
2011 {
2012   return r_type == R_MIPS_GOT_LO16 || r_type == R_MICROMIPS_GOT_LO16;
2013 }
2014
2015 static inline bfd_boolean
2016 call_hi16_reloc_p (unsigned int r_type)
2017 {
2018   return r_type == R_MIPS_CALL_HI16 || r_type == R_MICROMIPS_CALL_HI16;
2019 }
2020
2021 static inline bfd_boolean
2022 call_lo16_reloc_p (unsigned int r_type)
2023 {
2024   return r_type == R_MIPS_CALL_LO16 || r_type == R_MICROMIPS_CALL_LO16;
2025 }
2026
2027 static inline bfd_boolean
2028 hi16_reloc_p (int r_type)
2029 {
2030   return (r_type == R_MIPS_HI16
2031           || r_type == R_MIPS16_HI16
2032           || r_type == R_MICROMIPS_HI16);
2033 }
2034
2035 static inline bfd_boolean
2036 lo16_reloc_p (int r_type)
2037 {
2038   return (r_type == R_MIPS_LO16
2039           || r_type == R_MIPS16_LO16
2040           || r_type == R_MICROMIPS_LO16);
2041 }
2042
2043 static inline bfd_boolean
2044 mips16_call_reloc_p (int r_type)
2045 {
2046   return r_type == R_MIPS16_26 || r_type == R_MIPS16_CALL16;
2047 }
2048
2049 static inline bfd_boolean
2050 jal_reloc_p (int r_type)
2051 {
2052   return (r_type == R_MIPS_26
2053           || r_type == R_MIPS16_26
2054           || r_type == R_MICROMIPS_26_S1);
2055 }
2056
2057 static inline bfd_boolean
2058 micromips_branch_reloc_p (int r_type)
2059 {
2060   return (r_type == R_MICROMIPS_26_S1
2061           || r_type == R_MICROMIPS_PC16_S1
2062           || r_type == R_MICROMIPS_PC10_S1
2063           || r_type == R_MICROMIPS_PC7_S1);
2064 }
2065
2066 static inline bfd_boolean
2067 tls_gd_reloc_p (unsigned int r_type)
2068 {
2069   return (r_type == R_MIPS_TLS_GD
2070           || r_type == R_MIPS16_TLS_GD
2071           || r_type == R_MICROMIPS_TLS_GD);
2072 }
2073
2074 static inline bfd_boolean
2075 tls_ldm_reloc_p (unsigned int r_type)
2076 {
2077   return (r_type == R_MIPS_TLS_LDM
2078           || r_type == R_MIPS16_TLS_LDM
2079           || r_type == R_MICROMIPS_TLS_LDM);
2080 }
2081
2082 static inline bfd_boolean
2083 tls_gottprel_reloc_p (unsigned int r_type)
2084 {
2085   return (r_type == R_MIPS_TLS_GOTTPREL
2086           || r_type == R_MIPS16_TLS_GOTTPREL
2087           || r_type == R_MICROMIPS_TLS_GOTTPREL);
2088 }
2089
2090 void
2091 _bfd_mips_elf_reloc_unshuffle (bfd *abfd, int r_type,
2092                                bfd_boolean jal_shuffle, bfd_byte *data)
2093 {
2094   bfd_vma first, second, val;
2095
2096   if (!mips16_reloc_p (r_type) && !micromips_reloc_shuffle_p (r_type))
2097     return;
2098
2099   /* Pick up the first and second halfwords of the instruction.  */
2100   first = bfd_get_16 (abfd, data);
2101   second = bfd_get_16 (abfd, data + 2);
2102   if (micromips_reloc_p (r_type) || (r_type == R_MIPS16_26 && !jal_shuffle))
2103     val = first << 16 | second;
2104   else if (r_type != R_MIPS16_26)
2105     val = (((first & 0xf800) << 16) | ((second & 0xffe0) << 11)
2106            | ((first & 0x1f) << 11) | (first & 0x7e0) | (second & 0x1f));
2107   else
2108     val = (((first & 0xfc00) << 16) | ((first & 0x3e0) << 11)
2109            | ((first & 0x1f) << 21) | second);
2110   bfd_put_32 (abfd, val, data);
2111 }
2112
2113 void
2114 _bfd_mips_elf_reloc_shuffle (bfd *abfd, int r_type,
2115                              bfd_boolean jal_shuffle, bfd_byte *data)
2116 {
2117   bfd_vma first, second, val;
2118
2119   if (!mips16_reloc_p (r_type) && !micromips_reloc_shuffle_p (r_type))
2120     return;
2121
2122   val = bfd_get_32 (abfd, data);
2123   if (micromips_reloc_p (r_type) || (r_type == R_MIPS16_26 && !jal_shuffle))
2124     {
2125       second = val & 0xffff;
2126       first = val >> 16;
2127     }
2128   else if (r_type != R_MIPS16_26)
2129     {
2130       second = ((val >> 11) & 0xffe0) | (val & 0x1f);
2131       first = ((val >> 16) & 0xf800) | ((val >> 11) & 0x1f) | (val & 0x7e0);
2132     }
2133   else
2134     {
2135       second = val & 0xffff;
2136       first = ((val >> 16) & 0xfc00) | ((val >> 11) & 0x3e0)
2137                | ((val >> 21) & 0x1f);
2138     }
2139   bfd_put_16 (abfd, second, data + 2);
2140   bfd_put_16 (abfd, first, data);
2141 }
2142
2143 bfd_reloc_status_type
2144 _bfd_mips_elf_gprel16_with_gp (bfd *abfd, asymbol *symbol,
2145                                arelent *reloc_entry, asection *input_section,
2146                                bfd_boolean relocatable, void *data, bfd_vma gp)
2147 {
2148   bfd_vma relocation;
2149   bfd_signed_vma val;
2150   bfd_reloc_status_type status;
2151
2152   if (bfd_is_com_section (symbol->section))
2153     relocation = 0;
2154   else
2155     relocation = symbol->value;
2156
2157   relocation += symbol->section->output_section->vma;
2158   relocation += symbol->section->output_offset;
2159
2160   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2161     return bfd_reloc_outofrange;
2162
2163   /* Set val to the offset into the section or symbol.  */
2164   val = reloc_entry->addend;
2165
2166   _bfd_mips_elf_sign_extend (val, 16);
2167
2168   /* Adjust val for the final section location and GP value.  If we
2169      are producing relocatable output, we don't want to do this for
2170      an external symbol.  */
2171   if (! relocatable
2172       || (symbol->flags & BSF_SECTION_SYM) != 0)
2173     val += relocation - gp;
2174
2175   if (reloc_entry->howto->partial_inplace)
2176     {
2177       status = _bfd_relocate_contents (reloc_entry->howto, abfd, val,
2178                                        (bfd_byte *) data
2179                                        + reloc_entry->address);
2180       if (status != bfd_reloc_ok)
2181         return status;
2182     }
2183   else
2184     reloc_entry->addend = val;
2185
2186   if (relocatable)
2187     reloc_entry->address += input_section->output_offset;
2188
2189   return bfd_reloc_ok;
2190 }
2191
2192 /* Used to store a REL high-part relocation such as R_MIPS_HI16 or
2193    R_MIPS_GOT16.  REL is the relocation, INPUT_SECTION is the section
2194    that contains the relocation field and DATA points to the start of
2195    INPUT_SECTION.  */
2196
2197 struct mips_hi16
2198 {
2199   struct mips_hi16 *next;
2200   bfd_byte *data;
2201   asection *input_section;
2202   arelent rel;
2203 };
2204
2205 /* FIXME: This should not be a static variable.  */
2206
2207 static struct mips_hi16 *mips_hi16_list;
2208
2209 /* A howto special_function for REL *HI16 relocations.  We can only
2210    calculate the correct value once we've seen the partnering
2211    *LO16 relocation, so just save the information for later.
2212
2213    The ABI requires that the *LO16 immediately follow the *HI16.
2214    However, as a GNU extension, we permit an arbitrary number of
2215    *HI16s to be associated with a single *LO16.  This significantly
2216    simplies the relocation handling in gcc.  */
2217
2218 bfd_reloc_status_type
2219 _bfd_mips_elf_hi16_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry,
2220                           asymbol *symbol ATTRIBUTE_UNUSED, void *data,
2221                           asection *input_section, bfd *output_bfd,
2222                           char **error_message ATTRIBUTE_UNUSED)
2223 {
2224   struct mips_hi16 *n;
2225
2226   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2227     return bfd_reloc_outofrange;
2228
2229   n = bfd_malloc (sizeof *n);
2230   if (n == NULL)
2231     return bfd_reloc_outofrange;
2232
2233   n->next = mips_hi16_list;
2234   n->data = data;
2235   n->input_section = input_section;
2236   n->rel = *reloc_entry;
2237   mips_hi16_list = n;
2238
2239   if (output_bfd != NULL)
2240     reloc_entry->address += input_section->output_offset;
2241
2242   return bfd_reloc_ok;
2243 }
2244
2245 /* A howto special_function for REL R_MIPS*_GOT16 relocations.  This is just
2246    like any other 16-bit relocation when applied to global symbols, but is
2247    treated in the same as R_MIPS_HI16 when applied to local symbols.  */
2248
2249 bfd_reloc_status_type
2250 _bfd_mips_elf_got16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2251                            void *data, asection *input_section,
2252                            bfd *output_bfd, char **error_message)
2253 {
2254   if ((symbol->flags & (BSF_GLOBAL | BSF_WEAK)) != 0
2255       || bfd_is_und_section (bfd_get_section (symbol))
2256       || bfd_is_com_section (bfd_get_section (symbol)))
2257     /* The relocation is against a global symbol.  */
2258     return _bfd_mips_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2259                                         input_section, output_bfd,
2260                                         error_message);
2261
2262   return _bfd_mips_elf_hi16_reloc (abfd, reloc_entry, symbol, data,
2263                                    input_section, output_bfd, error_message);
2264 }
2265
2266 /* A howto special_function for REL *LO16 relocations.  The *LO16 itself
2267    is a straightforward 16 bit inplace relocation, but we must deal with
2268    any partnering high-part relocations as well.  */
2269
2270 bfd_reloc_status_type
2271 _bfd_mips_elf_lo16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2272                           void *data, asection *input_section,
2273                           bfd *output_bfd, char **error_message)
2274 {
2275   bfd_vma vallo;
2276   bfd_byte *location = (bfd_byte *) data + reloc_entry->address;
2277
2278   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2279     return bfd_reloc_outofrange;
2280
2281   _bfd_mips_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, FALSE,
2282                                  location);
2283   vallo = bfd_get_32 (abfd, location);
2284   _bfd_mips_elf_reloc_shuffle (abfd, reloc_entry->howto->type, FALSE,
2285                                location);
2286
2287   while (mips_hi16_list != NULL)
2288     {
2289       bfd_reloc_status_type ret;
2290       struct mips_hi16 *hi;
2291
2292       hi = mips_hi16_list;
2293
2294       /* R_MIPS*_GOT16 relocations are something of a special case.  We
2295          want to install the addend in the same way as for a R_MIPS*_HI16
2296          relocation (with a rightshift of 16).  However, since GOT16
2297          relocations can also be used with global symbols, their howto
2298          has a rightshift of 0.  */
2299       if (hi->rel.howto->type == R_MIPS_GOT16)
2300         hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MIPS_HI16, FALSE);
2301       else if (hi->rel.howto->type == R_MIPS16_GOT16)
2302         hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MIPS16_HI16, FALSE);
2303       else if (hi->rel.howto->type == R_MICROMIPS_GOT16)
2304         hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MICROMIPS_HI16, FALSE);
2305
2306       /* VALLO is a signed 16-bit number.  Bias it by 0x8000 so that any
2307          carry or borrow will induce a change of +1 or -1 in the high part.  */
2308       hi->rel.addend += (vallo + 0x8000) & 0xffff;
2309
2310       ret = _bfd_mips_elf_generic_reloc (abfd, &hi->rel, symbol, hi->data,
2311                                          hi->input_section, output_bfd,
2312                                          error_message);
2313       if (ret != bfd_reloc_ok)
2314         return ret;
2315
2316       mips_hi16_list = hi->next;
2317       free (hi);
2318     }
2319
2320   return _bfd_mips_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2321                                       input_section, output_bfd,
2322                                       error_message);
2323 }
2324
2325 /* A generic howto special_function.  This calculates and installs the
2326    relocation itself, thus avoiding the oft-discussed problems in
2327    bfd_perform_relocation and bfd_install_relocation.  */
2328
2329 bfd_reloc_status_type
2330 _bfd_mips_elf_generic_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry,
2331                              asymbol *symbol, void *data ATTRIBUTE_UNUSED,
2332                              asection *input_section, bfd *output_bfd,
2333                              char **error_message ATTRIBUTE_UNUSED)
2334 {
2335   bfd_signed_vma val;
2336   bfd_reloc_status_type status;
2337   bfd_boolean relocatable;
2338
2339   relocatable = (output_bfd != NULL);
2340
2341   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2342     return bfd_reloc_outofrange;
2343
2344   /* Build up the field adjustment in VAL.  */
2345   val = 0;
2346   if (!relocatable || (symbol->flags & BSF_SECTION_SYM) != 0)
2347     {
2348       /* Either we're calculating the final field value or we have a
2349          relocation against a section symbol.  Add in the section's
2350          offset or address.  */
2351       val += symbol->section->output_section->vma;
2352       val += symbol->section->output_offset;
2353     }
2354
2355   if (!relocatable)
2356     {
2357       /* We're calculating the final field value.  Add in the symbol's value
2358          and, if pc-relative, subtract the address of the field itself.  */
2359       val += symbol->value;
2360       if (reloc_entry->howto->pc_relative)
2361         {
2362           val -= input_section->output_section->vma;
2363           val -= input_section->output_offset;
2364           val -= reloc_entry->address;
2365         }
2366     }
2367
2368   /* VAL is now the final adjustment.  If we're keeping this relocation
2369      in the output file, and if the relocation uses a separate addend,
2370      we just need to add VAL to that addend.  Otherwise we need to add
2371      VAL to the relocation field itself.  */
2372   if (relocatable && !reloc_entry->howto->partial_inplace)
2373     reloc_entry->addend += val;
2374   else
2375     {
2376       bfd_byte *location = (bfd_byte *) data + reloc_entry->address;
2377
2378       /* Add in the separate addend, if any.  */
2379       val += reloc_entry->addend;
2380
2381       /* Add VAL to the relocation field.  */
2382       _bfd_mips_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, FALSE,
2383                                      location);
2384       status = _bfd_relocate_contents (reloc_entry->howto, abfd, val,
2385                                        location);
2386       _bfd_mips_elf_reloc_shuffle (abfd, reloc_entry->howto->type, FALSE,
2387                                    location);
2388
2389       if (status != bfd_reloc_ok)
2390         return status;
2391     }
2392
2393   if (relocatable)
2394     reloc_entry->address += input_section->output_offset;
2395
2396   return bfd_reloc_ok;
2397 }
2398 \f
2399 /* Swap an entry in a .gptab section.  Note that these routines rely
2400    on the equivalence of the two elements of the union.  */
2401
2402 static void
2403 bfd_mips_elf32_swap_gptab_in (bfd *abfd, const Elf32_External_gptab *ex,
2404                               Elf32_gptab *in)
2405 {
2406   in->gt_entry.gt_g_value = H_GET_32 (abfd, ex->gt_entry.gt_g_value);
2407   in->gt_entry.gt_bytes = H_GET_32 (abfd, ex->gt_entry.gt_bytes);
2408 }
2409
2410 static void
2411 bfd_mips_elf32_swap_gptab_out (bfd *abfd, const Elf32_gptab *in,
2412                                Elf32_External_gptab *ex)
2413 {
2414   H_PUT_32 (abfd, in->gt_entry.gt_g_value, ex->gt_entry.gt_g_value);
2415   H_PUT_32 (abfd, in->gt_entry.gt_bytes, ex->gt_entry.gt_bytes);
2416 }
2417
2418 static void
2419 bfd_elf32_swap_compact_rel_out (bfd *abfd, const Elf32_compact_rel *in,
2420                                 Elf32_External_compact_rel *ex)
2421 {
2422   H_PUT_32 (abfd, in->id1, ex->id1);
2423   H_PUT_32 (abfd, in->num, ex->num);
2424   H_PUT_32 (abfd, in->id2, ex->id2);
2425   H_PUT_32 (abfd, in->offset, ex->offset);
2426   H_PUT_32 (abfd, in->reserved0, ex->reserved0);
2427   H_PUT_32 (abfd, in->reserved1, ex->reserved1);
2428 }
2429
2430 static void
2431 bfd_elf32_swap_crinfo_out (bfd *abfd, const Elf32_crinfo *in,
2432                            Elf32_External_crinfo *ex)
2433 {
2434   unsigned long l;
2435
2436   l = (((in->ctype & CRINFO_CTYPE) << CRINFO_CTYPE_SH)
2437        | ((in->rtype & CRINFO_RTYPE) << CRINFO_RTYPE_SH)
2438        | ((in->dist2to & CRINFO_DIST2TO) << CRINFO_DIST2TO_SH)
2439        | ((in->relvaddr & CRINFO_RELVADDR) << CRINFO_RELVADDR_SH));
2440   H_PUT_32 (abfd, l, ex->info);
2441   H_PUT_32 (abfd, in->konst, ex->konst);
2442   H_PUT_32 (abfd, in->vaddr, ex->vaddr);
2443 }
2444 \f
2445 /* A .reginfo section holds a single Elf32_RegInfo structure.  These
2446    routines swap this structure in and out.  They are used outside of
2447    BFD, so they are globally visible.  */
2448
2449 void
2450 bfd_mips_elf32_swap_reginfo_in (bfd *abfd, const Elf32_External_RegInfo *ex,
2451                                 Elf32_RegInfo *in)
2452 {
2453   in->ri_gprmask = H_GET_32 (abfd, ex->ri_gprmask);
2454   in->ri_cprmask[0] = H_GET_32 (abfd, ex->ri_cprmask[0]);
2455   in->ri_cprmask[1] = H_GET_32 (abfd, ex->ri_cprmask[1]);
2456   in->ri_cprmask[2] = H_GET_32 (abfd, ex->ri_cprmask[2]);
2457   in->ri_cprmask[3] = H_GET_32 (abfd, ex->ri_cprmask[3]);
2458   in->ri_gp_value = H_GET_32 (abfd, ex->ri_gp_value);
2459 }
2460
2461 void
2462 bfd_mips_elf32_swap_reginfo_out (bfd *abfd, const Elf32_RegInfo *in,
2463                                  Elf32_External_RegInfo *ex)
2464 {
2465   H_PUT_32 (abfd, in->ri_gprmask, ex->ri_gprmask);
2466   H_PUT_32 (abfd, in->ri_cprmask[0], ex->ri_cprmask[0]);
2467   H_PUT_32 (abfd, in->ri_cprmask[1], ex->ri_cprmask[1]);
2468   H_PUT_32 (abfd, in->ri_cprmask[2], ex->ri_cprmask[2]);
2469   H_PUT_32 (abfd, in->ri_cprmask[3], ex->ri_cprmask[3]);
2470   H_PUT_32 (abfd, in->ri_gp_value, ex->ri_gp_value);
2471 }
2472
2473 /* In the 64 bit ABI, the .MIPS.options section holds register
2474    information in an Elf64_Reginfo structure.  These routines swap
2475    them in and out.  They are globally visible because they are used
2476    outside of BFD.  These routines are here so that gas can call them
2477    without worrying about whether the 64 bit ABI has been included.  */
2478
2479 void
2480 bfd_mips_elf64_swap_reginfo_in (bfd *abfd, const Elf64_External_RegInfo *ex,
2481                                 Elf64_Internal_RegInfo *in)
2482 {
2483   in->ri_gprmask = H_GET_32 (abfd, ex->ri_gprmask);
2484   in->ri_pad = H_GET_32 (abfd, ex->ri_pad);
2485   in->ri_cprmask[0] = H_GET_32 (abfd, ex->ri_cprmask[0]);
2486   in->ri_cprmask[1] = H_GET_32 (abfd, ex->ri_cprmask[1]);
2487   in->ri_cprmask[2] = H_GET_32 (abfd, ex->ri_cprmask[2]);
2488   in->ri_cprmask[3] = H_GET_32 (abfd, ex->ri_cprmask[3]);
2489   in->ri_gp_value = H_GET_64 (abfd, ex->ri_gp_value);
2490 }
2491
2492 void
2493 bfd_mips_elf64_swap_reginfo_out (bfd *abfd, const Elf64_Internal_RegInfo *in,
2494                                  Elf64_External_RegInfo *ex)
2495 {
2496   H_PUT_32 (abfd, in->ri_gprmask, ex->ri_gprmask);
2497   H_PUT_32 (abfd, in->ri_pad, ex->ri_pad);
2498   H_PUT_32 (abfd, in->ri_cprmask[0], ex->ri_cprmask[0]);
2499   H_PUT_32 (abfd, in->ri_cprmask[1], ex->ri_cprmask[1]);
2500   H_PUT_32 (abfd, in->ri_cprmask[2], ex->ri_cprmask[2]);
2501   H_PUT_32 (abfd, in->ri_cprmask[3], ex->ri_cprmask[3]);
2502   H_PUT_64 (abfd, in->ri_gp_value, ex->ri_gp_value);
2503 }
2504
2505 /* Swap in an options header.  */
2506
2507 void
2508 bfd_mips_elf_swap_options_in (bfd *abfd, const Elf_External_Options *ex,
2509                               Elf_Internal_Options *in)
2510 {
2511   in->kind = H_GET_8 (abfd, ex->kind);
2512   in->size = H_GET_8 (abfd, ex->size);
2513   in->section = H_GET_16 (abfd, ex->section);
2514   in->info = H_GET_32 (abfd, ex->info);
2515 }
2516
2517 /* Swap out an options header.  */
2518
2519 void
2520 bfd_mips_elf_swap_options_out (bfd *abfd, const Elf_Internal_Options *in,
2521                                Elf_External_Options *ex)
2522 {
2523   H_PUT_8 (abfd, in->kind, ex->kind);
2524   H_PUT_8 (abfd, in->size, ex->size);
2525   H_PUT_16 (abfd, in->section, ex->section);
2526   H_PUT_32 (abfd, in->info, ex->info);
2527 }
2528 \f
2529 /* This function is called via qsort() to sort the dynamic relocation
2530    entries by increasing r_symndx value.  */
2531
2532 static int
2533 sort_dynamic_relocs (const void *arg1, const void *arg2)
2534 {
2535   Elf_Internal_Rela int_reloc1;
2536   Elf_Internal_Rela int_reloc2;
2537   int diff;
2538
2539   bfd_elf32_swap_reloc_in (reldyn_sorting_bfd, arg1, &int_reloc1);
2540   bfd_elf32_swap_reloc_in (reldyn_sorting_bfd, arg2, &int_reloc2);
2541
2542   diff = ELF32_R_SYM (int_reloc1.r_info) - ELF32_R_SYM (int_reloc2.r_info);
2543   if (diff != 0)
2544     return diff;
2545
2546   if (int_reloc1.r_offset < int_reloc2.r_offset)
2547     return -1;
2548   if (int_reloc1.r_offset > int_reloc2.r_offset)
2549     return 1;
2550   return 0;
2551 }
2552
2553 /* Like sort_dynamic_relocs, but used for elf64 relocations.  */
2554
2555 static int
2556 sort_dynamic_relocs_64 (const void *arg1 ATTRIBUTE_UNUSED,
2557                         const void *arg2 ATTRIBUTE_UNUSED)
2558 {
2559 #ifdef BFD64
2560   Elf_Internal_Rela int_reloc1[3];
2561   Elf_Internal_Rela int_reloc2[3];
2562
2563   (*get_elf_backend_data (reldyn_sorting_bfd)->s->swap_reloc_in)
2564     (reldyn_sorting_bfd, arg1, int_reloc1);
2565   (*get_elf_backend_data (reldyn_sorting_bfd)->s->swap_reloc_in)
2566     (reldyn_sorting_bfd, arg2, int_reloc2);
2567
2568   if (ELF64_R_SYM (int_reloc1[0].r_info) < ELF64_R_SYM (int_reloc2[0].r_info))
2569     return -1;
2570   if (ELF64_R_SYM (int_reloc1[0].r_info) > ELF64_R_SYM (int_reloc2[0].r_info))
2571     return 1;
2572
2573   if (int_reloc1[0].r_offset < int_reloc2[0].r_offset)
2574     return -1;
2575   if (int_reloc1[0].r_offset > int_reloc2[0].r_offset)
2576     return 1;
2577   return 0;
2578 #else
2579   abort ();
2580 #endif
2581 }
2582
2583
2584 /* This routine is used to write out ECOFF debugging external symbol
2585    information.  It is called via mips_elf_link_hash_traverse.  The
2586    ECOFF external symbol information must match the ELF external
2587    symbol information.  Unfortunately, at this point we don't know
2588    whether a symbol is required by reloc information, so the two
2589    tables may wind up being different.  We must sort out the external
2590    symbol information before we can set the final size of the .mdebug
2591    section, and we must set the size of the .mdebug section before we
2592    can relocate any sections, and we can't know which symbols are
2593    required by relocation until we relocate the sections.
2594    Fortunately, it is relatively unlikely that any symbol will be
2595    stripped but required by a reloc.  In particular, it can not happen
2596    when generating a final executable.  */
2597
2598 static bfd_boolean
2599 mips_elf_output_extsym (struct mips_elf_link_hash_entry *h, void *data)
2600 {
2601   struct extsym_info *einfo = data;
2602   bfd_boolean strip;
2603   asection *sec, *output_section;
2604
2605   if (h->root.indx == -2)
2606     strip = FALSE;
2607   else if ((h->root.def_dynamic
2608             || h->root.ref_dynamic
2609             || h->root.type == bfd_link_hash_new)
2610            && !h->root.def_regular
2611            && !h->root.ref_regular)
2612     strip = TRUE;
2613   else if (einfo->info->strip == strip_all
2614            || (einfo->info->strip == strip_some
2615                && bfd_hash_lookup (einfo->info->keep_hash,
2616                                    h->root.root.root.string,
2617                                    FALSE, FALSE) == NULL))
2618     strip = TRUE;
2619   else
2620     strip = FALSE;
2621
2622   if (strip)
2623     return TRUE;
2624
2625   if (h->esym.ifd == -2)
2626     {
2627       h->esym.jmptbl = 0;
2628       h->esym.cobol_main = 0;
2629       h->esym.weakext = 0;
2630       h->esym.reserved = 0;
2631       h->esym.ifd = ifdNil;
2632       h->esym.asym.value = 0;
2633       h->esym.asym.st = stGlobal;
2634
2635       if (h->root.root.type == bfd_link_hash_undefined
2636           || h->root.root.type == bfd_link_hash_undefweak)
2637         {
2638           const char *name;
2639
2640           /* Use undefined class.  Also, set class and type for some
2641              special symbols.  */
2642           name = h->root.root.root.string;
2643           if (strcmp (name, mips_elf_dynsym_rtproc_names[0]) == 0
2644               || strcmp (name, mips_elf_dynsym_rtproc_names[1]) == 0)
2645             {
2646               h->esym.asym.sc = scData;
2647               h->esym.asym.st = stLabel;
2648               h->esym.asym.value = 0;
2649             }
2650           else if (strcmp (name, mips_elf_dynsym_rtproc_names[2]) == 0)
2651             {
2652               h->esym.asym.sc = scAbs;
2653               h->esym.asym.st = stLabel;
2654               h->esym.asym.value =
2655                 mips_elf_hash_table (einfo->info)->procedure_count;
2656             }
2657           else if (strcmp (name, "_gp_disp") == 0 && ! NEWABI_P (einfo->abfd))
2658             {
2659               h->esym.asym.sc = scAbs;
2660               h->esym.asym.st = stLabel;
2661               h->esym.asym.value = elf_gp (einfo->abfd);
2662             }
2663           else
2664             h->esym.asym.sc = scUndefined;
2665         }
2666       else if (h->root.root.type != bfd_link_hash_defined
2667           && h->root.root.type != bfd_link_hash_defweak)
2668         h->esym.asym.sc = scAbs;
2669       else
2670         {
2671           const char *name;
2672
2673           sec = h->root.root.u.def.section;
2674           output_section = sec->output_section;
2675
2676           /* When making a shared library and symbol h is the one from
2677              the another shared library, OUTPUT_SECTION may be null.  */
2678           if (output_section == NULL)
2679             h->esym.asym.sc = scUndefined;
2680           else
2681             {
2682               name = bfd_section_name (output_section->owner, output_section);
2683
2684               if (strcmp (name, ".text") == 0)
2685                 h->esym.asym.sc = scText;
2686               else if (strcmp (name, ".data") == 0)
2687                 h->esym.asym.sc = scData;
2688               else if (strcmp (name, ".sdata") == 0)
2689                 h->esym.asym.sc = scSData;
2690               else if (strcmp (name, ".rodata") == 0
2691                        || strcmp (name, ".rdata") == 0)
2692                 h->esym.asym.sc = scRData;
2693               else if (strcmp (name, ".bss") == 0)
2694                 h->esym.asym.sc = scBss;
2695               else if (strcmp (name, ".sbss") == 0)
2696                 h->esym.asym.sc = scSBss;
2697               else if (strcmp (name, ".init") == 0)
2698                 h->esym.asym.sc = scInit;
2699               else if (strcmp (name, ".fini") == 0)
2700                 h->esym.asym.sc = scFini;
2701               else
2702                 h->esym.asym.sc = scAbs;
2703             }
2704         }
2705
2706       h->esym.asym.reserved = 0;
2707       h->esym.asym.index = indexNil;
2708     }
2709
2710   if (h->root.root.type == bfd_link_hash_common)
2711     h->esym.asym.value = h->root.root.u.c.size;
2712   else if (h->root.root.type == bfd_link_hash_defined
2713            || h->root.root.type == bfd_link_hash_defweak)
2714     {
2715       if (h->esym.asym.sc == scCommon)
2716         h->esym.asym.sc = scBss;
2717       else if (h->esym.asym.sc == scSCommon)
2718         h->esym.asym.sc = scSBss;
2719
2720       sec = h->root.root.u.def.section;
2721       output_section = sec->output_section;
2722       if (output_section != NULL)
2723         h->esym.asym.value = (h->root.root.u.def.value
2724                               + sec->output_offset
2725                               + output_section->vma);
2726       else
2727         h->esym.asym.value = 0;
2728     }
2729   else
2730     {
2731       struct mips_elf_link_hash_entry *hd = h;
2732
2733       while (hd->root.root.type == bfd_link_hash_indirect)
2734         hd = (struct mips_elf_link_hash_entry *)h->root.root.u.i.link;
2735
2736       if (hd->needs_lazy_stub)
2737         {
2738           /* Set type and value for a symbol with a function stub.  */
2739           h->esym.asym.st = stProc;
2740           sec = hd->root.root.u.def.section;
2741           if (sec == NULL)
2742             h->esym.asym.value = 0;
2743           else
2744             {
2745               output_section = sec->output_section;
2746               if (output_section != NULL)
2747                 h->esym.asym.value = (hd->root.plt.offset
2748                                       + sec->output_offset
2749                                       + output_section->vma);
2750               else
2751                 h->esym.asym.value = 0;
2752             }
2753         }
2754     }
2755
2756   if (! bfd_ecoff_debug_one_external (einfo->abfd, einfo->debug, einfo->swap,
2757                                       h->root.root.root.string,
2758                                       &h->esym))
2759     {
2760       einfo->failed = TRUE;
2761       return FALSE;
2762     }
2763
2764   return TRUE;
2765 }
2766
2767 /* A comparison routine used to sort .gptab entries.  */
2768
2769 static int
2770 gptab_compare (const void *p1, const void *p2)
2771 {
2772   const Elf32_gptab *a1 = p1;
2773   const Elf32_gptab *a2 = p2;
2774
2775   return a1->gt_entry.gt_g_value - a2->gt_entry.gt_g_value;
2776 }
2777 \f
2778 /* Functions to manage the got entry hash table.  */
2779
2780 /* Use all 64 bits of a bfd_vma for the computation of a 32-bit
2781    hash number.  */
2782
2783 static INLINE hashval_t
2784 mips_elf_hash_bfd_vma (bfd_vma addr)
2785 {
2786 #ifdef BFD64
2787   return addr + (addr >> 32);
2788 #else
2789   return addr;
2790 #endif
2791 }
2792
2793 /* got_entries only match if they're identical, except for gotidx, so
2794    use all fields to compute the hash, and compare the appropriate
2795    union members.  */
2796
2797 static hashval_t
2798 mips_elf_got_entry_hash (const void *entry_)
2799 {
2800   const struct mips_got_entry *entry = (struct mips_got_entry *)entry_;
2801
2802   return entry->symndx
2803     + ((entry->tls_type & GOT_TLS_LDM) << 17)
2804     + (! entry->abfd ? mips_elf_hash_bfd_vma (entry->d.address)
2805        : entry->abfd->id
2806          + (entry->symndx >= 0 ? mips_elf_hash_bfd_vma (entry->d.addend)
2807             : entry->d.h->root.root.root.hash));
2808 }
2809
2810 static int
2811 mips_elf_got_entry_eq (const void *entry1, const void *entry2)
2812 {
2813   const struct mips_got_entry *e1 = (struct mips_got_entry *)entry1;
2814   const struct mips_got_entry *e2 = (struct mips_got_entry *)entry2;
2815
2816   /* An LDM entry can only match another LDM entry.  */
2817   if ((e1->tls_type ^ e2->tls_type) & GOT_TLS_LDM)
2818     return 0;
2819
2820   return e1->abfd == e2->abfd && e1->symndx == e2->symndx
2821     && (! e1->abfd ? e1->d.address == e2->d.address
2822         : e1->symndx >= 0 ? e1->d.addend == e2->d.addend
2823         : e1->d.h == e2->d.h);
2824 }
2825
2826 /* multi_got_entries are still a match in the case of global objects,
2827    even if the input bfd in which they're referenced differs, so the
2828    hash computation and compare functions are adjusted
2829    accordingly.  */
2830
2831 static hashval_t
2832 mips_elf_multi_got_entry_hash (const void *entry_)
2833 {
2834   const struct mips_got_entry *entry = (struct mips_got_entry *)entry_;
2835
2836   return entry->symndx
2837     + (! entry->abfd
2838        ? mips_elf_hash_bfd_vma (entry->d.address)
2839        : entry->symndx >= 0
2840        ? ((entry->tls_type & GOT_TLS_LDM)
2841           ? (GOT_TLS_LDM << 17)
2842           : (entry->abfd->id
2843              + mips_elf_hash_bfd_vma (entry->d.addend)))
2844        : entry->d.h->root.root.root.hash);
2845 }
2846
2847 static int
2848 mips_elf_multi_got_entry_eq (const void *entry1, const void *entry2)
2849 {
2850   const struct mips_got_entry *e1 = (struct mips_got_entry *)entry1;
2851   const struct mips_got_entry *e2 = (struct mips_got_entry *)entry2;
2852
2853   /* Any two LDM entries match.  */
2854   if (e1->tls_type & e2->tls_type & GOT_TLS_LDM)
2855     return 1;
2856
2857   /* Nothing else matches an LDM entry.  */
2858   if ((e1->tls_type ^ e2->tls_type) & GOT_TLS_LDM)
2859     return 0;
2860
2861   return e1->symndx == e2->symndx
2862     && (e1->symndx >= 0 ? e1->abfd == e2->abfd && e1->d.addend == e2->d.addend
2863         : e1->abfd == NULL || e2->abfd == NULL
2864         ? e1->abfd == e2->abfd && e1->d.address == e2->d.address
2865         : e1->d.h == e2->d.h);
2866 }
2867
2868 static hashval_t
2869 mips_got_page_entry_hash (const void *entry_)
2870 {
2871   const struct mips_got_page_entry *entry;
2872
2873   entry = (const struct mips_got_page_entry *) entry_;
2874   return entry->abfd->id + entry->symndx;
2875 }
2876
2877 static int
2878 mips_got_page_entry_eq (const void *entry1_, const void *entry2_)
2879 {
2880   const struct mips_got_page_entry *entry1, *entry2;
2881
2882   entry1 = (const struct mips_got_page_entry *) entry1_;
2883   entry2 = (const struct mips_got_page_entry *) entry2_;
2884   return entry1->abfd == entry2->abfd && entry1->symndx == entry2->symndx;
2885 }
2886 \f
2887 /* Return the dynamic relocation section.  If it doesn't exist, try to
2888    create a new it if CREATE_P, otherwise return NULL.  Also return NULL
2889    if creation fails.  */
2890
2891 static asection *
2892 mips_elf_rel_dyn_section (struct bfd_link_info *info, bfd_boolean create_p)
2893 {
2894   const char *dname;
2895   asection *sreloc;
2896   bfd *dynobj;
2897
2898   dname = MIPS_ELF_REL_DYN_NAME (info);
2899   dynobj = elf_hash_table (info)->dynobj;
2900   sreloc = bfd_get_linker_section (dynobj, dname);
2901   if (sreloc == NULL && create_p)
2902     {
2903       sreloc = bfd_make_section_anyway_with_flags (dynobj, dname,
2904                                                    (SEC_ALLOC
2905                                                     | SEC_LOAD
2906                                                     | SEC_HAS_CONTENTS
2907                                                     | SEC_IN_MEMORY
2908                                                     | SEC_LINKER_CREATED
2909                                                     | SEC_READONLY));
2910       if (sreloc == NULL
2911           || ! bfd_set_section_alignment (dynobj, sreloc,
2912                                           MIPS_ELF_LOG_FILE_ALIGN (dynobj)))
2913         return NULL;
2914     }
2915   return sreloc;
2916 }
2917
2918 /* Count the number of relocations needed for a TLS GOT entry, with
2919    access types from TLS_TYPE, and symbol H (or a local symbol if H
2920    is NULL).  */
2921
2922 static int
2923 mips_tls_got_relocs (struct bfd_link_info *info, unsigned char tls_type,
2924                      struct elf_link_hash_entry *h)
2925 {
2926   int indx = 0;
2927   int ret = 0;
2928   bfd_boolean need_relocs = FALSE;
2929   bfd_boolean dyn = elf_hash_table (info)->dynamic_sections_created;
2930
2931   if (h && WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h)
2932       && (!info->shared || !SYMBOL_REFERENCES_LOCAL (info, h)))
2933     indx = h->dynindx;
2934
2935   if ((info->shared || indx != 0)
2936       && (h == NULL
2937           || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
2938           || h->root.type != bfd_link_hash_undefweak))
2939     need_relocs = TRUE;
2940
2941   if (!need_relocs)
2942     return FALSE;
2943
2944   if (tls_type & GOT_TLS_GD)
2945     {
2946       ret++;
2947       if (indx != 0)
2948         ret++;
2949     }
2950
2951   if (tls_type & GOT_TLS_IE)
2952     ret++;
2953
2954   if ((tls_type & GOT_TLS_LDM) && info->shared)
2955     ret++;
2956
2957   return ret;
2958 }
2959
2960 /* Count the number of TLS relocations required for the GOT entry in
2961    ARG1, if it describes a local symbol.  */
2962
2963 static int
2964 mips_elf_count_local_tls_relocs (void **arg1, void *arg2)
2965 {
2966   struct mips_got_entry *entry = * (struct mips_got_entry **) arg1;
2967   struct mips_elf_count_tls_arg *arg = arg2;
2968
2969   if (entry->abfd != NULL && entry->symndx != -1)
2970     arg->needed += mips_tls_got_relocs (arg->info, entry->tls_type, NULL);
2971
2972   return 1;
2973 }
2974
2975 /* Count the number of TLS GOT entries required for the global (or
2976    forced-local) symbol in ARG1.  */
2977
2978 static int
2979 mips_elf_count_global_tls_entries (void *arg1, void *arg2)
2980 {
2981   struct mips_elf_link_hash_entry *hm
2982     = (struct mips_elf_link_hash_entry *) arg1;
2983   struct mips_elf_count_tls_arg *arg = arg2;
2984
2985   if (hm->tls_type & GOT_TLS_GD)
2986     arg->needed += 2;
2987   if (hm->tls_type & GOT_TLS_IE)
2988     arg->needed += 1;
2989
2990   return 1;
2991 }
2992
2993 /* Count the number of TLS relocations required for the global (or
2994    forced-local) symbol in ARG1.  */
2995
2996 static int
2997 mips_elf_count_global_tls_relocs (void *arg1, void *arg2)
2998 {
2999   struct mips_elf_link_hash_entry *hm
3000     = (struct mips_elf_link_hash_entry *) arg1;
3001   struct mips_elf_count_tls_arg *arg = arg2;
3002
3003   arg->needed += mips_tls_got_relocs (arg->info, hm->tls_type, &hm->root);
3004
3005   return 1;
3006 }
3007
3008 /* Output a simple dynamic relocation into SRELOC.  */
3009
3010 static void
3011 mips_elf_output_dynamic_relocation (bfd *output_bfd,
3012                                     asection *sreloc,
3013                                     unsigned long reloc_index,
3014                                     unsigned long indx,
3015                                     int r_type,
3016                                     bfd_vma offset)
3017 {
3018   Elf_Internal_Rela rel[3];
3019
3020   memset (rel, 0, sizeof (rel));
3021
3022   rel[0].r_info = ELF_R_INFO (output_bfd, indx, r_type);
3023   rel[0].r_offset = rel[1].r_offset = rel[2].r_offset = offset;
3024
3025   if (ABI_64_P (output_bfd))
3026     {
3027       (*get_elf_backend_data (output_bfd)->s->swap_reloc_out)
3028         (output_bfd, &rel[0],
3029          (sreloc->contents
3030           + reloc_index * sizeof (Elf64_Mips_External_Rel)));
3031     }
3032   else
3033     bfd_elf32_swap_reloc_out
3034       (output_bfd, &rel[0],
3035        (sreloc->contents
3036         + reloc_index * sizeof (Elf32_External_Rel)));
3037 }
3038
3039 /* Initialize a set of TLS GOT entries for one symbol.  */
3040
3041 static void
3042 mips_elf_initialize_tls_slots (bfd *abfd, bfd_vma got_offset,
3043                                unsigned char *tls_type_p,
3044                                struct bfd_link_info *info,
3045                                struct mips_elf_link_hash_entry *h,
3046                                bfd_vma value)
3047 {
3048   struct mips_elf_link_hash_table *htab;
3049   int indx;
3050   asection *sreloc, *sgot;
3051   bfd_vma offset, offset2;
3052   bfd_boolean need_relocs = FALSE;
3053
3054   htab = mips_elf_hash_table (info);
3055   if (htab == NULL)
3056     return;
3057
3058   sgot = htab->sgot;
3059
3060   indx = 0;
3061   if (h != NULL)
3062     {
3063       bfd_boolean dyn = elf_hash_table (info)->dynamic_sections_created;
3064
3065       if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, &h->root)
3066           && (!info->shared || !SYMBOL_REFERENCES_LOCAL (info, &h->root)))
3067         indx = h->root.dynindx;
3068     }
3069
3070   if (*tls_type_p & GOT_TLS_DONE)
3071     return;
3072
3073   if ((info->shared || indx != 0)
3074       && (h == NULL
3075           || ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT
3076           || h->root.type != bfd_link_hash_undefweak))
3077     need_relocs = TRUE;
3078
3079   /* MINUS_ONE means the symbol is not defined in this object.  It may not
3080      be defined at all; assume that the value doesn't matter in that
3081      case.  Otherwise complain if we would use the value.  */
3082   BFD_ASSERT (value != MINUS_ONE || (indx != 0 && need_relocs)
3083               || h->root.root.type == bfd_link_hash_undefweak);
3084
3085   /* Emit necessary relocations.  */
3086   sreloc = mips_elf_rel_dyn_section (info, FALSE);
3087
3088   /* General Dynamic.  */
3089   if (*tls_type_p & GOT_TLS_GD)
3090     {
3091       offset = got_offset;
3092       offset2 = offset + MIPS_ELF_GOT_SIZE (abfd);
3093
3094       if (need_relocs)
3095         {
3096           mips_elf_output_dynamic_relocation
3097             (abfd, sreloc, sreloc->reloc_count++, indx,
3098              ABI_64_P (abfd) ? R_MIPS_TLS_DTPMOD64 : R_MIPS_TLS_DTPMOD32,
3099              sgot->output_offset + sgot->output_section->vma + offset);
3100
3101           if (indx)
3102             mips_elf_output_dynamic_relocation
3103               (abfd, sreloc, sreloc->reloc_count++, indx,
3104                ABI_64_P (abfd) ? R_MIPS_TLS_DTPREL64 : R_MIPS_TLS_DTPREL32,
3105                sgot->output_offset + sgot->output_section->vma + offset2);
3106           else
3107             MIPS_ELF_PUT_WORD (abfd, value - dtprel_base (info),
3108                                sgot->contents + offset2);
3109         }
3110       else
3111         {
3112           MIPS_ELF_PUT_WORD (abfd, 1,
3113                              sgot->contents + offset);
3114           MIPS_ELF_PUT_WORD (abfd, value - dtprel_base (info),
3115                              sgot->contents + offset2);
3116         }
3117
3118       got_offset += 2 * MIPS_ELF_GOT_SIZE (abfd);
3119     }
3120
3121   /* Initial Exec model.  */
3122   if (*tls_type_p & GOT_TLS_IE)
3123     {
3124       offset = got_offset;
3125
3126       if (need_relocs)
3127         {
3128           if (indx == 0)
3129             MIPS_ELF_PUT_WORD (abfd, value - elf_hash_table (info)->tls_sec->vma,
3130                                sgot->contents + offset);
3131           else
3132             MIPS_ELF_PUT_WORD (abfd, 0,
3133                                sgot->contents + offset);
3134
3135           mips_elf_output_dynamic_relocation
3136             (abfd, sreloc, sreloc->reloc_count++, indx,
3137              ABI_64_P (abfd) ? R_MIPS_TLS_TPREL64 : R_MIPS_TLS_TPREL32,
3138              sgot->output_offset + sgot->output_section->vma + offset);
3139         }
3140       else
3141         MIPS_ELF_PUT_WORD (abfd, value - tprel_base (info),
3142                            sgot->contents + offset);
3143     }
3144
3145   if (*tls_type_p & GOT_TLS_LDM)
3146     {
3147       /* The initial offset is zero, and the LD offsets will include the
3148          bias by DTP_OFFSET.  */
3149       MIPS_ELF_PUT_WORD (abfd, 0,
3150                          sgot->contents + got_offset
3151                          + MIPS_ELF_GOT_SIZE (abfd));
3152
3153       if (!info->shared)
3154         MIPS_ELF_PUT_WORD (abfd, 1,
3155                            sgot->contents + got_offset);
3156       else
3157         mips_elf_output_dynamic_relocation
3158           (abfd, sreloc, sreloc->reloc_count++, indx,
3159            ABI_64_P (abfd) ? R_MIPS_TLS_DTPMOD64 : R_MIPS_TLS_DTPMOD32,
3160            sgot->output_offset + sgot->output_section->vma + got_offset);
3161     }
3162
3163   *tls_type_p |= GOT_TLS_DONE;
3164 }
3165
3166 /* Return the GOT index to use for a relocation of type R_TYPE against
3167    a symbol accessed using TLS_TYPE models.  The GOT entries for this
3168    symbol in this GOT start at GOT_INDEX.  This function initializes the
3169    GOT entries and corresponding relocations.  */
3170
3171 static bfd_vma
3172 mips_tls_got_index (bfd *abfd, bfd_vma got_index, unsigned char *tls_type,
3173                     int r_type, struct bfd_link_info *info,
3174                     struct mips_elf_link_hash_entry *h, bfd_vma symbol)
3175 {
3176   BFD_ASSERT (tls_gottprel_reloc_p (r_type)
3177               || tls_gd_reloc_p (r_type)
3178               || tls_ldm_reloc_p (r_type));
3179
3180   mips_elf_initialize_tls_slots (abfd, got_index, tls_type, info, h, symbol);
3181
3182   if (tls_gottprel_reloc_p (r_type))
3183     {
3184       BFD_ASSERT (*tls_type & GOT_TLS_IE);
3185       if (*tls_type & GOT_TLS_GD)
3186         return got_index + 2 * MIPS_ELF_GOT_SIZE (abfd);
3187       else
3188         return got_index;
3189     }
3190
3191   if (tls_gd_reloc_p (r_type))
3192     {
3193       BFD_ASSERT (*tls_type & GOT_TLS_GD);
3194       return got_index;
3195     }
3196
3197   if (tls_ldm_reloc_p (r_type))
3198     {
3199       BFD_ASSERT (*tls_type & GOT_TLS_LDM);
3200       return got_index;
3201     }
3202
3203   return got_index;
3204 }
3205
3206 /* Return the offset from _GLOBAL_OFFSET_TABLE_ of the .got.plt entry
3207    for global symbol H.  .got.plt comes before the GOT, so the offset
3208    will be negative.  */
3209
3210 static bfd_vma
3211 mips_elf_gotplt_index (struct bfd_link_info *info,
3212                        struct elf_link_hash_entry *h)
3213 {
3214   bfd_vma plt_index, got_address, got_value;
3215   struct mips_elf_link_hash_table *htab;
3216
3217   htab = mips_elf_hash_table (info);
3218   BFD_ASSERT (htab != NULL);
3219
3220   BFD_ASSERT (h->plt.offset != (bfd_vma) -1);
3221
3222   /* This function only works for VxWorks, because a non-VxWorks .got.plt
3223      section starts with reserved entries.  */
3224   BFD_ASSERT (htab->is_vxworks);
3225
3226   /* Calculate the index of the symbol's PLT entry.  */
3227   plt_index = (h->plt.offset - htab->plt_header_size) / htab->plt_entry_size;
3228
3229   /* Calculate the address of the associated .got.plt entry.  */
3230   got_address = (htab->sgotplt->output_section->vma
3231                  + htab->sgotplt->output_offset
3232                  + plt_index * 4);
3233
3234   /* Calculate the value of _GLOBAL_OFFSET_TABLE_.  */
3235   got_value = (htab->root.hgot->root.u.def.section->output_section->vma
3236                + htab->root.hgot->root.u.def.section->output_offset
3237                + htab->root.hgot->root.u.def.value);
3238
3239   return got_address - got_value;
3240 }
3241
3242 /* Return the GOT offset for address VALUE.   If there is not yet a GOT
3243    entry for this value, create one.  If R_SYMNDX refers to a TLS symbol,
3244    create a TLS GOT entry instead.  Return -1 if no satisfactory GOT
3245    offset can be found.  */
3246
3247 static bfd_vma
3248 mips_elf_local_got_index (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
3249                           bfd_vma value, unsigned long r_symndx,
3250                           struct mips_elf_link_hash_entry *h, int r_type)
3251 {
3252   struct mips_elf_link_hash_table *htab;
3253   struct mips_got_entry *entry;
3254
3255   htab = mips_elf_hash_table (info);
3256   BFD_ASSERT (htab != NULL);
3257
3258   entry = mips_elf_create_local_got_entry (abfd, info, ibfd, value,
3259                                            r_symndx, h, r_type);
3260   if (!entry)
3261     return MINUS_ONE;
3262
3263   if (TLS_RELOC_P (r_type))
3264     {
3265       if (entry->symndx == -1 && htab->got_info->next == NULL)
3266         /* A type (3) entry in the single-GOT case.  We use the symbol's
3267            hash table entry to track the index.  */
3268         return mips_tls_got_index (abfd, h->tls_got_offset, &h->tls_type,
3269                                    r_type, info, h, value);
3270       else
3271         return mips_tls_got_index (abfd, entry->gotidx, &entry->tls_type,
3272                                    r_type, info, h, value);
3273     }
3274   else
3275     return entry->gotidx;
3276 }
3277
3278 /* Returns the GOT index for the global symbol indicated by H.  */
3279
3280 static bfd_vma
3281 mips_elf_global_got_index (bfd *abfd, bfd *ibfd, struct elf_link_hash_entry *h,
3282                            int r_type, struct bfd_link_info *info)
3283 {
3284   struct mips_elf_link_hash_table *htab;
3285   bfd_vma got_index;
3286   struct mips_got_info *g, *gg;
3287   long global_got_dynindx = 0;
3288
3289   htab = mips_elf_hash_table (info);
3290   BFD_ASSERT (htab != NULL);
3291
3292   gg = g = htab->got_info;
3293   if (g->bfd2got && ibfd)
3294     {
3295       struct mips_got_entry e, *p;
3296
3297       BFD_ASSERT (h->dynindx >= 0);
3298
3299       g = mips_elf_got_for_ibfd (g, ibfd);
3300       if (g->next != gg || TLS_RELOC_P (r_type))
3301         {
3302           e.abfd = ibfd;
3303           e.symndx = -1;
3304           e.d.h = (struct mips_elf_link_hash_entry *)h;
3305           e.tls_type = 0;
3306
3307           p = htab_find (g->got_entries, &e);
3308
3309           BFD_ASSERT (p->gotidx > 0);
3310
3311           if (TLS_RELOC_P (r_type))
3312             {
3313               bfd_vma value = MINUS_ONE;
3314               if ((h->root.type == bfd_link_hash_defined
3315                    || h->root.type == bfd_link_hash_defweak)
3316                   && h->root.u.def.section->output_section)
3317                 value = (h->root.u.def.value
3318                          + h->root.u.def.section->output_offset
3319                          + h->root.u.def.section->output_section->vma);
3320
3321               return mips_tls_got_index (abfd, p->gotidx, &p->tls_type, r_type,
3322                                          info, e.d.h, value);
3323             }
3324           else
3325             return p->gotidx;
3326         }
3327     }
3328
3329   if (gg->global_gotsym != NULL)
3330     global_got_dynindx = gg->global_gotsym->dynindx;
3331
3332   if (TLS_RELOC_P (r_type))
3333     {
3334       struct mips_elf_link_hash_entry *hm
3335         = (struct mips_elf_link_hash_entry *) h;
3336       bfd_vma value = MINUS_ONE;
3337
3338       if ((h->root.type == bfd_link_hash_defined
3339            || h->root.type == bfd_link_hash_defweak)
3340           && h->root.u.def.section->output_section)
3341         value = (h->root.u.def.value
3342                  + h->root.u.def.section->output_offset
3343                  + h->root.u.def.section->output_section->vma);
3344
3345       got_index = mips_tls_got_index (abfd, hm->tls_got_offset, &hm->tls_type,
3346                                       r_type, info, hm, value);
3347     }
3348   else
3349     {
3350       /* Once we determine the global GOT entry with the lowest dynamic
3351          symbol table index, we must put all dynamic symbols with greater
3352          indices into the GOT.  That makes it easy to calculate the GOT
3353          offset.  */
3354       BFD_ASSERT (h->dynindx >= global_got_dynindx);
3355       got_index = ((h->dynindx - global_got_dynindx + g->local_gotno)
3356                    * MIPS_ELF_GOT_SIZE (abfd));
3357     }
3358   BFD_ASSERT (got_index < htab->sgot->size);
3359
3360   return got_index;
3361 }
3362
3363 /* Find a GOT page entry that points to within 32KB of VALUE.  These
3364    entries are supposed to be placed at small offsets in the GOT, i.e.,
3365    within 32KB of GP.  Return the index of the GOT entry, or -1 if no
3366    entry could be created.  If OFFSETP is nonnull, use it to return the
3367    offset of the GOT entry from VALUE.  */
3368
3369 static bfd_vma
3370 mips_elf_got_page (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
3371                    bfd_vma value, bfd_vma *offsetp)
3372 {
3373   bfd_vma page, got_index;
3374   struct mips_got_entry *entry;
3375
3376   page = (value + 0x8000) & ~(bfd_vma) 0xffff;
3377   entry = mips_elf_create_local_got_entry (abfd, info, ibfd, page, 0,
3378                                            NULL, R_MIPS_GOT_PAGE);
3379
3380   if (!entry)
3381     return MINUS_ONE;
3382
3383   got_index = entry->gotidx;
3384
3385   if (offsetp)
3386     *offsetp = value - entry->d.address;
3387
3388   return got_index;
3389 }
3390
3391 /* Find a local GOT entry for an R_MIPS*_GOT16 relocation against VALUE.
3392    EXTERNAL is true if the relocation was originally against a global
3393    symbol that binds locally.  */
3394
3395 static bfd_vma
3396 mips_elf_got16_entry (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
3397                       bfd_vma value, bfd_boolean external)
3398 {
3399   struct mips_got_entry *entry;
3400
3401   /* GOT16 relocations against local symbols are followed by a LO16
3402      relocation; those against global symbols are not.  Thus if the
3403      symbol was originally local, the GOT16 relocation should load the
3404      equivalent of %hi(VALUE), otherwise it should load VALUE itself.  */
3405   if (! external)
3406     value = mips_elf_high (value) << 16;
3407
3408   /* It doesn't matter whether the original relocation was R_MIPS_GOT16,
3409      R_MIPS16_GOT16, R_MIPS_CALL16, etc.  The format of the entry is the
3410      same in all cases.  */
3411   entry = mips_elf_create_local_got_entry (abfd, info, ibfd, value, 0,
3412                                            NULL, R_MIPS_GOT16);
3413   if (entry)
3414     return entry->gotidx;
3415   else
3416     return MINUS_ONE;
3417 }
3418
3419 /* Returns the offset for the entry at the INDEXth position
3420    in the GOT.  */
3421
3422 static bfd_vma
3423 mips_elf_got_offset_from_index (struct bfd_link_info *info, bfd *output_bfd,
3424                                 bfd *input_bfd, bfd_vma got_index)
3425 {
3426   struct mips_elf_link_hash_table *htab;
3427   asection *sgot;
3428   bfd_vma gp;
3429
3430   htab = mips_elf_hash_table (info);
3431   BFD_ASSERT (htab != NULL);
3432
3433   sgot = htab->sgot;
3434   gp = _bfd_get_gp_value (output_bfd)
3435     + mips_elf_adjust_gp (output_bfd, htab->got_info, input_bfd);
3436
3437   return sgot->output_section->vma + sgot->output_offset + got_index - gp;
3438 }
3439
3440 /* Create and return a local GOT entry for VALUE, which was calculated
3441    from a symbol belonging to INPUT_SECTON.  Return NULL if it could not
3442    be created.  If R_SYMNDX refers to a TLS symbol, create a TLS entry
3443    instead.  */
3444
3445 static struct mips_got_entry *
3446 mips_elf_create_local_got_entry (bfd *abfd, struct bfd_link_info *info,
3447                                  bfd *ibfd, bfd_vma value,
3448                                  unsigned long r_symndx,
3449                                  struct mips_elf_link_hash_entry *h,
3450                                  int r_type)
3451 {
3452   struct mips_got_entry entry, **loc;
3453   struct mips_got_info *g;
3454   struct mips_elf_link_hash_table *htab;
3455
3456   htab = mips_elf_hash_table (info);
3457   BFD_ASSERT (htab != NULL);
3458
3459   entry.abfd = NULL;
3460   entry.symndx = -1;
3461   entry.d.address = value;
3462   entry.tls_type = 0;
3463
3464   g = mips_elf_got_for_ibfd (htab->got_info, ibfd);
3465   if (g == NULL)
3466     {
3467       g = mips_elf_got_for_ibfd (htab->got_info, abfd);
3468       BFD_ASSERT (g != NULL);
3469     }
3470
3471   /* This function shouldn't be called for symbols that live in the global
3472      area of the GOT.  */
3473   BFD_ASSERT (h == NULL || h->global_got_area == GGA_NONE);
3474   if (TLS_RELOC_P (r_type))
3475     {
3476       struct mips_got_entry *p;
3477
3478       entry.abfd = ibfd;
3479       if (tls_ldm_reloc_p (r_type))
3480         {
3481           entry.tls_type = GOT_TLS_LDM;
3482           entry.symndx = 0;
3483           entry.d.addend = 0;
3484         }
3485       else if (h == NULL)
3486         {
3487           entry.symndx = r_symndx;
3488           entry.d.addend = 0;
3489         }
3490       else
3491         entry.d.h = h;
3492
3493       p = (struct mips_got_entry *)
3494         htab_find (g->got_entries, &entry);
3495
3496       BFD_ASSERT (p);
3497       return p;
3498     }
3499
3500   loc = (struct mips_got_entry **) htab_find_slot (g->got_entries, &entry,
3501                                                    INSERT);
3502   if (*loc)
3503     return *loc;
3504
3505   entry.gotidx = MIPS_ELF_GOT_SIZE (abfd) * g->assigned_gotno++;
3506   entry.tls_type = 0;
3507
3508   *loc = (struct mips_got_entry *)bfd_alloc (abfd, sizeof entry);
3509
3510   if (! *loc)
3511     return NULL;
3512
3513   memcpy (*loc, &entry, sizeof entry);
3514
3515   if (g->assigned_gotno > g->local_gotno)
3516     {
3517       (*loc)->gotidx = -1;
3518       /* We didn't allocate enough space in the GOT.  */
3519       (*_bfd_error_handler)
3520         (_("not enough GOT space for local GOT entries"));
3521       bfd_set_error (bfd_error_bad_value);
3522       return NULL;
3523     }
3524
3525   MIPS_ELF_PUT_WORD (abfd, value,
3526                      (htab->sgot->contents + entry.gotidx));
3527
3528   /* These GOT entries need a dynamic relocation on VxWorks.  */
3529   if (htab->is_vxworks)
3530     {
3531       Elf_Internal_Rela outrel;
3532       asection *s;
3533       bfd_byte *rloc;
3534       bfd_vma got_address;
3535
3536       s = mips_elf_rel_dyn_section (info, FALSE);
3537       got_address = (htab->sgot->output_section->vma
3538                      + htab->sgot->output_offset
3539                      + entry.gotidx);
3540
3541       rloc = s->contents + (s->reloc_count++ * sizeof (Elf32_External_Rela));
3542       outrel.r_offset = got_address;
3543       outrel.r_info = ELF32_R_INFO (STN_UNDEF, R_MIPS_32);
3544       outrel.r_addend = value;
3545       bfd_elf32_swap_reloca_out (abfd, &outrel, rloc);
3546     }
3547
3548   return *loc;
3549 }
3550
3551 /* Return the number of dynamic section symbols required by OUTPUT_BFD.
3552    The number might be exact or a worst-case estimate, depending on how
3553    much information is available to elf_backend_omit_section_dynsym at
3554    the current linking stage.  */
3555
3556 static bfd_size_type
3557 count_section_dynsyms (bfd *output_bfd, struct bfd_link_info *info)
3558 {
3559   bfd_size_type count;
3560
3561   count = 0;
3562   if (info->shared || elf_hash_table (info)->is_relocatable_executable)
3563     {
3564       asection *p;
3565       const struct elf_backend_data *bed;
3566
3567       bed = get_elf_backend_data (output_bfd);
3568       for (p = output_bfd->sections; p ; p = p->next)
3569         if ((p->flags & SEC_EXCLUDE) == 0
3570             && (p->flags & SEC_ALLOC) != 0
3571             && !(*bed->elf_backend_omit_section_dynsym) (output_bfd, info, p))
3572           ++count;
3573     }
3574   return count;
3575 }
3576
3577 /* Sort the dynamic symbol table so that symbols that need GOT entries
3578    appear towards the end.  */
3579
3580 static bfd_boolean
3581 mips_elf_sort_hash_table (bfd *abfd, struct bfd_link_info *info)
3582 {
3583   struct mips_elf_link_hash_table *htab;
3584   struct mips_elf_hash_sort_data hsd;
3585   struct mips_got_info *g;
3586
3587   if (elf_hash_table (info)->dynsymcount == 0)
3588     return TRUE;
3589
3590   htab = mips_elf_hash_table (info);
3591   BFD_ASSERT (htab != NULL);
3592
3593   g = htab->got_info;
3594   if (g == NULL)
3595     return TRUE;
3596
3597   hsd.low = NULL;
3598   hsd.max_unref_got_dynindx
3599     = hsd.min_got_dynindx
3600     = (elf_hash_table (info)->dynsymcount - g->reloc_only_gotno);
3601   hsd.max_non_got_dynindx = count_section_dynsyms (abfd, info) + 1;
3602   mips_elf_link_hash_traverse (((struct mips_elf_link_hash_table *)
3603                                 elf_hash_table (info)),
3604                                mips_elf_sort_hash_table_f,
3605                                &hsd);
3606
3607   /* There should have been enough room in the symbol table to
3608      accommodate both the GOT and non-GOT symbols.  */
3609   BFD_ASSERT (hsd.max_non_got_dynindx <= hsd.min_got_dynindx);
3610   BFD_ASSERT ((unsigned long) hsd.max_unref_got_dynindx
3611               == elf_hash_table (info)->dynsymcount);
3612   BFD_ASSERT (elf_hash_table (info)->dynsymcount - hsd.min_got_dynindx
3613               == g->global_gotno);
3614
3615   /* Now we know which dynamic symbol has the lowest dynamic symbol
3616      table index in the GOT.  */
3617   g->global_gotsym = hsd.low;
3618
3619   return TRUE;
3620 }
3621
3622 /* If H needs a GOT entry, assign it the highest available dynamic
3623    index.  Otherwise, assign it the lowest available dynamic
3624    index.  */
3625
3626 static bfd_boolean
3627 mips_elf_sort_hash_table_f (struct mips_elf_link_hash_entry *h, void *data)
3628 {
3629   struct mips_elf_hash_sort_data *hsd = data;
3630
3631   /* Symbols without dynamic symbol table entries aren't interesting
3632      at all.  */
3633   if (h->root.dynindx == -1)
3634     return TRUE;
3635
3636   switch (h->global_got_area)
3637     {
3638     case GGA_NONE:
3639       h->root.dynindx = hsd->max_non_got_dynindx++;
3640       break;
3641
3642     case GGA_NORMAL:
3643       h->root.dynindx = --hsd->min_got_dynindx;
3644       hsd->low = (struct elf_link_hash_entry *) h;
3645       break;
3646
3647     case GGA_RELOC_ONLY:
3648       if (hsd->max_unref_got_dynindx == hsd->min_got_dynindx)
3649         hsd->low = (struct elf_link_hash_entry *) h;
3650       h->root.dynindx = hsd->max_unref_got_dynindx++;
3651       break;
3652     }
3653
3654   return TRUE;
3655 }
3656
3657 /* If H is a symbol that needs a global GOT entry, but has a dynamic
3658    symbol table index lower than any we've seen to date, record it for
3659    posterity.  FOR_CALL is true if the caller is only interested in
3660    using the GOT entry for calls.  */
3661
3662 static bfd_boolean
3663 mips_elf_record_global_got_symbol (struct elf_link_hash_entry *h,
3664                                    bfd *abfd, struct bfd_link_info *info,
3665                                    bfd_boolean for_call,
3666                                    unsigned char tls_flag)
3667 {
3668   struct mips_elf_link_hash_table *htab;
3669   struct mips_elf_link_hash_entry *hmips;
3670   struct mips_got_entry entry, **loc;
3671   struct mips_got_info *g;
3672
3673   htab = mips_elf_hash_table (info);
3674   BFD_ASSERT (htab != NULL);
3675
3676   hmips = (struct mips_elf_link_hash_entry *) h;
3677   if (!for_call)
3678     hmips->got_only_for_calls = FALSE;
3679
3680   /* A global symbol in the GOT must also be in the dynamic symbol
3681      table.  */
3682   if (h->dynindx == -1)
3683     {
3684       switch (ELF_ST_VISIBILITY (h->other))
3685         {
3686         case STV_INTERNAL:
3687         case STV_HIDDEN:
3688           _bfd_elf_link_hash_hide_symbol (info, h, TRUE);
3689           break;
3690         }
3691       if (!bfd_elf_link_record_dynamic_symbol (info, h))
3692         return FALSE;
3693     }
3694
3695   /* Make sure we have a GOT to put this entry into.  */
3696   g = htab->got_info;
3697   BFD_ASSERT (g != NULL);
3698
3699   entry.abfd = abfd;
3700   entry.symndx = -1;
3701   entry.d.h = (struct mips_elf_link_hash_entry *) h;
3702   entry.tls_type = 0;
3703
3704   loc = (struct mips_got_entry **) htab_find_slot (g->got_entries, &entry,
3705                                                    INSERT);
3706
3707   /* If we've already marked this entry as needing GOT space, we don't
3708      need to do it again.  */
3709   if (*loc)
3710     {
3711       (*loc)->tls_type |= tls_flag;
3712       return TRUE;
3713     }
3714
3715   *loc = (struct mips_got_entry *)bfd_alloc (abfd, sizeof entry);
3716
3717   if (! *loc)
3718     return FALSE;
3719
3720   entry.gotidx = -1;
3721   entry.tls_type = tls_flag;
3722
3723   memcpy (*loc, &entry, sizeof entry);
3724
3725   if (tls_flag == 0)
3726     hmips->global_got_area = GGA_NORMAL;
3727
3728   return TRUE;
3729 }
3730
3731 /* Reserve space in G for a GOT entry containing the value of symbol
3732    SYMNDX in input bfd ABDF, plus ADDEND.  */
3733
3734 static bfd_boolean
3735 mips_elf_record_local_got_symbol (bfd *abfd, long symndx, bfd_vma addend,
3736                                   struct bfd_link_info *info,
3737                                   unsigned char tls_flag)
3738 {
3739   struct mips_elf_link_hash_table *htab;
3740   struct mips_got_info *g;
3741   struct mips_got_entry entry, **loc;
3742
3743   htab = mips_elf_hash_table (info);
3744   BFD_ASSERT (htab != NULL);
3745
3746   g = htab->got_info;
3747   BFD_ASSERT (g != NULL);
3748
3749   entry.abfd = abfd;
3750   entry.symndx = symndx;
3751   entry.d.addend = addend;
3752   entry.tls_type = tls_flag;
3753   loc = (struct mips_got_entry **)
3754     htab_find_slot (g->got_entries, &entry, INSERT);
3755
3756   if (*loc)
3757     {
3758       if (tls_flag == GOT_TLS_GD && !((*loc)->tls_type & GOT_TLS_GD))
3759         {
3760           g->tls_gotno += 2;
3761           (*loc)->tls_type |= tls_flag;
3762         }
3763       else if (tls_flag == GOT_TLS_IE && !((*loc)->tls_type & GOT_TLS_IE))
3764         {
3765           g->tls_gotno += 1;
3766           (*loc)->tls_type |= tls_flag;
3767         }
3768       return TRUE;
3769     }
3770
3771   if (tls_flag != 0)
3772     {
3773       entry.gotidx = -1;
3774       entry.tls_type = tls_flag;
3775       if (tls_flag == GOT_TLS_IE)
3776         g->tls_gotno += 1;
3777       else if (tls_flag == GOT_TLS_GD)
3778         g->tls_gotno += 2;
3779       else if (g->tls_ldm_offset == MINUS_ONE)
3780         {
3781           g->tls_ldm_offset = MINUS_TWO;
3782           g->tls_gotno += 2;
3783         }
3784     }
3785   else
3786     {
3787       entry.gotidx = g->local_gotno++;
3788       entry.tls_type = 0;
3789     }
3790
3791   *loc = (struct mips_got_entry *)bfd_alloc (abfd, sizeof entry);
3792
3793   if (! *loc)
3794     return FALSE;
3795
3796   memcpy (*loc, &entry, sizeof entry);
3797
3798   return TRUE;
3799 }
3800
3801 /* Return the maximum number of GOT page entries required for RANGE.  */
3802
3803 static bfd_vma
3804 mips_elf_pages_for_range (const struct mips_got_page_range *range)
3805 {
3806   return (range->max_addend - range->min_addend + 0x1ffff) >> 16;
3807 }
3808
3809 /* Record that ABFD has a page relocation against symbol SYMNDX and
3810    that ADDEND is the addend for that relocation.
3811
3812    This function creates an upper bound on the number of GOT slots
3813    required; no attempt is made to combine references to non-overridable
3814    global symbols across multiple input files.  */
3815
3816 static bfd_boolean
3817 mips_elf_record_got_page_entry (struct bfd_link_info *info, bfd *abfd,
3818                                 long symndx, bfd_signed_vma addend)
3819 {
3820   struct mips_elf_link_hash_table *htab;
3821   struct mips_got_info *g;
3822   struct mips_got_page_entry lookup, *entry;
3823   struct mips_got_page_range **range_ptr, *range;
3824   bfd_vma old_pages, new_pages;
3825   void **loc;
3826
3827   htab = mips_elf_hash_table (info);
3828   BFD_ASSERT (htab != NULL);
3829
3830   g = htab->got_info;
3831   BFD_ASSERT (g != NULL);
3832
3833   /* Find the mips_got_page_entry hash table entry for this symbol.  */
3834   lookup.abfd = abfd;
3835   lookup.symndx = symndx;
3836   loc = htab_find_slot (g->got_page_entries, &lookup, INSERT);
3837   if (loc == NULL)
3838     return FALSE;
3839
3840   /* Create a mips_got_page_entry if this is the first time we've
3841      seen the symbol.  */
3842   entry = (struct mips_got_page_entry *) *loc;
3843   if (!entry)
3844     {
3845       entry = bfd_alloc (abfd, sizeof (*entry));
3846       if (!entry)
3847         return FALSE;
3848
3849       entry->abfd = abfd;
3850       entry->symndx = symndx;
3851       entry->ranges = NULL;
3852       entry->num_pages = 0;
3853       *loc = entry;
3854     }
3855
3856   /* Skip over ranges whose maximum extent cannot share a page entry
3857      with ADDEND.  */
3858   range_ptr = &entry->ranges;
3859   while (*range_ptr && addend > (*range_ptr)->max_addend + 0xffff)
3860     range_ptr = &(*range_ptr)->next;
3861
3862   /* If we scanned to the end of the list, or found a range whose
3863      minimum extent cannot share a page entry with ADDEND, create
3864      a new singleton range.  */
3865   range = *range_ptr;
3866   if (!range || addend < range->min_addend - 0xffff)
3867     {
3868       range = bfd_alloc (abfd, sizeof (*range));
3869       if (!range)
3870         return FALSE;
3871
3872       range->next = *range_ptr;
3873       range->min_addend = addend;
3874       range->max_addend = addend;
3875
3876       *range_ptr = range;
3877       entry->num_pages++;
3878       g->page_gotno++;
3879       return TRUE;
3880     }
3881
3882   /* Remember how many pages the old range contributed.  */
3883   old_pages = mips_elf_pages_for_range (range);
3884
3885   /* Update the ranges.  */
3886   if (addend < range->min_addend)
3887     range->min_addend = addend;
3888   else if (addend > range->max_addend)
3889     {
3890       if (range->next && addend >= range->next->min_addend - 0xffff)
3891         {
3892           old_pages += mips_elf_pages_for_range (range->next);
3893           range->max_addend = range->next->max_addend;
3894           range->next = range->next->next;
3895         }
3896       else
3897         range->max_addend = addend;
3898     }
3899
3900   /* Record any change in the total estimate.  */
3901   new_pages = mips_elf_pages_for_range (range);
3902   if (old_pages != new_pages)
3903     {
3904       entry->num_pages += new_pages - old_pages;
3905       g->page_gotno += new_pages - old_pages;
3906     }
3907
3908   return TRUE;
3909 }
3910
3911 /* Add room for N relocations to the .rel(a).dyn section in ABFD.  */
3912
3913 static void
3914 mips_elf_allocate_dynamic_relocations (bfd *abfd, struct bfd_link_info *info,
3915                                        unsigned int n)
3916 {
3917   asection *s;
3918   struct mips_elf_link_hash_table *htab;
3919
3920   htab = mips_elf_hash_table (info);
3921   BFD_ASSERT (htab != NULL);
3922
3923   s = mips_elf_rel_dyn_section (info, FALSE);
3924   BFD_ASSERT (s != NULL);
3925
3926   if (htab->is_vxworks)
3927     s->size += n * MIPS_ELF_RELA_SIZE (abfd);
3928   else
3929     {
3930       if (s->size == 0)
3931         {
3932           /* Make room for a null element.  */
3933           s->size += MIPS_ELF_REL_SIZE (abfd);
3934           ++s->reloc_count;
3935         }
3936       s->size += n * MIPS_ELF_REL_SIZE (abfd);
3937     }
3938 }
3939 \f
3940 /* A htab_traverse callback for GOT entries.  Set boolean *DATA to true
3941    if the GOT entry is for an indirect or warning symbol.  */
3942
3943 static int
3944 mips_elf_check_recreate_got (void **entryp, void *data)
3945 {
3946   struct mips_got_entry *entry;
3947   bfd_boolean *must_recreate;
3948
3949   entry = (struct mips_got_entry *) *entryp;
3950   must_recreate = (bfd_boolean *) data;
3951   if (entry->abfd != NULL && entry->symndx == -1)
3952     {
3953       struct mips_elf_link_hash_entry *h;
3954
3955       h = entry->d.h;
3956       if (h->root.root.type == bfd_link_hash_indirect
3957           || h->root.root.type == bfd_link_hash_warning)
3958         {
3959           *must_recreate = TRUE;
3960           return 0;
3961         }
3962     }
3963   return 1;
3964 }
3965
3966 /* A htab_traverse callback for GOT entries.  Add all entries to
3967    hash table *DATA, converting entries for indirect and warning
3968    symbols into entries for the target symbol.  Set *DATA to null
3969    on error.  */
3970
3971 static int
3972 mips_elf_recreate_got (void **entryp, void *data)
3973 {
3974   htab_t *new_got;
3975   struct mips_got_entry *entry;
3976   void **slot;
3977
3978   new_got = (htab_t *) data;
3979   entry = (struct mips_got_entry *) *entryp;
3980   if (entry->abfd != NULL && entry->symndx == -1)
3981     {
3982       struct mips_elf_link_hash_entry *h;
3983
3984       h = entry->d.h;
3985       while (h->root.root.type == bfd_link_hash_indirect
3986              || h->root.root.type == bfd_link_hash_warning)
3987         {
3988           BFD_ASSERT (h->global_got_area == GGA_NONE);
3989           h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
3990         }
3991       entry->d.h = h;
3992     }
3993   slot = htab_find_slot (*new_got, entry, INSERT);
3994   if (slot == NULL)
3995     {
3996       *new_got = NULL;
3997       return 0;
3998     }
3999   if (*slot == NULL)
4000     *slot = entry;
4001   return 1;
4002 }
4003
4004 /* If any entries in G->got_entries are for indirect or warning symbols,
4005    replace them with entries for the target symbol.  */
4006
4007 static bfd_boolean
4008 mips_elf_resolve_final_got_entries (struct mips_got_info *g)
4009 {
4010   bfd_boolean must_recreate;
4011   htab_t new_got;
4012
4013   must_recreate = FALSE;
4014   htab_traverse (g->got_entries, mips_elf_check_recreate_got, &must_recreate);
4015   if (must_recreate)
4016     {
4017       new_got = htab_create (htab_size (g->got_entries),
4018                              mips_elf_got_entry_hash,
4019                              mips_elf_got_entry_eq, NULL);
4020       htab_traverse (g->got_entries, mips_elf_recreate_got, &new_got);
4021       if (new_got == NULL)
4022         return FALSE;
4023
4024       htab_delete (g->got_entries);
4025       g->got_entries = new_got;
4026     }
4027   return TRUE;
4028 }
4029
4030 /* A mips_elf_link_hash_traverse callback for which DATA points
4031    to the link_info structure.  Count the number of type (3) entries
4032    in the master GOT.  */
4033
4034 static int
4035 mips_elf_count_got_symbols (struct mips_elf_link_hash_entry *h, void *data)
4036 {
4037   struct bfd_link_info *info;
4038   struct mips_elf_link_hash_table *htab;
4039   struct mips_got_info *g;
4040
4041   info = (struct bfd_link_info *) data;
4042   htab = mips_elf_hash_table (info);
4043   g = htab->got_info;
4044   if (h->global_got_area != GGA_NONE)
4045     {
4046       /* Make a final decision about whether the symbol belongs in the
4047          local or global GOT.  Symbols that bind locally can (and in the
4048          case of forced-local symbols, must) live in the local GOT.
4049          Those that are aren't in the dynamic symbol table must also
4050          live in the local GOT.
4051
4052          Note that the former condition does not always imply the
4053          latter: symbols do not bind locally if they are completely
4054          undefined.  We'll report undefined symbols later if appropriate.  */
4055       if (h->root.dynindx == -1
4056           || (h->got_only_for_calls
4057               ? SYMBOL_CALLS_LOCAL (info, &h->root)
4058               : SYMBOL_REFERENCES_LOCAL (info, &h->root)))
4059         {
4060           /* The symbol belongs in the local GOT.  We no longer need this
4061              entry if it was only used for relocations; those relocations
4062              will be against the null or section symbol instead of H.  */
4063           if (h->global_got_area != GGA_RELOC_ONLY)
4064             g->local_gotno++;
4065           h->global_got_area = GGA_NONE;
4066         }
4067       else if (htab->is_vxworks
4068                && h->got_only_for_calls
4069                && h->root.plt.offset != MINUS_ONE)
4070         /* On VxWorks, calls can refer directly to the .got.plt entry;
4071            they don't need entries in the regular GOT.  .got.plt entries
4072            will be allocated by _bfd_mips_elf_adjust_dynamic_symbol.  */
4073         h->global_got_area = GGA_NONE;
4074       else
4075         {
4076           g->global_gotno++;
4077           if (h->global_got_area == GGA_RELOC_ONLY)
4078             g->reloc_only_gotno++;
4079         }
4080     }
4081   return 1;
4082 }
4083 \f
4084 /* Compute the hash value of the bfd in a bfd2got hash entry.  */
4085
4086 static hashval_t
4087 mips_elf_bfd2got_entry_hash (const void *entry_)
4088 {
4089   const struct mips_elf_bfd2got_hash *entry
4090     = (struct mips_elf_bfd2got_hash *)entry_;
4091
4092   return entry->bfd->id;
4093 }
4094
4095 /* Check whether two hash entries have the same bfd.  */
4096
4097 static int
4098 mips_elf_bfd2got_entry_eq (const void *entry1, const void *entry2)
4099 {
4100   const struct mips_elf_bfd2got_hash *e1
4101     = (const struct mips_elf_bfd2got_hash *)entry1;
4102   const struct mips_elf_bfd2got_hash *e2
4103     = (const struct mips_elf_bfd2got_hash *)entry2;
4104
4105   return e1->bfd == e2->bfd;
4106 }
4107
4108 /* In a multi-got link, determine the GOT to be used for IBFD.  G must
4109    be the master GOT data.  */
4110
4111 static struct mips_got_info *
4112 mips_elf_got_for_ibfd (struct mips_got_info *g, bfd *ibfd)
4113 {
4114   struct mips_elf_bfd2got_hash e, *p;
4115
4116   if (! g->bfd2got)
4117     return g;
4118
4119   e.bfd = ibfd;
4120   p = htab_find (g->bfd2got, &e);
4121   return p ? p->g : NULL;
4122 }
4123
4124 /* Use BFD2GOT to find ABFD's got entry, creating one if none exists.
4125    Return NULL if an error occured.  */
4126
4127 static struct mips_got_info *
4128 mips_elf_get_got_for_bfd (struct htab *bfd2got, bfd *output_bfd,
4129                           bfd *input_bfd)
4130 {
4131   struct mips_elf_bfd2got_hash bfdgot_entry, *bfdgot;
4132   struct mips_got_info *g;
4133   void **bfdgotp;
4134
4135   bfdgot_entry.bfd = input_bfd;
4136   bfdgotp = htab_find_slot (bfd2got, &bfdgot_entry, INSERT);
4137   bfdgot = (struct mips_elf_bfd2got_hash *) *bfdgotp;
4138
4139   if (bfdgot == NULL)
4140     {
4141       bfdgot = ((struct mips_elf_bfd2got_hash *)
4142                 bfd_alloc (output_bfd, sizeof (struct mips_elf_bfd2got_hash)));
4143       if (bfdgot == NULL)
4144         return NULL;
4145
4146       *bfdgotp = bfdgot;
4147
4148       g = ((struct mips_got_info *)
4149            bfd_alloc (output_bfd, sizeof (struct mips_got_info)));
4150       if (g == NULL)
4151         return NULL;
4152
4153       bfdgot->bfd = input_bfd;
4154       bfdgot->g = g;
4155
4156       g->global_gotsym = NULL;
4157       g->global_gotno = 0;
4158       g->reloc_only_gotno = 0;
4159       g->local_gotno = 0;
4160       g->page_gotno = 0;
4161       g->assigned_gotno = -1;
4162       g->tls_gotno = 0;
4163       g->tls_assigned_gotno = 0;
4164       g->tls_ldm_offset = MINUS_ONE;
4165       g->got_entries = htab_try_create (1, mips_elf_multi_got_entry_hash,
4166                                         mips_elf_multi_got_entry_eq, NULL);
4167       if (g->got_entries == NULL)
4168         return NULL;
4169
4170       g->got_page_entries = htab_try_create (1, mips_got_page_entry_hash,
4171                                              mips_got_page_entry_eq, NULL);
4172       if (g->got_page_entries == NULL)
4173         return NULL;
4174
4175       g->bfd2got = NULL;
4176       g->next = NULL;
4177     }
4178
4179   return bfdgot->g;
4180 }
4181
4182 /* A htab_traverse callback for the entries in the master got.
4183    Create one separate got for each bfd that has entries in the global
4184    got, such that we can tell how many local and global entries each
4185    bfd requires.  */
4186
4187 static int
4188 mips_elf_make_got_per_bfd (void **entryp, void *p)
4189 {
4190   struct mips_got_entry *entry = (struct mips_got_entry *)*entryp;
4191   struct mips_elf_got_per_bfd_arg *arg = (struct mips_elf_got_per_bfd_arg *)p;
4192   struct mips_got_info *g;
4193
4194   g = mips_elf_get_got_for_bfd (arg->bfd2got, arg->obfd, entry->abfd);
4195   if (g == NULL)
4196     {
4197       arg->obfd = NULL;
4198       return 0;
4199     }
4200
4201   /* Insert the GOT entry in the bfd's got entry hash table.  */
4202   entryp = htab_find_slot (g->got_entries, entry, INSERT);
4203   if (*entryp != NULL)
4204     return 1;
4205
4206   *entryp = entry;
4207
4208   if (entry->tls_type)
4209     {
4210       if (entry->tls_type & (GOT_TLS_GD | GOT_TLS_LDM))
4211         g->tls_gotno += 2;
4212       if (entry->tls_type & GOT_TLS_IE)
4213         g->tls_gotno += 1;
4214     }
4215   else if (entry->symndx >= 0 || entry->d.h->global_got_area == GGA_NONE)
4216     ++g->local_gotno;
4217   else
4218     ++g->global_gotno;
4219
4220   return 1;
4221 }
4222
4223 /* A htab_traverse callback for the page entries in the master got.
4224    Associate each page entry with the bfd's got.  */
4225
4226 static int
4227 mips_elf_make_got_pages_per_bfd (void **entryp, void *p)
4228 {
4229   struct mips_got_page_entry *entry = (struct mips_got_page_entry *) *entryp;
4230   struct mips_elf_got_per_bfd_arg *arg = (struct mips_elf_got_per_bfd_arg *) p;
4231   struct mips_got_info *g;
4232
4233   g = mips_elf_get_got_for_bfd (arg->bfd2got, arg->obfd, entry->abfd);
4234   if (g == NULL)
4235     {
4236       arg->obfd = NULL;
4237       return 0;
4238     }
4239
4240   /* Insert the GOT entry in the bfd's got entry hash table.  */
4241   entryp = htab_find_slot (g->got_page_entries, entry, INSERT);
4242   if (*entryp != NULL)
4243     return 1;
4244
4245   *entryp = entry;
4246   g->page_gotno += entry->num_pages;
4247   return 1;
4248 }
4249
4250 /* Consider merging the got described by BFD2GOT with TO, using the
4251    information given by ARG.  Return -1 if this would lead to overflow,
4252    1 if they were merged successfully, and 0 if a merge failed due to
4253    lack of memory.  (These values are chosen so that nonnegative return
4254    values can be returned by a htab_traverse callback.)  */
4255
4256 static int
4257 mips_elf_merge_got_with (struct mips_elf_bfd2got_hash *bfd2got,
4258                          struct mips_got_info *to,
4259                          struct mips_elf_got_per_bfd_arg *arg)
4260 {
4261   struct mips_got_info *from = bfd2got->g;
4262   unsigned int estimate;
4263
4264   /* Work out how many page entries we would need for the combined GOT.  */
4265   estimate = arg->max_pages;
4266   if (estimate >= from->page_gotno + to->page_gotno)
4267     estimate = from->page_gotno + to->page_gotno;
4268
4269   /* And conservatively estimate how many local and TLS entries
4270      would be needed.  */
4271   estimate += from->local_gotno + to->local_gotno;
4272   estimate += from->tls_gotno + to->tls_gotno;
4273
4274   /* If we're merging with the primary got, any TLS relocations will
4275      come after the full set of global entries.  Otherwise estimate those
4276      conservatively as well.  */
4277   if (to == arg->primary && from->tls_gotno + to->tls_gotno)
4278     estimate += arg->global_count;
4279   else
4280     estimate += from->global_gotno + to->global_gotno;
4281
4282   /* Bail out if the combined GOT might be too big.  */
4283   if (estimate > arg->max_count)
4284     return -1;
4285
4286   /* Commit to the merge.  Record that TO is now the bfd for this got.  */
4287   bfd2got->g = to;
4288
4289   /* Transfer the bfd's got information from FROM to TO.  */
4290   htab_traverse (from->got_entries, mips_elf_make_got_per_bfd, arg);
4291   if (arg->obfd == NULL)
4292     return 0;
4293
4294   htab_traverse (from->got_page_entries, mips_elf_make_got_pages_per_bfd, arg);
4295   if (arg->obfd == NULL)
4296     return 0;
4297
4298   /* We don't have to worry about releasing memory of the actual
4299      got entries, since they're all in the master got_entries hash
4300      table anyway.  */
4301   htab_delete (from->got_entries);
4302   htab_delete (from->got_page_entries);
4303   return 1;
4304 }
4305
4306 /* Attempt to merge gots of different input bfds.  Try to use as much
4307    as possible of the primary got, since it doesn't require explicit
4308    dynamic relocations, but don't use bfds that would reference global
4309    symbols out of the addressable range.  Failing the primary got,
4310    attempt to merge with the current got, or finish the current got
4311    and then make make the new got current.  */
4312
4313 static int
4314 mips_elf_merge_gots (void **bfd2got_, void *p)
4315 {
4316   struct mips_elf_bfd2got_hash *bfd2got
4317     = (struct mips_elf_bfd2got_hash *)*bfd2got_;
4318   struct mips_elf_got_per_bfd_arg *arg = (struct mips_elf_got_per_bfd_arg *)p;
4319   struct mips_got_info *g;
4320   unsigned int estimate;
4321   int result;
4322
4323   g = bfd2got->g;
4324
4325   /* Work out the number of page, local and TLS entries.  */
4326   estimate = arg->max_pages;
4327   if (estimate > g->page_gotno)
4328     estimate = g->page_gotno;
4329   estimate += g->local_gotno + g->tls_gotno;
4330
4331   /* We place TLS GOT entries after both locals and globals.  The globals
4332      for the primary GOT may overflow the normal GOT size limit, so be
4333      sure not to merge a GOT which requires TLS with the primary GOT in that
4334      case.  This doesn't affect non-primary GOTs.  */
4335   estimate += (g->tls_gotno > 0 ? arg->global_count : g->global_gotno);
4336
4337   if (estimate <= arg->max_count)
4338     {
4339       /* If we don't have a primary GOT, use it as
4340          a starting point for the primary GOT.  */
4341       if (!arg->primary)
4342         {
4343           arg->primary = bfd2got->g;
4344           return 1;
4345         }
4346
4347       /* Try merging with the primary GOT.  */
4348       result = mips_elf_merge_got_with (bfd2got, arg->primary, arg);
4349       if (result >= 0)
4350         return result;
4351     }
4352
4353   /* If we can merge with the last-created got, do it.  */
4354   if (arg->current)
4355     {
4356       result = mips_elf_merge_got_with (bfd2got, arg->current, arg);
4357       if (result >= 0)
4358         return result;
4359     }
4360
4361   /* Well, we couldn't merge, so create a new GOT.  Don't check if it
4362      fits; if it turns out that it doesn't, we'll get relocation
4363      overflows anyway.  */
4364   g->next = arg->current;
4365   arg->current = g;
4366
4367   return 1;
4368 }
4369
4370 /* Set the TLS GOT index for the GOT entry in ENTRYP.  ENTRYP's NEXT field
4371    is null iff there is just a single GOT.  */
4372
4373 static int
4374 mips_elf_initialize_tls_index (void **entryp, void *p)
4375 {
4376   struct mips_got_entry *entry = (struct mips_got_entry *)*entryp;
4377   struct mips_got_info *g = p;
4378   bfd_vma next_index;
4379   unsigned char tls_type;
4380
4381   /* We're only interested in TLS symbols.  */
4382   if (entry->tls_type == 0)
4383     return 1;
4384
4385   next_index = MIPS_ELF_GOT_SIZE (entry->abfd) * (long) g->tls_assigned_gotno;
4386
4387   if (entry->symndx == -1 && g->next == NULL)
4388     {
4389       /* A type (3) got entry in the single-GOT case.  We use the symbol's
4390          hash table entry to track its index.  */
4391       if (entry->d.h->tls_type & GOT_TLS_OFFSET_DONE)
4392         return 1;
4393       entry->d.h->tls_type |= GOT_TLS_OFFSET_DONE;
4394       entry->d.h->tls_got_offset = next_index;
4395       tls_type = entry->d.h->tls_type;
4396     }
4397   else
4398     {
4399       if (entry->tls_type & GOT_TLS_LDM)
4400         {
4401           /* There are separate mips_got_entry objects for each input bfd
4402              that requires an LDM entry.  Make sure that all LDM entries in
4403              a GOT resolve to the same index.  */
4404           if (g->tls_ldm_offset != MINUS_TWO && g->tls_ldm_offset != MINUS_ONE)
4405             {
4406               entry->gotidx = g->tls_ldm_offset;
4407               return 1;
4408             }
4409           g->tls_ldm_offset = next_index;
4410         }
4411       entry->gotidx = next_index;
4412       tls_type = entry->tls_type;
4413     }
4414
4415   /* Account for the entries we've just allocated.  */
4416   if (tls_type & (GOT_TLS_GD | GOT_TLS_LDM))
4417     g->tls_assigned_gotno += 2;
4418   if (tls_type & GOT_TLS_IE)
4419     g->tls_assigned_gotno += 1;
4420
4421   return 1;
4422 }
4423
4424 /* If passed a NULL mips_got_info in the argument, set the marker used
4425    to tell whether a global symbol needs a got entry (in the primary
4426    got) to the given VALUE.
4427
4428    If passed a pointer G to a mips_got_info in the argument (it must
4429    not be the primary GOT), compute the offset from the beginning of
4430    the (primary) GOT section to the entry in G corresponding to the
4431    global symbol.  G's assigned_gotno must contain the index of the
4432    first available global GOT entry in G.  VALUE must contain the size
4433    of a GOT entry in bytes.  For each global GOT entry that requires a
4434    dynamic relocation, NEEDED_RELOCS is incremented, and the symbol is
4435    marked as not eligible for lazy resolution through a function
4436    stub.  */
4437 static int
4438 mips_elf_set_global_got_offset (void **entryp, void *p)
4439 {
4440   struct mips_got_entry *entry = (struct mips_got_entry *)*entryp;
4441   struct mips_elf_set_global_got_offset_arg *arg
4442     = (struct mips_elf_set_global_got_offset_arg *)p;
4443   struct mips_got_info *g = arg->g;
4444
4445   if (g && entry->tls_type != GOT_NORMAL)
4446     arg->needed_relocs +=
4447       mips_tls_got_relocs (arg->info, entry->tls_type,
4448                            entry->symndx == -1 ? &entry->d.h->root : NULL);
4449
4450   if (entry->abfd != NULL
4451       && entry->symndx == -1
4452       && entry->d.h->global_got_area != GGA_NONE)
4453     {
4454       if (g)
4455         {
4456           BFD_ASSERT (g->global_gotsym == NULL);
4457
4458           entry->gotidx = arg->value * (long) g->assigned_gotno++;
4459           if (arg->info->shared
4460               || (elf_hash_table (arg->info)->dynamic_sections_created
4461                   && entry->d.h->root.def_dynamic
4462                   && !entry->d.h->root.def_regular))
4463             ++arg->needed_relocs;
4464         }
4465       else
4466         entry->d.h->global_got_area = arg->value;
4467     }
4468
4469   return 1;
4470 }
4471
4472 /* A htab_traverse callback for GOT entries for which DATA is the
4473    bfd_link_info.  Forbid any global symbols from having traditional
4474    lazy-binding stubs.  */
4475
4476 static int
4477 mips_elf_forbid_lazy_stubs (void **entryp, void *data)
4478 {
4479   struct bfd_link_info *info;
4480   struct mips_elf_link_hash_table *htab;
4481   struct mips_got_entry *entry;
4482
4483   entry = (struct mips_got_entry *) *entryp;
4484   info = (struct bfd_link_info *) data;
4485   htab = mips_elf_hash_table (info);
4486   BFD_ASSERT (htab != NULL);
4487
4488   if (entry->abfd != NULL
4489       && entry->symndx == -1
4490       && entry->d.h->needs_lazy_stub)
4491     {
4492       entry->d.h->needs_lazy_stub = FALSE;
4493       htab->lazy_stub_count--;
4494     }
4495
4496   return 1;
4497 }
4498
4499 /* Return the offset of an input bfd IBFD's GOT from the beginning of
4500    the primary GOT.  */
4501 static bfd_vma
4502 mips_elf_adjust_gp (bfd *abfd, struct mips_got_info *g, bfd *ibfd)
4503 {
4504   if (g->bfd2got == NULL)
4505     return 0;
4506
4507   g = mips_elf_got_for_ibfd (g, ibfd);
4508   if (! g)
4509     return 0;
4510
4511   BFD_ASSERT (g->next);
4512
4513   g = g->next;
4514
4515   return (g->local_gotno + g->global_gotno + g->tls_gotno)
4516     * MIPS_ELF_GOT_SIZE (abfd);
4517 }
4518
4519 /* Turn a single GOT that is too big for 16-bit addressing into
4520    a sequence of GOTs, each one 16-bit addressable.  */
4521
4522 static bfd_boolean
4523 mips_elf_multi_got (bfd *abfd, struct bfd_link_info *info,
4524                     asection *got, bfd_size_type pages)
4525 {
4526   struct mips_elf_link_hash_table *htab;
4527   struct mips_elf_got_per_bfd_arg got_per_bfd_arg;
4528   struct mips_elf_set_global_got_offset_arg set_got_offset_arg;
4529   struct mips_got_info *g, *gg;
4530   unsigned int assign, needed_relocs;
4531   bfd *dynobj;
4532
4533   dynobj = elf_hash_table (info)->dynobj;
4534   htab = mips_elf_hash_table (info);
4535   BFD_ASSERT (htab != NULL);
4536
4537   g = htab->got_info;
4538   g->bfd2got = htab_try_create (1, mips_elf_bfd2got_entry_hash,
4539                                 mips_elf_bfd2got_entry_eq, NULL);
4540   if (g->bfd2got == NULL)
4541     return FALSE;
4542
4543   got_per_bfd_arg.bfd2got = g->bfd2got;
4544   got_per_bfd_arg.obfd = abfd;
4545   got_per_bfd_arg.info = info;
4546
4547   /* Count how many GOT entries each input bfd requires, creating a
4548      map from bfd to got info while at that.  */
4549   htab_traverse (g->got_entries, mips_elf_make_got_per_bfd, &got_per_bfd_arg);
4550   if (got_per_bfd_arg.obfd == NULL)
4551     return FALSE;
4552
4553   /* Also count how many page entries each input bfd requires.  */
4554   htab_traverse (g->got_page_entries, mips_elf_make_got_pages_per_bfd,
4555                  &got_per_bfd_arg);
4556   if (got_per_bfd_arg.obfd == NULL)
4557     return FALSE;
4558
4559   got_per_bfd_arg.current = NULL;
4560   got_per_bfd_arg.primary = NULL;
4561   got_per_bfd_arg.max_count = ((MIPS_ELF_GOT_MAX_SIZE (info)
4562                                 / MIPS_ELF_GOT_SIZE (abfd))
4563                                - htab->reserved_gotno);
4564   got_per_bfd_arg.max_pages = pages;
4565   /* The number of globals that will be included in the primary GOT.
4566      See the calls to mips_elf_set_global_got_offset below for more
4567      information.  */
4568   got_per_bfd_arg.global_count = g->global_gotno;
4569
4570   /* Try to merge the GOTs of input bfds together, as long as they
4571      don't seem to exceed the maximum GOT size, choosing one of them
4572      to be the primary GOT.  */
4573   htab_traverse (g->bfd2got, mips_elf_merge_gots, &got_per_bfd_arg);
4574   if (got_per_bfd_arg.obfd == NULL)
4575     return FALSE;
4576
4577   /* If we do not find any suitable primary GOT, create an empty one.  */
4578   if (got_per_bfd_arg.primary == NULL)
4579     {
4580       g->next = (struct mips_got_info *)
4581         bfd_alloc (abfd, sizeof (struct mips_got_info));
4582       if (g->next == NULL)
4583         return FALSE;
4584
4585       g->next->global_gotsym = NULL;
4586       g->next->global_gotno = 0;
4587       g->next->reloc_only_gotno = 0;
4588       g->next->local_gotno = 0;
4589       g->next->page_gotno = 0;
4590       g->next->tls_gotno = 0;
4591       g->next->assigned_gotno = 0;
4592       g->next->tls_assigned_gotno = 0;
4593       g->next->tls_ldm_offset = MINUS_ONE;
4594       g->next->got_entries = htab_try_create (1, mips_elf_multi_got_entry_hash,
4595                                               mips_elf_multi_got_entry_eq,
4596                                               NULL);
4597       if (g->next->got_entries == NULL)
4598         return FALSE;
4599       g->next->got_page_entries = htab_try_create (1, mips_got_page_entry_hash,
4600                                                    mips_got_page_entry_eq,
4601                                                    NULL);
4602       if (g->next->got_page_entries == NULL)
4603         return FALSE;
4604       g->next->bfd2got = NULL;
4605     }
4606   else
4607     g->next = got_per_bfd_arg.primary;
4608   g->next->next = got_per_bfd_arg.current;
4609
4610   /* GG is now the master GOT, and G is the primary GOT.  */
4611   gg = g;
4612   g = g->next;
4613
4614   /* Map the output bfd to the primary got.  That's what we're going
4615      to use for bfds that use GOT16 or GOT_PAGE relocations that we
4616      didn't mark in check_relocs, and we want a quick way to find it.
4617      We can't just use gg->next because we're going to reverse the
4618      list.  */
4619   {
4620     struct mips_elf_bfd2got_hash *bfdgot;
4621     void **bfdgotp;
4622
4623     bfdgot = (struct mips_elf_bfd2got_hash *)bfd_alloc
4624       (abfd, sizeof (struct mips_elf_bfd2got_hash));
4625
4626     if (bfdgot == NULL)
4627       return FALSE;
4628
4629     bfdgot->bfd = abfd;
4630     bfdgot->g = g;
4631     bfdgotp = htab_find_slot (gg->bfd2got, bfdgot, INSERT);
4632
4633     BFD_ASSERT (*bfdgotp == NULL);
4634     *bfdgotp = bfdgot;
4635   }
4636
4637   /* Every symbol that is referenced in a dynamic relocation must be
4638      present in the primary GOT, so arrange for them to appear after
4639      those that are actually referenced.  */
4640   gg->reloc_only_gotno = gg->global_gotno - g->global_gotno;
4641   g->global_gotno = gg->global_gotno;
4642
4643   set_got_offset_arg.g = NULL;
4644   set_got_offset_arg.value = GGA_RELOC_ONLY;
4645   htab_traverse (gg->got_entries, mips_elf_set_global_got_offset,
4646                  &set_got_offset_arg);
4647   set_got_offset_arg.value = GGA_NORMAL;
4648   htab_traverse (g->got_entries, mips_elf_set_global_got_offset,
4649                  &set_got_offset_arg);
4650
4651   /* Now go through the GOTs assigning them offset ranges.
4652      [assigned_gotno, local_gotno[ will be set to the range of local
4653      entries in each GOT.  We can then compute the end of a GOT by
4654      adding local_gotno to global_gotno.  We reverse the list and make
4655      it circular since then we'll be able to quickly compute the
4656      beginning of a GOT, by computing the end of its predecessor.  To
4657      avoid special cases for the primary GOT, while still preserving
4658      assertions that are valid for both single- and multi-got links,
4659      we arrange for the main got struct to have the right number of
4660      global entries, but set its local_gotno such that the initial
4661      offset of the primary GOT is zero.  Remember that the primary GOT
4662      will become the last item in the circular linked list, so it
4663      points back to the master GOT.  */
4664   gg->local_gotno = -g->global_gotno;
4665   gg->global_gotno = g->global_gotno;
4666   gg->tls_gotno = 0;
4667   assign = 0;
4668   gg->next = gg;
4669
4670   do
4671     {
4672       struct mips_got_info *gn;
4673
4674       assign += htab->reserved_gotno;
4675       g->assigned_gotno = assign;
4676       g->local_gotno += assign;
4677       g->local_gotno += (pages < g->page_gotno ? pages : g->page_gotno);
4678       assign = g->local_gotno + g->global_gotno + g->tls_gotno;
4679
4680       /* Take g out of the direct list, and push it onto the reversed
4681          list that gg points to.  g->next is guaranteed to be nonnull after
4682          this operation, as required by mips_elf_initialize_tls_index. */
4683       gn = g->next;
4684       g->next = gg->next;
4685       gg->next = g;
4686
4687       /* Set up any TLS entries.  We always place the TLS entries after
4688          all non-TLS entries.  */
4689       g->tls_assigned_gotno = g->local_gotno + g->global_gotno;
4690       htab_traverse (g->got_entries, mips_elf_initialize_tls_index, g);
4691
4692       /* Move onto the next GOT.  It will be a secondary GOT if nonull.  */
4693       g = gn;
4694
4695       /* Forbid global symbols in every non-primary GOT from having
4696          lazy-binding stubs.  */
4697       if (g)
4698         htab_traverse (g->got_entries, mips_elf_forbid_lazy_stubs, info);
4699     }
4700   while (g);
4701
4702   got->size = (gg->next->local_gotno
4703                + gg->next->global_gotno
4704                + gg->next->tls_gotno) * MIPS_ELF_GOT_SIZE (abfd);
4705
4706   needed_relocs = 0;
4707   set_got_offset_arg.value = MIPS_ELF_GOT_SIZE (abfd);
4708   set_got_offset_arg.info = info;
4709   for (g = gg->next; g && g->next != gg; g = g->next)
4710     {
4711       unsigned int save_assign;
4712
4713       /* Assign offsets to global GOT entries.  */
4714       save_assign = g->assigned_gotno;
4715       g->assigned_gotno = g->local_gotno;
4716       set_got_offset_arg.g = g;
4717       set_got_offset_arg.needed_relocs = 0;
4718       htab_traverse (g->got_entries,
4719                      mips_elf_set_global_got_offset,
4720                      &set_got_offset_arg);
4721       needed_relocs += set_got_offset_arg.needed_relocs;
4722       BFD_ASSERT (g->assigned_gotno - g->local_gotno <= g->global_gotno);
4723
4724       g->assigned_gotno = save_assign;
4725       if (info->shared)
4726         {
4727           needed_relocs += g->local_gotno - g->assigned_gotno;
4728           BFD_ASSERT (g->assigned_gotno == g->next->local_gotno
4729                       + g->next->global_gotno
4730                       + g->next->tls_gotno
4731                       + htab->reserved_gotno);
4732         }
4733     }
4734
4735   if (needed_relocs)
4736     mips_elf_allocate_dynamic_relocations (dynobj, info,
4737                                            needed_relocs);
4738
4739   return TRUE;
4740 }
4741
4742 \f
4743 /* Returns the first relocation of type r_type found, beginning with
4744    RELOCATION.  RELEND is one-past-the-end of the relocation table.  */
4745
4746 static const Elf_Internal_Rela *
4747 mips_elf_next_relocation (bfd *abfd ATTRIBUTE_UNUSED, unsigned int r_type,
4748                           const Elf_Internal_Rela *relocation,
4749                           const Elf_Internal_Rela *relend)
4750 {
4751   unsigned long r_symndx = ELF_R_SYM (abfd, relocation->r_info);
4752
4753   while (relocation < relend)
4754     {
4755       if (ELF_R_TYPE (abfd, relocation->r_info) == r_type
4756           && ELF_R_SYM (abfd, relocation->r_info) == r_symndx)
4757         return relocation;
4758
4759       ++relocation;
4760     }
4761
4762   /* We didn't find it.  */
4763   return NULL;
4764 }
4765
4766 /* Return whether an input relocation is against a local symbol.  */
4767
4768 static bfd_boolean
4769 mips_elf_local_relocation_p (bfd *input_bfd,
4770                              const Elf_Internal_Rela *relocation,
4771                              asection **local_sections)
4772 {
4773   unsigned long r_symndx;
4774   Elf_Internal_Shdr *symtab_hdr;
4775   size_t extsymoff;
4776
4777   r_symndx = ELF_R_SYM (input_bfd, relocation->r_info);
4778   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
4779   extsymoff = (elf_bad_symtab (input_bfd)) ? 0 : symtab_hdr->sh_info;
4780
4781   if (r_symndx < extsymoff)
4782     return TRUE;
4783   if (elf_bad_symtab (input_bfd) && local_sections[r_symndx] != NULL)
4784     return TRUE;
4785
4786   return FALSE;
4787 }
4788 \f
4789 /* Sign-extend VALUE, which has the indicated number of BITS.  */
4790
4791 bfd_vma
4792 _bfd_mips_elf_sign_extend (bfd_vma value, int bits)
4793 {
4794   if (value & ((bfd_vma) 1 << (bits - 1)))
4795     /* VALUE is negative.  */
4796     value |= ((bfd_vma) - 1) << bits;
4797
4798   return value;
4799 }
4800
4801 /* Return non-zero if the indicated VALUE has overflowed the maximum
4802    range expressible by a signed number with the indicated number of
4803    BITS.  */
4804
4805 static bfd_boolean
4806 mips_elf_overflow_p (bfd_vma value, int bits)
4807 {
4808   bfd_signed_vma svalue = (bfd_signed_vma) value;
4809
4810   if (svalue > (1 << (bits - 1)) - 1)
4811     /* The value is too big.  */
4812     return TRUE;
4813   else if (svalue < -(1 << (bits - 1)))
4814     /* The value is too small.  */
4815     return TRUE;
4816
4817   /* All is well.  */
4818   return FALSE;
4819 }
4820
4821 /* Calculate the %high function.  */
4822
4823 static bfd_vma
4824 mips_elf_high (bfd_vma value)
4825 {
4826   return ((value + (bfd_vma) 0x8000) >> 16) & 0xffff;
4827 }
4828
4829 /* Calculate the %higher function.  */
4830
4831 static bfd_vma
4832 mips_elf_higher (bfd_vma value ATTRIBUTE_UNUSED)
4833 {
4834 #ifdef BFD64
4835   return ((value + (bfd_vma) 0x80008000) >> 32) & 0xffff;
4836 #else
4837   abort ();
4838   return MINUS_ONE;
4839 #endif
4840 }
4841
4842 /* Calculate the %highest function.  */
4843
4844 static bfd_vma
4845 mips_elf_highest (bfd_vma value ATTRIBUTE_UNUSED)
4846 {
4847 #ifdef BFD64
4848   return ((value + (((bfd_vma) 0x8000 << 32) | 0x80008000)) >> 48) & 0xffff;
4849 #else
4850   abort ();
4851   return MINUS_ONE;
4852 #endif
4853 }
4854 \f
4855 /* Create the .compact_rel section.  */
4856
4857 static bfd_boolean
4858 mips_elf_create_compact_rel_section
4859   (bfd *abfd, struct bfd_link_info *info ATTRIBUTE_UNUSED)
4860 {
4861   flagword flags;
4862   register asection *s;
4863
4864   if (bfd_get_linker_section (abfd, ".compact_rel") == NULL)
4865     {
4866       flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED
4867                | SEC_READONLY);
4868
4869       s = bfd_make_section_anyway_with_flags (abfd, ".compact_rel", flags);
4870       if (s == NULL
4871           || ! bfd_set_section_alignment (abfd, s,
4872                                           MIPS_ELF_LOG_FILE_ALIGN (abfd)))
4873         return FALSE;
4874
4875       s->size = sizeof (Elf32_External_compact_rel);
4876     }
4877
4878   return TRUE;
4879 }
4880
4881 /* Create the .got section to hold the global offset table.  */
4882
4883 static bfd_boolean
4884 mips_elf_create_got_section (bfd *abfd, struct bfd_link_info *info)
4885 {
4886   flagword flags;
4887   register asection *s;
4888   struct elf_link_hash_entry *h;
4889   struct bfd_link_hash_entry *bh;
4890   struct mips_got_info *g;
4891   bfd_size_type amt;
4892   struct mips_elf_link_hash_table *htab;
4893
4894   htab = mips_elf_hash_table (info);
4895   BFD_ASSERT (htab != NULL);
4896
4897   /* This function may be called more than once.  */
4898   if (htab->sgot)
4899     return TRUE;
4900
4901   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
4902            | SEC_LINKER_CREATED);
4903
4904   /* We have to use an alignment of 2**4 here because this is hardcoded
4905      in the function stub generation and in the linker script.  */
4906   s = bfd_make_section_anyway_with_flags (abfd, ".got", flags);
4907   if (s == NULL
4908       || ! bfd_set_section_alignment (abfd, s, 4))
4909     return FALSE;
4910   htab->sgot = s;
4911
4912   /* Define the symbol _GLOBAL_OFFSET_TABLE_.  We don't do this in the
4913      linker script because we don't want to define the symbol if we
4914      are not creating a global offset table.  */
4915   bh = NULL;
4916   if (! (_bfd_generic_link_add_one_symbol
4917          (info, abfd, "_GLOBAL_OFFSET_TABLE_", BSF_GLOBAL, s,
4918           0, NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
4919     return FALSE;
4920
4921   h = (struct elf_link_hash_entry *) bh;
4922   h->non_elf = 0;
4923   h->def_regular = 1;
4924   h->type = STT_OBJECT;
4925   elf_hash_table (info)->hgot = h;
4926
4927   if (info->shared
4928       && ! bfd_elf_link_record_dynamic_symbol (info, h))
4929     return FALSE;
4930
4931   amt = sizeof (struct mips_got_info);
4932   g = bfd_alloc (abfd, amt);
4933   if (g == NULL)
4934     return FALSE;
4935   g->global_gotsym = NULL;
4936   g->global_gotno = 0;
4937   g->reloc_only_gotno = 0;
4938   g->tls_gotno = 0;
4939   g->local_gotno = 0;
4940   g->page_gotno = 0;
4941   g->assigned_gotno = 0;
4942   g->bfd2got = NULL;
4943   g->next = NULL;
4944   g->tls_ldm_offset = MINUS_ONE;
4945   g->got_entries = htab_try_create (1, mips_elf_got_entry_hash,
4946                                     mips_elf_got_entry_eq, NULL);
4947   if (g->got_entries == NULL)
4948     return FALSE;
4949   g->got_page_entries = htab_try_create (1, mips_got_page_entry_hash,
4950                                          mips_got_page_entry_eq, NULL);
4951   if (g->got_page_entries == NULL)
4952     return FALSE;
4953   htab->got_info = g;
4954   mips_elf_section_data (s)->elf.this_hdr.sh_flags
4955     |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL;
4956
4957   /* We also need a .got.plt section when generating PLTs.  */
4958   s = bfd_make_section_anyway_with_flags (abfd, ".got.plt",
4959                                           SEC_ALLOC | SEC_LOAD
4960                                           | SEC_HAS_CONTENTS
4961                                           | SEC_IN_MEMORY
4962                                           | SEC_LINKER_CREATED);
4963   if (s == NULL)
4964     return FALSE;
4965   htab->sgotplt = s;
4966
4967   return TRUE;
4968 }
4969 \f
4970 /* Return true if H refers to the special VxWorks __GOTT_BASE__ or
4971    __GOTT_INDEX__ symbols.  These symbols are only special for
4972    shared objects; they are not used in executables.  */
4973
4974 static bfd_boolean
4975 is_gott_symbol (struct bfd_link_info *info, struct elf_link_hash_entry *h)
4976 {
4977   return (mips_elf_hash_table (info)->is_vxworks
4978           && info->shared
4979           && (strcmp (h->root.root.string, "__GOTT_BASE__") == 0
4980               || strcmp (h->root.root.string, "__GOTT_INDEX__") == 0));
4981 }
4982
4983 /* Return TRUE if a relocation of type R_TYPE from INPUT_BFD might
4984    require an la25 stub.  See also mips_elf_local_pic_function_p,
4985    which determines whether the destination function ever requires a
4986    stub.  */
4987
4988 static bfd_boolean
4989 mips_elf_relocation_needs_la25_stub (bfd *input_bfd, int r_type,
4990                                      bfd_boolean target_is_16_bit_code_p)
4991 {
4992   /* We specifically ignore branches and jumps from EF_PIC objects,
4993      where the onus is on the compiler or programmer to perform any
4994      necessary initialization of $25.  Sometimes such initialization
4995      is unnecessary; for example, -mno-shared functions do not use
4996      the incoming value of $25, and may therefore be called directly.  */
4997   if (PIC_OBJECT_P (input_bfd))
4998     return FALSE;
4999
5000   switch (r_type)
5001     {
5002     case R_MIPS_26:
5003     case R_MIPS_PC16:
5004     case R_MICROMIPS_26_S1:
5005     case R_MICROMIPS_PC7_S1:
5006     case R_MICROMIPS_PC10_S1:
5007     case R_MICROMIPS_PC16_S1:
5008     case R_MICROMIPS_PC23_S2:
5009       return TRUE;
5010
5011     case R_MIPS16_26:
5012       return !target_is_16_bit_code_p;
5013
5014     default:
5015       return FALSE;
5016     }
5017 }
5018 \f
5019 /* Calculate the value produced by the RELOCATION (which comes from
5020    the INPUT_BFD).  The ADDEND is the addend to use for this
5021    RELOCATION; RELOCATION->R_ADDEND is ignored.
5022
5023    The result of the relocation calculation is stored in VALUEP.
5024    On exit, set *CROSS_MODE_JUMP_P to true if the relocation field
5025    is a MIPS16 or microMIPS jump to standard MIPS code, or vice versa.
5026
5027    This function returns bfd_reloc_continue if the caller need take no
5028    further action regarding this relocation, bfd_reloc_notsupported if
5029    something goes dramatically wrong, bfd_reloc_overflow if an
5030    overflow occurs, and bfd_reloc_ok to indicate success.  */
5031
5032 static bfd_reloc_status_type
5033 mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
5034                                asection *input_section,
5035                                struct bfd_link_info *info,
5036                                const Elf_Internal_Rela *relocation,
5037                                bfd_vma addend, reloc_howto_type *howto,
5038                                Elf_Internal_Sym *local_syms,
5039                                asection **local_sections, bfd_vma *valuep,
5040                                const char **namep,
5041                                bfd_boolean *cross_mode_jump_p,
5042                                bfd_boolean save_addend)
5043 {
5044   /* The eventual value we will return.  */
5045   bfd_vma value;
5046   /* The address of the symbol against which the relocation is
5047      occurring.  */
5048   bfd_vma symbol = 0;
5049   /* The final GP value to be used for the relocatable, executable, or
5050      shared object file being produced.  */
5051   bfd_vma gp;
5052   /* The place (section offset or address) of the storage unit being
5053      relocated.  */
5054   bfd_vma p;
5055   /* The value of GP used to create the relocatable object.  */
5056   bfd_vma gp0;
5057   /* The offset into the global offset table at which the address of
5058      the relocation entry symbol, adjusted by the addend, resides
5059      during execution.  */
5060   bfd_vma g = MINUS_ONE;
5061   /* The section in which the symbol referenced by the relocation is
5062      located.  */
5063   asection *sec = NULL;
5064   struct mips_elf_link_hash_entry *h = NULL;
5065   /* TRUE if the symbol referred to by this relocation is a local
5066      symbol.  */
5067   bfd_boolean local_p, was_local_p;
5068   /* TRUE if the symbol referred to by this relocation is "_gp_disp".  */
5069   bfd_boolean gp_disp_p = FALSE;
5070   /* TRUE if the symbol referred to by this relocation is
5071      "__gnu_local_gp".  */
5072   bfd_boolean gnu_local_gp_p = FALSE;
5073   Elf_Internal_Shdr *symtab_hdr;
5074   size_t extsymoff;
5075   unsigned long r_symndx;
5076   int r_type;
5077   /* TRUE if overflow occurred during the calculation of the
5078      relocation value.  */
5079   bfd_boolean overflowed_p;
5080   /* TRUE if this relocation refers to a MIPS16 function.  */
5081   bfd_boolean target_is_16_bit_code_p = FALSE;
5082   bfd_boolean target_is_micromips_code_p = FALSE;
5083   struct mips_elf_link_hash_table *htab;
5084   bfd *dynobj;
5085
5086   dynobj = elf_hash_table (info)->dynobj;
5087   htab = mips_elf_hash_table (info);
5088   BFD_ASSERT (htab != NULL);
5089
5090   /* Parse the relocation.  */
5091   r_symndx = ELF_R_SYM (input_bfd, relocation->r_info);
5092   r_type = ELF_R_TYPE (input_bfd, relocation->r_info);
5093   p = (input_section->output_section->vma
5094        + input_section->output_offset
5095        + relocation->r_offset);
5096
5097   /* Assume that there will be no overflow.  */
5098   overflowed_p = FALSE;
5099
5100   /* Figure out whether or not the symbol is local, and get the offset
5101      used in the array of hash table entries.  */
5102   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
5103   local_p = mips_elf_local_relocation_p (input_bfd, relocation,
5104                                          local_sections);
5105   was_local_p = local_p;
5106   if (! elf_bad_symtab (input_bfd))
5107     extsymoff = symtab_hdr->sh_info;
5108   else
5109     {
5110       /* The symbol table does not follow the rule that local symbols
5111          must come before globals.  */
5112       extsymoff = 0;
5113     }
5114
5115   /* Figure out the value of the symbol.  */
5116   if (local_p)
5117     {
5118       Elf_Internal_Sym *sym;
5119
5120       sym = local_syms + r_symndx;
5121       sec = local_sections[r_symndx];
5122
5123       symbol = sec->output_section->vma + sec->output_offset;
5124       if (ELF_ST_TYPE (sym->st_info) != STT_SECTION
5125           || (sec->flags & SEC_MERGE))
5126         symbol += sym->st_value;
5127       if ((sec->flags & SEC_MERGE)
5128           && ELF_ST_TYPE (sym->st_info) == STT_SECTION)
5129         {
5130           addend = _bfd_elf_rel_local_sym (abfd, sym, &sec, addend);
5131           addend -= symbol;
5132           addend += sec->output_section->vma + sec->output_offset;
5133         }
5134
5135       /* MIPS16/microMIPS text labels should be treated as odd.  */
5136       if (ELF_ST_IS_COMPRESSED (sym->st_other))
5137         ++symbol;
5138
5139       /* Record the name of this symbol, for our caller.  */
5140       *namep = bfd_elf_string_from_elf_section (input_bfd,
5141                                                 symtab_hdr->sh_link,
5142                                                 sym->st_name);
5143       if (*namep == '\0')
5144         *namep = bfd_section_name (input_bfd, sec);
5145
5146       target_is_16_bit_code_p = ELF_ST_IS_MIPS16 (sym->st_other);
5147       target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (sym->st_other);
5148     }
5149   else
5150     {
5151       /* ??? Could we use RELOC_FOR_GLOBAL_SYMBOL here ?  */
5152
5153       /* For global symbols we look up the symbol in the hash-table.  */
5154       h = ((struct mips_elf_link_hash_entry *)
5155            elf_sym_hashes (input_bfd) [r_symndx - extsymoff]);
5156       /* Find the real hash-table entry for this symbol.  */
5157       while (h->root.root.type == bfd_link_hash_indirect
5158              || h->root.root.type == bfd_link_hash_warning)
5159         h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
5160
5161       /* Record the name of this symbol, for our caller.  */
5162       *namep = h->root.root.root.string;
5163
5164       /* See if this is the special _gp_disp symbol.  Note that such a
5165          symbol must always be a global symbol.  */
5166       if (strcmp (*namep, "_gp_disp") == 0
5167           && ! NEWABI_P (input_bfd))
5168         {
5169           /* Relocations against _gp_disp are permitted only with
5170              R_MIPS_HI16 and R_MIPS_LO16 relocations.  */
5171           if (!hi16_reloc_p (r_type) && !lo16_reloc_p (r_type))
5172             return bfd_reloc_notsupported;
5173
5174           gp_disp_p = TRUE;
5175         }
5176       /* See if this is the special _gp symbol.  Note that such a
5177          symbol must always be a global symbol.  */
5178       else if (strcmp (*namep, "__gnu_local_gp") == 0)
5179         gnu_local_gp_p = TRUE;
5180
5181
5182       /* If this symbol is defined, calculate its address.  Note that
5183          _gp_disp is a magic symbol, always implicitly defined by the
5184          linker, so it's inappropriate to check to see whether or not
5185          its defined.  */
5186       else if ((h->root.root.type == bfd_link_hash_defined
5187                 || h->root.root.type == bfd_link_hash_defweak)
5188                && h->root.root.u.def.section)
5189         {
5190           sec = h->root.root.u.def.section;
5191           if (sec->output_section)
5192             symbol = (h->root.root.u.def.value
5193                       + sec->output_section->vma
5194                       + sec->output_offset);
5195           else
5196             symbol = h->root.root.u.def.value;
5197         }
5198       else if (h->root.root.type == bfd_link_hash_undefweak)
5199         /* We allow relocations against undefined weak symbols, giving
5200            it the value zero, so that you can undefined weak functions
5201            and check to see if they exist by looking at their
5202            addresses.  */
5203         symbol = 0;
5204       else if (info->unresolved_syms_in_objects == RM_IGNORE
5205                && ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT)
5206         symbol = 0;
5207       else if (strcmp (*namep, SGI_COMPAT (input_bfd)
5208                        ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING") == 0)
5209         {
5210           /* If this is a dynamic link, we should have created a
5211              _DYNAMIC_LINK symbol or _DYNAMIC_LINKING(for normal mips) symbol
5212              in in _bfd_mips_elf_create_dynamic_sections.
5213              Otherwise, we should define the symbol with a value of 0.
5214              FIXME: It should probably get into the symbol table
5215              somehow as well.  */
5216           BFD_ASSERT (! info->shared);
5217           BFD_ASSERT (bfd_get_section_by_name (abfd, ".dynamic") == NULL);
5218           symbol = 0;
5219         }
5220       else if (ELF_MIPS_IS_OPTIONAL (h->root.other))
5221         {
5222           /* This is an optional symbol - an Irix specific extension to the
5223              ELF spec.  Ignore it for now.
5224              XXX - FIXME - there is more to the spec for OPTIONAL symbols
5225              than simply ignoring them, but we do not handle this for now.
5226              For information see the "64-bit ELF Object File Specification"
5227              which is available from here:
5228              http://techpubs.sgi.com/library/manuals/4000/007-4658-001/pdf/007-4658-001.pdf  */
5229           symbol = 0;
5230         }
5231       else if ((*info->callbacks->undefined_symbol)
5232                (info, h->root.root.root.string, input_bfd,
5233                 input_section, relocation->r_offset,
5234                 (info->unresolved_syms_in_objects == RM_GENERATE_ERROR)
5235                  || ELF_ST_VISIBILITY (h->root.other)))
5236         {
5237           return bfd_reloc_undefined;
5238         }
5239       else
5240         {
5241           return bfd_reloc_notsupported;
5242         }
5243
5244       target_is_16_bit_code_p = ELF_ST_IS_MIPS16 (h->root.other);
5245       /* If the output section is the PLT section,
5246          then the target is not microMIPS.  */
5247       target_is_micromips_code_p = (htab->splt != sec
5248                                     && ELF_ST_IS_MICROMIPS (h->root.other));
5249     }
5250
5251   /* If this is a reference to a 16-bit function with a stub, we need
5252      to redirect the relocation to the stub unless:
5253
5254      (a) the relocation is for a MIPS16 JAL;
5255
5256      (b) the relocation is for a MIPS16 PIC call, and there are no
5257          non-MIPS16 uses of the GOT slot; or
5258
5259      (c) the section allows direct references to MIPS16 functions.  */
5260   if (r_type != R_MIPS16_26
5261       && !info->relocatable
5262       && ((h != NULL
5263            && h->fn_stub != NULL
5264            && (r_type != R_MIPS16_CALL16 || h->need_fn_stub))
5265           || (local_p
5266               && elf_tdata (input_bfd)->local_stubs != NULL
5267               && elf_tdata (input_bfd)->local_stubs[r_symndx] != NULL))
5268       && !section_allows_mips16_refs_p (input_section))
5269     {
5270       /* This is a 32- or 64-bit call to a 16-bit function.  We should
5271          have already noticed that we were going to need the
5272          stub.  */
5273       if (local_p)
5274         {
5275           sec = elf_tdata (input_bfd)->local_stubs[r_symndx];
5276           value = 0;
5277         }
5278       else
5279         {
5280           BFD_ASSERT (h->need_fn_stub);
5281           if (h->la25_stub)
5282             {
5283               /* If a LA25 header for the stub itself exists, point to the
5284                  prepended LUI/ADDIU sequence.  */
5285               sec = h->la25_stub->stub_section;
5286               value = h->la25_stub->offset;
5287             }
5288           else
5289             {
5290               sec = h->fn_stub;
5291               value = 0;
5292             }
5293         }
5294
5295       symbol = sec->output_section->vma + sec->output_offset + value;
5296       /* The target is 16-bit, but the stub isn't.  */
5297       target_is_16_bit_code_p = FALSE;
5298     }
5299   /* If this is a 16-bit call to a 32- or 64-bit function with a stub, we
5300      need to redirect the call to the stub.  Note that we specifically
5301      exclude R_MIPS16_CALL16 from this behavior; indirect calls should
5302      use an indirect stub instead.  */
5303   else if (r_type == R_MIPS16_26 && !info->relocatable
5304            && ((h != NULL && (h->call_stub != NULL || h->call_fp_stub != NULL))
5305                || (local_p
5306                    && elf_tdata (input_bfd)->local_call_stubs != NULL
5307                    && elf_tdata (input_bfd)->local_call_stubs[r_symndx] != NULL))
5308            && !target_is_16_bit_code_p)
5309     {
5310       if (local_p)
5311         sec = elf_tdata (input_bfd)->local_call_stubs[r_symndx];
5312       else
5313         {
5314           /* If both call_stub and call_fp_stub are defined, we can figure
5315              out which one to use by checking which one appears in the input
5316              file.  */
5317           if (h->call_stub != NULL && h->call_fp_stub != NULL)
5318             {
5319               asection *o;
5320
5321               sec = NULL;
5322               for (o = input_bfd->sections; o != NULL; o = o->next)
5323                 {
5324                   if (CALL_FP_STUB_P (bfd_get_section_name (input_bfd, o)))
5325                     {
5326                       sec = h->call_fp_stub;
5327                       break;
5328                     }
5329                 }
5330               if (sec == NULL)
5331                 sec = h->call_stub;
5332             }
5333           else if (h->call_stub != NULL)
5334             sec = h->call_stub;
5335           else
5336             sec = h->call_fp_stub;
5337         }
5338
5339       BFD_ASSERT (sec->size > 0);
5340       symbol = sec->output_section->vma + sec->output_offset;
5341     }
5342   /* If this is a direct call to a PIC function, redirect to the
5343      non-PIC stub.  */
5344   else if (h != NULL && h->la25_stub
5345            && mips_elf_relocation_needs_la25_stub (input_bfd, r_type,
5346                                                    target_is_16_bit_code_p))
5347     symbol = (h->la25_stub->stub_section->output_section->vma
5348               + h->la25_stub->stub_section->output_offset
5349               + h->la25_stub->offset);
5350
5351   /* Make sure MIPS16 and microMIPS are not used together.  */
5352   if ((r_type == R_MIPS16_26 && target_is_micromips_code_p)
5353       || (micromips_branch_reloc_p (r_type) && target_is_16_bit_code_p))
5354    {
5355       (*_bfd_error_handler)
5356         (_("MIPS16 and microMIPS functions cannot call each other"));
5357       return bfd_reloc_notsupported;
5358    }
5359
5360   /* Calls from 16-bit code to 32-bit code and vice versa require the
5361      mode change.  However, we can ignore calls to undefined weak symbols,
5362      which should never be executed at runtime.  This exception is important
5363      because the assembly writer may have "known" that any definition of the
5364      symbol would be 16-bit code, and that direct jumps were therefore
5365      acceptable.  */
5366   *cross_mode_jump_p = (!info->relocatable
5367                         && !(h && h->root.root.type == bfd_link_hash_undefweak)
5368                         && ((r_type == R_MIPS16_26 && !target_is_16_bit_code_p)
5369                             || (r_type == R_MICROMIPS_26_S1
5370                                 && !target_is_micromips_code_p)
5371                             || ((r_type == R_MIPS_26 || r_type == R_MIPS_JALR)
5372                                 && (target_is_16_bit_code_p
5373                                     || target_is_micromips_code_p))));
5374
5375   local_p = (h == NULL
5376              || (h->got_only_for_calls
5377                  ? SYMBOL_CALLS_LOCAL (info, &h->root)
5378                  : SYMBOL_REFERENCES_LOCAL (info, &h->root)));
5379
5380   gp0 = _bfd_get_gp_value (input_bfd);
5381   gp = _bfd_get_gp_value (abfd);
5382   if (htab->got_info)
5383     gp += mips_elf_adjust_gp (abfd, htab->got_info, input_bfd);
5384
5385   if (gnu_local_gp_p)
5386     symbol = gp;
5387
5388   /* Global R_MIPS_GOT_PAGE/R_MICROMIPS_GOT_PAGE relocations are equivalent
5389      to R_MIPS_GOT_DISP/R_MICROMIPS_GOT_DISP.  The addend is applied by the
5390      corresponding R_MIPS_GOT_OFST/R_MICROMIPS_GOT_OFST.  */
5391   if (got_page_reloc_p (r_type) && !local_p)
5392     {
5393       r_type = (micromips_reloc_p (r_type)
5394                 ? R_MICROMIPS_GOT_DISP : R_MIPS_GOT_DISP);
5395       addend = 0;
5396     }
5397
5398   /* If we haven't already determined the GOT offset, and we're going
5399      to need it, get it now.  */
5400   switch (r_type)
5401     {
5402     case R_MIPS16_CALL16:
5403     case R_MIPS16_GOT16:
5404     case R_MIPS_CALL16:
5405     case R_MIPS_GOT16:
5406     case R_MIPS_GOT_DISP:
5407     case R_MIPS_GOT_HI16:
5408     case R_MIPS_CALL_HI16:
5409     case R_MIPS_GOT_LO16:
5410     case R_MIPS_CALL_LO16:
5411     case R_MICROMIPS_CALL16:
5412     case R_MICROMIPS_GOT16:
5413     case R_MICROMIPS_GOT_DISP:
5414     case R_MICROMIPS_GOT_HI16:
5415     case R_MICROMIPS_CALL_HI16:
5416     case R_MICROMIPS_GOT_LO16:
5417     case R_MICROMIPS_CALL_LO16:
5418     case R_MIPS_TLS_GD:
5419     case R_MIPS_TLS_GOTTPREL:
5420     case R_MIPS_TLS_LDM:
5421     case R_MIPS16_TLS_GD:
5422     case R_MIPS16_TLS_GOTTPREL:
5423     case R_MIPS16_TLS_LDM:
5424     case R_MICROMIPS_TLS_GD:
5425     case R_MICROMIPS_TLS_GOTTPREL:
5426     case R_MICROMIPS_TLS_LDM:
5427       /* Find the index into the GOT where this value is located.  */
5428       if (tls_ldm_reloc_p (r_type))
5429         {
5430           g = mips_elf_local_got_index (abfd, input_bfd, info,
5431                                         0, 0, NULL, r_type);
5432           if (g == MINUS_ONE)
5433             return bfd_reloc_outofrange;
5434         }
5435       else if (!local_p)
5436         {
5437           /* On VxWorks, CALL relocations should refer to the .got.plt
5438              entry, which is initialized to point at the PLT stub.  */
5439           if (htab->is_vxworks
5440               && (call_hi16_reloc_p (r_type)
5441                   || call_lo16_reloc_p (r_type)
5442                   || call16_reloc_p (r_type)))
5443             {
5444               BFD_ASSERT (addend == 0);
5445               BFD_ASSERT (h->root.needs_plt);
5446               g = mips_elf_gotplt_index (info, &h->root);
5447             }
5448           else
5449             {
5450               BFD_ASSERT (addend == 0);
5451               g = mips_elf_global_got_index (dynobj, input_bfd,
5452                                              &h->root, r_type, info);
5453               if (h->tls_type == GOT_NORMAL
5454                   && !elf_hash_table (info)->dynamic_sections_created)
5455                 /* This is a static link.  We must initialize the GOT entry.  */
5456                 MIPS_ELF_PUT_WORD (dynobj, symbol, htab->sgot->contents + g);
5457             }
5458         }
5459       else if (!htab->is_vxworks
5460                && (call16_reloc_p (r_type) || got16_reloc_p (r_type)))
5461         /* The calculation below does not involve "g".  */
5462         break;
5463       else
5464         {
5465           g = mips_elf_local_got_index (abfd, input_bfd, info,
5466                                         symbol + addend, r_symndx, h, r_type);
5467           if (g == MINUS_ONE)
5468             return bfd_reloc_outofrange;
5469         }
5470
5471       /* Convert GOT indices to actual offsets.  */
5472       g = mips_elf_got_offset_from_index (info, abfd, input_bfd, g);
5473       break;
5474     }
5475
5476   /* Relocations against the VxWorks __GOTT_BASE__ and __GOTT_INDEX__
5477      symbols are resolved by the loader.  Add them to .rela.dyn.  */
5478   if (h != NULL && is_gott_symbol (info, &h->root))
5479     {
5480       Elf_Internal_Rela outrel;
5481       bfd_byte *loc;
5482       asection *s;
5483
5484       s = mips_elf_rel_dyn_section (info, FALSE);
5485       loc = s->contents + s->reloc_count++ * sizeof (Elf32_External_Rela);
5486
5487       outrel.r_offset = (input_section->output_section->vma
5488                          + input_section->output_offset
5489                          + relocation->r_offset);
5490       outrel.r_info = ELF32_R_INFO (h->root.dynindx, r_type);
5491       outrel.r_addend = addend;
5492       bfd_elf32_swap_reloca_out (abfd, &outrel, loc);
5493
5494       /* If we've written this relocation for a readonly section,
5495          we need to set DF_TEXTREL again, so that we do not delete the
5496          DT_TEXTREL tag.  */
5497       if (MIPS_ELF_READONLY_SECTION (input_section))
5498         info->flags |= DF_TEXTREL;
5499
5500       *valuep = 0;
5501       return bfd_reloc_ok;
5502     }
5503
5504   /* Figure out what kind of relocation is being performed.  */
5505   switch (r_type)
5506     {
5507     case R_MIPS_NONE:
5508       return bfd_reloc_continue;
5509
5510     case R_MIPS_16:
5511       value = symbol + _bfd_mips_elf_sign_extend (addend, 16);
5512       overflowed_p = mips_elf_overflow_p (value, 16);
5513       break;
5514
5515     case R_MIPS_32:
5516     case R_MIPS_REL32:
5517     case R_MIPS_64:
5518       if ((info->shared
5519            || (htab->root.dynamic_sections_created
5520                && h != NULL
5521                && h->root.def_dynamic
5522                && !h->root.def_regular
5523                && !h->has_static_relocs))
5524           && r_symndx != STN_UNDEF
5525           && (h == NULL
5526               || h->root.root.type != bfd_link_hash_undefweak
5527               || ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT)
5528           && (input_section->flags & SEC_ALLOC) != 0)
5529         {
5530           /* If we're creating a shared library, then we can't know
5531              where the symbol will end up.  So, we create a relocation
5532              record in the output, and leave the job up to the dynamic
5533              linker.  We must do the same for executable references to
5534              shared library symbols, unless we've decided to use copy
5535              relocs or PLTs instead.  */
5536           value = addend;
5537           if (!mips_elf_create_dynamic_relocation (abfd,
5538                                                    info,
5539                                                    relocation,
5540                                                    h,
5541                                                    sec,
5542                                                    symbol,
5543                                                    &value,
5544                                                    input_section))
5545             return bfd_reloc_undefined;
5546         }
5547       else
5548         {
5549           if (r_type != R_MIPS_REL32)
5550             value = symbol + addend;
5551           else
5552             value = addend;
5553         }
5554       value &= howto->dst_mask;
5555       break;
5556
5557     case R_MIPS_PC32:
5558       value = symbol + addend - p;
5559       value &= howto->dst_mask;
5560       break;
5561
5562     case R_MIPS16_26:
5563       /* The calculation for R_MIPS16_26 is just the same as for an
5564          R_MIPS_26.  It's only the storage of the relocated field into
5565          the output file that's different.  That's handled in
5566          mips_elf_perform_relocation.  So, we just fall through to the
5567          R_MIPS_26 case here.  */
5568     case R_MIPS_26:
5569     case R_MICROMIPS_26_S1:
5570       {
5571         unsigned int shift;
5572
5573         /* Make sure the target of JALX is word-aligned.  Bit 0 must be
5574            the correct ISA mode selector and bit 1 must be 0.  */
5575         if (*cross_mode_jump_p && (symbol & 3) != (r_type == R_MIPS_26))
5576           return bfd_reloc_outofrange;
5577
5578         /* Shift is 2, unusually, for microMIPS JALX.  */
5579         shift = (!*cross_mode_jump_p && r_type == R_MICROMIPS_26_S1) ? 1 : 2;
5580
5581         if (was_local_p)
5582           value = addend | ((p + 4) & (0xfc000000 << shift));
5583         else
5584           value = _bfd_mips_elf_sign_extend (addend, 26 + shift);
5585         value = (value + symbol) >> shift;
5586         if (!was_local_p && h->root.root.type != bfd_link_hash_undefweak)
5587           overflowed_p = (value >> 26) != ((p + 4) >> (26 + shift));
5588         value &= howto->dst_mask;
5589       }
5590       break;
5591
5592     case R_MIPS_TLS_DTPREL_HI16:
5593     case R_MIPS16_TLS_DTPREL_HI16:
5594     case R_MICROMIPS_TLS_DTPREL_HI16:
5595       value = (mips_elf_high (addend + symbol - dtprel_base (info))
5596                & howto->dst_mask);
5597       break;
5598
5599     case R_MIPS_TLS_DTPREL_LO16:
5600     case R_MIPS_TLS_DTPREL32:
5601     case R_MIPS_TLS_DTPREL64:
5602     case R_MIPS16_TLS_DTPREL_LO16:
5603     case R_MICROMIPS_TLS_DTPREL_LO16:
5604       value = (symbol + addend - dtprel_base (info)) & howto->dst_mask;
5605       break;
5606
5607     case R_MIPS_TLS_TPREL_HI16:
5608     case R_MIPS16_TLS_TPREL_HI16:
5609     case R_MICROMIPS_TLS_TPREL_HI16:
5610       value = (mips_elf_high (addend + symbol - tprel_base (info))
5611                & howto->dst_mask);
5612       break;
5613
5614     case R_MIPS_TLS_TPREL_LO16:
5615     case R_MIPS_TLS_TPREL32:
5616     case R_MIPS_TLS_TPREL64:
5617     case R_MIPS16_TLS_TPREL_LO16:
5618     case R_MICROMIPS_TLS_TPREL_LO16:
5619       value = (symbol + addend - tprel_base (info)) & howto->dst_mask;
5620       break;
5621
5622     case R_MIPS_HI16:
5623     case R_MIPS16_HI16:
5624     case R_MICROMIPS_HI16:
5625       if (!gp_disp_p)
5626         {
5627           value = mips_elf_high (addend + symbol);
5628           value &= howto->dst_mask;
5629         }
5630       else
5631         {
5632           /* For MIPS16 ABI code we generate this sequence
5633                 0: li      $v0,%hi(_gp_disp)
5634                 4: addiupc $v1,%lo(_gp_disp)
5635                 8: sll     $v0,16
5636                12: addu    $v0,$v1
5637                14: move    $gp,$v0
5638              So the offsets of hi and lo relocs are the same, but the
5639              base $pc is that used by the ADDIUPC instruction at $t9 + 4.
5640              ADDIUPC clears the low two bits of the instruction address,
5641              so the base is ($t9 + 4) & ~3.  */
5642           if (r_type == R_MIPS16_HI16)
5643             value = mips_elf_high (addend + gp - ((p + 4) & ~(bfd_vma) 0x3));
5644           /* The microMIPS .cpload sequence uses the same assembly
5645              instructions as the traditional psABI version, but the
5646              incoming $t9 has the low bit set.  */
5647           else if (r_type == R_MICROMIPS_HI16)
5648             value = mips_elf_high (addend + gp - p - 1);
5649           else
5650             value = mips_elf_high (addend + gp - p);
5651           overflowed_p = mips_elf_overflow_p (value, 16);
5652         }
5653       break;
5654
5655     case R_MIPS_LO16:
5656     case R_MIPS16_LO16:
5657     case R_MICROMIPS_LO16:
5658     case R_MICROMIPS_HI0_LO16:
5659       if (!gp_disp_p)
5660         value = (symbol + addend) & howto->dst_mask;
5661       else
5662         {
5663           /* See the comment for R_MIPS16_HI16 above for the reason
5664              for this conditional.  */
5665           if (r_type == R_MIPS16_LO16)
5666             value = addend + gp - (p & ~(bfd_vma) 0x3);
5667           else if (r_type == R_MICROMIPS_LO16
5668                    || r_type == R_MICROMIPS_HI0_LO16)
5669             value = addend + gp - p + 3;
5670           else
5671             value = addend + gp - p + 4;
5672           /* The MIPS ABI requires checking the R_MIPS_LO16 relocation
5673              for overflow.  But, on, say, IRIX5, relocations against
5674              _gp_disp are normally generated from the .cpload
5675              pseudo-op.  It generates code that normally looks like
5676              this:
5677
5678                lui    $gp,%hi(_gp_disp)
5679                addiu  $gp,$gp,%lo(_gp_disp)
5680                addu   $gp,$gp,$t9
5681
5682              Here $t9 holds the address of the function being called,
5683              as required by the MIPS ELF ABI.  The R_MIPS_LO16
5684              relocation can easily overflow in this situation, but the
5685              R_MIPS_HI16 relocation will handle the overflow.
5686              Therefore, we consider this a bug in the MIPS ABI, and do
5687              not check for overflow here.  */
5688         }
5689       break;
5690
5691     case R_MIPS_LITERAL:
5692     case R_MICROMIPS_LITERAL:
5693       /* Because we don't merge literal sections, we can handle this
5694          just like R_MIPS_GPREL16.  In the long run, we should merge
5695          shared literals, and then we will need to additional work
5696          here.  */
5697
5698       /* Fall through.  */
5699
5700     case R_MIPS16_GPREL:
5701       /* The R_MIPS16_GPREL performs the same calculation as
5702          R_MIPS_GPREL16, but stores the relocated bits in a different
5703          order.  We don't need to do anything special here; the
5704          differences are handled in mips_elf_perform_relocation.  */
5705     case R_MIPS_GPREL16:
5706     case R_MICROMIPS_GPREL7_S2:
5707     case R_MICROMIPS_GPREL16:
5708       /* Only sign-extend the addend if it was extracted from the
5709          instruction.  If the addend was separate, leave it alone,
5710          otherwise we may lose significant bits.  */
5711       if (howto->partial_inplace)
5712         addend = _bfd_mips_elf_sign_extend (addend, 16);
5713       value = symbol + addend - gp;
5714       /* If the symbol was local, any earlier relocatable links will
5715          have adjusted its addend with the gp offset, so compensate
5716          for that now.  Don't do it for symbols forced local in this
5717          link, though, since they won't have had the gp offset applied
5718          to them before.  */
5719       if (was_local_p)
5720         value += gp0;
5721       overflowed_p = mips_elf_overflow_p (value, 16);
5722       break;
5723
5724     case R_MIPS16_GOT16:
5725     case R_MIPS16_CALL16:
5726     case R_MIPS_GOT16:
5727     case R_MIPS_CALL16:
5728     case R_MICROMIPS_GOT16:
5729     case R_MICROMIPS_CALL16:
5730       /* VxWorks does not have separate local and global semantics for
5731          R_MIPS*_GOT16; every relocation evaluates to "G".  */
5732       if (!htab->is_vxworks && local_p)
5733         {
5734           value = mips_elf_got16_entry (abfd, input_bfd, info,
5735                                         symbol + addend, !was_local_p);
5736           if (value == MINUS_ONE)
5737             return bfd_reloc_outofrange;
5738           value
5739             = mips_elf_got_offset_from_index (info, abfd, input_bfd, value);
5740           overflowed_p = mips_elf_overflow_p (value, 16);
5741           break;
5742         }
5743
5744       /* Fall through.  */
5745
5746     case R_MIPS_TLS_GD:
5747     case R_MIPS_TLS_GOTTPREL:
5748     case R_MIPS_TLS_LDM:
5749     case R_MIPS_GOT_DISP:
5750     case R_MIPS16_TLS_GD:
5751     case R_MIPS16_TLS_GOTTPREL:
5752     case R_MIPS16_TLS_LDM:
5753     case R_MICROMIPS_TLS_GD:
5754     case R_MICROMIPS_TLS_GOTTPREL:
5755     case R_MICROMIPS_TLS_LDM:
5756     case R_MICROMIPS_GOT_DISP:
5757       value = g;
5758       overflowed_p = mips_elf_overflow_p (value, 16);
5759       break;
5760
5761     case R_MIPS_GPREL32:
5762       value = (addend + symbol + gp0 - gp);
5763       if (!save_addend)
5764         value &= howto->dst_mask;
5765       break;
5766
5767     case R_MIPS_PC16:
5768     case R_MIPS_GNU_REL16_S2:
5769       value = symbol + _bfd_mips_elf_sign_extend (addend, 18) - p;
5770       overflowed_p = mips_elf_overflow_p (value, 18);
5771       value >>= howto->rightshift;
5772       value &= howto->dst_mask;
5773       break;
5774
5775     case R_MICROMIPS_PC7_S1:
5776       value = symbol + _bfd_mips_elf_sign_extend (addend, 8) - p;
5777       overflowed_p = mips_elf_overflow_p (value, 8);
5778       value >>= howto->rightshift;
5779       value &= howto->dst_mask;
5780       break;
5781
5782     case R_MICROMIPS_PC10_S1:
5783       value = symbol + _bfd_mips_elf_sign_extend (addend, 11) - p;
5784       overflowed_p = mips_elf_overflow_p (value, 11);
5785       value >>= howto->rightshift;
5786       value &= howto->dst_mask;
5787       break;
5788
5789     case R_MICROMIPS_PC16_S1:
5790       value = symbol + _bfd_mips_elf_sign_extend (addend, 17) - p;
5791       overflowed_p = mips_elf_overflow_p (value, 17);
5792       value >>= howto->rightshift;
5793       value &= howto->dst_mask;
5794       break;
5795
5796     case R_MICROMIPS_PC23_S2:
5797       value = symbol + _bfd_mips_elf_sign_extend (addend, 25) - ((p | 3) ^ 3);
5798       overflowed_p = mips_elf_overflow_p (value, 25);
5799       value >>= howto->rightshift;
5800       value &= howto->dst_mask;
5801       break;
5802
5803     case R_MIPS_GOT_HI16:
5804     case R_MIPS_CALL_HI16:
5805     case R_MICROMIPS_GOT_HI16:
5806     case R_MICROMIPS_CALL_HI16:
5807       /* We're allowed to handle these two relocations identically.
5808          The dynamic linker is allowed to handle the CALL relocations
5809          differently by creating a lazy evaluation stub.  */
5810       value = g;
5811       value = mips_elf_high (value);
5812       value &= howto->dst_mask;
5813       break;
5814
5815     case R_MIPS_GOT_LO16:
5816     case R_MIPS_CALL_LO16:
5817     case R_MICROMIPS_GOT_LO16:
5818     case R_MICROMIPS_CALL_LO16:
5819       value = g & howto->dst_mask;
5820       break;
5821
5822     case R_MIPS_GOT_PAGE:
5823     case R_MICROMIPS_GOT_PAGE:
5824       value = mips_elf_got_page (abfd, input_bfd, info, symbol + addend, NULL);
5825       if (value == MINUS_ONE)
5826         return bfd_reloc_outofrange;
5827       value = mips_elf_got_offset_from_index (info, abfd, input_bfd, value);
5828       overflowed_p = mips_elf_overflow_p (value, 16);
5829       break;
5830
5831     case R_MIPS_GOT_OFST:
5832     case R_MICROMIPS_GOT_OFST:
5833       if (local_p)
5834         mips_elf_got_page (abfd, input_bfd, info, symbol + addend, &value);
5835       else
5836         value = addend;
5837       overflowed_p = mips_elf_overflow_p (value, 16);
5838       break;
5839
5840     case R_MIPS_SUB:
5841     case R_MICROMIPS_SUB:
5842       value = symbol - addend;
5843       value &= howto->dst_mask;
5844       break;
5845
5846     case R_MIPS_HIGHER:
5847     case R_MICROMIPS_HIGHER:
5848       value = mips_elf_higher (addend + symbol);
5849       value &= howto->dst_mask;
5850       break;
5851
5852     case R_MIPS_HIGHEST:
5853     case R_MICROMIPS_HIGHEST:
5854       value = mips_elf_highest (addend + symbol);
5855       value &= howto->dst_mask;
5856       break;
5857
5858     case R_MIPS_SCN_DISP:
5859     case R_MICROMIPS_SCN_DISP:
5860       value = symbol + addend - sec->output_offset;
5861       value &= howto->dst_mask;
5862       break;
5863
5864     case R_MIPS_JALR:
5865     case R_MICROMIPS_JALR:
5866       /* This relocation is only a hint.  In some cases, we optimize
5867          it into a bal instruction.  But we don't try to optimize
5868          when the symbol does not resolve locally.  */
5869       if (h != NULL && !SYMBOL_CALLS_LOCAL (info, &h->root))
5870         return bfd_reloc_continue;
5871       value = symbol + addend;
5872       break;
5873
5874     case R_MIPS_PJUMP:
5875     case R_MIPS_GNU_VTINHERIT:
5876     case R_MIPS_GNU_VTENTRY:
5877       /* We don't do anything with these at present.  */
5878       return bfd_reloc_continue;
5879
5880     default:
5881       /* An unrecognized relocation type.  */
5882       return bfd_reloc_notsupported;
5883     }
5884
5885   /* Store the VALUE for our caller.  */
5886   *valuep = value;
5887   return overflowed_p ? bfd_reloc_overflow : bfd_reloc_ok;
5888 }
5889
5890 /* Obtain the field relocated by RELOCATION.  */
5891
5892 static bfd_vma
5893 mips_elf_obtain_contents (reloc_howto_type *howto,
5894                           const Elf_Internal_Rela *relocation,
5895                           bfd *input_bfd, bfd_byte *contents)
5896 {
5897   bfd_vma x;
5898   bfd_byte *location = contents + relocation->r_offset;
5899
5900   /* Obtain the bytes.  */
5901   x = bfd_get ((8 * bfd_get_reloc_size (howto)), input_bfd, location);
5902
5903   return x;
5904 }
5905
5906 /* It has been determined that the result of the RELOCATION is the
5907    VALUE.  Use HOWTO to place VALUE into the output file at the
5908    appropriate position.  The SECTION is the section to which the
5909    relocation applies.
5910    CROSS_MODE_JUMP_P is true if the relocation field
5911    is a MIPS16 or microMIPS jump to standard MIPS code, or vice versa.
5912
5913    Returns FALSE if anything goes wrong.  */
5914
5915 static bfd_boolean
5916 mips_elf_perform_relocation (struct bfd_link_info *info,
5917                              reloc_howto_type *howto,
5918                              const Elf_Internal_Rela *relocation,
5919                              bfd_vma value, bfd *input_bfd,
5920                              asection *input_section, bfd_byte *contents,
5921                              bfd_boolean cross_mode_jump_p)
5922 {
5923   bfd_vma x;
5924   bfd_byte *location;
5925   int r_type = ELF_R_TYPE (input_bfd, relocation->r_info);
5926
5927   /* Figure out where the relocation is occurring.  */
5928   location = contents + relocation->r_offset;
5929
5930   _bfd_mips_elf_reloc_unshuffle (input_bfd, r_type, FALSE, location);
5931
5932   /* Obtain the current value.  */
5933   x = mips_elf_obtain_contents (howto, relocation, input_bfd, contents);
5934
5935   /* Clear the field we are setting.  */
5936   x &= ~howto->dst_mask;
5937
5938   /* Set the field.  */
5939   x |= (value & howto->dst_mask);
5940
5941   /* If required, turn JAL into JALX.  */
5942   if (cross_mode_jump_p && jal_reloc_p (r_type))
5943     {
5944       bfd_boolean ok;
5945       bfd_vma opcode = x >> 26;
5946       bfd_vma jalx_opcode;
5947
5948       /* Check to see if the opcode is already JAL or JALX.  */
5949       if (r_type == R_MIPS16_26)
5950         {
5951           ok = ((opcode == 0x6) || (opcode == 0x7));
5952           jalx_opcode = 0x7;
5953         }
5954       else if (r_type == R_MICROMIPS_26_S1)
5955         {
5956           ok = ((opcode == 0x3d) || (opcode == 0x3c));
5957           jalx_opcode = 0x3c;
5958         }
5959       else
5960         {
5961           ok = ((opcode == 0x3) || (opcode == 0x1d));
5962           jalx_opcode = 0x1d;
5963         }
5964
5965       /* If the opcode is not JAL or JALX, there's a problem.  We cannot
5966          convert J or JALS to JALX.  */
5967       if (!ok)
5968         {
5969           (*_bfd_error_handler)
5970             (_("%B: %A+0x%lx: Unsupported jump between ISA modes; consider recompiling with interlinking enabled."),
5971              input_bfd,
5972              input_section,
5973              (unsigned long) relocation->r_offset);
5974           bfd_set_error (bfd_error_bad_value);
5975           return FALSE;
5976         }
5977
5978       /* Make this the JALX opcode.  */
5979       x = (x & ~(0x3f << 26)) | (jalx_opcode << 26);
5980     }
5981
5982   /* Try converting JAL to BAL and J(AL)R to B(AL), if the target is in
5983      range.  */
5984   if (!info->relocatable
5985       && !cross_mode_jump_p
5986       && ((JAL_TO_BAL_P (input_bfd)
5987            && r_type == R_MIPS_26
5988            && (x >> 26) == 0x3)         /* jal addr */
5989           || (JALR_TO_BAL_P (input_bfd)
5990               && r_type == R_MIPS_JALR
5991               && x == 0x0320f809)       /* jalr t9 */
5992           || (JR_TO_B_P (input_bfd)
5993               && r_type == R_MIPS_JALR
5994               && x == 0x03200008)))     /* jr t9 */
5995     {
5996       bfd_vma addr;
5997       bfd_vma dest;
5998       bfd_signed_vma off;
5999
6000       addr = (input_section->output_section->vma
6001               + input_section->output_offset
6002               + relocation->r_offset
6003               + 4);
6004       if (r_type == R_MIPS_26)
6005         dest = (value << 2) | ((addr >> 28) << 28);
6006       else
6007         dest = value;
6008       off = dest - addr;
6009       if (off <= 0x1ffff && off >= -0x20000)
6010         {
6011           if (x == 0x03200008)  /* jr t9 */
6012             x = 0x10000000 | (((bfd_vma) off >> 2) & 0xffff);   /* b addr */
6013           else
6014             x = 0x04110000 | (((bfd_vma) off >> 2) & 0xffff);   /* bal addr */
6015         }
6016     }
6017
6018   /* Put the value into the output.  */
6019   bfd_put (8 * bfd_get_reloc_size (howto), input_bfd, x, location);
6020
6021   _bfd_mips_elf_reloc_shuffle (input_bfd, r_type, !info->relocatable,
6022                                location);
6023
6024   return TRUE;
6025 }
6026 \f
6027 /* Create a rel.dyn relocation for the dynamic linker to resolve.  REL
6028    is the original relocation, which is now being transformed into a
6029    dynamic relocation.  The ADDENDP is adjusted if necessary; the
6030    caller should store the result in place of the original addend.  */
6031
6032 static bfd_boolean
6033 mips_elf_create_dynamic_relocation (bfd *output_bfd,
6034                                     struct bfd_link_info *info,
6035                                     const Elf_Internal_Rela *rel,
6036                                     struct mips_elf_link_hash_entry *h,
6037                                     asection *sec, bfd_vma symbol,
6038                                     bfd_vma *addendp, asection *input_section)
6039 {
6040   Elf_Internal_Rela outrel[3];
6041   asection *sreloc;
6042   bfd *dynobj;
6043   int r_type;
6044   long indx;
6045   bfd_boolean defined_p;
6046   struct mips_elf_link_hash_table *htab;
6047
6048   htab = mips_elf_hash_table (info);
6049   BFD_ASSERT (htab != NULL);
6050
6051   r_type = ELF_R_TYPE (output_bfd, rel->r_info);
6052   dynobj = elf_hash_table (info)->dynobj;
6053   sreloc = mips_elf_rel_dyn_section (info, FALSE);
6054   BFD_ASSERT (sreloc != NULL);
6055   BFD_ASSERT (sreloc->contents != NULL);
6056   BFD_ASSERT (sreloc->reloc_count * MIPS_ELF_REL_SIZE (output_bfd)
6057               < sreloc->size);
6058
6059   outrel[0].r_offset =
6060     _bfd_elf_section_offset (output_bfd, info, input_section, rel[0].r_offset);
6061   if (ABI_64_P (output_bfd))
6062     {
6063       outrel[1].r_offset =
6064         _bfd_elf_section_offset (output_bfd, info, input_section, rel[1].r_offset);
6065       outrel[2].r_offset =
6066         _bfd_elf_section_offset (output_bfd, info, input_section, rel[2].r_offset);
6067     }
6068
6069   if (outrel[0].r_offset == MINUS_ONE)
6070     /* The relocation field has been deleted.  */
6071     return TRUE;
6072
6073   if (outrel[0].r_offset == MINUS_TWO)
6074     {
6075       /* The relocation field has been converted into a relative value of
6076          some sort.  Functions like _bfd_elf_write_section_eh_frame expect
6077          the field to be fully relocated, so add in the symbol's value.  */
6078       *addendp += symbol;
6079       return TRUE;
6080     }
6081
6082   /* We must now calculate the dynamic symbol table index to use
6083      in the relocation.  */
6084   if (h != NULL && ! SYMBOL_REFERENCES_LOCAL (info, &h->root))
6085     {
6086       BFD_ASSERT (htab->is_vxworks || h->global_got_area != GGA_NONE);
6087       indx = h->root.dynindx;
6088       if (SGI_COMPAT (output_bfd))
6089         defined_p = h->root.def_regular;
6090       else
6091         /* ??? glibc's ld.so just adds the final GOT entry to the
6092            relocation field.  It therefore treats relocs against
6093            defined symbols in the same way as relocs against
6094            undefined symbols.  */
6095         defined_p = FALSE;
6096     }
6097   else
6098     {
6099       if (sec != NULL && bfd_is_abs_section (sec))
6100         indx = 0;
6101       else if (sec == NULL || sec->owner == NULL)
6102         {
6103           bfd_set_error (bfd_error_bad_value);
6104           return FALSE;
6105         }
6106       else
6107         {
6108           indx = elf_section_data (sec->output_section)->dynindx;
6109           if (indx == 0)
6110             {
6111               asection *osec = htab->root.text_index_section;
6112               indx = elf_section_data (osec)->dynindx;
6113             }
6114           if (indx == 0)
6115             abort ();
6116         }
6117
6118       /* Instead of generating a relocation using the section
6119          symbol, we may as well make it a fully relative
6120          relocation.  We want to avoid generating relocations to
6121          local symbols because we used to generate them
6122          incorrectly, without adding the original symbol value,
6123          which is mandated by the ABI for section symbols.  In
6124          order to give dynamic loaders and applications time to
6125          phase out the incorrect use, we refrain from emitting
6126          section-relative relocations.  It's not like they're
6127          useful, after all.  This should be a bit more efficient
6128          as well.  */
6129       /* ??? Although this behavior is compatible with glibc's ld.so,
6130          the ABI says that relocations against STN_UNDEF should have
6131          a symbol value of 0.  Irix rld honors this, so relocations
6132          against STN_UNDEF have no effect.  */
6133       if (!SGI_COMPAT (output_bfd))
6134         indx = 0;
6135       defined_p = TRUE;
6136     }
6137
6138   /* If the relocation was previously an absolute relocation and
6139      this symbol will not be referred to by the relocation, we must
6140      adjust it by the value we give it in the dynamic symbol table.
6141      Otherwise leave the job up to the dynamic linker.  */
6142   if (defined_p && r_type != R_MIPS_REL32)
6143     *addendp += symbol;
6144
6145   if (htab->is_vxworks)
6146     /* VxWorks uses non-relative relocations for this.  */
6147     outrel[0].r_info = ELF32_R_INFO (indx, R_MIPS_32);
6148   else
6149     /* The relocation is always an REL32 relocation because we don't
6150        know where the shared library will wind up at load-time.  */
6151     outrel[0].r_info = ELF_R_INFO (output_bfd, (unsigned long) indx,
6152                                    R_MIPS_REL32);
6153
6154   /* For strict adherence to the ABI specification, we should
6155      generate a R_MIPS_64 relocation record by itself before the
6156      _REL32/_64 record as well, such that the addend is read in as
6157      a 64-bit value (REL32 is a 32-bit relocation, after all).
6158      However, since none of the existing ELF64 MIPS dynamic
6159      loaders seems to care, we don't waste space with these
6160      artificial relocations.  If this turns out to not be true,
6161      mips_elf_allocate_dynamic_relocation() should be tweaked so
6162      as to make room for a pair of dynamic relocations per
6163      invocation if ABI_64_P, and here we should generate an
6164      additional relocation record with R_MIPS_64 by itself for a
6165      NULL symbol before this relocation record.  */
6166   outrel[1].r_info = ELF_R_INFO (output_bfd, 0,
6167                                  ABI_64_P (output_bfd)
6168                                  ? R_MIPS_64
6169                                  : R_MIPS_NONE);
6170   outrel[2].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_NONE);
6171
6172   /* Adjust the output offset of the relocation to reference the
6173      correct location in the output file.  */
6174   outrel[0].r_offset += (input_section->output_section->vma
6175                          + input_section->output_offset);
6176   outrel[1].r_offset += (input_section->output_section->vma
6177                          + input_section->output_offset);
6178   outrel[2].r_offset += (input_section->output_section->vma
6179                          + input_section->output_offset);
6180
6181   /* Put the relocation back out.  We have to use the special
6182      relocation outputter in the 64-bit case since the 64-bit
6183      relocation format is non-standard.  */
6184   if (ABI_64_P (output_bfd))
6185     {
6186       (*get_elf_backend_data (output_bfd)->s->swap_reloc_out)
6187         (output_bfd, &outrel[0],
6188          (sreloc->contents
6189           + sreloc->reloc_count * sizeof (Elf64_Mips_External_Rel)));
6190     }
6191   else if (htab->is_vxworks)
6192     {
6193       /* VxWorks uses RELA rather than REL dynamic relocations.  */
6194       outrel[0].r_addend = *addendp;
6195       bfd_elf32_swap_reloca_out
6196         (output_bfd, &outrel[0],
6197          (sreloc->contents
6198           + sreloc->reloc_count * sizeof (Elf32_External_Rela)));
6199     }
6200   else
6201     bfd_elf32_swap_reloc_out
6202       (output_bfd, &outrel[0],
6203        (sreloc->contents + sreloc->reloc_count * sizeof (Elf32_External_Rel)));
6204
6205   /* We've now added another relocation.  */
6206   ++sreloc->reloc_count;
6207
6208   /* Make sure the output section is writable.  The dynamic linker
6209      will be writing to it.  */
6210   elf_section_data (input_section->output_section)->this_hdr.sh_flags
6211     |= SHF_WRITE;
6212
6213   /* On IRIX5, make an entry of compact relocation info.  */
6214   if (IRIX_COMPAT (output_bfd) == ict_irix5)
6215     {
6216       asection *scpt = bfd_get_linker_section (dynobj, ".compact_rel");
6217       bfd_byte *cr;
6218
6219       if (scpt)
6220         {
6221           Elf32_crinfo cptrel;
6222
6223           mips_elf_set_cr_format (cptrel, CRF_MIPS_LONG);
6224           cptrel.vaddr = (rel->r_offset
6225                           + input_section->output_section->vma
6226                           + input_section->output_offset);
6227           if (r_type == R_MIPS_REL32)
6228             mips_elf_set_cr_type (cptrel, CRT_MIPS_REL32);
6229           else
6230             mips_elf_set_cr_type (cptrel, CRT_MIPS_WORD);
6231           mips_elf_set_cr_dist2to (cptrel, 0);
6232           cptrel.konst = *addendp;
6233
6234           cr = (scpt->contents
6235                 + sizeof (Elf32_External_compact_rel));
6236           mips_elf_set_cr_relvaddr (cptrel, 0);
6237           bfd_elf32_swap_crinfo_out (output_bfd, &cptrel,
6238                                      ((Elf32_External_crinfo *) cr
6239                                       + scpt->reloc_count));
6240           ++scpt->reloc_count;
6241         }
6242     }
6243
6244   /* If we've written this relocation for a readonly section,
6245      we need to set DF_TEXTREL again, so that we do not delete the
6246      DT_TEXTREL tag.  */
6247   if (MIPS_ELF_READONLY_SECTION (input_section))
6248     info->flags |= DF_TEXTREL;
6249
6250   return TRUE;
6251 }
6252 \f
6253 /* Return the MACH for a MIPS e_flags value.  */
6254
6255 unsigned long
6256 _bfd_elf_mips_mach (flagword flags)
6257 {
6258   switch (flags & EF_MIPS_MACH)
6259     {
6260     case E_MIPS_MACH_3900:
6261       return bfd_mach_mips3900;
6262
6263     case E_MIPS_MACH_4010:
6264       return bfd_mach_mips4010;
6265
6266     case E_MIPS_MACH_4100:
6267       return bfd_mach_mips4100;
6268
6269     case E_MIPS_MACH_4111:
6270       return bfd_mach_mips4111;
6271
6272     case E_MIPS_MACH_4120:
6273       return bfd_mach_mips4120;
6274
6275     case E_MIPS_MACH_4650:
6276       return bfd_mach_mips4650;
6277
6278     case E_MIPS_MACH_5400:
6279       return bfd_mach_mips5400;
6280
6281     case E_MIPS_MACH_5500:
6282       return bfd_mach_mips5500;
6283
6284     case E_MIPS_MACH_5900:
6285       return bfd_mach_mips5900;
6286
6287     case E_MIPS_MACH_9000:
6288       return bfd_mach_mips9000;
6289
6290     case E_MIPS_MACH_SB1:
6291       return bfd_mach_mips_sb1;
6292
6293     case E_MIPS_MACH_LS2E:
6294       return bfd_mach_mips_loongson_2e;
6295
6296     case E_MIPS_MACH_LS2F:
6297       return bfd_mach_mips_loongson_2f;
6298
6299     case E_MIPS_MACH_LS3A:
6300       return bfd_mach_mips_loongson_3a;
6301
6302     case E_MIPS_MACH_OCTEON2:
6303       return bfd_mach_mips_octeon2;
6304
6305     case E_MIPS_MACH_OCTEON:
6306       return bfd_mach_mips_octeon;
6307
6308     case E_MIPS_MACH_XLR:
6309       return bfd_mach_mips_xlr;
6310
6311     default:
6312       switch (flags & EF_MIPS_ARCH)
6313         {
6314         default:
6315         case E_MIPS_ARCH_1:
6316           return bfd_mach_mips3000;
6317
6318         case E_MIPS_ARCH_2:
6319           return bfd_mach_mips6000;
6320
6321         case E_MIPS_ARCH_3:
6322           return bfd_mach_mips4000;
6323
6324         case E_MIPS_ARCH_4:
6325           return bfd_mach_mips8000;
6326
6327         case E_MIPS_ARCH_5:
6328           return bfd_mach_mips5;
6329
6330         case E_MIPS_ARCH_32:
6331           return bfd_mach_mipsisa32;
6332
6333         case E_MIPS_ARCH_64:
6334           return bfd_mach_mipsisa64;
6335
6336         case E_MIPS_ARCH_32R2:
6337           return bfd_mach_mipsisa32r2;
6338
6339         case E_MIPS_ARCH_64R2:
6340           return bfd_mach_mipsisa64r2;
6341         }
6342     }
6343
6344   return 0;
6345 }
6346
6347 /* Return printable name for ABI.  */
6348
6349 static INLINE char *
6350 elf_mips_abi_name (bfd *abfd)
6351 {
6352   flagword flags;
6353
6354   flags = elf_elfheader (abfd)->e_flags;
6355   switch (flags & EF_MIPS_ABI)
6356     {
6357     case 0:
6358       if (ABI_N32_P (abfd))
6359         return "N32";
6360       else if (ABI_64_P (abfd))
6361         return "64";
6362       else
6363         return "none";
6364     case E_MIPS_ABI_O32:
6365       return "O32";
6366     case E_MIPS_ABI_O64:
6367       return "O64";
6368     case E_MIPS_ABI_EABI32:
6369       return "EABI32";
6370     case E_MIPS_ABI_EABI64:
6371       return "EABI64";
6372     default:
6373       return "unknown abi";
6374     }
6375 }
6376 \f
6377 /* MIPS ELF uses two common sections.  One is the usual one, and the
6378    other is for small objects.  All the small objects are kept
6379    together, and then referenced via the gp pointer, which yields
6380    faster assembler code.  This is what we use for the small common
6381    section.  This approach is copied from ecoff.c.  */
6382 static asection mips_elf_scom_section;
6383 static asymbol mips_elf_scom_symbol;
6384 static asymbol *mips_elf_scom_symbol_ptr;
6385
6386 /* MIPS ELF also uses an acommon section, which represents an
6387    allocated common symbol which may be overridden by a
6388    definition in a shared library.  */
6389 static asection mips_elf_acom_section;
6390 static asymbol mips_elf_acom_symbol;
6391 static asymbol *mips_elf_acom_symbol_ptr;
6392
6393 /* This is used for both the 32-bit and the 64-bit ABI.  */
6394
6395 void
6396 _bfd_mips_elf_symbol_processing (bfd *abfd, asymbol *asym)
6397 {
6398   elf_symbol_type *elfsym;
6399
6400   /* Handle the special MIPS section numbers that a symbol may use.  */
6401   elfsym = (elf_symbol_type *) asym;
6402   switch (elfsym->internal_elf_sym.st_shndx)
6403     {
6404     case SHN_MIPS_ACOMMON:
6405       /* This section is used in a dynamically linked executable file.
6406          It is an allocated common section.  The dynamic linker can
6407          either resolve these symbols to something in a shared
6408          library, or it can just leave them here.  For our purposes,
6409          we can consider these symbols to be in a new section.  */
6410       if (mips_elf_acom_section.name == NULL)
6411         {
6412           /* Initialize the acommon section.  */
6413           mips_elf_acom_section.name = ".acommon";
6414           mips_elf_acom_section.flags = SEC_ALLOC;
6415           mips_elf_acom_section.output_section = &mips_elf_acom_section;
6416           mips_elf_acom_section.symbol = &mips_elf_acom_symbol;
6417           mips_elf_acom_section.symbol_ptr_ptr = &mips_elf_acom_symbol_ptr;
6418           mips_elf_acom_symbol.name = ".acommon";
6419           mips_elf_acom_symbol.flags = BSF_SECTION_SYM;
6420           mips_elf_acom_symbol.section = &mips_elf_acom_section;
6421           mips_elf_acom_symbol_ptr = &mips_elf_acom_symbol;
6422         }
6423       asym->section = &mips_elf_acom_section;
6424       break;
6425
6426     case SHN_COMMON:
6427       /* Common symbols less than the GP size are automatically
6428          treated as SHN_MIPS_SCOMMON symbols on IRIX5.  */
6429       if (asym->value > elf_gp_size (abfd)
6430           || ELF_ST_TYPE (elfsym->internal_elf_sym.st_info) == STT_TLS
6431           || IRIX_COMPAT (abfd) == ict_irix6)
6432         break;
6433       /* Fall through.  */
6434     case SHN_MIPS_SCOMMON:
6435       if (mips_elf_scom_section.name == NULL)
6436         {
6437           /* Initialize the small common section.  */
6438           mips_elf_scom_section.name = ".scommon";
6439           mips_elf_scom_section.flags = SEC_IS_COMMON;
6440           mips_elf_scom_section.output_section = &mips_elf_scom_section;
6441           mips_elf_scom_section.symbol = &mips_elf_scom_symbol;
6442           mips_elf_scom_section.symbol_ptr_ptr = &mips_elf_scom_symbol_ptr;
6443           mips_elf_scom_symbol.name = ".scommon";
6444           mips_elf_scom_symbol.flags = BSF_SECTION_SYM;
6445           mips_elf_scom_symbol.section = &mips_elf_scom_section;
6446           mips_elf_scom_symbol_ptr = &mips_elf_scom_symbol;
6447         }
6448       asym->section = &mips_elf_scom_section;
6449       asym->value = elfsym->internal_elf_sym.st_size;
6450       break;
6451
6452     case SHN_MIPS_SUNDEFINED:
6453       asym->section = bfd_und_section_ptr;
6454       break;
6455
6456     case SHN_MIPS_TEXT:
6457       {
6458         asection *section = bfd_get_section_by_name (abfd, ".text");
6459
6460         if (section != NULL)
6461           {
6462             asym->section = section;
6463             /* MIPS_TEXT is a bit special, the address is not an offset
6464                to the base of the .text section.  So substract the section
6465                base address to make it an offset.  */
6466             asym->value -= section->vma;
6467           }
6468       }
6469       break;
6470
6471     case SHN_MIPS_DATA:
6472       {
6473         asection *section = bfd_get_section_by_name (abfd, ".data");
6474
6475         if (section != NULL)
6476           {
6477             asym->section = section;
6478             /* MIPS_DATA is a bit special, the address is not an offset
6479                to the base of the .data section.  So substract the section
6480                base address to make it an offset.  */
6481             asym->value -= section->vma;
6482           }
6483       }
6484       break;
6485     }
6486
6487   /* If this is an odd-valued function symbol, assume it's a MIPS16
6488      or microMIPS one.  */
6489   if (ELF_ST_TYPE (elfsym->internal_elf_sym.st_info) == STT_FUNC
6490       && (asym->value & 1) != 0)
6491     {
6492       asym->value--;
6493       if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MICROMIPS)
6494         elfsym->internal_elf_sym.st_other
6495           = ELF_ST_SET_MICROMIPS (elfsym->internal_elf_sym.st_other);
6496       else
6497         elfsym->internal_elf_sym.st_other
6498           = ELF_ST_SET_MIPS16 (elfsym->internal_elf_sym.st_other);
6499     }
6500 }
6501 \f
6502 /* Implement elf_backend_eh_frame_address_size.  This differs from
6503    the default in the way it handles EABI64.
6504
6505    EABI64 was originally specified as an LP64 ABI, and that is what
6506    -mabi=eabi normally gives on a 64-bit target.  However, gcc has
6507    historically accepted the combination of -mabi=eabi and -mlong32,
6508    and this ILP32 variation has become semi-official over time.
6509    Both forms use elf32 and have pointer-sized FDE addresses.
6510
6511    If an EABI object was generated by GCC 4.0 or above, it will have
6512    an empty .gcc_compiled_longXX section, where XX is the size of longs
6513    in bits.  Unfortunately, ILP32 objects generated by earlier compilers
6514    have no special marking to distinguish them from LP64 objects.
6515
6516    We don't want users of the official LP64 ABI to be punished for the
6517    existence of the ILP32 variant, but at the same time, we don't want
6518    to mistakenly interpret pre-4.0 ILP32 objects as being LP64 objects.
6519    We therefore take the following approach:
6520
6521       - If ABFD contains a .gcc_compiled_longXX section, use it to
6522         determine the pointer size.
6523
6524       - Otherwise check the type of the first relocation.  Assume that
6525         the LP64 ABI is being used if the relocation is of type R_MIPS_64.
6526
6527       - Otherwise punt.
6528
6529    The second check is enough to detect LP64 objects generated by pre-4.0
6530    compilers because, in the kind of output generated by those compilers,
6531    the first relocation will be associated with either a CIE personality
6532    routine or an FDE start address.  Furthermore, the compilers never
6533    used a special (non-pointer) encoding for this ABI.
6534
6535    Checking the relocation type should also be safe because there is no
6536    reason to use R_MIPS_64 in an ILP32 object.  Pre-4.0 compilers never
6537    did so.  */
6538
6539 unsigned int
6540 _bfd_mips_elf_eh_frame_address_size (bfd *abfd, asection *sec)
6541 {
6542   if (elf_elfheader (abfd)->e_ident[EI_CLASS] == ELFCLASS64)
6543     return 8;
6544   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI64)
6545     {
6546       bfd_boolean long32_p, long64_p;
6547
6548       long32_p = bfd_get_section_by_name (abfd, ".gcc_compiled_long32") != 0;
6549       long64_p = bfd_get_section_by_name (abfd, ".gcc_compiled_long64") != 0;
6550       if (long32_p && long64_p)
6551         return 0;
6552       if (long32_p)
6553         return 4;
6554       if (long64_p)
6555         return 8;
6556
6557       if (sec->reloc_count > 0
6558           && elf_section_data (sec)->relocs != NULL
6559           && (ELF32_R_TYPE (elf_section_data (sec)->relocs[0].r_info)
6560               == R_MIPS_64))
6561         return 8;
6562
6563       return 0;
6564     }
6565   return 4;
6566 }
6567 \f
6568 /* There appears to be a bug in the MIPSpro linker that causes GOT_DISP
6569    relocations against two unnamed section symbols to resolve to the
6570    same address.  For example, if we have code like:
6571
6572         lw      $4,%got_disp(.data)($gp)
6573         lw      $25,%got_disp(.text)($gp)
6574         jalr    $25
6575
6576    then the linker will resolve both relocations to .data and the program
6577    will jump there rather than to .text.
6578
6579    We can work around this problem by giving names to local section symbols.
6580    This is also what the MIPSpro tools do.  */
6581
6582 bfd_boolean
6583 _bfd_mips_elf_name_local_section_symbols (bfd *abfd)
6584 {
6585   return SGI_COMPAT (abfd);
6586 }
6587 \f
6588 /* Work over a section just before writing it out.  This routine is
6589    used by both the 32-bit and the 64-bit ABI.  FIXME: We recognize
6590    sections that need the SHF_MIPS_GPREL flag by name; there has to be
6591    a better way.  */
6592
6593 bfd_boolean
6594 _bfd_mips_elf_section_processing (bfd *abfd, Elf_Internal_Shdr *hdr)
6595 {
6596   if (hdr->sh_type == SHT_MIPS_REGINFO
6597       && hdr->sh_size > 0)
6598     {
6599       bfd_byte buf[4];
6600
6601       BFD_ASSERT (hdr->sh_size == sizeof (Elf32_External_RegInfo));
6602       BFD_ASSERT (hdr->contents == NULL);
6603
6604       if (bfd_seek (abfd,
6605                     hdr->sh_offset + sizeof (Elf32_External_RegInfo) - 4,
6606                     SEEK_SET) != 0)
6607         return FALSE;
6608       H_PUT_32 (abfd, elf_gp (abfd), buf);
6609       if (bfd_bwrite (buf, 4, abfd) != 4)
6610         return FALSE;
6611     }
6612
6613   if (hdr->sh_type == SHT_MIPS_OPTIONS
6614       && hdr->bfd_section != NULL
6615       && mips_elf_section_data (hdr->bfd_section) != NULL
6616       && mips_elf_section_data (hdr->bfd_section)->u.tdata != NULL)
6617     {
6618       bfd_byte *contents, *l, *lend;
6619
6620       /* We stored the section contents in the tdata field in the
6621          set_section_contents routine.  We save the section contents
6622          so that we don't have to read them again.
6623          At this point we know that elf_gp is set, so we can look
6624          through the section contents to see if there is an
6625          ODK_REGINFO structure.  */
6626
6627       contents = mips_elf_section_data (hdr->bfd_section)->u.tdata;
6628       l = contents;
6629       lend = contents + hdr->sh_size;
6630       while (l + sizeof (Elf_External_Options) <= lend)
6631         {
6632           Elf_Internal_Options intopt;
6633
6634           bfd_mips_elf_swap_options_in (abfd, (Elf_External_Options *) l,
6635                                         &intopt);
6636           if (intopt.size < sizeof (Elf_External_Options))
6637             {
6638               (*_bfd_error_handler)
6639                 (_("%B: Warning: bad `%s' option size %u smaller than its header"),
6640                 abfd, MIPS_ELF_OPTIONS_SECTION_NAME (abfd), intopt.size);
6641               break;
6642             }
6643           if (ABI_64_P (abfd) && intopt.kind == ODK_REGINFO)
6644             {
6645               bfd_byte buf[8];
6646
6647               if (bfd_seek (abfd,
6648                             (hdr->sh_offset
6649                              + (l - contents)
6650                              + sizeof (Elf_External_Options)
6651                              + (sizeof (Elf64_External_RegInfo) - 8)),
6652                              SEEK_SET) != 0)
6653                 return FALSE;
6654               H_PUT_64 (abfd, elf_gp (abfd), buf);
6655               if (bfd_bwrite (buf, 8, abfd) != 8)
6656                 return FALSE;
6657             }
6658           else if (intopt.kind == ODK_REGINFO)
6659             {
6660               bfd_byte buf[4];
6661
6662               if (bfd_seek (abfd,
6663                             (hdr->sh_offset
6664                              + (l - contents)
6665                              + sizeof (Elf_External_Options)
6666                              + (sizeof (Elf32_External_RegInfo) - 4)),
6667                             SEEK_SET) != 0)
6668                 return FALSE;
6669               H_PUT_32 (abfd, elf_gp (abfd), buf);
6670               if (bfd_bwrite (buf, 4, abfd) != 4)
6671                 return FALSE;
6672             }
6673           l += intopt.size;
6674         }
6675     }
6676
6677   if (hdr->bfd_section != NULL)
6678     {
6679       const char *name = bfd_get_section_name (abfd, hdr->bfd_section);
6680
6681       /* .sbss is not handled specially here because the GNU/Linux
6682          prelinker can convert .sbss from NOBITS to PROGBITS and
6683          changing it back to NOBITS breaks the binary.  The entry in
6684          _bfd_mips_elf_special_sections will ensure the correct flags
6685          are set on .sbss if BFD creates it without reading it from an
6686          input file, and without special handling here the flags set
6687          on it in an input file will be followed.  */
6688       if (strcmp (name, ".sdata") == 0
6689           || strcmp (name, ".lit8") == 0
6690           || strcmp (name, ".lit4") == 0)
6691         {
6692           hdr->sh_flags |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL;
6693           hdr->sh_type = SHT_PROGBITS;
6694         }
6695       else if (strcmp (name, ".srdata") == 0)
6696         {
6697           hdr->sh_flags |= SHF_ALLOC | SHF_MIPS_GPREL;
6698           hdr->sh_type = SHT_PROGBITS;
6699         }
6700       else if (strcmp (name, ".compact_rel") == 0)
6701         {
6702           hdr->sh_flags = 0;
6703           hdr->sh_type = SHT_PROGBITS;
6704         }
6705       else if (strcmp (name, ".rtproc") == 0)
6706         {
6707           if (hdr->sh_addralign != 0 && hdr->sh_entsize == 0)
6708             {
6709               unsigned int adjust;
6710
6711               adjust = hdr->sh_size % hdr->sh_addralign;
6712               if (adjust != 0)
6713                 hdr->sh_size += hdr->sh_addralign - adjust;
6714             }
6715         }
6716     }
6717
6718   return TRUE;
6719 }
6720
6721 /* Handle a MIPS specific section when reading an object file.  This
6722    is called when elfcode.h finds a section with an unknown type.
6723    This routine supports both the 32-bit and 64-bit ELF ABI.
6724
6725    FIXME: We need to handle the SHF_MIPS_GPREL flag, but I'm not sure
6726    how to.  */
6727
6728 bfd_boolean
6729 _bfd_mips_elf_section_from_shdr (bfd *abfd,
6730                                  Elf_Internal_Shdr *hdr,
6731                                  const char *name,
6732                                  int shindex)
6733 {
6734   flagword flags = 0;
6735
6736   /* There ought to be a place to keep ELF backend specific flags, but
6737      at the moment there isn't one.  We just keep track of the
6738      sections by their name, instead.  Fortunately, the ABI gives
6739      suggested names for all the MIPS specific sections, so we will
6740      probably get away with this.  */
6741   switch (hdr->sh_type)
6742     {
6743     case SHT_MIPS_LIBLIST:
6744       if (strcmp (name, ".liblist") != 0)
6745         return FALSE;
6746       break;
6747     case SHT_MIPS_MSYM:
6748       if (strcmp (name, ".msym") != 0)
6749         return FALSE;
6750       break;
6751     case SHT_MIPS_CONFLICT:
6752       if (strcmp (name, ".conflict") != 0)
6753         return FALSE;
6754       break;
6755     case SHT_MIPS_GPTAB:
6756       if (! CONST_STRNEQ (name, ".gptab."))
6757         return FALSE;
6758       break;
6759     case SHT_MIPS_UCODE:
6760       if (strcmp (name, ".ucode") != 0)
6761         return FALSE;
6762       break;
6763     case SHT_MIPS_DEBUG:
6764       if (strcmp (name, ".mdebug") != 0)
6765         return FALSE;
6766       flags = SEC_DEBUGGING;
6767       break;
6768     case SHT_MIPS_REGINFO:
6769       if (strcmp (name, ".reginfo") != 0
6770           || hdr->sh_size != sizeof (Elf32_External_RegInfo))
6771         return FALSE;
6772       flags = (SEC_LINK_ONCE | SEC_LINK_DUPLICATES_SAME_SIZE);
6773       break;
6774     case SHT_MIPS_IFACE:
6775       if (strcmp (name, ".MIPS.interfaces") != 0)
6776         return FALSE;
6777       break;
6778     case SHT_MIPS_CONTENT:
6779       if (! CONST_STRNEQ (name, ".MIPS.content"))
6780         return FALSE;
6781       break;
6782     case SHT_MIPS_OPTIONS:
6783       if (!MIPS_ELF_OPTIONS_SECTION_NAME_P (name))
6784         return FALSE;
6785       break;
6786     case SHT_MIPS_DWARF:
6787       if (! CONST_STRNEQ (name, ".debug_")
6788           && ! CONST_STRNEQ (name, ".zdebug_"))
6789         return FALSE;
6790       break;
6791     case SHT_MIPS_SYMBOL_LIB:
6792       if (strcmp (name, ".MIPS.symlib") != 0)
6793         return FALSE;
6794       break;
6795     case SHT_MIPS_EVENTS:
6796       if (! CONST_STRNEQ (name, ".MIPS.events")
6797           && ! CONST_STRNEQ (name, ".MIPS.post_rel"))
6798         return FALSE;
6799       break;
6800     default:
6801       break;
6802     }
6803
6804   if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
6805     return FALSE;
6806
6807   if (flags)
6808     {
6809       if (! bfd_set_section_flags (abfd, hdr->bfd_section,
6810                                    (bfd_get_section_flags (abfd,
6811                                                            hdr->bfd_section)
6812                                     | flags)))
6813         return FALSE;
6814     }
6815
6816   /* FIXME: We should record sh_info for a .gptab section.  */
6817
6818   /* For a .reginfo section, set the gp value in the tdata information
6819      from the contents of this section.  We need the gp value while
6820      processing relocs, so we just get it now.  The .reginfo section
6821      is not used in the 64-bit MIPS ELF ABI.  */
6822   if (hdr->sh_type == SHT_MIPS_REGINFO)
6823     {
6824       Elf32_External_RegInfo ext;
6825       Elf32_RegInfo s;
6826
6827       if (! bfd_get_section_contents (abfd, hdr->bfd_section,
6828                                       &ext, 0, sizeof ext))
6829         return FALSE;
6830       bfd_mips_elf32_swap_reginfo_in (abfd, &ext, &s);
6831       elf_gp (abfd) = s.ri_gp_value;
6832     }
6833
6834   /* For a SHT_MIPS_OPTIONS section, look for a ODK_REGINFO entry, and
6835      set the gp value based on what we find.  We may see both
6836      SHT_MIPS_REGINFO and SHT_MIPS_OPTIONS/ODK_REGINFO; in that case,
6837      they should agree.  */
6838   if (hdr->sh_type == SHT_MIPS_OPTIONS)
6839     {
6840       bfd_byte *contents, *l, *lend;
6841
6842       contents = bfd_malloc (hdr->sh_size);
6843       if (contents == NULL)
6844         return FALSE;
6845       if (! bfd_get_section_contents (abfd, hdr->bfd_section, contents,
6846                                       0, hdr->sh_size))
6847         {
6848           free (contents);
6849           return FALSE;
6850         }
6851       l = contents;
6852       lend = contents + hdr->sh_size;
6853       while (l + sizeof (Elf_External_Options) <= lend)
6854         {
6855           Elf_Internal_Options intopt;
6856
6857           bfd_mips_elf_swap_options_in (abfd, (Elf_External_Options *) l,
6858                                         &intopt);
6859           if (intopt.size < sizeof (Elf_External_Options))
6860             {
6861               (*_bfd_error_handler)
6862                 (_("%B: Warning: bad `%s' option size %u smaller than its header"),
6863                 abfd, MIPS_ELF_OPTIONS_SECTION_NAME (abfd), intopt.size);
6864               break;
6865             }
6866           if (ABI_64_P (abfd) && intopt.kind == ODK_REGINFO)
6867             {
6868               Elf64_Internal_RegInfo intreg;
6869
6870               bfd_mips_elf64_swap_reginfo_in
6871                 (abfd,
6872                  ((Elf64_External_RegInfo *)
6873                   (l + sizeof (Elf_External_Options))),
6874                  &intreg);
6875               elf_gp (abfd) = intreg.ri_gp_value;
6876             }
6877           else if (intopt.kind == ODK_REGINFO)
6878             {
6879               Elf32_RegInfo intreg;
6880
6881               bfd_mips_elf32_swap_reginfo_in
6882                 (abfd,
6883                  ((Elf32_External_RegInfo *)
6884                   (l + sizeof (Elf_External_Options))),
6885                  &intreg);
6886               elf_gp (abfd) = intreg.ri_gp_value;
6887             }
6888           l += intopt.size;
6889         }
6890       free (contents);
6891     }
6892
6893   return TRUE;
6894 }
6895
6896 /* Set the correct type for a MIPS ELF section.  We do this by the
6897    section name, which is a hack, but ought to work.  This routine is
6898    used by both the 32-bit and the 64-bit ABI.  */
6899
6900 bfd_boolean
6901 _bfd_mips_elf_fake_sections (bfd *abfd, Elf_Internal_Shdr *hdr, asection *sec)
6902 {
6903   const char *name = bfd_get_section_name (abfd, sec);
6904
6905   if (strcmp (name, ".liblist") == 0)
6906     {
6907       hdr->sh_type = SHT_MIPS_LIBLIST;
6908       hdr->sh_info = sec->size / sizeof (Elf32_Lib);
6909       /* The sh_link field is set in final_write_processing.  */
6910     }
6911   else if (strcmp (name, ".conflict") == 0)
6912     hdr->sh_type = SHT_MIPS_CONFLICT;
6913   else if (CONST_STRNEQ (name, ".gptab."))
6914     {
6915       hdr->sh_type = SHT_MIPS_GPTAB;
6916       hdr->sh_entsize = sizeof (Elf32_External_gptab);
6917       /* The sh_info field is set in final_write_processing.  */
6918     }
6919   else if (strcmp (name, ".ucode") == 0)
6920     hdr->sh_type = SHT_MIPS_UCODE;
6921   else if (strcmp (name, ".mdebug") == 0)
6922     {
6923       hdr->sh_type = SHT_MIPS_DEBUG;
6924       /* In a shared object on IRIX 5.3, the .mdebug section has an
6925          entsize of 0.  FIXME: Does this matter?  */
6926       if (SGI_COMPAT (abfd) && (abfd->flags & DYNAMIC) != 0)
6927         hdr->sh_entsize = 0;
6928       else
6929         hdr->sh_entsize = 1;
6930     }
6931   else if (strcmp (name, ".reginfo") == 0)
6932     {
6933       hdr->sh_type = SHT_MIPS_REGINFO;
6934       /* In a shared object on IRIX 5.3, the .reginfo section has an
6935          entsize of 0x18.  FIXME: Does this matter?  */
6936       if (SGI_COMPAT (abfd))
6937         {
6938           if ((abfd->flags & DYNAMIC) != 0)
6939             hdr->sh_entsize = sizeof (Elf32_External_RegInfo);
6940           else
6941             hdr->sh_entsize = 1;
6942         }
6943       else
6944         hdr->sh_entsize = sizeof (Elf32_External_RegInfo);
6945     }
6946   else if (SGI_COMPAT (abfd)
6947            && (strcmp (name, ".hash") == 0
6948                || strcmp (name, ".dynamic") == 0
6949                || strcmp (name, ".dynstr") == 0))
6950     {
6951       if (SGI_COMPAT (abfd))
6952         hdr->sh_entsize = 0;
6953 #if 0
6954       /* This isn't how the IRIX6 linker behaves.  */
6955       hdr->sh_info = SIZEOF_MIPS_DYNSYM_SECNAMES;
6956 #endif
6957     }
6958   else if (strcmp (name, ".got") == 0
6959            || strcmp (name, ".srdata") == 0
6960            || strcmp (name, ".sdata") == 0
6961            || strcmp (name, ".sbss") == 0
6962            || strcmp (name, ".lit4") == 0
6963            || strcmp (name, ".lit8") == 0)
6964     hdr->sh_flags |= SHF_MIPS_GPREL;
6965   else if (strcmp (name, ".MIPS.interfaces") == 0)
6966     {
6967       hdr->sh_type = SHT_MIPS_IFACE;
6968       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
6969     }
6970   else if (CONST_STRNEQ (name, ".MIPS.content"))
6971     {
6972       hdr->sh_type = SHT_MIPS_CONTENT;
6973       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
6974       /* The sh_info field is set in final_write_processing.  */
6975     }
6976   else if (MIPS_ELF_OPTIONS_SECTION_NAME_P (name))
6977     {
6978       hdr->sh_type = SHT_MIPS_OPTIONS;
6979       hdr->sh_entsize = 1;
6980       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
6981     }
6982   else if (CONST_STRNEQ (name, ".debug_")
6983            || CONST_STRNEQ (name, ".zdebug_"))
6984     {
6985       hdr->sh_type = SHT_MIPS_DWARF;
6986
6987       /* Irix facilities such as libexc expect a single .debug_frame
6988          per executable, the system ones have NOSTRIP set and the linker
6989          doesn't merge sections with different flags so ...  */
6990       if (SGI_COMPAT (abfd) && CONST_STRNEQ (name, ".debug_frame"))
6991         hdr->sh_flags |= SHF_MIPS_NOSTRIP;
6992     }
6993   else if (strcmp (name, ".MIPS.symlib") == 0)
6994     {
6995       hdr->sh_type = SHT_MIPS_SYMBOL_LIB;
6996       /* The sh_link and sh_info fields are set in
6997          final_write_processing.  */
6998     }
6999   else if (CONST_STRNEQ (name, ".MIPS.events")
7000            || CONST_STRNEQ (name, ".MIPS.post_rel"))
7001     {
7002       hdr->sh_type = SHT_MIPS_EVENTS;
7003       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7004       /* The sh_link field is set in final_write_processing.  */
7005     }
7006   else if (strcmp (name, ".msym") == 0)
7007     {
7008       hdr->sh_type = SHT_MIPS_MSYM;
7009       hdr->sh_flags |= SHF_ALLOC;
7010       hdr->sh_entsize = 8;
7011     }
7012
7013   /* The generic elf_fake_sections will set up REL_HDR using the default
7014    kind of relocations.  We used to set up a second header for the
7015    non-default kind of relocations here, but only NewABI would use
7016    these, and the IRIX ld doesn't like resulting empty RELA sections.
7017    Thus we create those header only on demand now.  */
7018
7019   return TRUE;
7020 }
7021
7022 /* Given a BFD section, try to locate the corresponding ELF section
7023    index.  This is used by both the 32-bit and the 64-bit ABI.
7024    Actually, it's not clear to me that the 64-bit ABI supports these,
7025    but for non-PIC objects we will certainly want support for at least
7026    the .scommon section.  */
7027
7028 bfd_boolean
7029 _bfd_mips_elf_section_from_bfd_section (bfd *abfd ATTRIBUTE_UNUSED,
7030                                         asection *sec, int *retval)
7031 {
7032   if (strcmp (bfd_get_section_name (abfd, sec), ".scommon") == 0)
7033     {
7034       *retval = SHN_MIPS_SCOMMON;
7035       return TRUE;
7036     }
7037   if (strcmp (bfd_get_section_name (abfd, sec), ".acommon") == 0)
7038     {
7039       *retval = SHN_MIPS_ACOMMON;
7040       return TRUE;
7041     }
7042   return FALSE;
7043 }
7044 \f
7045 /* Hook called by the linker routine which adds symbols from an object
7046    file.  We must handle the special MIPS section numbers here.  */
7047
7048 bfd_boolean
7049 _bfd_mips_elf_add_symbol_hook (bfd *abfd, struct bfd_link_info *info,
7050                                Elf_Internal_Sym *sym, const char **namep,
7051                                flagword *flagsp ATTRIBUTE_UNUSED,
7052                                asection **secp, bfd_vma *valp)
7053 {
7054   if (SGI_COMPAT (abfd)
7055       && (abfd->flags & DYNAMIC) != 0
7056       && strcmp (*namep, "_rld_new_interface") == 0)
7057     {
7058       /* Skip IRIX5 rld entry name.  */
7059       *namep = NULL;
7060       return TRUE;
7061     }
7062
7063   /* Shared objects may have a dynamic symbol '_gp_disp' defined as
7064      a SECTION *ABS*.  This causes ld to think it can resolve _gp_disp
7065      by setting a DT_NEEDED for the shared object.  Since _gp_disp is
7066      a magic symbol resolved by the linker, we ignore this bogus definition
7067      of _gp_disp.  New ABI objects do not suffer from this problem so this
7068      is not done for them. */
7069   if (!NEWABI_P(abfd)
7070       && (sym->st_shndx == SHN_ABS)
7071       && (strcmp (*namep, "_gp_disp") == 0))
7072     {
7073       *namep = NULL;
7074       return TRUE;
7075     }
7076
7077   switch (sym->st_shndx)
7078     {
7079     case SHN_COMMON:
7080       /* Common symbols less than the GP size are automatically
7081          treated as SHN_MIPS_SCOMMON symbols.  */
7082       if (sym->st_size > elf_gp_size (abfd)
7083           || ELF_ST_TYPE (sym->st_info) == STT_TLS
7084           || IRIX_COMPAT (abfd) == ict_irix6)
7085         break;
7086       /* Fall through.  */
7087     case SHN_MIPS_SCOMMON:
7088       *secp = bfd_make_section_old_way (abfd, ".scommon");
7089       (*secp)->flags |= SEC_IS_COMMON;
7090       *valp = sym->st_size;
7091       break;
7092
7093     case SHN_MIPS_TEXT:
7094       /* This section is used in a shared object.  */
7095       if (elf_tdata (abfd)->elf_text_section == NULL)
7096         {
7097           asymbol *elf_text_symbol;
7098           asection *elf_text_section;
7099           bfd_size_type amt = sizeof (asection);
7100
7101           elf_text_section = bfd_zalloc (abfd, amt);
7102           if (elf_text_section == NULL)
7103             return FALSE;
7104
7105           amt = sizeof (asymbol);
7106           elf_text_symbol = bfd_zalloc (abfd, amt);
7107           if (elf_text_symbol == NULL)
7108             return FALSE;
7109
7110           /* Initialize the section.  */
7111
7112           elf_tdata (abfd)->elf_text_section = elf_text_section;
7113           elf_tdata (abfd)->elf_text_symbol = elf_text_symbol;
7114
7115           elf_text_section->symbol = elf_text_symbol;
7116           elf_text_section->symbol_ptr_ptr = &elf_tdata (abfd)->elf_text_symbol;
7117
7118           elf_text_section->name = ".text";
7119           elf_text_section->flags = SEC_NO_FLAGS;
7120           elf_text_section->output_section = NULL;
7121           elf_text_section->owner = abfd;
7122           elf_text_symbol->name = ".text";
7123           elf_text_symbol->flags = BSF_SECTION_SYM | BSF_DYNAMIC;
7124           elf_text_symbol->section = elf_text_section;
7125         }
7126       /* This code used to do *secp = bfd_und_section_ptr if
7127          info->shared.  I don't know why, and that doesn't make sense,
7128          so I took it out.  */
7129       *secp = elf_tdata (abfd)->elf_text_section;
7130       break;
7131
7132     case SHN_MIPS_ACOMMON:
7133       /* Fall through. XXX Can we treat this as allocated data?  */
7134     case SHN_MIPS_DATA:
7135       /* This section is used in a shared object.  */
7136       if (elf_tdata (abfd)->elf_data_section == NULL)
7137         {
7138           asymbol *elf_data_symbol;
7139           asection *elf_data_section;
7140           bfd_size_type amt = sizeof (asection);
7141
7142           elf_data_section = bfd_zalloc (abfd, amt);
7143           if (elf_data_section == NULL)
7144             return FALSE;
7145
7146           amt = sizeof (asymbol);
7147           elf_data_symbol = bfd_zalloc (abfd, amt);
7148           if (elf_data_symbol == NULL)
7149             return FALSE;
7150
7151           /* Initialize the section.  */
7152
7153           elf_tdata (abfd)->elf_data_section = elf_data_section;
7154           elf_tdata (abfd)->elf_data_symbol = elf_data_symbol;
7155
7156           elf_data_section->symbol = elf_data_symbol;
7157           elf_data_section->symbol_ptr_ptr = &elf_tdata (abfd)->elf_data_symbol;
7158
7159           elf_data_section->name = ".data";
7160           elf_data_section->flags = SEC_NO_FLAGS;
7161           elf_data_section->output_section = NULL;
7162           elf_data_section->owner = abfd;
7163           elf_data_symbol->name = ".data";
7164           elf_data_symbol->flags = BSF_SECTION_SYM | BSF_DYNAMIC;
7165           elf_data_symbol->section = elf_data_section;
7166         }
7167       /* This code used to do *secp = bfd_und_section_ptr if
7168          info->shared.  I don't know why, and that doesn't make sense,
7169          so I took it out.  */
7170       *secp = elf_tdata (abfd)->elf_data_section;
7171       break;
7172
7173     case SHN_MIPS_SUNDEFINED:
7174       *secp = bfd_und_section_ptr;
7175       break;
7176     }
7177
7178   if (SGI_COMPAT (abfd)
7179       && ! info->shared
7180       && info->output_bfd->xvec == abfd->xvec
7181       && strcmp (*namep, "__rld_obj_head") == 0)
7182     {
7183       struct elf_link_hash_entry *h;
7184       struct bfd_link_hash_entry *bh;
7185
7186       /* Mark __rld_obj_head as dynamic.  */
7187       bh = NULL;
7188       if (! (_bfd_generic_link_add_one_symbol
7189              (info, abfd, *namep, BSF_GLOBAL, *secp, *valp, NULL, FALSE,
7190               get_elf_backend_data (abfd)->collect, &bh)))
7191         return FALSE;
7192
7193       h = (struct elf_link_hash_entry *) bh;
7194       h->non_elf = 0;
7195       h->def_regular = 1;
7196       h->type = STT_OBJECT;
7197
7198       if (! bfd_elf_link_record_dynamic_symbol (info, h))
7199         return FALSE;
7200
7201       mips_elf_hash_table (info)->use_rld_obj_head = TRUE;
7202       mips_elf_hash_table (info)->rld_symbol = h;
7203     }
7204
7205   /* If this is a mips16 text symbol, add 1 to the value to make it
7206      odd.  This will cause something like .word SYM to come up with
7207      the right value when it is loaded into the PC.  */
7208   if (ELF_ST_IS_COMPRESSED (sym->st_other))
7209     ++*valp;
7210
7211   return TRUE;
7212 }
7213
7214 /* This hook function is called before the linker writes out a global
7215    symbol.  We mark symbols as small common if appropriate.  This is
7216    also where we undo the increment of the value for a mips16 symbol.  */
7217
7218 int
7219 _bfd_mips_elf_link_output_symbol_hook
7220   (struct bfd_link_info *info ATTRIBUTE_UNUSED,
7221    const char *name ATTRIBUTE_UNUSED, Elf_Internal_Sym *sym,
7222    asection *input_sec, struct elf_link_hash_entry *h ATTRIBUTE_UNUSED)
7223 {
7224   /* If we see a common symbol, which implies a relocatable link, then
7225      if a symbol was small common in an input file, mark it as small
7226      common in the output file.  */
7227   if (sym->st_shndx == SHN_COMMON
7228       && strcmp (input_sec->name, ".scommon") == 0)
7229     sym->st_shndx = SHN_MIPS_SCOMMON;
7230
7231   if (ELF_ST_IS_COMPRESSED (sym->st_other))
7232     sym->st_value &= ~1;
7233
7234   return 1;
7235 }
7236 \f
7237 /* Functions for the dynamic linker.  */
7238
7239 /* Create dynamic sections when linking against a dynamic object.  */
7240
7241 bfd_boolean
7242 _bfd_mips_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
7243 {
7244   struct elf_link_hash_entry *h;
7245   struct bfd_link_hash_entry *bh;
7246   flagword flags;
7247   register asection *s;
7248   const char * const *namep;
7249   struct mips_elf_link_hash_table *htab;
7250
7251   htab = mips_elf_hash_table (info);
7252   BFD_ASSERT (htab != NULL);
7253
7254   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
7255            | SEC_LINKER_CREATED | SEC_READONLY);
7256
7257   /* The psABI requires a read-only .dynamic section, but the VxWorks
7258      EABI doesn't.  */
7259   if (!htab->is_vxworks)
7260     {
7261       s = bfd_get_linker_section (abfd, ".dynamic");
7262       if (s != NULL)
7263         {
7264           if (! bfd_set_section_flags (abfd, s, flags))
7265             return FALSE;
7266         }
7267     }
7268
7269   /* We need to create .got section.  */
7270   if (!mips_elf_create_got_section (abfd, info))
7271     return FALSE;
7272
7273   if (! mips_elf_rel_dyn_section (info, TRUE))
7274     return FALSE;
7275
7276   /* Create .stub section.  */
7277   s = bfd_make_section_anyway_with_flags (abfd,
7278                                           MIPS_ELF_STUB_SECTION_NAME (abfd),
7279                                           flags | SEC_CODE);
7280   if (s == NULL
7281       || ! bfd_set_section_alignment (abfd, s,
7282                                       MIPS_ELF_LOG_FILE_ALIGN (abfd)))
7283     return FALSE;
7284   htab->sstubs = s;
7285
7286   if (!mips_elf_hash_table (info)->use_rld_obj_head
7287       && !info->shared
7288       && bfd_get_linker_section (abfd, ".rld_map") == NULL)
7289     {
7290       s = bfd_make_section_anyway_with_flags (abfd, ".rld_map",
7291                                               flags &~ (flagword) SEC_READONLY);
7292       if (s == NULL
7293           || ! bfd_set_section_alignment (abfd, s,
7294                                           MIPS_ELF_LOG_FILE_ALIGN (abfd)))
7295         return FALSE;
7296     }
7297
7298   /* On IRIX5, we adjust add some additional symbols and change the
7299      alignments of several sections.  There is no ABI documentation
7300      indicating that this is necessary on IRIX6, nor any evidence that
7301      the linker takes such action.  */
7302   if (IRIX_COMPAT (abfd) == ict_irix5)
7303     {
7304       for (namep = mips_elf_dynsym_rtproc_names; *namep != NULL; namep++)
7305         {
7306           bh = NULL;
7307           if (! (_bfd_generic_link_add_one_symbol
7308                  (info, abfd, *namep, BSF_GLOBAL, bfd_und_section_ptr, 0,
7309                   NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
7310             return FALSE;
7311
7312           h = (struct elf_link_hash_entry *) bh;
7313           h->non_elf = 0;
7314           h->def_regular = 1;
7315           h->type = STT_SECTION;
7316
7317           if (! bfd_elf_link_record_dynamic_symbol (info, h))
7318             return FALSE;
7319         }
7320
7321       /* We need to create a .compact_rel section.  */
7322       if (SGI_COMPAT (abfd))
7323         {
7324           if (!mips_elf_create_compact_rel_section (abfd, info))
7325             return FALSE;
7326         }
7327
7328       /* Change alignments of some sections.  */
7329       s = bfd_get_linker_section (abfd, ".hash");
7330       if (s != NULL)
7331         bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7332       s = bfd_get_linker_section (abfd, ".dynsym");
7333       if (s != NULL)
7334         bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7335       s = bfd_get_linker_section (abfd, ".dynstr");
7336       if (s != NULL)
7337         bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7338       /* ??? */
7339       s = bfd_get_section_by_name (abfd, ".reginfo");
7340       if (s != NULL)
7341         bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7342       s = bfd_get_linker_section (abfd, ".dynamic");
7343       if (s != NULL)
7344         bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7345     }
7346
7347   if (!info->shared)
7348     {
7349       const char *name;
7350
7351       name = SGI_COMPAT (abfd) ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING";
7352       bh = NULL;
7353       if (!(_bfd_generic_link_add_one_symbol
7354             (info, abfd, name, BSF_GLOBAL, bfd_abs_section_ptr, 0,
7355              NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
7356         return FALSE;
7357
7358       h = (struct elf_link_hash_entry *) bh;
7359       h->non_elf = 0;
7360       h->def_regular = 1;
7361       h->type = STT_SECTION;
7362
7363       if (! bfd_elf_link_record_dynamic_symbol (info, h))
7364         return FALSE;
7365
7366       if (! mips_elf_hash_table (info)->use_rld_obj_head)
7367         {
7368           /* __rld_map is a four byte word located in the .data section
7369              and is filled in by the rtld to contain a pointer to
7370              the _r_debug structure. Its symbol value will be set in
7371              _bfd_mips_elf_finish_dynamic_symbol.  */
7372           s = bfd_get_linker_section (abfd, ".rld_map");
7373           BFD_ASSERT (s != NULL);
7374
7375           name = SGI_COMPAT (abfd) ? "__rld_map" : "__RLD_MAP";
7376           bh = NULL;
7377           if (!(_bfd_generic_link_add_one_symbol
7378                 (info, abfd, name, BSF_GLOBAL, s, 0, NULL, FALSE,
7379                  get_elf_backend_data (abfd)->collect, &bh)))
7380             return FALSE;
7381
7382           h = (struct elf_link_hash_entry *) bh;
7383           h->non_elf = 0;
7384           h->def_regular = 1;
7385           h->type = STT_OBJECT;
7386
7387           if (! bfd_elf_link_record_dynamic_symbol (info, h))
7388             return FALSE;
7389           mips_elf_hash_table (info)->rld_symbol = h;
7390         }
7391     }
7392
7393   /* Create the .plt, .rel(a).plt, .dynbss and .rel(a).bss sections.
7394      Also create the _PROCEDURE_LINKAGE_TABLE symbol.  */
7395   if (!_bfd_elf_create_dynamic_sections (abfd, info))
7396     return FALSE;
7397
7398   /* Cache the sections created above.  */
7399   htab->splt = bfd_get_linker_section (abfd, ".plt");
7400   htab->sdynbss = bfd_get_linker_section (abfd, ".dynbss");
7401   if (htab->is_vxworks)
7402     {
7403       htab->srelbss = bfd_get_linker_section (abfd, ".rela.bss");
7404       htab->srelplt = bfd_get_linker_section (abfd, ".rela.plt");
7405     }
7406   else
7407     htab->srelplt = bfd_get_linker_section (abfd, ".rel.plt");
7408   if (!htab->sdynbss
7409       || (htab->is_vxworks && !htab->srelbss && !info->shared)
7410       || !htab->srelplt
7411       || !htab->splt)
7412     abort ();
7413
7414   if (htab->is_vxworks)
7415     {
7416       /* Do the usual VxWorks handling.  */
7417       if (!elf_vxworks_create_dynamic_sections (abfd, info, &htab->srelplt2))
7418         return FALSE;
7419
7420       /* Work out the PLT sizes.  */
7421       if (info->shared)
7422         {
7423           htab->plt_header_size
7424             = 4 * ARRAY_SIZE (mips_vxworks_shared_plt0_entry);
7425           htab->plt_entry_size
7426             = 4 * ARRAY_SIZE (mips_vxworks_shared_plt_entry);
7427         }
7428       else
7429         {
7430           htab->plt_header_size
7431             = 4 * ARRAY_SIZE (mips_vxworks_exec_plt0_entry);
7432           htab->plt_entry_size
7433             = 4 * ARRAY_SIZE (mips_vxworks_exec_plt_entry);
7434         }
7435     }
7436   else if (!info->shared)
7437     {
7438       /* All variants of the plt0 entry are the same size.  */
7439       htab->plt_header_size = 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry);
7440       htab->plt_entry_size = 4 * ARRAY_SIZE (mips_exec_plt_entry);
7441     }
7442
7443   return TRUE;
7444 }
7445 \f
7446 /* Return true if relocation REL against section SEC is a REL rather than
7447    RELA relocation.  RELOCS is the first relocation in the section and
7448    ABFD is the bfd that contains SEC.  */
7449
7450 static bfd_boolean
7451 mips_elf_rel_relocation_p (bfd *abfd, asection *sec,
7452                            const Elf_Internal_Rela *relocs,
7453                            const Elf_Internal_Rela *rel)
7454 {
7455   Elf_Internal_Shdr *rel_hdr;
7456   const struct elf_backend_data *bed;
7457
7458   /* To determine which flavor of relocation this is, we depend on the
7459      fact that the INPUT_SECTION's REL_HDR is read before RELA_HDR.  */
7460   rel_hdr = elf_section_data (sec)->rel.hdr;
7461   if (rel_hdr == NULL)
7462     return FALSE;
7463   bed = get_elf_backend_data (abfd);
7464   return ((size_t) (rel - relocs)
7465           < NUM_SHDR_ENTRIES (rel_hdr) * bed->s->int_rels_per_ext_rel);
7466 }
7467
7468 /* Read the addend for REL relocation REL, which belongs to bfd ABFD.
7469    HOWTO is the relocation's howto and CONTENTS points to the contents
7470    of the section that REL is against.  */
7471
7472 static bfd_vma
7473 mips_elf_read_rel_addend (bfd *abfd, const Elf_Internal_Rela *rel,
7474                           reloc_howto_type *howto, bfd_byte *contents)
7475 {
7476   bfd_byte *location;
7477   unsigned int r_type;
7478   bfd_vma addend;
7479
7480   r_type = ELF_R_TYPE (abfd, rel->r_info);
7481   location = contents + rel->r_offset;
7482
7483   /* Get the addend, which is stored in the input file.  */
7484   _bfd_mips_elf_reloc_unshuffle (abfd, r_type, FALSE, location);
7485   addend = mips_elf_obtain_contents (howto, rel, abfd, contents);
7486   _bfd_mips_elf_reloc_shuffle (abfd, r_type, FALSE, location);
7487
7488   return addend & howto->src_mask;
7489 }
7490
7491 /* REL is a relocation in ABFD that needs a partnering LO16 relocation
7492    and *ADDEND is the addend for REL itself.  Look for the LO16 relocation
7493    and update *ADDEND with the final addend.  Return true on success
7494    or false if the LO16 could not be found.  RELEND is the exclusive
7495    upper bound on the relocations for REL's section.  */
7496
7497 static bfd_boolean
7498 mips_elf_add_lo16_rel_addend (bfd *abfd,
7499                               const Elf_Internal_Rela *rel,
7500                               const Elf_Internal_Rela *relend,
7501                               bfd_byte *contents, bfd_vma *addend)
7502 {
7503   unsigned int r_type, lo16_type;
7504   const Elf_Internal_Rela *lo16_relocation;
7505   reloc_howto_type *lo16_howto;
7506   bfd_vma l;
7507
7508   r_type = ELF_R_TYPE (abfd, rel->r_info);
7509   if (mips16_reloc_p (r_type))
7510     lo16_type = R_MIPS16_LO16;
7511   else if (micromips_reloc_p (r_type))
7512     lo16_type = R_MICROMIPS_LO16;
7513   else
7514     lo16_type = R_MIPS_LO16;
7515
7516   /* The combined value is the sum of the HI16 addend, left-shifted by
7517      sixteen bits, and the LO16 addend, sign extended.  (Usually, the
7518      code does a `lui' of the HI16 value, and then an `addiu' of the
7519      LO16 value.)
7520
7521      Scan ahead to find a matching LO16 relocation.
7522
7523      According to the MIPS ELF ABI, the R_MIPS_LO16 relocation must
7524      be immediately following.  However, for the IRIX6 ABI, the next
7525      relocation may be a composed relocation consisting of several
7526      relocations for the same address.  In that case, the R_MIPS_LO16
7527      relocation may occur as one of these.  We permit a similar
7528      extension in general, as that is useful for GCC.
7529
7530      In some cases GCC dead code elimination removes the LO16 but keeps
7531      the corresponding HI16.  This is strictly speaking a violation of
7532      the ABI but not immediately harmful.  */
7533   lo16_relocation = mips_elf_next_relocation (abfd, lo16_type, rel, relend);
7534   if (lo16_relocation == NULL)
7535     return FALSE;
7536
7537   /* Obtain the addend kept there.  */
7538   lo16_howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, lo16_type, FALSE);
7539   l = mips_elf_read_rel_addend (abfd, lo16_relocation, lo16_howto, contents);
7540
7541   l <<= lo16_howto->rightshift;
7542   l = _bfd_mips_elf_sign_extend (l, 16);
7543
7544   *addend <<= 16;
7545   *addend += l;
7546   return TRUE;
7547 }
7548
7549 /* Try to read the contents of section SEC in bfd ABFD.  Return true and
7550    store the contents in *CONTENTS on success.  Assume that *CONTENTS
7551    already holds the contents if it is nonull on entry.  */
7552
7553 static bfd_boolean
7554 mips_elf_get_section_contents (bfd *abfd, asection *sec, bfd_byte **contents)
7555 {
7556   if (*contents)
7557     return TRUE;
7558
7559   /* Get cached copy if it exists.  */
7560   if (elf_section_data (sec)->this_hdr.contents != NULL)
7561     {
7562       *contents = elf_section_data (sec)->this_hdr.contents;
7563       return TRUE;
7564     }
7565
7566   return bfd_malloc_and_get_section (abfd, sec, contents);
7567 }
7568
7569 /* Look through the relocs for a section during the first phase, and
7570    allocate space in the global offset table.  */
7571
7572 bfd_boolean
7573 _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
7574                             asection *sec, const Elf_Internal_Rela *relocs)
7575 {
7576   const char *name;
7577   bfd *dynobj;
7578   Elf_Internal_Shdr *symtab_hdr;
7579   struct elf_link_hash_entry **sym_hashes;
7580   size_t extsymoff;
7581   const Elf_Internal_Rela *rel;
7582   const Elf_Internal_Rela *rel_end;
7583   asection *sreloc;
7584   const struct elf_backend_data *bed;
7585   struct mips_elf_link_hash_table *htab;
7586   bfd_byte *contents;
7587   bfd_vma addend;
7588   reloc_howto_type *howto;
7589
7590   if (info->relocatable)
7591     return TRUE;
7592
7593   htab = mips_elf_hash_table (info);
7594   BFD_ASSERT (htab != NULL);
7595
7596   dynobj = elf_hash_table (info)->dynobj;
7597   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
7598   sym_hashes = elf_sym_hashes (abfd);
7599   extsymoff = (elf_bad_symtab (abfd)) ? 0 : symtab_hdr->sh_info;
7600
7601   bed = get_elf_backend_data (abfd);
7602   rel_end = relocs + sec->reloc_count * bed->s->int_rels_per_ext_rel;
7603
7604   /* Check for the mips16 stub sections.  */
7605
7606   name = bfd_get_section_name (abfd, sec);
7607   if (FN_STUB_P (name))
7608     {
7609       unsigned long r_symndx;
7610
7611       /* Look at the relocation information to figure out which symbol
7612          this is for.  */
7613
7614       r_symndx = mips16_stub_symndx (bed, sec, relocs, rel_end);
7615       if (r_symndx == 0)
7616         {
7617           (*_bfd_error_handler)
7618             (_("%B: Warning: cannot determine the target function for"
7619                " stub section `%s'"),
7620              abfd, name);
7621           bfd_set_error (bfd_error_bad_value);
7622           return FALSE;
7623         }
7624
7625       if (r_symndx < extsymoff
7626           || sym_hashes[r_symndx - extsymoff] == NULL)
7627         {
7628           asection *o;
7629
7630           /* This stub is for a local symbol.  This stub will only be
7631              needed if there is some relocation in this BFD, other
7632              than a 16 bit function call, which refers to this symbol.  */
7633           for (o = abfd->sections; o != NULL; o = o->next)
7634             {
7635               Elf_Internal_Rela *sec_relocs;
7636               const Elf_Internal_Rela *r, *rend;
7637
7638               /* We can ignore stub sections when looking for relocs.  */
7639               if ((o->flags & SEC_RELOC) == 0
7640                   || o->reloc_count == 0
7641                   || section_allows_mips16_refs_p (o))
7642                 continue;
7643
7644               sec_relocs
7645                 = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
7646                                              info->keep_memory);
7647               if (sec_relocs == NULL)
7648                 return FALSE;
7649
7650               rend = sec_relocs + o->reloc_count;
7651               for (r = sec_relocs; r < rend; r++)
7652                 if (ELF_R_SYM (abfd, r->r_info) == r_symndx
7653                     && !mips16_call_reloc_p (ELF_R_TYPE (abfd, r->r_info)))
7654                   break;
7655
7656               if (elf_section_data (o)->relocs != sec_relocs)
7657                 free (sec_relocs);
7658
7659               if (r < rend)
7660                 break;
7661             }
7662
7663           if (o == NULL)
7664             {
7665               /* There is no non-call reloc for this stub, so we do
7666                  not need it.  Since this function is called before
7667                  the linker maps input sections to output sections, we
7668                  can easily discard it by setting the SEC_EXCLUDE
7669                  flag.  */
7670               sec->flags |= SEC_EXCLUDE;
7671               return TRUE;
7672             }
7673
7674           /* Record this stub in an array of local symbol stubs for
7675              this BFD.  */
7676           if (elf_tdata (abfd)->local_stubs == NULL)
7677             {
7678               unsigned long symcount;
7679               asection **n;
7680               bfd_size_type amt;
7681
7682               if (elf_bad_symtab (abfd))
7683                 symcount = NUM_SHDR_ENTRIES (symtab_hdr);
7684               else
7685                 symcount = symtab_hdr->sh_info;
7686               amt = symcount * sizeof (asection *);
7687               n = bfd_zalloc (abfd, amt);
7688               if (n == NULL)
7689                 return FALSE;
7690               elf_tdata (abfd)->local_stubs = n;
7691             }
7692
7693           sec->flags |= SEC_KEEP;
7694           elf_tdata (abfd)->local_stubs[r_symndx] = sec;
7695
7696           /* We don't need to set mips16_stubs_seen in this case.
7697              That flag is used to see whether we need to look through
7698              the global symbol table for stubs.  We don't need to set
7699              it here, because we just have a local stub.  */
7700         }
7701       else
7702         {
7703           struct mips_elf_link_hash_entry *h;
7704
7705           h = ((struct mips_elf_link_hash_entry *)
7706                sym_hashes[r_symndx - extsymoff]);
7707
7708           while (h->root.root.type == bfd_link_hash_indirect
7709                  || h->root.root.type == bfd_link_hash_warning)
7710             h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
7711
7712           /* H is the symbol this stub is for.  */
7713
7714           /* If we already have an appropriate stub for this function, we
7715              don't need another one, so we can discard this one.  Since
7716              this function is called before the linker maps input sections
7717              to output sections, we can easily discard it by setting the
7718              SEC_EXCLUDE flag.  */
7719           if (h->fn_stub != NULL)
7720             {
7721               sec->flags |= SEC_EXCLUDE;
7722               return TRUE;
7723             }
7724
7725           sec->flags |= SEC_KEEP;
7726           h->fn_stub = sec;
7727           mips_elf_hash_table (info)->mips16_stubs_seen = TRUE;
7728         }
7729     }
7730   else if (CALL_STUB_P (name) || CALL_FP_STUB_P (name))
7731     {
7732       unsigned long r_symndx;
7733       struct mips_elf_link_hash_entry *h;
7734       asection **loc;
7735
7736       /* Look at the relocation information to figure out which symbol
7737          this is for.  */
7738
7739       r_symndx = mips16_stub_symndx (bed, sec, relocs, rel_end);
7740       if (r_symndx == 0)
7741         {
7742           (*_bfd_error_handler)
7743             (_("%B: Warning: cannot determine the target function for"
7744                " stub section `%s'"),
7745              abfd, name);
7746           bfd_set_error (bfd_error_bad_value);
7747           return FALSE;
7748         }
7749
7750       if (r_symndx < extsymoff
7751           || sym_hashes[r_symndx - extsymoff] == NULL)
7752         {
7753           asection *o;
7754
7755           /* This stub is for a local symbol.  This stub will only be
7756              needed if there is some relocation (R_MIPS16_26) in this BFD
7757              that refers to this symbol.  */
7758           for (o = abfd->sections; o != NULL; o = o->next)
7759             {
7760               Elf_Internal_Rela *sec_relocs;
7761               const Elf_Internal_Rela *r, *rend;
7762
7763               /* We can ignore stub sections when looking for relocs.  */
7764               if ((o->flags & SEC_RELOC) == 0
7765                   || o->reloc_count == 0
7766                   || section_allows_mips16_refs_p (o))
7767                 continue;
7768
7769               sec_relocs
7770                 = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
7771                                              info->keep_memory);
7772               if (sec_relocs == NULL)
7773                 return FALSE;
7774
7775               rend = sec_relocs + o->reloc_count;
7776               for (r = sec_relocs; r < rend; r++)
7777                 if (ELF_R_SYM (abfd, r->r_info) == r_symndx
7778                     && ELF_R_TYPE (abfd, r->r_info) == R_MIPS16_26)
7779                     break;
7780
7781               if (elf_section_data (o)->relocs != sec_relocs)
7782                 free (sec_relocs);
7783
7784               if (r < rend)
7785                 break;
7786             }
7787
7788           if (o == NULL)
7789             {
7790               /* There is no non-call reloc for this stub, so we do
7791                  not need it.  Since this function is called before
7792                  the linker maps input sections to output sections, we
7793                  can easily discard it by setting the SEC_EXCLUDE
7794                  flag.  */
7795               sec->flags |= SEC_EXCLUDE;
7796               return TRUE;
7797             }
7798
7799           /* Record this stub in an array of local symbol call_stubs for
7800              this BFD.  */
7801           if (elf_tdata (abfd)->local_call_stubs == NULL)
7802             {
7803               unsigned long symcount;
7804               asection **n;
7805               bfd_size_type amt;
7806
7807               if (elf_bad_symtab (abfd))
7808                 symcount = NUM_SHDR_ENTRIES (symtab_hdr);
7809               else
7810                 symcount = symtab_hdr->sh_info;
7811               amt = symcount * sizeof (asection *);
7812               n = bfd_zalloc (abfd, amt);
7813               if (n == NULL)
7814                 return FALSE;
7815               elf_tdata (abfd)->local_call_stubs = n;
7816             }
7817
7818           sec->flags |= SEC_KEEP;
7819           elf_tdata (abfd)->local_call_stubs[r_symndx] = sec;
7820
7821           /* We don't need to set mips16_stubs_seen in this case.
7822              That flag is used to see whether we need to look through
7823              the global symbol table for stubs.  We don't need to set
7824              it here, because we just have a local stub.  */
7825         }
7826       else
7827         {
7828           h = ((struct mips_elf_link_hash_entry *)
7829                sym_hashes[r_symndx - extsymoff]);
7830
7831           /* H is the symbol this stub is for.  */
7832
7833           if (CALL_FP_STUB_P (name))
7834             loc = &h->call_fp_stub;
7835           else
7836             loc = &h->call_stub;
7837
7838           /* If we already have an appropriate stub for this function, we
7839              don't need another one, so we can discard this one.  Since
7840              this function is called before the linker maps input sections
7841              to output sections, we can easily discard it by setting the
7842              SEC_EXCLUDE flag.  */
7843           if (*loc != NULL)
7844             {
7845               sec->flags |= SEC_EXCLUDE;
7846               return TRUE;
7847             }
7848
7849           sec->flags |= SEC_KEEP;
7850           *loc = sec;
7851           mips_elf_hash_table (info)->mips16_stubs_seen = TRUE;
7852         }
7853     }
7854
7855   sreloc = NULL;
7856   contents = NULL;
7857   for (rel = relocs; rel < rel_end; ++rel)
7858     {
7859       unsigned long r_symndx;
7860       unsigned int r_type;
7861       struct elf_link_hash_entry *h;
7862       bfd_boolean can_make_dynamic_p;
7863
7864       r_symndx = ELF_R_SYM (abfd, rel->r_info);
7865       r_type = ELF_R_TYPE (abfd, rel->r_info);
7866
7867       if (r_symndx < extsymoff)
7868         h = NULL;
7869       else if (r_symndx >= extsymoff + NUM_SHDR_ENTRIES (symtab_hdr))
7870         {
7871           (*_bfd_error_handler)
7872             (_("%B: Malformed reloc detected for section %s"),
7873              abfd, name);
7874           bfd_set_error (bfd_error_bad_value);
7875           return FALSE;
7876         }
7877       else
7878         {
7879           h = sym_hashes[r_symndx - extsymoff];
7880           while (h != NULL
7881                  && (h->root.type == bfd_link_hash_indirect
7882                      || h->root.type == bfd_link_hash_warning))
7883             h = (struct elf_link_hash_entry *) h->root.u.i.link;
7884         }
7885
7886       /* Set CAN_MAKE_DYNAMIC_P to true if we can convert this
7887          relocation into a dynamic one.  */
7888       can_make_dynamic_p = FALSE;
7889       switch (r_type)
7890         {
7891         case R_MIPS_GOT16:
7892         case R_MIPS_CALL16:
7893         case R_MIPS_CALL_HI16:
7894         case R_MIPS_CALL_LO16:
7895         case R_MIPS_GOT_HI16:
7896         case R_MIPS_GOT_LO16:
7897         case R_MIPS_GOT_PAGE:
7898         case R_MIPS_GOT_OFST:
7899         case R_MIPS_GOT_DISP:
7900         case R_MIPS_TLS_GOTTPREL:
7901         case R_MIPS_TLS_GD:
7902         case R_MIPS_TLS_LDM:
7903         case R_MIPS16_GOT16:
7904         case R_MIPS16_CALL16:
7905         case R_MIPS16_TLS_GOTTPREL:
7906         case R_MIPS16_TLS_GD:
7907         case R_MIPS16_TLS_LDM:
7908         case R_MICROMIPS_GOT16:
7909         case R_MICROMIPS_CALL16:
7910         case R_MICROMIPS_CALL_HI16:
7911         case R_MICROMIPS_CALL_LO16:
7912         case R_MICROMIPS_GOT_HI16:
7913         case R_MICROMIPS_GOT_LO16:
7914         case R_MICROMIPS_GOT_PAGE:
7915         case R_MICROMIPS_GOT_OFST:
7916         case R_MICROMIPS_GOT_DISP:
7917         case R_MICROMIPS_TLS_GOTTPREL:
7918         case R_MICROMIPS_TLS_GD:
7919         case R_MICROMIPS_TLS_LDM:
7920           if (dynobj == NULL)
7921             elf_hash_table (info)->dynobj = dynobj = abfd;
7922           if (!mips_elf_create_got_section (dynobj, info))
7923             return FALSE;
7924           if (htab->is_vxworks && !info->shared)
7925             {
7926               (*_bfd_error_handler)
7927                 (_("%B: GOT reloc at 0x%lx not expected in executables"),
7928                  abfd, (unsigned long) rel->r_offset);
7929               bfd_set_error (bfd_error_bad_value);
7930               return FALSE;
7931             }
7932           break;
7933
7934           /* This is just a hint; it can safely be ignored.  Don't set
7935              has_static_relocs for the corresponding symbol.  */
7936         case R_MIPS_JALR:
7937         case R_MICROMIPS_JALR:
7938           break;
7939
7940         case R_MIPS_32:
7941         case R_MIPS_REL32:
7942         case R_MIPS_64:
7943           /* In VxWorks executables, references to external symbols
7944              must be handled using copy relocs or PLT entries; it is not
7945              possible to convert this relocation into a dynamic one.
7946
7947              For executables that use PLTs and copy-relocs, we have a
7948              choice between converting the relocation into a dynamic
7949              one or using copy relocations or PLT entries.  It is
7950              usually better to do the former, unless the relocation is
7951              against a read-only section.  */
7952           if ((info->shared
7953                || (h != NULL
7954                    && !htab->is_vxworks
7955                    && strcmp (h->root.root.string, "__gnu_local_gp") != 0
7956                    && !(!info->nocopyreloc
7957                         && !PIC_OBJECT_P (abfd)
7958                         && MIPS_ELF_READONLY_SECTION (sec))))
7959               && (sec->flags & SEC_ALLOC) != 0)
7960             {
7961               can_make_dynamic_p = TRUE;
7962               if (dynobj == NULL)
7963                 elf_hash_table (info)->dynobj = dynobj = abfd;
7964               break;
7965             }
7966           /* For sections that are not SEC_ALLOC a copy reloc would be
7967              output if possible (implying questionable semantics for
7968              read-only data objects) or otherwise the final link would
7969              fail as ld.so will not process them and could not therefore
7970              handle any outstanding dynamic relocations.
7971
7972              For such sections that are also SEC_DEBUGGING, we can avoid
7973              these problems by simply ignoring any relocs as these
7974              sections have a predefined use and we know it is safe to do
7975              so.
7976
7977              This is needed in cases such as a global symbol definition
7978              in a shared library causing a common symbol from an object
7979              file to be converted to an undefined reference.  If that
7980              happens, then all the relocations against this symbol from
7981              SEC_DEBUGGING sections in the object file will resolve to
7982              nil.  */
7983           if ((sec->flags & SEC_DEBUGGING) != 0)
7984             break;
7985           /* Fall through.  */
7986
7987         default:
7988           /* Most static relocations require pointer equality, except
7989              for branches.  */
7990           if (h)
7991             h->pointer_equality_needed = TRUE;
7992           /* Fall through.  */
7993
7994         case R_MIPS_26:
7995         case R_MIPS_PC16:
7996         case R_MIPS16_26:
7997         case R_MICROMIPS_26_S1:
7998         case R_MICROMIPS_PC7_S1:
7999         case R_MICROMIPS_PC10_S1:
8000         case R_MICROMIPS_PC16_S1:
8001         case R_MICROMIPS_PC23_S2:
8002           if (h)
8003             ((struct mips_elf_link_hash_entry *) h)->has_static_relocs = TRUE;
8004           break;
8005         }
8006
8007       if (h)
8008         {
8009           /* Relocations against the special VxWorks __GOTT_BASE__ and
8010              __GOTT_INDEX__ symbols must be left to the loader.  Allocate
8011              room for them in .rela.dyn.  */
8012           if (is_gott_symbol (info, h))
8013             {
8014               if (sreloc == NULL)
8015                 {
8016                   sreloc = mips_elf_rel_dyn_section (info, TRUE);
8017                   if (sreloc == NULL)
8018                     return FALSE;
8019                 }
8020               mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
8021               if (MIPS_ELF_READONLY_SECTION (sec))
8022                 /* We tell the dynamic linker that there are
8023                    relocations against the text segment.  */
8024                 info->flags |= DF_TEXTREL;
8025             }
8026         }
8027       else if (call_lo16_reloc_p (r_type)
8028                || got_lo16_reloc_p (r_type)
8029                || got_disp_reloc_p (r_type)
8030                || (got16_reloc_p (r_type) && htab->is_vxworks))
8031         {
8032           /* We may need a local GOT entry for this relocation.  We
8033              don't count R_MIPS_GOT_PAGE because we can estimate the
8034              maximum number of pages needed by looking at the size of
8035              the segment.  Similar comments apply to R_MIPS*_GOT16 and
8036              R_MIPS*_CALL16, except on VxWorks, where GOT relocations
8037              always evaluate to "G".  We don't count R_MIPS_GOT_HI16, or
8038              R_MIPS_CALL_HI16 because these are always followed by an
8039              R_MIPS_GOT_LO16 or R_MIPS_CALL_LO16.  */
8040           if (!mips_elf_record_local_got_symbol (abfd, r_symndx,
8041                                                  rel->r_addend, info, 0))
8042             return FALSE;
8043         }
8044
8045       if (h != NULL
8046           && mips_elf_relocation_needs_la25_stub (abfd, r_type,
8047                                                   ELF_ST_IS_MIPS16 (h->other)))
8048         ((struct mips_elf_link_hash_entry *) h)->has_nonpic_branches = TRUE;
8049
8050       switch (r_type)
8051         {
8052         case R_MIPS_CALL16:
8053         case R_MIPS16_CALL16:
8054         case R_MICROMIPS_CALL16:
8055           if (h == NULL)
8056             {
8057               (*_bfd_error_handler)
8058                 (_("%B: CALL16 reloc at 0x%lx not against global symbol"),
8059                  abfd, (unsigned long) rel->r_offset);
8060               bfd_set_error (bfd_error_bad_value);
8061               return FALSE;
8062             }
8063           /* Fall through.  */
8064
8065         case R_MIPS_CALL_HI16:
8066         case R_MIPS_CALL_LO16:
8067         case R_MICROMIPS_CALL_HI16:
8068         case R_MICROMIPS_CALL_LO16:
8069           if (h != NULL)
8070             {
8071               /* Make sure there is room in the regular GOT to hold the
8072                  function's address.  We may eliminate it in favour of
8073                  a .got.plt entry later; see mips_elf_count_got_symbols.  */
8074               if (!mips_elf_record_global_got_symbol (h, abfd, info, TRUE, 0))
8075                 return FALSE;
8076
8077               /* We need a stub, not a plt entry for the undefined
8078                  function.  But we record it as if it needs plt.  See
8079                  _bfd_elf_adjust_dynamic_symbol.  */
8080               h->needs_plt = 1;
8081               h->type = STT_FUNC;
8082             }
8083           break;
8084
8085         case R_MIPS_GOT_PAGE:
8086         case R_MICROMIPS_GOT_PAGE:
8087           /* If this is a global, overridable symbol, GOT_PAGE will
8088              decay to GOT_DISP, so we'll need a GOT entry for it.  */
8089           if (h)
8090             {
8091               struct mips_elf_link_hash_entry *hmips =
8092                 (struct mips_elf_link_hash_entry *) h;
8093
8094               /* This symbol is definitely not overridable.  */
8095               if (hmips->root.def_regular
8096                   && ! (info->shared && ! info->symbolic
8097                         && ! hmips->root.forced_local))
8098                 h = NULL;
8099             }
8100           /* Fall through.  */
8101
8102         case R_MIPS16_GOT16:
8103         case R_MIPS_GOT16:
8104         case R_MIPS_GOT_HI16:
8105         case R_MIPS_GOT_LO16:
8106         case R_MICROMIPS_GOT16:
8107         case R_MICROMIPS_GOT_HI16:
8108         case R_MICROMIPS_GOT_LO16:
8109           if (!h || got_page_reloc_p (r_type))
8110             {
8111               /* This relocation needs (or may need, if h != NULL) a
8112                  page entry in the GOT.  For R_MIPS_GOT_PAGE we do not
8113                  know for sure until we know whether the symbol is
8114                  preemptible.  */
8115               if (mips_elf_rel_relocation_p (abfd, sec, relocs, rel))
8116                 {
8117                   if (!mips_elf_get_section_contents (abfd, sec, &contents))
8118                     return FALSE;
8119                   howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, FALSE);
8120                   addend = mips_elf_read_rel_addend (abfd, rel,
8121                                                      howto, contents);
8122                   if (got16_reloc_p (r_type))
8123                     mips_elf_add_lo16_rel_addend (abfd, rel, rel_end,
8124                                                   contents, &addend);
8125                   else
8126                     addend <<= howto->rightshift;
8127                 }
8128               else
8129                 addend = rel->r_addend;
8130               if (!mips_elf_record_got_page_entry (info, abfd, r_symndx,
8131                                                    addend))
8132                 return FALSE;
8133             }
8134           /* Fall through.  */
8135
8136         case R_MIPS_GOT_DISP:
8137         case R_MICROMIPS_GOT_DISP:
8138           if (h && !mips_elf_record_global_got_symbol (h, abfd, info,
8139                                                        FALSE, 0))
8140             return FALSE;
8141           break;
8142
8143         case R_MIPS_TLS_GOTTPREL:
8144         case R_MIPS16_TLS_GOTTPREL:
8145         case R_MICROMIPS_TLS_GOTTPREL:
8146           if (info->shared)
8147             info->flags |= DF_STATIC_TLS;
8148           /* Fall through */
8149
8150         case R_MIPS_TLS_LDM:
8151         case R_MIPS16_TLS_LDM:
8152         case R_MICROMIPS_TLS_LDM:
8153           if (tls_ldm_reloc_p (r_type))
8154             {
8155               r_symndx = STN_UNDEF;
8156               h = NULL;
8157             }
8158           /* Fall through */
8159
8160         case R_MIPS_TLS_GD:
8161         case R_MIPS16_TLS_GD:
8162         case R_MICROMIPS_TLS_GD:
8163           /* This symbol requires a global offset table entry, or two
8164              for TLS GD relocations.  */
8165           {
8166             unsigned char flag;
8167
8168             flag = (tls_gd_reloc_p (r_type)
8169                     ? GOT_TLS_GD
8170                     : tls_ldm_reloc_p (r_type) ? GOT_TLS_LDM : GOT_TLS_IE);
8171             if (h != NULL)
8172               {
8173                 struct mips_elf_link_hash_entry *hmips =
8174                   (struct mips_elf_link_hash_entry *) h;
8175                 hmips->tls_type |= flag;
8176
8177                 if (h && !mips_elf_record_global_got_symbol (h, abfd, info,
8178                                                              FALSE, flag))
8179                   return FALSE;
8180               }
8181             else
8182               {
8183                 BFD_ASSERT (flag == GOT_TLS_LDM || r_symndx != STN_UNDEF);
8184
8185                 if (!mips_elf_record_local_got_symbol (abfd, r_symndx,
8186                                                        rel->r_addend,
8187                                                        info, flag))
8188                   return FALSE;
8189               }
8190           }
8191           break;
8192
8193         case R_MIPS_32:
8194         case R_MIPS_REL32:
8195         case R_MIPS_64:
8196           /* In VxWorks executables, references to external symbols
8197              are handled using copy relocs or PLT stubs, so there's
8198              no need to add a .rela.dyn entry for this relocation.  */
8199           if (can_make_dynamic_p)
8200             {
8201               if (sreloc == NULL)
8202                 {
8203                   sreloc = mips_elf_rel_dyn_section (info, TRUE);
8204                   if (sreloc == NULL)
8205                     return FALSE;
8206                 }
8207               if (info->shared && h == NULL)
8208                 {
8209                   /* When creating a shared object, we must copy these
8210                      reloc types into the output file as R_MIPS_REL32
8211                      relocs.  Make room for this reloc in .rel(a).dyn.  */
8212                   mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
8213                   if (MIPS_ELF_READONLY_SECTION (sec))
8214                     /* We tell the dynamic linker that there are
8215                        relocations against the text segment.  */
8216                     info->flags |= DF_TEXTREL;
8217                 }
8218               else
8219                 {
8220                   struct mips_elf_link_hash_entry *hmips;
8221
8222                   /* For a shared object, we must copy this relocation
8223                      unless the symbol turns out to be undefined and
8224                      weak with non-default visibility, in which case
8225                      it will be left as zero.
8226
8227                      We could elide R_MIPS_REL32 for locally binding symbols
8228                      in shared libraries, but do not yet do so.
8229
8230                      For an executable, we only need to copy this
8231                      reloc if the symbol is defined in a dynamic
8232                      object.  */
8233                   hmips = (struct mips_elf_link_hash_entry *) h;
8234                   ++hmips->possibly_dynamic_relocs;
8235                   if (MIPS_ELF_READONLY_SECTION (sec))
8236                     /* We need it to tell the dynamic linker if there
8237                        are relocations against the text segment.  */
8238                     hmips->readonly_reloc = TRUE;
8239                 }
8240             }
8241
8242           if (SGI_COMPAT (abfd))
8243             mips_elf_hash_table (info)->compact_rel_size +=
8244               sizeof (Elf32_External_crinfo);
8245           break;
8246
8247         case R_MIPS_26:
8248         case R_MIPS_GPREL16:
8249         case R_MIPS_LITERAL:
8250         case R_MIPS_GPREL32:
8251         case R_MICROMIPS_26_S1:
8252         case R_MICROMIPS_GPREL16:
8253         case R_MICROMIPS_LITERAL:
8254         case R_MICROMIPS_GPREL7_S2:
8255           if (SGI_COMPAT (abfd))
8256             mips_elf_hash_table (info)->compact_rel_size +=
8257               sizeof (Elf32_External_crinfo);
8258           break;
8259
8260           /* This relocation describes the C++ object vtable hierarchy.
8261              Reconstruct it for later use during GC.  */
8262         case R_MIPS_GNU_VTINHERIT:
8263           if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
8264             return FALSE;
8265           break;
8266
8267           /* This relocation describes which C++ vtable entries are actually
8268              used.  Record for later use during GC.  */
8269         case R_MIPS_GNU_VTENTRY:
8270           BFD_ASSERT (h != NULL);
8271           if (h != NULL
8272               && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset))
8273             return FALSE;
8274           break;
8275
8276         default:
8277           break;
8278         }
8279
8280       /* We must not create a stub for a symbol that has relocations
8281          related to taking the function's address.  This doesn't apply to
8282          VxWorks, where CALL relocs refer to a .got.plt entry instead of
8283          a normal .got entry.  */
8284       if (!htab->is_vxworks && h != NULL)
8285         switch (r_type)
8286           {
8287           default:
8288             ((struct mips_elf_link_hash_entry *) h)->no_fn_stub = TRUE;
8289             break;
8290           case R_MIPS16_CALL16:
8291           case R_MIPS_CALL16:
8292           case R_MIPS_CALL_HI16:
8293           case R_MIPS_CALL_LO16:
8294           case R_MIPS_JALR:
8295           case R_MICROMIPS_CALL16:
8296           case R_MICROMIPS_CALL_HI16:
8297           case R_MICROMIPS_CALL_LO16:
8298           case R_MICROMIPS_JALR:
8299             break;
8300           }
8301
8302       /* See if this reloc would need to refer to a MIPS16 hard-float stub,
8303          if there is one.  We only need to handle global symbols here;
8304          we decide whether to keep or delete stubs for local symbols
8305          when processing the stub's relocations.  */
8306       if (h != NULL
8307           && !mips16_call_reloc_p (r_type)
8308           && !section_allows_mips16_refs_p (sec))
8309         {
8310           struct mips_elf_link_hash_entry *mh;
8311
8312           mh = (struct mips_elf_link_hash_entry *) h;
8313           mh->need_fn_stub = TRUE;
8314         }
8315
8316       /* Refuse some position-dependent relocations when creating a
8317          shared library.  Do not refuse R_MIPS_32 / R_MIPS_64; they're
8318          not PIC, but we can create dynamic relocations and the result
8319          will be fine.  Also do not refuse R_MIPS_LO16, which can be
8320          combined with R_MIPS_GOT16.  */
8321       if (info->shared)
8322         {
8323           switch (r_type)
8324             {
8325             case R_MIPS16_HI16:
8326             case R_MIPS_HI16:
8327             case R_MIPS_HIGHER:
8328             case R_MIPS_HIGHEST:
8329             case R_MICROMIPS_HI16:
8330             case R_MICROMIPS_HIGHER:
8331             case R_MICROMIPS_HIGHEST:
8332               /* Don't refuse a high part relocation if it's against
8333                  no symbol (e.g. part of a compound relocation).  */
8334               if (r_symndx == STN_UNDEF)
8335                 break;
8336
8337               /* R_MIPS_HI16 against _gp_disp is used for $gp setup,
8338                  and has a special meaning.  */
8339               if (!NEWABI_P (abfd) && h != NULL
8340                   && strcmp (h->root.root.string, "_gp_disp") == 0)
8341                 break;
8342
8343               /* Likewise __GOTT_BASE__ and __GOTT_INDEX__ on VxWorks.  */
8344               if (is_gott_symbol (info, h))
8345                 break;
8346
8347               /* FALLTHROUGH */
8348
8349             case R_MIPS16_26:
8350             case R_MIPS_26:
8351             case R_MICROMIPS_26_S1:
8352               howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, FALSE);
8353               (*_bfd_error_handler)
8354                 (_("%B: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC"),
8355                  abfd, howto->name,
8356                  (h) ? h->root.root.string : "a local symbol");
8357               bfd_set_error (bfd_error_bad_value);
8358               return FALSE;
8359             default:
8360               break;
8361             }
8362         }
8363     }
8364
8365   return TRUE;
8366 }
8367 \f
8368 bfd_boolean
8369 _bfd_mips_relax_section (bfd *abfd, asection *sec,
8370                          struct bfd_link_info *link_info,
8371                          bfd_boolean *again)
8372 {
8373   Elf_Internal_Rela *internal_relocs;
8374   Elf_Internal_Rela *irel, *irelend;
8375   Elf_Internal_Shdr *symtab_hdr;
8376   bfd_byte *contents = NULL;
8377   size_t extsymoff;
8378   bfd_boolean changed_contents = FALSE;
8379   bfd_vma sec_start = sec->output_section->vma + sec->output_offset;
8380   Elf_Internal_Sym *isymbuf = NULL;
8381
8382   /* We are not currently changing any sizes, so only one pass.  */
8383   *again = FALSE;
8384
8385   if (link_info->relocatable)
8386     return TRUE;
8387
8388   internal_relocs = _bfd_elf_link_read_relocs (abfd, sec, NULL, NULL,
8389                                                link_info->keep_memory);
8390   if (internal_relocs == NULL)
8391     return TRUE;
8392
8393   irelend = internal_relocs + sec->reloc_count
8394     * get_elf_backend_data (abfd)->s->int_rels_per_ext_rel;
8395   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
8396   extsymoff = (elf_bad_symtab (abfd)) ? 0 : symtab_hdr->sh_info;
8397
8398   for (irel = internal_relocs; irel < irelend; irel++)
8399     {
8400       bfd_vma symval;
8401       bfd_signed_vma sym_offset;
8402       unsigned int r_type;
8403       unsigned long r_symndx;
8404       asection *sym_sec;
8405       unsigned long instruction;
8406
8407       /* Turn jalr into bgezal, and jr into beq, if they're marked
8408          with a JALR relocation, that indicate where they jump to.
8409          This saves some pipeline bubbles.  */
8410       r_type = ELF_R_TYPE (abfd, irel->r_info);
8411       if (r_type != R_MIPS_JALR)
8412         continue;
8413
8414       r_symndx = ELF_R_SYM (abfd, irel->r_info);
8415       /* Compute the address of the jump target.  */
8416       if (r_symndx >= extsymoff)
8417         {
8418           struct mips_elf_link_hash_entry *h
8419             = ((struct mips_elf_link_hash_entry *)
8420                elf_sym_hashes (abfd) [r_symndx - extsymoff]);
8421
8422           while (h->root.root.type == bfd_link_hash_indirect
8423                  || h->root.root.type == bfd_link_hash_warning)
8424             h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
8425
8426           /* If a symbol is undefined, or if it may be overridden,
8427              skip it.  */
8428           if (! ((h->root.root.type == bfd_link_hash_defined
8429                   || h->root.root.type == bfd_link_hash_defweak)
8430                  && h->root.root.u.def.section)
8431               || (link_info->shared && ! link_info->symbolic
8432                   && !h->root.forced_local))
8433             continue;
8434
8435           sym_sec = h->root.root.u.def.section;
8436           if (sym_sec->output_section)
8437             symval = (h->root.root.u.def.value
8438                       + sym_sec->output_section->vma
8439                       + sym_sec->output_offset);
8440           else
8441             symval = h->root.root.u.def.value;
8442         }
8443       else
8444         {
8445           Elf_Internal_Sym *isym;
8446
8447           /* Read this BFD's symbols if we haven't done so already.  */
8448           if (isymbuf == NULL && symtab_hdr->sh_info != 0)
8449             {
8450               isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
8451               if (isymbuf == NULL)
8452                 isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
8453                                                 symtab_hdr->sh_info, 0,
8454                                                 NULL, NULL, NULL);
8455               if (isymbuf == NULL)
8456                 goto relax_return;
8457             }
8458
8459           isym = isymbuf + r_symndx;
8460           if (isym->st_shndx == SHN_UNDEF)
8461             continue;
8462           else if (isym->st_shndx == SHN_ABS)
8463             sym_sec = bfd_abs_section_ptr;
8464           else if (isym->st_shndx == SHN_COMMON)
8465             sym_sec = bfd_com_section_ptr;
8466           else
8467             sym_sec
8468               = bfd_section_from_elf_index (abfd, isym->st_shndx);
8469           symval = isym->st_value
8470             + sym_sec->output_section->vma
8471             + sym_sec->output_offset;
8472         }
8473
8474       /* Compute branch offset, from delay slot of the jump to the
8475          branch target.  */
8476       sym_offset = (symval + irel->r_addend)
8477         - (sec_start + irel->r_offset + 4);
8478
8479       /* Branch offset must be properly aligned.  */
8480       if ((sym_offset & 3) != 0)
8481         continue;
8482
8483       sym_offset >>= 2;
8484
8485       /* Check that it's in range.  */
8486       if (sym_offset < -0x8000 || sym_offset >= 0x8000)
8487         continue;
8488
8489       /* Get the section contents if we haven't done so already.  */
8490       if (!mips_elf_get_section_contents (abfd, sec, &contents))
8491         goto relax_return;
8492
8493       instruction = bfd_get_32 (abfd, contents + irel->r_offset);
8494
8495       /* If it was jalr <reg>, turn it into bgezal $zero, <target>.  */
8496       if ((instruction & 0xfc1fffff) == 0x0000f809)
8497         instruction = 0x04110000;
8498       /* If it was jr <reg>, turn it into b <target>.  */
8499       else if ((instruction & 0xfc1fffff) == 0x00000008)
8500         instruction = 0x10000000;
8501       else
8502         continue;
8503
8504       instruction |= (sym_offset & 0xffff);
8505       bfd_put_32 (abfd, instruction, contents + irel->r_offset);
8506       changed_contents = TRUE;
8507     }
8508
8509   if (contents != NULL
8510       && elf_section_data (sec)->this_hdr.contents != contents)
8511     {
8512       if (!changed_contents && !link_info->keep_memory)
8513         free (contents);
8514       else
8515         {
8516           /* Cache the section contents for elf_link_input_bfd.  */
8517           elf_section_data (sec)->this_hdr.contents = contents;
8518         }
8519     }
8520   return TRUE;
8521
8522  relax_return:
8523   if (contents != NULL
8524       && elf_section_data (sec)->this_hdr.contents != contents)
8525     free (contents);
8526   return FALSE;
8527 }
8528 \f
8529 /* Allocate space for global sym dynamic relocs.  */
8530
8531 static bfd_boolean
8532 allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
8533 {
8534   struct bfd_link_info *info = inf;
8535   bfd *dynobj;
8536   struct mips_elf_link_hash_entry *hmips;
8537   struct mips_elf_link_hash_table *htab;
8538
8539   htab = mips_elf_hash_table (info);
8540   BFD_ASSERT (htab != NULL);
8541
8542   dynobj = elf_hash_table (info)->dynobj;
8543   hmips = (struct mips_elf_link_hash_entry *) h;
8544
8545   /* VxWorks executables are handled elsewhere; we only need to
8546      allocate relocations in shared objects.  */
8547   if (htab->is_vxworks && !info->shared)
8548     return TRUE;
8549
8550   /* Ignore indirect symbols.  All relocations against such symbols
8551      will be redirected to the target symbol.  */
8552   if (h->root.type == bfd_link_hash_indirect)
8553     return TRUE;
8554
8555   /* If this symbol is defined in a dynamic object, or we are creating
8556      a shared library, we will need to copy any R_MIPS_32 or
8557      R_MIPS_REL32 relocs against it into the output file.  */
8558   if (! info->relocatable
8559       && hmips->possibly_dynamic_relocs != 0
8560       && (h->root.type == bfd_link_hash_defweak
8561           || (!h->def_regular && !ELF_COMMON_DEF_P (h))
8562           || info->shared))
8563     {
8564       bfd_boolean do_copy = TRUE;
8565
8566       if (h->root.type == bfd_link_hash_undefweak)
8567         {
8568           /* Do not copy relocations for undefined weak symbols with
8569              non-default visibility.  */
8570           if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
8571             do_copy = FALSE;
8572
8573           /* Make sure undefined weak symbols are output as a dynamic
8574              symbol in PIEs.  */
8575           else if (h->dynindx == -1 && !h->forced_local)
8576             {
8577               if (! bfd_elf_link_record_dynamic_symbol (info, h))
8578                 return FALSE;
8579             }
8580         }
8581
8582       if (do_copy)
8583         {
8584           /* Even though we don't directly need a GOT entry for this symbol,
8585              the SVR4 psABI requires it to have a dynamic symbol table
8586              index greater that DT_MIPS_GOTSYM if there are dynamic
8587              relocations against it.
8588
8589              VxWorks does not enforce the same mapping between the GOT
8590              and the symbol table, so the same requirement does not
8591              apply there.  */
8592           if (!htab->is_vxworks)
8593             {
8594               if (hmips->global_got_area > GGA_RELOC_ONLY)
8595                 hmips->global_got_area = GGA_RELOC_ONLY;
8596               hmips->got_only_for_calls = FALSE;
8597             }
8598
8599           mips_elf_allocate_dynamic_relocations
8600             (dynobj, info, hmips->possibly_dynamic_relocs);
8601           if (hmips->readonly_reloc)
8602             /* We tell the dynamic linker that there are relocations
8603                against the text segment.  */
8604             info->flags |= DF_TEXTREL;
8605         }
8606     }
8607
8608   return TRUE;
8609 }
8610
8611 /* Adjust a symbol defined by a dynamic object and referenced by a
8612    regular object.  The current definition is in some section of the
8613    dynamic object, but we're not including those sections.  We have to
8614    change the definition to something the rest of the link can
8615    understand.  */
8616
8617 bfd_boolean
8618 _bfd_mips_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
8619                                      struct elf_link_hash_entry *h)
8620 {
8621   bfd *dynobj;
8622   struct mips_elf_link_hash_entry *hmips;
8623   struct mips_elf_link_hash_table *htab;
8624
8625   htab = mips_elf_hash_table (info);
8626   BFD_ASSERT (htab != NULL);
8627
8628   dynobj = elf_hash_table (info)->dynobj;
8629   hmips = (struct mips_elf_link_hash_entry *) h;
8630
8631   /* Make sure we know what is going on here.  */
8632   BFD_ASSERT (dynobj != NULL
8633               && (h->needs_plt
8634                   || h->u.weakdef != NULL
8635                   || (h->def_dynamic
8636                       && h->ref_regular
8637                       && !h->def_regular)));
8638
8639   hmips = (struct mips_elf_link_hash_entry *) h;
8640
8641   /* If there are call relocations against an externally-defined symbol,
8642      see whether we can create a MIPS lazy-binding stub for it.  We can
8643      only do this if all references to the function are through call
8644      relocations, and in that case, the traditional lazy-binding stubs
8645      are much more efficient than PLT entries.
8646
8647      Traditional stubs are only available on SVR4 psABI-based systems;
8648      VxWorks always uses PLTs instead.  */
8649   if (!htab->is_vxworks && h->needs_plt && !hmips->no_fn_stub)
8650     {
8651       if (! elf_hash_table (info)->dynamic_sections_created)
8652         return TRUE;
8653
8654       /* If this symbol is not defined in a regular file, then set
8655          the symbol to the stub location.  This is required to make
8656          function pointers compare as equal between the normal
8657          executable and the shared library.  */
8658       if (!h->def_regular)
8659         {
8660           hmips->needs_lazy_stub = TRUE;
8661           htab->lazy_stub_count++;
8662           return TRUE;
8663         }
8664     }
8665   /* As above, VxWorks requires PLT entries for externally-defined
8666      functions that are only accessed through call relocations.
8667
8668      Both VxWorks and non-VxWorks targets also need PLT entries if there
8669      are static-only relocations against an externally-defined function.
8670      This can technically occur for shared libraries if there are
8671      branches to the symbol, although it is unlikely that this will be
8672      used in practice due to the short ranges involved.  It can occur
8673      for any relative or absolute relocation in executables; in that
8674      case, the PLT entry becomes the function's canonical address.  */
8675   else if (((h->needs_plt && !hmips->no_fn_stub)
8676             || (h->type == STT_FUNC && hmips->has_static_relocs))
8677            && htab->use_plts_and_copy_relocs
8678            && !SYMBOL_CALLS_LOCAL (info, h)
8679            && !(ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
8680                 && h->root.type == bfd_link_hash_undefweak))
8681     {
8682       /* If this is the first symbol to need a PLT entry, allocate room
8683          for the header.  */
8684       if (htab->splt->size == 0)
8685         {
8686           BFD_ASSERT (htab->sgotplt->size == 0);
8687
8688           /* If we're using the PLT additions to the psABI, each PLT
8689              entry is 16 bytes and the PLT0 entry is 32 bytes.
8690              Encourage better cache usage by aligning.  We do this
8691              lazily to avoid pessimizing traditional objects.  */
8692           if (!htab->is_vxworks
8693               && !bfd_set_section_alignment (dynobj, htab->splt, 5))
8694             return FALSE;
8695
8696           /* Make sure that .got.plt is word-aligned.  We do this lazily
8697              for the same reason as above.  */
8698           if (!bfd_set_section_alignment (dynobj, htab->sgotplt,
8699                                           MIPS_ELF_LOG_FILE_ALIGN (dynobj)))
8700             return FALSE;
8701
8702           htab->splt->size += htab->plt_header_size;
8703
8704           /* On non-VxWorks targets, the first two entries in .got.plt
8705              are reserved.  */
8706           if (!htab->is_vxworks)
8707             htab->sgotplt->size
8708               += get_elf_backend_data (dynobj)->got_header_size;
8709
8710           /* On VxWorks, also allocate room for the header's
8711              .rela.plt.unloaded entries.  */
8712           if (htab->is_vxworks && !info->shared)
8713             htab->srelplt2->size += 2 * sizeof (Elf32_External_Rela);
8714         }
8715
8716       /* Assign the next .plt entry to this symbol.  */
8717       h->plt.offset = htab->splt->size;
8718       htab->splt->size += htab->plt_entry_size;
8719
8720       /* If the output file has no definition of the symbol, set the
8721          symbol's value to the address of the stub.  */
8722       if (!info->shared && !h->def_regular)
8723         {
8724           h->root.u.def.section = htab->splt;
8725           h->root.u.def.value = h->plt.offset;
8726           /* For VxWorks, point at the PLT load stub rather than the
8727              lazy resolution stub; this stub will become the canonical
8728              function address.  */
8729           if (htab->is_vxworks)
8730             h->root.u.def.value += 8;
8731         }
8732
8733       /* Make room for the .got.plt entry and the R_MIPS_JUMP_SLOT
8734          relocation.  */
8735       htab->sgotplt->size += MIPS_ELF_GOT_SIZE (dynobj);
8736       htab->srelplt->size += (htab->is_vxworks
8737                               ? MIPS_ELF_RELA_SIZE (dynobj)
8738                               : MIPS_ELF_REL_SIZE (dynobj));
8739
8740       /* Make room for the .rela.plt.unloaded relocations.  */
8741       if (htab->is_vxworks && !info->shared)
8742         htab->srelplt2->size += 3 * sizeof (Elf32_External_Rela);
8743
8744       /* All relocations against this symbol that could have been made
8745          dynamic will now refer to the PLT entry instead.  */
8746       hmips->possibly_dynamic_relocs = 0;
8747
8748       return TRUE;
8749     }
8750
8751   /* If this is a weak symbol, and there is a real definition, the
8752      processor independent code will have arranged for us to see the
8753      real definition first, and we can just use the same value.  */
8754   if (h->u.weakdef != NULL)
8755     {
8756       BFD_ASSERT (h->u.weakdef->root.type == bfd_link_hash_defined
8757                   || h->u.weakdef->root.type == bfd_link_hash_defweak);
8758       h->root.u.def.section = h->u.weakdef->root.u.def.section;
8759       h->root.u.def.value = h->u.weakdef->root.u.def.value;
8760       return TRUE;
8761     }
8762
8763   /* Otherwise, there is nothing further to do for symbols defined
8764      in regular objects.  */
8765   if (h->def_regular)
8766     return TRUE;
8767
8768   /* There's also nothing more to do if we'll convert all relocations
8769      against this symbol into dynamic relocations.  */
8770   if (!hmips->has_static_relocs)
8771     return TRUE;
8772
8773   /* We're now relying on copy relocations.  Complain if we have
8774      some that we can't convert.  */
8775   if (!htab->use_plts_and_copy_relocs || info->shared)
8776     {
8777       (*_bfd_error_handler) (_("non-dynamic relocations refer to "
8778                                "dynamic symbol %s"),
8779                              h->root.root.string);
8780       bfd_set_error (bfd_error_bad_value);
8781       return FALSE;
8782     }
8783
8784   /* We must allocate the symbol in our .dynbss section, which will
8785      become part of the .bss section of the executable.  There will be
8786      an entry for this symbol in the .dynsym section.  The dynamic
8787      object will contain position independent code, so all references
8788      from the dynamic object to this symbol will go through the global
8789      offset table.  The dynamic linker will use the .dynsym entry to
8790      determine the address it must put in the global offset table, so
8791      both the dynamic object and the regular object will refer to the
8792      same memory location for the variable.  */
8793
8794   if ((h->root.u.def.section->flags & SEC_ALLOC) != 0)
8795     {
8796       if (htab->is_vxworks)
8797         htab->srelbss->size += sizeof (Elf32_External_Rela);
8798       else
8799         mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
8800       h->needs_copy = 1;
8801     }
8802
8803   /* All relocations against this symbol that could have been made
8804      dynamic will now refer to the local copy instead.  */
8805   hmips->possibly_dynamic_relocs = 0;
8806
8807   return _bfd_elf_adjust_dynamic_copy (h, htab->sdynbss);
8808 }
8809 \f
8810 /* This function is called after all the input files have been read,
8811    and the input sections have been assigned to output sections.  We
8812    check for any mips16 stub sections that we can discard.  */
8813
8814 bfd_boolean
8815 _bfd_mips_elf_always_size_sections (bfd *output_bfd,
8816                                     struct bfd_link_info *info)
8817 {
8818   asection *ri;
8819   struct mips_elf_link_hash_table *htab;
8820   struct mips_htab_traverse_info hti;
8821
8822   htab = mips_elf_hash_table (info);
8823   BFD_ASSERT (htab != NULL);
8824
8825   /* The .reginfo section has a fixed size.  */
8826   ri = bfd_get_section_by_name (output_bfd, ".reginfo");
8827   if (ri != NULL)
8828     bfd_set_section_size (output_bfd, ri, sizeof (Elf32_External_RegInfo));
8829
8830   hti.info = info;
8831   hti.output_bfd = output_bfd;
8832   hti.error = FALSE;
8833   mips_elf_link_hash_traverse (mips_elf_hash_table (info),
8834                                mips_elf_check_symbols, &hti);
8835   if (hti.error)
8836     return FALSE;
8837
8838   return TRUE;
8839 }
8840
8841 /* If the link uses a GOT, lay it out and work out its size.  */
8842
8843 static bfd_boolean
8844 mips_elf_lay_out_got (bfd *output_bfd, struct bfd_link_info *info)
8845 {
8846   bfd *dynobj;
8847   asection *s;
8848   struct mips_got_info *g;
8849   bfd_size_type loadable_size = 0;
8850   bfd_size_type page_gotno;
8851   bfd *sub;
8852   struct mips_elf_count_tls_arg count_tls_arg;
8853   struct mips_elf_link_hash_table *htab;
8854
8855   htab = mips_elf_hash_table (info);
8856   BFD_ASSERT (htab != NULL);
8857
8858   s = htab->sgot;
8859   if (s == NULL)
8860     return TRUE;
8861
8862   dynobj = elf_hash_table (info)->dynobj;
8863   g = htab->got_info;
8864
8865   /* Allocate room for the reserved entries.  VxWorks always reserves
8866      3 entries; other objects only reserve 2 entries.  */
8867   BFD_ASSERT (g->assigned_gotno == 0);
8868   if (htab->is_vxworks)
8869     htab->reserved_gotno = 3;
8870   else
8871     htab->reserved_gotno = 2;
8872   g->local_gotno += htab->reserved_gotno;
8873   g->assigned_gotno = htab->reserved_gotno;
8874
8875   /* Replace entries for indirect and warning symbols with entries for
8876      the target symbol.  */
8877   if (!mips_elf_resolve_final_got_entries (g))
8878     return FALSE;
8879
8880   /* Count the number of GOT symbols.  */
8881   mips_elf_link_hash_traverse (htab, mips_elf_count_got_symbols, info);
8882
8883   /* Calculate the total loadable size of the output.  That
8884      will give us the maximum number of GOT_PAGE entries
8885      required.  */
8886   for (sub = info->input_bfds; sub; sub = sub->link_next)
8887     {
8888       asection *subsection;
8889
8890       for (subsection = sub->sections;
8891            subsection;
8892            subsection = subsection->next)
8893         {
8894           if ((subsection->flags & SEC_ALLOC) == 0)
8895             continue;
8896           loadable_size += ((subsection->size + 0xf)
8897                             &~ (bfd_size_type) 0xf);
8898         }
8899     }
8900
8901   if (htab->is_vxworks)
8902     /* There's no need to allocate page entries for VxWorks; R_MIPS*_GOT16
8903        relocations against local symbols evaluate to "G", and the EABI does
8904        not include R_MIPS_GOT_PAGE.  */
8905     page_gotno = 0;
8906   else
8907     /* Assume there are two loadable segments consisting of contiguous
8908        sections.  Is 5 enough?  */
8909     page_gotno = (loadable_size >> 16) + 5;
8910
8911   /* Choose the smaller of the two estimates; both are intended to be
8912      conservative.  */
8913   if (page_gotno > g->page_gotno)
8914     page_gotno = g->page_gotno;
8915
8916   g->local_gotno += page_gotno;
8917   s->size += g->local_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
8918   s->size += g->global_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
8919
8920   /* We need to calculate tls_gotno for global symbols at this point
8921      instead of building it up earlier, to avoid doublecounting
8922      entries for one global symbol from multiple input files.  */
8923   count_tls_arg.info = info;
8924   count_tls_arg.needed = 0;
8925   elf_link_hash_traverse (elf_hash_table (info),
8926                           mips_elf_count_global_tls_entries,
8927                           &count_tls_arg);
8928   g->tls_gotno += count_tls_arg.needed;
8929   s->size += g->tls_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
8930
8931   /* VxWorks does not support multiple GOTs.  It initializes $gp to
8932      __GOTT_BASE__[__GOTT_INDEX__], the value of which is set by the
8933      dynamic loader.  */
8934   if (htab->is_vxworks)
8935     {
8936       /* VxWorks executables do not need a GOT.  */
8937       if (info->shared)
8938         {
8939           /* Each VxWorks GOT entry needs an explicit relocation.  */
8940           unsigned int count;
8941
8942           count = g->global_gotno + g->local_gotno - htab->reserved_gotno;
8943           if (count)
8944             mips_elf_allocate_dynamic_relocations (dynobj, info, count);
8945         }
8946     }
8947   else if (s->size > MIPS_ELF_GOT_MAX_SIZE (info))
8948     {
8949       if (!mips_elf_multi_got (output_bfd, info, s, page_gotno))
8950         return FALSE;
8951     }
8952   else
8953     {
8954       struct mips_elf_count_tls_arg arg;
8955
8956       /* Set up TLS entries.  */
8957       g->tls_assigned_gotno = g->global_gotno + g->local_gotno;
8958       htab_traverse (g->got_entries, mips_elf_initialize_tls_index, g);
8959
8960       /* Allocate room for the TLS relocations.  */
8961       arg.info = info;
8962       arg.needed = 0;
8963       htab_traverse (g->got_entries, mips_elf_count_local_tls_relocs, &arg);
8964       elf_link_hash_traverse (elf_hash_table (info),
8965                               mips_elf_count_global_tls_relocs,
8966                               &arg);
8967       if (arg.needed)
8968         mips_elf_allocate_dynamic_relocations (dynobj, info, arg.needed);
8969     }
8970
8971   return TRUE;
8972 }
8973
8974 /* Estimate the size of the .MIPS.stubs section.  */
8975
8976 static void
8977 mips_elf_estimate_stub_size (bfd *output_bfd, struct bfd_link_info *info)
8978 {
8979   struct mips_elf_link_hash_table *htab;
8980   bfd_size_type dynsymcount;
8981
8982   htab = mips_elf_hash_table (info);
8983   BFD_ASSERT (htab != NULL);
8984
8985   if (htab->lazy_stub_count == 0)
8986     return;
8987
8988   /* IRIX rld assumes that a function stub isn't at the end of the .text
8989      section, so add a dummy entry to the end.  */
8990   htab->lazy_stub_count++;
8991
8992   /* Get a worst-case estimate of the number of dynamic symbols needed.
8993      At this point, dynsymcount does not account for section symbols
8994      and count_section_dynsyms may overestimate the number that will
8995      be needed.  */
8996   dynsymcount = (elf_hash_table (info)->dynsymcount
8997                  + count_section_dynsyms (output_bfd, info));
8998
8999   /* Determine the size of one stub entry.  */
9000   htab->function_stub_size = (dynsymcount > 0x10000
9001                               ? MIPS_FUNCTION_STUB_BIG_SIZE
9002                               : MIPS_FUNCTION_STUB_NORMAL_SIZE);
9003
9004   htab->sstubs->size = htab->lazy_stub_count * htab->function_stub_size;
9005 }
9006
9007 /* A mips_elf_link_hash_traverse callback for which DATA points to the
9008    MIPS hash table.  If H needs a traditional MIPS lazy-binding stub,
9009    allocate an entry in the stubs section.  */
9010
9011 static bfd_boolean
9012 mips_elf_allocate_lazy_stub (struct mips_elf_link_hash_entry *h, void **data)
9013 {
9014   struct mips_elf_link_hash_table *htab;
9015
9016   htab = (struct mips_elf_link_hash_table *) data;
9017   if (h->needs_lazy_stub)
9018     {
9019       h->root.root.u.def.section = htab->sstubs;
9020       h->root.root.u.def.value = htab->sstubs->size;
9021       h->root.plt.offset = htab->sstubs->size;
9022       htab->sstubs->size += htab->function_stub_size;
9023     }
9024   return TRUE;
9025 }
9026
9027 /* Allocate offsets in the stubs section to each symbol that needs one.
9028    Set the final size of the .MIPS.stub section.  */
9029
9030 static void
9031 mips_elf_lay_out_lazy_stubs (struct bfd_link_info *info)
9032 {
9033   struct mips_elf_link_hash_table *htab;
9034
9035   htab = mips_elf_hash_table (info);
9036   BFD_ASSERT (htab != NULL);
9037
9038   if (htab->lazy_stub_count == 0)
9039     return;
9040
9041   htab->sstubs->size = 0;
9042   mips_elf_link_hash_traverse (htab, mips_elf_allocate_lazy_stub, htab);
9043   htab->sstubs->size += htab->function_stub_size;
9044   BFD_ASSERT (htab->sstubs->size
9045               == htab->lazy_stub_count * htab->function_stub_size);
9046 }
9047
9048 /* Set the sizes of the dynamic sections.  */
9049
9050 bfd_boolean
9051 _bfd_mips_elf_size_dynamic_sections (bfd *output_bfd,
9052                                      struct bfd_link_info *info)
9053 {
9054   bfd *dynobj;
9055   asection *s, *sreldyn;
9056   bfd_boolean reltext;
9057   struct mips_elf_link_hash_table *htab;
9058
9059   htab = mips_elf_hash_table (info);
9060   BFD_ASSERT (htab != NULL);
9061   dynobj = elf_hash_table (info)->dynobj;
9062   BFD_ASSERT (dynobj != NULL);
9063
9064   if (elf_hash_table (info)->dynamic_sections_created)
9065     {
9066       /* Set the contents of the .interp section to the interpreter.  */
9067       if (info->executable)
9068         {
9069           s = bfd_get_linker_section (dynobj, ".interp");
9070           BFD_ASSERT (s != NULL);
9071           s->size
9072             = strlen (ELF_DYNAMIC_INTERPRETER (output_bfd)) + 1;
9073           s->contents
9074             = (bfd_byte *) ELF_DYNAMIC_INTERPRETER (output_bfd);
9075         }
9076
9077       /* Create a symbol for the PLT, if we know that we are using it.  */
9078       if (htab->splt && htab->splt->size > 0 && htab->root.hplt == NULL)
9079         {
9080           struct elf_link_hash_entry *h;
9081
9082           BFD_ASSERT (htab->use_plts_and_copy_relocs);
9083
9084           h = _bfd_elf_define_linkage_sym (dynobj, info, htab->splt,
9085                                            "_PROCEDURE_LINKAGE_TABLE_");
9086           htab->root.hplt = h;
9087           if (h == NULL)
9088             return FALSE;
9089           h->type = STT_FUNC;
9090         }
9091     }
9092
9093   /* Allocate space for global sym dynamic relocs.  */
9094   elf_link_hash_traverse (&htab->root, allocate_dynrelocs, info);
9095
9096   mips_elf_estimate_stub_size (output_bfd, info);
9097
9098   if (!mips_elf_lay_out_got (output_bfd, info))
9099     return FALSE;
9100
9101   mips_elf_lay_out_lazy_stubs (info);
9102
9103   /* The check_relocs and adjust_dynamic_symbol entry points have
9104      determined the sizes of the various dynamic sections.  Allocate
9105      memory for them.  */
9106   reltext = FALSE;
9107   for (s = dynobj->sections; s != NULL; s = s->next)
9108     {
9109       const char *name;
9110
9111       /* It's OK to base decisions on the section name, because none
9112          of the dynobj section names depend upon the input files.  */
9113       name = bfd_get_section_name (dynobj, s);
9114
9115       if ((s->flags & SEC_LINKER_CREATED) == 0)
9116         continue;
9117
9118       if (CONST_STRNEQ (name, ".rel"))
9119         {
9120           if (s->size != 0)
9121             {
9122               const char *outname;
9123               asection *target;
9124
9125               /* If this relocation section applies to a read only
9126                  section, then we probably need a DT_TEXTREL entry.
9127                  If the relocation section is .rel(a).dyn, we always
9128                  assert a DT_TEXTREL entry rather than testing whether
9129                  there exists a relocation to a read only section or
9130                  not.  */
9131               outname = bfd_get_section_name (output_bfd,
9132                                               s->output_section);
9133               target = bfd_get_section_by_name (output_bfd, outname + 4);
9134               if ((target != NULL
9135                    && (target->flags & SEC_READONLY) != 0
9136                    && (target->flags & SEC_ALLOC) != 0)
9137                   || strcmp (outname, MIPS_ELF_REL_DYN_NAME (info)) == 0)
9138                 reltext = TRUE;
9139
9140               /* We use the reloc_count field as a counter if we need
9141                  to copy relocs into the output file.  */
9142               if (strcmp (name, MIPS_ELF_REL_DYN_NAME (info)) != 0)
9143                 s->reloc_count = 0;
9144
9145               /* If combreloc is enabled, elf_link_sort_relocs() will
9146                  sort relocations, but in a different way than we do,
9147                  and before we're done creating relocations.  Also, it
9148                  will move them around between input sections'
9149                  relocation's contents, so our sorting would be
9150                  broken, so don't let it run.  */
9151               info->combreloc = 0;
9152             }
9153         }
9154       else if (! info->shared
9155                && ! mips_elf_hash_table (info)->use_rld_obj_head
9156                && CONST_STRNEQ (name, ".rld_map"))
9157         {
9158           /* We add a room for __rld_map.  It will be filled in by the
9159              rtld to contain a pointer to the _r_debug structure.  */
9160           s->size += MIPS_ELF_RLD_MAP_SIZE (output_bfd);
9161         }
9162       else if (SGI_COMPAT (output_bfd)
9163                && CONST_STRNEQ (name, ".compact_rel"))
9164         s->size += mips_elf_hash_table (info)->compact_rel_size;
9165       else if (s == htab->splt)
9166         {
9167           /* If the last PLT entry has a branch delay slot, allocate
9168              room for an extra nop to fill the delay slot.  This is
9169              for CPUs without load interlocking.  */
9170           if (! LOAD_INTERLOCKS_P (output_bfd)
9171               && ! htab->is_vxworks && s->size > 0)
9172             s->size += 4;
9173         }
9174       else if (! CONST_STRNEQ (name, ".init")
9175                && s != htab->sgot
9176                && s != htab->sgotplt
9177                && s != htab->sstubs
9178                && s != htab->sdynbss)
9179         {
9180           /* It's not one of our sections, so don't allocate space.  */
9181           continue;
9182         }
9183
9184       if (s->size == 0)
9185         {
9186           s->flags |= SEC_EXCLUDE;
9187           continue;
9188         }
9189
9190       if ((s->flags & SEC_HAS_CONTENTS) == 0)
9191         continue;
9192
9193       /* Allocate memory for the section contents.  */
9194       s->contents = bfd_zalloc (dynobj, s->size);
9195       if (s->contents == NULL)
9196         {
9197           bfd_set_error (bfd_error_no_memory);
9198           return FALSE;
9199         }
9200     }
9201
9202   if (elf_hash_table (info)->dynamic_sections_created)
9203     {
9204       /* Add some entries to the .dynamic section.  We fill in the
9205          values later, in _bfd_mips_elf_finish_dynamic_sections, but we
9206          must add the entries now so that we get the correct size for
9207          the .dynamic section.  */
9208
9209       /* SGI object has the equivalence of DT_DEBUG in the
9210          DT_MIPS_RLD_MAP entry.  This must come first because glibc
9211          only fills in DT_MIPS_RLD_MAP (not DT_DEBUG) and some tools
9212          may only look at the first one they see.  */
9213       if (!info->shared
9214           && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_MAP, 0))
9215         return FALSE;
9216
9217       /* The DT_DEBUG entry may be filled in by the dynamic linker and
9218          used by the debugger.  */
9219       if (info->executable
9220           && !SGI_COMPAT (output_bfd)
9221           && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_DEBUG, 0))
9222         return FALSE;
9223
9224       if (reltext && (SGI_COMPAT (output_bfd) || htab->is_vxworks))
9225         info->flags |= DF_TEXTREL;
9226
9227       if ((info->flags & DF_TEXTREL) != 0)
9228         {
9229           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_TEXTREL, 0))
9230             return FALSE;
9231
9232           /* Clear the DF_TEXTREL flag.  It will be set again if we
9233              write out an actual text relocation; we may not, because
9234              at this point we do not know whether e.g. any .eh_frame
9235              absolute relocations have been converted to PC-relative.  */
9236           info->flags &= ~DF_TEXTREL;
9237         }
9238
9239       if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTGOT, 0))
9240         return FALSE;
9241
9242       sreldyn = mips_elf_rel_dyn_section (info, FALSE);
9243       if (htab->is_vxworks)
9244         {
9245           /* VxWorks uses .rela.dyn instead of .rel.dyn.  It does not
9246              use any of the DT_MIPS_* tags.  */
9247           if (sreldyn && sreldyn->size > 0)
9248             {
9249               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELA, 0))
9250                 return FALSE;
9251
9252               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELASZ, 0))
9253                 return FALSE;
9254
9255               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELAENT, 0))
9256                 return FALSE;
9257             }
9258         }
9259       else
9260         {
9261           if (sreldyn && sreldyn->size > 0)
9262             {
9263               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_REL, 0))
9264                 return FALSE;
9265
9266               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELSZ, 0))
9267                 return FALSE;
9268
9269               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELENT, 0))
9270                 return FALSE;
9271             }
9272
9273           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_VERSION, 0))
9274             return FALSE;
9275
9276           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_FLAGS, 0))
9277             return FALSE;
9278
9279           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_BASE_ADDRESS, 0))
9280             return FALSE;
9281
9282           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_LOCAL_GOTNO, 0))
9283             return FALSE;
9284
9285           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_SYMTABNO, 0))
9286             return FALSE;
9287
9288           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_UNREFEXTNO, 0))
9289             return FALSE;
9290
9291           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_GOTSYM, 0))
9292             return FALSE;
9293
9294           if (IRIX_COMPAT (dynobj) == ict_irix5
9295               && ! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_HIPAGENO, 0))
9296             return FALSE;
9297
9298           if (IRIX_COMPAT (dynobj) == ict_irix6
9299               && (bfd_get_section_by_name
9300                   (output_bfd, MIPS_ELF_OPTIONS_SECTION_NAME (dynobj)))
9301               && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_OPTIONS, 0))
9302             return FALSE;
9303         }
9304       if (htab->splt->size > 0)
9305         {
9306           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTREL, 0))
9307             return FALSE;
9308
9309           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_JMPREL, 0))
9310             return FALSE;
9311
9312           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTRELSZ, 0))
9313             return FALSE;
9314
9315           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_PLTGOT, 0))
9316             return FALSE;
9317         }
9318       if (htab->is_vxworks
9319           && !elf_vxworks_add_dynamic_entries (output_bfd, info))
9320         return FALSE;
9321     }
9322
9323   return TRUE;
9324 }
9325 \f
9326 /* REL is a relocation in INPUT_BFD that is being copied to OUTPUT_BFD.
9327    Adjust its R_ADDEND field so that it is correct for the output file.
9328    LOCAL_SYMS and LOCAL_SECTIONS are arrays of INPUT_BFD's local symbols
9329    and sections respectively; both use symbol indexes.  */
9330
9331 static void
9332 mips_elf_adjust_addend (bfd *output_bfd, struct bfd_link_info *info,
9333                         bfd *input_bfd, Elf_Internal_Sym *local_syms,
9334                         asection **local_sections, Elf_Internal_Rela *rel)
9335 {
9336   unsigned int r_type, r_symndx;
9337   Elf_Internal_Sym *sym;
9338   asection *sec;
9339
9340   if (mips_elf_local_relocation_p (input_bfd, rel, local_sections))
9341     {
9342       r_type = ELF_R_TYPE (output_bfd, rel->r_info);
9343       if (gprel16_reloc_p (r_type)
9344           || r_type == R_MIPS_GPREL32
9345           || literal_reloc_p (r_type))
9346         {
9347           rel->r_addend += _bfd_get_gp_value (input_bfd);
9348           rel->r_addend -= _bfd_get_gp_value (output_bfd);
9349         }
9350
9351       r_symndx = ELF_R_SYM (output_bfd, rel->r_info);
9352       sym = local_syms + r_symndx;
9353
9354       /* Adjust REL's addend to account for section merging.  */
9355       if (!info->relocatable)
9356         {
9357           sec = local_sections[r_symndx];
9358           _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
9359         }
9360
9361       /* This would normally be done by the rela_normal code in elflink.c.  */
9362       if (ELF_ST_TYPE (sym->st_info) == STT_SECTION)
9363         rel->r_addend += local_sections[r_symndx]->output_offset;
9364     }
9365 }
9366
9367 /* Handle relocations against symbols from removed linkonce sections,
9368    or sections discarded by a linker script.  We use this wrapper around
9369    RELOC_AGAINST_DISCARDED_SECTION to handle triplets of compound relocs
9370    on 64-bit ELF targets.  In this case for any relocation handled, which
9371    always be the first in a triplet, the remaining two have to be processed
9372    together with the first, even if they are R_MIPS_NONE.  It is the symbol
9373    index referred by the first reloc that applies to all the three and the
9374    remaining two never refer to an object symbol.  And it is the final
9375    relocation (the last non-null one) that determines the output field of
9376    the whole relocation so retrieve the corresponding howto structure for
9377    the relocatable field to be cleared by RELOC_AGAINST_DISCARDED_SECTION.
9378
9379    Note that RELOC_AGAINST_DISCARDED_SECTION is a macro that uses "continue"
9380    and therefore requires to be pasted in a loop.  It also defines a block
9381    and does not protect any of its arguments, hence the extra brackets.  */
9382
9383 static void
9384 mips_reloc_against_discarded_section (bfd *output_bfd,
9385                                       struct bfd_link_info *info,
9386                                       bfd *input_bfd, asection *input_section,
9387                                       Elf_Internal_Rela **rel,
9388                                       const Elf_Internal_Rela **relend,
9389                                       bfd_boolean rel_reloc,
9390                                       reloc_howto_type *howto,
9391                                       bfd_byte *contents)
9392 {
9393   const struct elf_backend_data *bed = get_elf_backend_data (output_bfd);
9394   int count = bed->s->int_rels_per_ext_rel;
9395   unsigned int r_type;
9396   int i;
9397
9398   for (i = count - 1; i > 0; i--)
9399     {
9400       r_type = ELF_R_TYPE (output_bfd, (*rel)[i].r_info);
9401       if (r_type != R_MIPS_NONE)
9402         {
9403           howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, r_type, !rel_reloc);
9404           break;
9405         }
9406     }
9407   do
9408     {
9409        RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
9410                                         (*rel), count, (*relend),
9411                                         howto, i, contents);
9412     }
9413   while (0);
9414 }
9415
9416 /* Relocate a MIPS ELF section.  */
9417
9418 bfd_boolean
9419 _bfd_mips_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
9420                                 bfd *input_bfd, asection *input_section,
9421                                 bfd_byte *contents, Elf_Internal_Rela *relocs,
9422                                 Elf_Internal_Sym *local_syms,
9423                                 asection **local_sections)
9424 {
9425   Elf_Internal_Rela *rel;
9426   const Elf_Internal_Rela *relend;
9427   bfd_vma addend = 0;
9428   bfd_boolean use_saved_addend_p = FALSE;
9429   const struct elf_backend_data *bed;
9430
9431   bed = get_elf_backend_data (output_bfd);
9432   relend = relocs + input_section->reloc_count * bed->s->int_rels_per_ext_rel;
9433   for (rel = relocs; rel < relend; ++rel)
9434     {
9435       const char *name;
9436       bfd_vma value = 0;
9437       reloc_howto_type *howto;
9438       bfd_boolean cross_mode_jump_p;
9439       /* TRUE if the relocation is a RELA relocation, rather than a
9440          REL relocation.  */
9441       bfd_boolean rela_relocation_p = TRUE;
9442       unsigned int r_type = ELF_R_TYPE (output_bfd, rel->r_info);
9443       const char *msg;
9444       unsigned long r_symndx;
9445       asection *sec;
9446       Elf_Internal_Shdr *symtab_hdr;
9447       struct elf_link_hash_entry *h;
9448       bfd_boolean rel_reloc;
9449
9450       rel_reloc = (NEWABI_P (input_bfd)
9451                    && mips_elf_rel_relocation_p (input_bfd, input_section,
9452                                                  relocs, rel));
9453       /* Find the relocation howto for this relocation.  */
9454       howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, r_type, !rel_reloc);
9455
9456       r_symndx = ELF_R_SYM (input_bfd, rel->r_info);
9457       symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
9458       if (mips_elf_local_relocation_p (input_bfd, rel, local_sections))
9459         {
9460           sec = local_sections[r_symndx];
9461           h = NULL;
9462         }
9463       else
9464         {
9465           unsigned long extsymoff;
9466
9467           extsymoff = 0;
9468           if (!elf_bad_symtab (input_bfd))
9469             extsymoff = symtab_hdr->sh_info;
9470           h = elf_sym_hashes (input_bfd) [r_symndx - extsymoff];
9471           while (h->root.type == bfd_link_hash_indirect
9472                  || h->root.type == bfd_link_hash_warning)
9473             h = (struct elf_link_hash_entry *) h->root.u.i.link;
9474
9475           sec = NULL;
9476           if (h->root.type == bfd_link_hash_defined
9477               || h->root.type == bfd_link_hash_defweak)
9478             sec = h->root.u.def.section;
9479         }
9480
9481       if (sec != NULL && discarded_section (sec))
9482         {
9483           mips_reloc_against_discarded_section (output_bfd, info, input_bfd,
9484                                                 input_section, &rel, &relend,
9485                                                 rel_reloc, howto, contents);
9486           continue;
9487         }
9488
9489       if (r_type == R_MIPS_64 && ! NEWABI_P (input_bfd))
9490         {
9491           /* Some 32-bit code uses R_MIPS_64.  In particular, people use
9492              64-bit code, but make sure all their addresses are in the
9493              lowermost or uppermost 32-bit section of the 64-bit address
9494              space.  Thus, when they use an R_MIPS_64 they mean what is
9495              usually meant by R_MIPS_32, with the exception that the
9496              stored value is sign-extended to 64 bits.  */
9497           howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, R_MIPS_32, FALSE);
9498
9499           /* On big-endian systems, we need to lie about the position
9500              of the reloc.  */
9501           if (bfd_big_endian (input_bfd))
9502             rel->r_offset += 4;
9503         }
9504
9505       if (!use_saved_addend_p)
9506         {
9507           /* If these relocations were originally of the REL variety,
9508              we must pull the addend out of the field that will be
9509              relocated.  Otherwise, we simply use the contents of the
9510              RELA relocation.  */
9511           if (mips_elf_rel_relocation_p (input_bfd, input_section,
9512                                          relocs, rel))
9513             {
9514               rela_relocation_p = FALSE;
9515               addend = mips_elf_read_rel_addend (input_bfd, rel,
9516                                                  howto, contents);
9517               if (hi16_reloc_p (r_type)
9518                   || (got16_reloc_p (r_type)
9519                       && mips_elf_local_relocation_p (input_bfd, rel,
9520                                                       local_sections)))
9521                 {
9522                   if (!mips_elf_add_lo16_rel_addend (input_bfd, rel, relend,
9523                                                      contents, &addend))
9524                     {
9525                       if (h)
9526                         name = h->root.root.string;
9527                       else
9528                         name = bfd_elf_sym_name (input_bfd, symtab_hdr,
9529                                                  local_syms + r_symndx,
9530                                                  sec);
9531                       (*_bfd_error_handler)
9532                         (_("%B: Can't find matching LO16 reloc against `%s' for %s at 0x%lx in section `%A'"),
9533                          input_bfd, input_section, name, howto->name,
9534                          rel->r_offset);
9535                     }
9536                 }
9537               else
9538                 addend <<= howto->rightshift;
9539             }
9540           else
9541             addend = rel->r_addend;
9542           mips_elf_adjust_addend (output_bfd, info, input_bfd,
9543                                   local_syms, local_sections, rel);
9544         }
9545
9546       if (info->relocatable)
9547         {
9548           if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd)
9549               && bfd_big_endian (input_bfd))
9550             rel->r_offset -= 4;
9551
9552           if (!rela_relocation_p && rel->r_addend)
9553             {
9554               addend += rel->r_addend;
9555               if (hi16_reloc_p (r_type) || got16_reloc_p (r_type))
9556                 addend = mips_elf_high (addend);
9557               else if (r_type == R_MIPS_HIGHER)
9558                 addend = mips_elf_higher (addend);
9559               else if (r_type == R_MIPS_HIGHEST)
9560                 addend = mips_elf_highest (addend);
9561               else
9562                 addend >>= howto->rightshift;
9563
9564               /* We use the source mask, rather than the destination
9565                  mask because the place to which we are writing will be
9566                  source of the addend in the final link.  */
9567               addend &= howto->src_mask;
9568
9569               if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd))
9570                 /* See the comment above about using R_MIPS_64 in the 32-bit
9571                    ABI.  Here, we need to update the addend.  It would be
9572                    possible to get away with just using the R_MIPS_32 reloc
9573                    but for endianness.  */
9574                 {
9575                   bfd_vma sign_bits;
9576                   bfd_vma low_bits;
9577                   bfd_vma high_bits;
9578
9579                   if (addend & ((bfd_vma) 1 << 31))
9580 #ifdef BFD64
9581                     sign_bits = ((bfd_vma) 1 << 32) - 1;
9582 #else
9583                     sign_bits = -1;
9584 #endif
9585                   else
9586                     sign_bits = 0;
9587
9588                   /* If we don't know that we have a 64-bit type,
9589                      do two separate stores.  */
9590                   if (bfd_big_endian (input_bfd))
9591                     {
9592                       /* Store the sign-bits (which are most significant)
9593                          first.  */
9594                       low_bits = sign_bits;
9595                       high_bits = addend;
9596                     }
9597                   else
9598                     {
9599                       low_bits = addend;
9600                       high_bits = sign_bits;
9601                     }
9602                   bfd_put_32 (input_bfd, low_bits,
9603                               contents + rel->r_offset);
9604                   bfd_put_32 (input_bfd, high_bits,
9605                               contents + rel->r_offset + 4);
9606                   continue;
9607                 }
9608
9609               if (! mips_elf_perform_relocation (info, howto, rel, addend,
9610                                                  input_bfd, input_section,
9611                                                  contents, FALSE))
9612                 return FALSE;
9613             }
9614
9615           /* Go on to the next relocation.  */
9616           continue;
9617         }
9618
9619       /* In the N32 and 64-bit ABIs there may be multiple consecutive
9620          relocations for the same offset.  In that case we are
9621          supposed to treat the output of each relocation as the addend
9622          for the next.  */
9623       if (rel + 1 < relend
9624           && rel->r_offset == rel[1].r_offset
9625           && ELF_R_TYPE (input_bfd, rel[1].r_info) != R_MIPS_NONE)
9626         use_saved_addend_p = TRUE;
9627       else
9628         use_saved_addend_p = FALSE;
9629
9630       /* Figure out what value we are supposed to relocate.  */
9631       switch (mips_elf_calculate_relocation (output_bfd, input_bfd,
9632                                              input_section, info, rel,
9633                                              addend, howto, local_syms,
9634                                              local_sections, &value,
9635                                              &name, &cross_mode_jump_p,
9636                                              use_saved_addend_p))
9637         {
9638         case bfd_reloc_continue:
9639           /* There's nothing to do.  */
9640           continue;
9641
9642         case bfd_reloc_undefined:
9643           /* mips_elf_calculate_relocation already called the
9644              undefined_symbol callback.  There's no real point in
9645              trying to perform the relocation at this point, so we
9646              just skip ahead to the next relocation.  */
9647           continue;
9648
9649         case bfd_reloc_notsupported:
9650           msg = _("internal error: unsupported relocation error");
9651           info->callbacks->warning
9652             (info, msg, name, input_bfd, input_section, rel->r_offset);
9653           return FALSE;
9654
9655         case bfd_reloc_overflow:
9656           if (use_saved_addend_p)
9657             /* Ignore overflow until we reach the last relocation for
9658                a given location.  */
9659             ;
9660           else
9661             {
9662               struct mips_elf_link_hash_table *htab;
9663
9664               htab = mips_elf_hash_table (info);
9665               BFD_ASSERT (htab != NULL);
9666               BFD_ASSERT (name != NULL);
9667               if (!htab->small_data_overflow_reported
9668                   && (gprel16_reloc_p (howto->type)
9669                       || literal_reloc_p (howto->type)))
9670                 {
9671                   msg = _("small-data section exceeds 64KB;"
9672                           " lower small-data size limit (see option -G)");
9673
9674                   htab->small_data_overflow_reported = TRUE;
9675                   (*info->callbacks->einfo) ("%P: %s\n", msg);
9676                 }
9677               if (! ((*info->callbacks->reloc_overflow)
9678                      (info, NULL, name, howto->name, (bfd_vma) 0,
9679                       input_bfd, input_section, rel->r_offset)))
9680                 return FALSE;
9681             }
9682           break;
9683
9684         case bfd_reloc_ok:
9685           break;
9686
9687         case bfd_reloc_outofrange:
9688           if (jal_reloc_p (howto->type))
9689             {
9690               msg = _("JALX to a non-word-aligned address");
9691               info->callbacks->warning
9692                 (info, msg, name, input_bfd, input_section, rel->r_offset);
9693               return FALSE;
9694             }
9695           /* Fall through.  */
9696
9697         default:
9698           abort ();
9699           break;
9700         }
9701
9702       /* If we've got another relocation for the address, keep going
9703          until we reach the last one.  */
9704       if (use_saved_addend_p)
9705         {
9706           addend = value;
9707           continue;
9708         }
9709
9710       if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd))
9711         /* See the comment above about using R_MIPS_64 in the 32-bit
9712            ABI.  Until now, we've been using the HOWTO for R_MIPS_32;
9713            that calculated the right value.  Now, however, we
9714            sign-extend the 32-bit result to 64-bits, and store it as a
9715            64-bit value.  We are especially generous here in that we
9716            go to extreme lengths to support this usage on systems with
9717            only a 32-bit VMA.  */
9718         {
9719           bfd_vma sign_bits;
9720           bfd_vma low_bits;
9721           bfd_vma high_bits;
9722
9723           if (value & ((bfd_vma) 1 << 31))
9724 #ifdef BFD64
9725             sign_bits = ((bfd_vma) 1 << 32) - 1;
9726 #else
9727             sign_bits = -1;
9728 #endif
9729           else
9730             sign_bits = 0;
9731
9732           /* If we don't know that we have a 64-bit type,
9733              do two separate stores.  */
9734           if (bfd_big_endian (input_bfd))
9735             {
9736               /* Undo what we did above.  */
9737               rel->r_offset -= 4;
9738               /* Store the sign-bits (which are most significant)
9739                  first.  */
9740               low_bits = sign_bits;
9741               high_bits = value;
9742             }
9743           else
9744             {
9745               low_bits = value;
9746               high_bits = sign_bits;
9747             }
9748           bfd_put_32 (input_bfd, low_bits,
9749                       contents + rel->r_offset);
9750           bfd_put_32 (input_bfd, high_bits,
9751                       contents + rel->r_offset + 4);
9752           continue;
9753         }
9754
9755       /* Actually perform the relocation.  */
9756       if (! mips_elf_perform_relocation (info, howto, rel, value,
9757                                          input_bfd, input_section,
9758                                          contents, cross_mode_jump_p))
9759         return FALSE;
9760     }
9761
9762   return TRUE;
9763 }
9764 \f
9765 /* A function that iterates over each entry in la25_stubs and fills
9766    in the code for each one.  DATA points to a mips_htab_traverse_info.  */
9767
9768 static int
9769 mips_elf_create_la25_stub (void **slot, void *data)
9770 {
9771   struct mips_htab_traverse_info *hti;
9772   struct mips_elf_link_hash_table *htab;
9773   struct mips_elf_la25_stub *stub;
9774   asection *s;
9775   bfd_byte *loc;
9776   bfd_vma offset, target, target_high, target_low;
9777
9778   stub = (struct mips_elf_la25_stub *) *slot;
9779   hti = (struct mips_htab_traverse_info *) data;
9780   htab = mips_elf_hash_table (hti->info);
9781   BFD_ASSERT (htab != NULL);
9782
9783   /* Create the section contents, if we haven't already.  */
9784   s = stub->stub_section;
9785   loc = s->contents;
9786   if (loc == NULL)
9787     {
9788       loc = bfd_malloc (s->size);
9789       if (loc == NULL)
9790         {
9791           hti->error = TRUE;
9792           return FALSE;
9793         }
9794       s->contents = loc;
9795     }
9796
9797   /* Work out where in the section this stub should go.  */
9798   offset = stub->offset;
9799
9800   /* Work out the target address.  */
9801   target = mips_elf_get_la25_target (stub, &s);
9802   target += s->output_section->vma + s->output_offset;
9803
9804   target_high = ((target + 0x8000) >> 16) & 0xffff;
9805   target_low = (target & 0xffff);
9806
9807   if (stub->stub_section != htab->strampoline)
9808     {
9809       /* This is a simple LUI/ADDIU stub.  Zero out the beginning
9810          of the section and write the two instructions at the end.  */
9811       memset (loc, 0, offset);
9812       loc += offset;
9813       if (ELF_ST_IS_MICROMIPS (stub->h->root.other))
9814         {
9815           bfd_put_micromips_32 (hti->output_bfd,
9816                                 LA25_LUI_MICROMIPS (target_high),
9817                                 loc);
9818           bfd_put_micromips_32 (hti->output_bfd,
9819                                 LA25_ADDIU_MICROMIPS (target_low),
9820                                 loc + 4);
9821         }
9822       else
9823         {
9824           bfd_put_32 (hti->output_bfd, LA25_LUI (target_high), loc);
9825           bfd_put_32 (hti->output_bfd, LA25_ADDIU (target_low), loc + 4);
9826         }
9827     }
9828   else
9829     {
9830       /* This is trampoline.  */
9831       loc += offset;
9832       if (ELF_ST_IS_MICROMIPS (stub->h->root.other))
9833         {
9834           bfd_put_micromips_32 (hti->output_bfd,
9835                                 LA25_LUI_MICROMIPS (target_high), loc);
9836           bfd_put_micromips_32 (hti->output_bfd,
9837                                 LA25_J_MICROMIPS (target), loc + 4);
9838           bfd_put_micromips_32 (hti->output_bfd,
9839                                 LA25_ADDIU_MICROMIPS (target_low), loc + 8);
9840           bfd_put_32 (hti->output_bfd, 0, loc + 12);
9841         }
9842       else
9843         {
9844           bfd_put_32 (hti->output_bfd, LA25_LUI (target_high), loc);
9845           bfd_put_32 (hti->output_bfd, LA25_J (target), loc + 4);
9846           bfd_put_32 (hti->output_bfd, LA25_ADDIU (target_low), loc + 8);
9847           bfd_put_32 (hti->output_bfd, 0, loc + 12);
9848         }
9849     }
9850   return TRUE;
9851 }
9852
9853 /* If NAME is one of the special IRIX6 symbols defined by the linker,
9854    adjust it appropriately now.  */
9855
9856 static void
9857 mips_elf_irix6_finish_dynamic_symbol (bfd *abfd ATTRIBUTE_UNUSED,
9858                                       const char *name, Elf_Internal_Sym *sym)
9859 {
9860   /* The linker script takes care of providing names and values for
9861      these, but we must place them into the right sections.  */
9862   static const char* const text_section_symbols[] = {
9863     "_ftext",
9864     "_etext",
9865     "__dso_displacement",
9866     "__elf_header",
9867     "__program_header_table",
9868     NULL
9869   };
9870
9871   static const char* const data_section_symbols[] = {
9872     "_fdata",
9873     "_edata",
9874     "_end",
9875     "_fbss",
9876     NULL
9877   };
9878
9879   const char* const *p;
9880   int i;
9881
9882   for (i = 0; i < 2; ++i)
9883     for (p = (i == 0) ? text_section_symbols : data_section_symbols;
9884          *p;
9885          ++p)
9886       if (strcmp (*p, name) == 0)
9887         {
9888           /* All of these symbols are given type STT_SECTION by the
9889              IRIX6 linker.  */
9890           sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
9891           sym->st_other = STO_PROTECTED;
9892
9893           /* The IRIX linker puts these symbols in special sections.  */
9894           if (i == 0)
9895             sym->st_shndx = SHN_MIPS_TEXT;
9896           else
9897             sym->st_shndx = SHN_MIPS_DATA;
9898
9899           break;
9900         }
9901 }
9902
9903 /* Finish up dynamic symbol handling.  We set the contents of various
9904    dynamic sections here.  */
9905
9906 bfd_boolean
9907 _bfd_mips_elf_finish_dynamic_symbol (bfd *output_bfd,
9908                                      struct bfd_link_info *info,
9909                                      struct elf_link_hash_entry *h,
9910                                      Elf_Internal_Sym *sym)
9911 {
9912   bfd *dynobj;
9913   asection *sgot;
9914   struct mips_got_info *g, *gg;
9915   const char *name;
9916   int idx;
9917   struct mips_elf_link_hash_table *htab;
9918   struct mips_elf_link_hash_entry *hmips;
9919
9920   htab = mips_elf_hash_table (info);
9921   BFD_ASSERT (htab != NULL);
9922   dynobj = elf_hash_table (info)->dynobj;
9923   hmips = (struct mips_elf_link_hash_entry *) h;
9924
9925   BFD_ASSERT (!htab->is_vxworks);
9926
9927   if (h->plt.offset != MINUS_ONE && hmips->no_fn_stub)
9928     {
9929       /* We've decided to create a PLT entry for this symbol.  */
9930       bfd_byte *loc;
9931       bfd_vma header_address, plt_index, got_address;
9932       bfd_vma got_address_high, got_address_low, load;
9933       const bfd_vma *plt_entry;
9934
9935       BFD_ASSERT (htab->use_plts_and_copy_relocs);
9936       BFD_ASSERT (h->dynindx != -1);
9937       BFD_ASSERT (htab->splt != NULL);
9938       BFD_ASSERT (h->plt.offset <= htab->splt->size);
9939       BFD_ASSERT (!h->def_regular);
9940
9941       /* Calculate the address of the PLT header.  */
9942       header_address = (htab->splt->output_section->vma
9943                         + htab->splt->output_offset);
9944
9945       /* Calculate the index of the entry.  */
9946       plt_index = ((h->plt.offset - htab->plt_header_size)
9947                    / htab->plt_entry_size);
9948
9949       /* Calculate the address of the .got.plt entry.  */
9950       got_address = (htab->sgotplt->output_section->vma
9951                      + htab->sgotplt->output_offset
9952                      + (2 + plt_index) * MIPS_ELF_GOT_SIZE (dynobj));
9953       got_address_high = ((got_address + 0x8000) >> 16) & 0xffff;
9954       got_address_low = got_address & 0xffff;
9955
9956       /* Initially point the .got.plt entry at the PLT header.  */
9957       loc = (htab->sgotplt->contents
9958              + (2 + plt_index) * MIPS_ELF_GOT_SIZE (dynobj));
9959       if (ABI_64_P (output_bfd))
9960         bfd_put_64 (output_bfd, header_address, loc);
9961       else
9962         bfd_put_32 (output_bfd, header_address, loc);
9963
9964       /* Find out where the .plt entry should go.  */
9965       loc = htab->splt->contents + h->plt.offset;
9966
9967       /* Pick the load opcode.  */
9968       load = MIPS_ELF_LOAD_WORD (output_bfd);
9969
9970       /* Fill in the PLT entry itself.  */
9971       plt_entry = mips_exec_plt_entry;
9972       bfd_put_32 (output_bfd, plt_entry[0] | got_address_high, loc);
9973       bfd_put_32 (output_bfd, plt_entry[1] | got_address_low | load, loc + 4);
9974
9975       if (! LOAD_INTERLOCKS_P (output_bfd))
9976         {
9977           bfd_put_32 (output_bfd, plt_entry[2] | got_address_low, loc + 8);
9978           bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
9979         }
9980       else
9981         {
9982           bfd_put_32 (output_bfd, plt_entry[3], loc + 8);
9983           bfd_put_32 (output_bfd, plt_entry[2] | got_address_low, loc + 12);
9984         }
9985
9986       /* Emit an R_MIPS_JUMP_SLOT relocation against the .got.plt entry.  */
9987       mips_elf_output_dynamic_relocation (output_bfd, htab->srelplt,
9988                                           plt_index, h->dynindx,
9989                                           R_MIPS_JUMP_SLOT, got_address);
9990
9991       /* We distinguish between PLT entries and lazy-binding stubs by
9992          giving the former an st_other value of STO_MIPS_PLT.  Set the
9993          flag and leave the value if there are any relocations in the
9994          binary where pointer equality matters.  */
9995       sym->st_shndx = SHN_UNDEF;
9996       if (h->pointer_equality_needed)
9997         sym->st_other = STO_MIPS_PLT;
9998       else
9999         sym->st_value = 0;
10000     }
10001   else if (h->plt.offset != MINUS_ONE)
10002     {
10003       /* We've decided to create a lazy-binding stub.  */
10004       bfd_byte stub[MIPS_FUNCTION_STUB_BIG_SIZE];
10005
10006       /* This symbol has a stub.  Set it up.  */
10007
10008       BFD_ASSERT (h->dynindx != -1);
10009
10010       BFD_ASSERT ((htab->function_stub_size == MIPS_FUNCTION_STUB_BIG_SIZE)
10011                   || (h->dynindx <= 0xffff));
10012
10013       /* Values up to 2^31 - 1 are allowed.  Larger values would cause
10014          sign extension at runtime in the stub, resulting in a negative
10015          index value.  */
10016       if (h->dynindx & ~0x7fffffff)
10017         return FALSE;
10018
10019       /* Fill the stub.  */
10020       idx = 0;
10021       bfd_put_32 (output_bfd, STUB_LW (output_bfd), stub + idx);
10022       idx += 4;
10023       bfd_put_32 (output_bfd, STUB_MOVE (output_bfd), stub + idx);
10024       idx += 4;
10025       if (htab->function_stub_size == MIPS_FUNCTION_STUB_BIG_SIZE)
10026         {
10027           bfd_put_32 (output_bfd, STUB_LUI ((h->dynindx >> 16) & 0x7fff),
10028                       stub + idx);
10029           idx += 4;
10030         }
10031       bfd_put_32 (output_bfd, STUB_JALR, stub + idx);
10032       idx += 4;
10033
10034       /* If a large stub is not required and sign extension is not a
10035          problem, then use legacy code in the stub.  */
10036       if (htab->function_stub_size == MIPS_FUNCTION_STUB_BIG_SIZE)
10037         bfd_put_32 (output_bfd, STUB_ORI (h->dynindx & 0xffff), stub + idx);
10038       else if (h->dynindx & ~0x7fff)
10039         bfd_put_32 (output_bfd, STUB_LI16U (h->dynindx & 0xffff), stub + idx);
10040       else
10041         bfd_put_32 (output_bfd, STUB_LI16S (output_bfd, h->dynindx),
10042                     stub + idx);
10043
10044       BFD_ASSERT (h->plt.offset <= htab->sstubs->size);
10045       memcpy (htab->sstubs->contents + h->plt.offset,
10046               stub, htab->function_stub_size);
10047
10048       /* Mark the symbol as undefined.  plt.offset != -1 occurs
10049          only for the referenced symbol.  */
10050       sym->st_shndx = SHN_UNDEF;
10051
10052       /* The run-time linker uses the st_value field of the symbol
10053          to reset the global offset table entry for this external
10054          to its stub address when unlinking a shared object.  */
10055       sym->st_value = (htab->sstubs->output_section->vma
10056                        + htab->sstubs->output_offset
10057                        + h->plt.offset);
10058     }
10059
10060   /* If we have a MIPS16 function with a stub, the dynamic symbol must
10061      refer to the stub, since only the stub uses the standard calling
10062      conventions.  */
10063   if (h->dynindx != -1 && hmips->fn_stub != NULL)
10064     {
10065       BFD_ASSERT (hmips->need_fn_stub);
10066       sym->st_value = (hmips->fn_stub->output_section->vma
10067                        + hmips->fn_stub->output_offset);
10068       sym->st_size = hmips->fn_stub->size;
10069       sym->st_other = ELF_ST_VISIBILITY (sym->st_other);
10070     }
10071
10072   BFD_ASSERT (h->dynindx != -1
10073               || h->forced_local);
10074
10075   sgot = htab->sgot;
10076   g = htab->got_info;
10077   BFD_ASSERT (g != NULL);
10078
10079   /* Run through the global symbol table, creating GOT entries for all
10080      the symbols that need them.  */
10081   if (hmips->global_got_area != GGA_NONE)
10082     {
10083       bfd_vma offset;
10084       bfd_vma value;
10085
10086       value = sym->st_value;
10087       offset = mips_elf_global_got_index (dynobj, output_bfd, h,
10088                                           R_MIPS_GOT16, info);
10089       MIPS_ELF_PUT_WORD (output_bfd, value, sgot->contents + offset);
10090     }
10091
10092   if (hmips->global_got_area != GGA_NONE && g->next && h->type != STT_TLS)
10093     {
10094       struct mips_got_entry e, *p;
10095       bfd_vma entry;
10096       bfd_vma offset;
10097
10098       gg = g;
10099
10100       e.abfd = output_bfd;
10101       e.symndx = -1;
10102       e.d.h = hmips;
10103       e.tls_type = 0;
10104
10105       for (g = g->next; g->next != gg; g = g->next)
10106         {
10107           if (g->got_entries
10108               && (p = (struct mips_got_entry *) htab_find (g->got_entries,
10109                                                            &e)))
10110             {
10111               offset = p->gotidx;
10112               if (info->shared
10113                   || (elf_hash_table (info)->dynamic_sections_created
10114                       && p->d.h != NULL
10115                       && p->d.h->root.def_dynamic
10116                       && !p->d.h->root.def_regular))
10117                 {
10118                   /* Create an R_MIPS_REL32 relocation for this entry.  Due to
10119                      the various compatibility problems, it's easier to mock
10120                      up an R_MIPS_32 or R_MIPS_64 relocation and leave
10121                      mips_elf_create_dynamic_relocation to calculate the
10122                      appropriate addend.  */
10123                   Elf_Internal_Rela rel[3];
10124
10125                   memset (rel, 0, sizeof (rel));
10126                   if (ABI_64_P (output_bfd))
10127                     rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_64);
10128                   else
10129                     rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_32);
10130                   rel[0].r_offset = rel[1].r_offset = rel[2].r_offset = offset;
10131
10132                   entry = 0;
10133                   if (! (mips_elf_create_dynamic_relocation
10134                          (output_bfd, info, rel,
10135                           e.d.h, NULL, sym->st_value, &entry, sgot)))
10136                     return FALSE;
10137                 }
10138               else
10139                 entry = sym->st_value;
10140               MIPS_ELF_PUT_WORD (output_bfd, entry, sgot->contents + offset);
10141             }
10142         }
10143     }
10144
10145   /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute.  */
10146   name = h->root.root.string;
10147   if (h == elf_hash_table (info)->hdynamic
10148       || h == elf_hash_table (info)->hgot)
10149     sym->st_shndx = SHN_ABS;
10150   else if (strcmp (name, "_DYNAMIC_LINK") == 0
10151            || strcmp (name, "_DYNAMIC_LINKING") == 0)
10152     {
10153       sym->st_shndx = SHN_ABS;
10154       sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10155       sym->st_value = 1;
10156     }
10157   else if (strcmp (name, "_gp_disp") == 0 && ! NEWABI_P (output_bfd))
10158     {
10159       sym->st_shndx = SHN_ABS;
10160       sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10161       sym->st_value = elf_gp (output_bfd);
10162     }
10163   else if (SGI_COMPAT (output_bfd))
10164     {
10165       if (strcmp (name, mips_elf_dynsym_rtproc_names[0]) == 0
10166           || strcmp (name, mips_elf_dynsym_rtproc_names[1]) == 0)
10167         {
10168           sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10169           sym->st_other = STO_PROTECTED;
10170           sym->st_value = 0;
10171           sym->st_shndx = SHN_MIPS_DATA;
10172         }
10173       else if (strcmp (name, mips_elf_dynsym_rtproc_names[2]) == 0)
10174         {
10175           sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10176           sym->st_other = STO_PROTECTED;
10177           sym->st_value = mips_elf_hash_table (info)->procedure_count;
10178           sym->st_shndx = SHN_ABS;
10179         }
10180       else if (sym->st_shndx != SHN_UNDEF && sym->st_shndx != SHN_ABS)
10181         {
10182           if (h->type == STT_FUNC)
10183             sym->st_shndx = SHN_MIPS_TEXT;
10184           else if (h->type == STT_OBJECT)
10185             sym->st_shndx = SHN_MIPS_DATA;
10186         }
10187     }
10188
10189   /* Emit a copy reloc, if needed.  */
10190   if (h->needs_copy)
10191     {
10192       asection *s;
10193       bfd_vma symval;
10194
10195       BFD_ASSERT (h->dynindx != -1);
10196       BFD_ASSERT (htab->use_plts_and_copy_relocs);
10197
10198       s = mips_elf_rel_dyn_section (info, FALSE);
10199       symval = (h->root.u.def.section->output_section->vma
10200                 + h->root.u.def.section->output_offset
10201                 + h->root.u.def.value);
10202       mips_elf_output_dynamic_relocation (output_bfd, s, s->reloc_count++,
10203                                           h->dynindx, R_MIPS_COPY, symval);
10204     }
10205
10206   /* Handle the IRIX6-specific symbols.  */
10207   if (IRIX_COMPAT (output_bfd) == ict_irix6)
10208     mips_elf_irix6_finish_dynamic_symbol (output_bfd, name, sym);
10209
10210   /* Keep dynamic MIPS16 symbols odd.  This allows the dynamic linker to
10211      treat MIPS16 symbols like any other.  */
10212   if (ELF_ST_IS_MIPS16 (sym->st_other))
10213     {
10214       BFD_ASSERT (sym->st_value & 1);
10215       sym->st_other -= STO_MIPS16;
10216     }
10217
10218   return TRUE;
10219 }
10220
10221 /* Likewise, for VxWorks.  */
10222
10223 bfd_boolean
10224 _bfd_mips_vxworks_finish_dynamic_symbol (bfd *output_bfd,
10225                                          struct bfd_link_info *info,
10226                                          struct elf_link_hash_entry *h,
10227                                          Elf_Internal_Sym *sym)
10228 {
10229   bfd *dynobj;
10230   asection *sgot;
10231   struct mips_got_info *g;
10232   struct mips_elf_link_hash_table *htab;
10233   struct mips_elf_link_hash_entry *hmips;
10234
10235   htab = mips_elf_hash_table (info);
10236   BFD_ASSERT (htab != NULL);
10237   dynobj = elf_hash_table (info)->dynobj;
10238   hmips = (struct mips_elf_link_hash_entry *) h;
10239
10240   if (h->plt.offset != (bfd_vma) -1)
10241     {
10242       bfd_byte *loc;
10243       bfd_vma plt_address, plt_index, got_address, got_offset, branch_offset;
10244       Elf_Internal_Rela rel;
10245       static const bfd_vma *plt_entry;
10246
10247       BFD_ASSERT (h->dynindx != -1);
10248       BFD_ASSERT (htab->splt != NULL);
10249       BFD_ASSERT (h->plt.offset <= htab->splt->size);
10250
10251       /* Calculate the address of the .plt entry.  */
10252       plt_address = (htab->splt->output_section->vma
10253                      + htab->splt->output_offset
10254                      + h->plt.offset);
10255
10256       /* Calculate the index of the entry.  */
10257       plt_index = ((h->plt.offset - htab->plt_header_size)
10258                    / htab->plt_entry_size);
10259
10260       /* Calculate the address of the .got.plt entry.  */
10261       got_address = (htab->sgotplt->output_section->vma
10262                      + htab->sgotplt->output_offset
10263                      + plt_index * 4);
10264
10265       /* Calculate the offset of the .got.plt entry from
10266          _GLOBAL_OFFSET_TABLE_.  */
10267       got_offset = mips_elf_gotplt_index (info, h);
10268
10269       /* Calculate the offset for the branch at the start of the PLT
10270          entry.  The branch jumps to the beginning of .plt.  */
10271       branch_offset = -(h->plt.offset / 4 + 1) & 0xffff;
10272
10273       /* Fill in the initial value of the .got.plt entry.  */
10274       bfd_put_32 (output_bfd, plt_address,
10275                   htab->sgotplt->contents + plt_index * 4);
10276
10277       /* Find out where the .plt entry should go.  */
10278       loc = htab->splt->contents + h->plt.offset;
10279
10280       if (info->shared)
10281         {
10282           plt_entry = mips_vxworks_shared_plt_entry;
10283           bfd_put_32 (output_bfd, plt_entry[0] | branch_offset, loc);
10284           bfd_put_32 (output_bfd, plt_entry[1] | plt_index, loc + 4);
10285         }
10286       else
10287         {
10288           bfd_vma got_address_high, got_address_low;
10289
10290           plt_entry = mips_vxworks_exec_plt_entry;
10291           got_address_high = ((got_address + 0x8000) >> 16) & 0xffff;
10292           got_address_low = got_address & 0xffff;
10293
10294           bfd_put_32 (output_bfd, plt_entry[0] | branch_offset, loc);
10295           bfd_put_32 (output_bfd, plt_entry[1] | plt_index, loc + 4);
10296           bfd_put_32 (output_bfd, plt_entry[2] | got_address_high, loc + 8);
10297           bfd_put_32 (output_bfd, plt_entry[3] | got_address_low, loc + 12);
10298           bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
10299           bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
10300           bfd_put_32 (output_bfd, plt_entry[6], loc + 24);
10301           bfd_put_32 (output_bfd, plt_entry[7], loc + 28);
10302
10303           loc = (htab->srelplt2->contents
10304                  + (plt_index * 3 + 2) * sizeof (Elf32_External_Rela));
10305
10306           /* Emit a relocation for the .got.plt entry.  */
10307           rel.r_offset = got_address;
10308           rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_MIPS_32);
10309           rel.r_addend = h->plt.offset;
10310           bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10311
10312           /* Emit a relocation for the lui of %hi(<.got.plt slot>).  */
10313           loc += sizeof (Elf32_External_Rela);
10314           rel.r_offset = plt_address + 8;
10315           rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
10316           rel.r_addend = got_offset;
10317           bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10318
10319           /* Emit a relocation for the addiu of %lo(<.got.plt slot>).  */
10320           loc += sizeof (Elf32_External_Rela);
10321           rel.r_offset += 4;
10322           rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
10323           bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10324         }
10325
10326       /* Emit an R_MIPS_JUMP_SLOT relocation against the .got.plt entry.  */
10327       loc = htab->srelplt->contents + plt_index * sizeof (Elf32_External_Rela);
10328       rel.r_offset = got_address;
10329       rel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_JUMP_SLOT);
10330       rel.r_addend = 0;
10331       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10332
10333       if (!h->def_regular)
10334         sym->st_shndx = SHN_UNDEF;
10335     }
10336
10337   BFD_ASSERT (h->dynindx != -1 || h->forced_local);
10338
10339   sgot = htab->sgot;
10340   g = htab->got_info;
10341   BFD_ASSERT (g != NULL);
10342
10343   /* See if this symbol has an entry in the GOT.  */
10344   if (hmips->global_got_area != GGA_NONE)
10345     {
10346       bfd_vma offset;
10347       Elf_Internal_Rela outrel;
10348       bfd_byte *loc;
10349       asection *s;
10350
10351       /* Install the symbol value in the GOT.   */
10352       offset = mips_elf_global_got_index (dynobj, output_bfd, h,
10353                                           R_MIPS_GOT16, info);
10354       MIPS_ELF_PUT_WORD (output_bfd, sym->st_value, sgot->contents + offset);
10355
10356       /* Add a dynamic relocation for it.  */
10357       s = mips_elf_rel_dyn_section (info, FALSE);
10358       loc = s->contents + (s->reloc_count++ * sizeof (Elf32_External_Rela));
10359       outrel.r_offset = (sgot->output_section->vma
10360                          + sgot->output_offset
10361                          + offset);
10362       outrel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_32);
10363       outrel.r_addend = 0;
10364       bfd_elf32_swap_reloca_out (dynobj, &outrel, loc);
10365     }
10366
10367   /* Emit a copy reloc, if needed.  */
10368   if (h->needs_copy)
10369     {
10370       Elf_Internal_Rela rel;
10371
10372       BFD_ASSERT (h->dynindx != -1);
10373
10374       rel.r_offset = (h->root.u.def.section->output_section->vma
10375                       + h->root.u.def.section->output_offset
10376                       + h->root.u.def.value);
10377       rel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_COPY);
10378       rel.r_addend = 0;
10379       bfd_elf32_swap_reloca_out (output_bfd, &rel,
10380                                  htab->srelbss->contents
10381                                  + (htab->srelbss->reloc_count
10382                                     * sizeof (Elf32_External_Rela)));
10383       ++htab->srelbss->reloc_count;
10384     }
10385
10386   /* If this is a mips16/microMIPS symbol, force the value to be even.  */
10387   if (ELF_ST_IS_COMPRESSED (sym->st_other))
10388     sym->st_value &= ~1;
10389
10390   return TRUE;
10391 }
10392
10393 /* Write out a plt0 entry to the beginning of .plt.  */
10394
10395 static void
10396 mips_finish_exec_plt (bfd *output_bfd, struct bfd_link_info *info)
10397 {
10398   bfd_byte *loc;
10399   bfd_vma gotplt_value, gotplt_value_high, gotplt_value_low;
10400   static const bfd_vma *plt_entry;
10401   struct mips_elf_link_hash_table *htab;
10402
10403   htab = mips_elf_hash_table (info);
10404   BFD_ASSERT (htab != NULL);
10405
10406   if (ABI_64_P (output_bfd))
10407     plt_entry = mips_n64_exec_plt0_entry;
10408   else if (ABI_N32_P (output_bfd))
10409     plt_entry = mips_n32_exec_plt0_entry;
10410   else
10411     plt_entry = mips_o32_exec_plt0_entry;
10412
10413   /* Calculate the value of .got.plt.  */
10414   gotplt_value = (htab->sgotplt->output_section->vma
10415                   + htab->sgotplt->output_offset);
10416   gotplt_value_high = ((gotplt_value + 0x8000) >> 16) & 0xffff;
10417   gotplt_value_low = gotplt_value & 0xffff;
10418
10419   /* The PLT sequence is not safe for N64 if .got.plt's address can
10420      not be loaded in two instructions.  */
10421   BFD_ASSERT ((gotplt_value & ~(bfd_vma) 0x7fffffff) == 0
10422               || ~(gotplt_value | 0x7fffffff) == 0);
10423
10424   /* Install the PLT header.  */
10425   loc = htab->splt->contents;
10426   bfd_put_32 (output_bfd, plt_entry[0] | gotplt_value_high, loc);
10427   bfd_put_32 (output_bfd, plt_entry[1] | gotplt_value_low, loc + 4);
10428   bfd_put_32 (output_bfd, plt_entry[2] | gotplt_value_low, loc + 8);
10429   bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
10430   bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
10431   bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
10432   bfd_put_32 (output_bfd, plt_entry[6], loc + 24);
10433   bfd_put_32 (output_bfd, plt_entry[7], loc + 28);
10434 }
10435
10436 /* Install the PLT header for a VxWorks executable and finalize the
10437    contents of .rela.plt.unloaded.  */
10438
10439 static void
10440 mips_vxworks_finish_exec_plt (bfd *output_bfd, struct bfd_link_info *info)
10441 {
10442   Elf_Internal_Rela rela;
10443   bfd_byte *loc;
10444   bfd_vma got_value, got_value_high, got_value_low, plt_address;
10445   static const bfd_vma *plt_entry;
10446   struct mips_elf_link_hash_table *htab;
10447
10448   htab = mips_elf_hash_table (info);
10449   BFD_ASSERT (htab != NULL);
10450
10451   plt_entry = mips_vxworks_exec_plt0_entry;
10452
10453   /* Calculate the value of _GLOBAL_OFFSET_TABLE_.  */
10454   got_value = (htab->root.hgot->root.u.def.section->output_section->vma
10455                + htab->root.hgot->root.u.def.section->output_offset
10456                + htab->root.hgot->root.u.def.value);
10457
10458   got_value_high = ((got_value + 0x8000) >> 16) & 0xffff;
10459   got_value_low = got_value & 0xffff;
10460
10461   /* Calculate the address of the PLT header.  */
10462   plt_address = htab->splt->output_section->vma + htab->splt->output_offset;
10463
10464   /* Install the PLT header.  */
10465   loc = htab->splt->contents;
10466   bfd_put_32 (output_bfd, plt_entry[0] | got_value_high, loc);
10467   bfd_put_32 (output_bfd, plt_entry[1] | got_value_low, loc + 4);
10468   bfd_put_32 (output_bfd, plt_entry[2], loc + 8);
10469   bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
10470   bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
10471   bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
10472
10473   /* Output the relocation for the lui of %hi(_GLOBAL_OFFSET_TABLE_).  */
10474   loc = htab->srelplt2->contents;
10475   rela.r_offset = plt_address;
10476   rela.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
10477   rela.r_addend = 0;
10478   bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
10479   loc += sizeof (Elf32_External_Rela);
10480
10481   /* Output the relocation for the following addiu of
10482      %lo(_GLOBAL_OFFSET_TABLE_).  */
10483   rela.r_offset += 4;
10484   rela.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
10485   bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
10486   loc += sizeof (Elf32_External_Rela);
10487
10488   /* Fix up the remaining relocations.  They may have the wrong
10489      symbol index for _G_O_T_ or _P_L_T_ depending on the order
10490      in which symbols were output.  */
10491   while (loc < htab->srelplt2->contents + htab->srelplt2->size)
10492     {
10493       Elf_Internal_Rela rel;
10494
10495       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
10496       rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_MIPS_32);
10497       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10498       loc += sizeof (Elf32_External_Rela);
10499
10500       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
10501       rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
10502       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10503       loc += sizeof (Elf32_External_Rela);
10504
10505       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
10506       rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
10507       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10508       loc += sizeof (Elf32_External_Rela);
10509     }
10510 }
10511
10512 /* Install the PLT header for a VxWorks shared library.  */
10513
10514 static void
10515 mips_vxworks_finish_shared_plt (bfd *output_bfd, struct bfd_link_info *info)
10516 {
10517   unsigned int i;
10518   struct mips_elf_link_hash_table *htab;
10519
10520   htab = mips_elf_hash_table (info);
10521   BFD_ASSERT (htab != NULL);
10522
10523   /* We just need to copy the entry byte-by-byte.  */
10524   for (i = 0; i < ARRAY_SIZE (mips_vxworks_shared_plt0_entry); i++)
10525     bfd_put_32 (output_bfd, mips_vxworks_shared_plt0_entry[i],
10526                 htab->splt->contents + i * 4);
10527 }
10528
10529 /* Finish up the dynamic sections.  */
10530
10531 bfd_boolean
10532 _bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd,
10533                                        struct bfd_link_info *info)
10534 {
10535   bfd *dynobj;
10536   asection *sdyn;
10537   asection *sgot;
10538   struct mips_got_info *gg, *g;
10539   struct mips_elf_link_hash_table *htab;
10540
10541   htab = mips_elf_hash_table (info);
10542   BFD_ASSERT (htab != NULL);
10543
10544   dynobj = elf_hash_table (info)->dynobj;
10545
10546   sdyn = bfd_get_linker_section (dynobj, ".dynamic");
10547
10548   sgot = htab->sgot;
10549   gg = htab->got_info;
10550
10551   if (elf_hash_table (info)->dynamic_sections_created)
10552     {
10553       bfd_byte *b;
10554       int dyn_to_skip = 0, dyn_skipped = 0;
10555
10556       BFD_ASSERT (sdyn != NULL);
10557       BFD_ASSERT (gg != NULL);
10558
10559       g = mips_elf_got_for_ibfd (gg, output_bfd);
10560       BFD_ASSERT (g != NULL);
10561
10562       for (b = sdyn->contents;
10563            b < sdyn->contents + sdyn->size;
10564            b += MIPS_ELF_DYN_SIZE (dynobj))
10565         {
10566           Elf_Internal_Dyn dyn;
10567           const char *name;
10568           size_t elemsize;
10569           asection *s;
10570           bfd_boolean swap_out_p;
10571
10572           /* Read in the current dynamic entry.  */
10573           (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
10574
10575           /* Assume that we're going to modify it and write it out.  */
10576           swap_out_p = TRUE;
10577
10578           switch (dyn.d_tag)
10579             {
10580             case DT_RELENT:
10581               dyn.d_un.d_val = MIPS_ELF_REL_SIZE (dynobj);
10582               break;
10583
10584             case DT_RELAENT:
10585               BFD_ASSERT (htab->is_vxworks);
10586               dyn.d_un.d_val = MIPS_ELF_RELA_SIZE (dynobj);
10587               break;
10588
10589             case DT_STRSZ:
10590               /* Rewrite DT_STRSZ.  */
10591               dyn.d_un.d_val =
10592                 _bfd_elf_strtab_size (elf_hash_table (info)->dynstr);
10593               break;
10594
10595             case DT_PLTGOT:
10596               s = htab->sgot;
10597               dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
10598               break;
10599
10600             case DT_MIPS_PLTGOT:
10601               s = htab->sgotplt;
10602               dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
10603               break;
10604
10605             case DT_MIPS_RLD_VERSION:
10606               dyn.d_un.d_val = 1; /* XXX */
10607               break;
10608
10609             case DT_MIPS_FLAGS:
10610               dyn.d_un.d_val = RHF_NOTPOT; /* XXX */
10611               break;
10612
10613             case DT_MIPS_TIME_STAMP:
10614               {
10615                 time_t t;
10616                 time (&t);
10617                 dyn.d_un.d_val = t;
10618               }
10619               break;
10620
10621             case DT_MIPS_ICHECKSUM:
10622               /* XXX FIXME: */
10623               swap_out_p = FALSE;
10624               break;
10625
10626             case DT_MIPS_IVERSION:
10627               /* XXX FIXME: */
10628               swap_out_p = FALSE;
10629               break;
10630
10631             case DT_MIPS_BASE_ADDRESS:
10632               s = output_bfd->sections;
10633               BFD_ASSERT (s != NULL);
10634               dyn.d_un.d_ptr = s->vma & ~(bfd_vma) 0xffff;
10635               break;
10636
10637             case DT_MIPS_LOCAL_GOTNO:
10638               dyn.d_un.d_val = g->local_gotno;
10639               break;
10640
10641             case DT_MIPS_UNREFEXTNO:
10642               /* The index into the dynamic symbol table which is the
10643                  entry of the first external symbol that is not
10644                  referenced within the same object.  */
10645               dyn.d_un.d_val = bfd_count_sections (output_bfd) + 1;
10646               break;
10647
10648             case DT_MIPS_GOTSYM:
10649               if (gg->global_gotsym)
10650                 {
10651                   dyn.d_un.d_val = gg->global_gotsym->dynindx;
10652                   break;
10653                 }
10654               /* In case if we don't have global got symbols we default
10655                  to setting DT_MIPS_GOTSYM to the same value as
10656                  DT_MIPS_SYMTABNO, so we just fall through.  */
10657
10658             case DT_MIPS_SYMTABNO:
10659               name = ".dynsym";
10660               elemsize = MIPS_ELF_SYM_SIZE (output_bfd);
10661               s = bfd_get_section_by_name (output_bfd, name);
10662               BFD_ASSERT (s != NULL);
10663
10664               dyn.d_un.d_val = s->size / elemsize;
10665               break;
10666
10667             case DT_MIPS_HIPAGENO:
10668               dyn.d_un.d_val = g->local_gotno - htab->reserved_gotno;
10669               break;
10670
10671             case DT_MIPS_RLD_MAP:
10672               {
10673                 struct elf_link_hash_entry *h;
10674                 h = mips_elf_hash_table (info)->rld_symbol;
10675                 if (!h)
10676                   {
10677                     dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
10678                     swap_out_p = FALSE;
10679                     break;
10680                   }
10681                 s = h->root.u.def.section;
10682                 dyn.d_un.d_ptr = (s->output_section->vma + s->output_offset
10683                                   + h->root.u.def.value);
10684               }
10685               break;
10686
10687             case DT_MIPS_OPTIONS:
10688               s = (bfd_get_section_by_name
10689                    (output_bfd, MIPS_ELF_OPTIONS_SECTION_NAME (output_bfd)));
10690               dyn.d_un.d_ptr = s->vma;
10691               break;
10692
10693             case DT_RELASZ:
10694               BFD_ASSERT (htab->is_vxworks);
10695               /* The count does not include the JUMP_SLOT relocations.  */
10696               if (htab->srelplt)
10697                 dyn.d_un.d_val -= htab->srelplt->size;
10698               break;
10699
10700             case DT_PLTREL:
10701               BFD_ASSERT (htab->use_plts_and_copy_relocs);
10702               if (htab->is_vxworks)
10703                 dyn.d_un.d_val = DT_RELA;
10704               else
10705                 dyn.d_un.d_val = DT_REL;
10706               break;
10707
10708             case DT_PLTRELSZ:
10709               BFD_ASSERT (htab->use_plts_and_copy_relocs);
10710               dyn.d_un.d_val = htab->srelplt->size;
10711               break;
10712
10713             case DT_JMPREL:
10714               BFD_ASSERT (htab->use_plts_and_copy_relocs);
10715               dyn.d_un.d_ptr = (htab->srelplt->output_section->vma
10716                                 + htab->srelplt->output_offset);
10717               break;
10718
10719             case DT_TEXTREL:
10720               /* If we didn't need any text relocations after all, delete
10721                  the dynamic tag.  */
10722               if (!(info->flags & DF_TEXTREL))
10723                 {
10724                   dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
10725                   swap_out_p = FALSE;
10726                 }
10727               break;
10728
10729             case DT_FLAGS:
10730               /* If we didn't need any text relocations after all, clear
10731                  DF_TEXTREL from DT_FLAGS.  */
10732               if (!(info->flags & DF_TEXTREL))
10733                 dyn.d_un.d_val &= ~DF_TEXTREL;
10734               else
10735                 swap_out_p = FALSE;
10736               break;
10737
10738             default:
10739               swap_out_p = FALSE;
10740               if (htab->is_vxworks
10741                   && elf_vxworks_finish_dynamic_entry (output_bfd, &dyn))
10742                 swap_out_p = TRUE;
10743               break;
10744             }
10745
10746           if (swap_out_p || dyn_skipped)
10747             (*get_elf_backend_data (dynobj)->s->swap_dyn_out)
10748               (dynobj, &dyn, b - dyn_skipped);
10749
10750           if (dyn_to_skip)
10751             {
10752               dyn_skipped += dyn_to_skip;
10753               dyn_to_skip = 0;
10754             }
10755         }
10756
10757       /* Wipe out any trailing entries if we shifted down a dynamic tag.  */
10758       if (dyn_skipped > 0)
10759         memset (b - dyn_skipped, 0, dyn_skipped);
10760     }
10761
10762   if (sgot != NULL && sgot->size > 0
10763       && !bfd_is_abs_section (sgot->output_section))
10764     {
10765       if (htab->is_vxworks)
10766         {
10767           /* The first entry of the global offset table points to the
10768              ".dynamic" section.  The second is initialized by the
10769              loader and contains the shared library identifier.
10770              The third is also initialized by the loader and points
10771              to the lazy resolution stub.  */
10772           MIPS_ELF_PUT_WORD (output_bfd,
10773                              sdyn->output_offset + sdyn->output_section->vma,
10774                              sgot->contents);
10775           MIPS_ELF_PUT_WORD (output_bfd, 0,
10776                              sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd));
10777           MIPS_ELF_PUT_WORD (output_bfd, 0,
10778                              sgot->contents
10779                              + 2 * MIPS_ELF_GOT_SIZE (output_bfd));
10780         }
10781       else
10782         {
10783           /* The first entry of the global offset table will be filled at
10784              runtime. The second entry will be used by some runtime loaders.
10785              This isn't the case of IRIX rld.  */
10786           MIPS_ELF_PUT_WORD (output_bfd, (bfd_vma) 0, sgot->contents);
10787           MIPS_ELF_PUT_WORD (output_bfd, MIPS_ELF_GNU_GOT1_MASK (output_bfd),
10788                              sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd));
10789         }
10790
10791       elf_section_data (sgot->output_section)->this_hdr.sh_entsize
10792          = MIPS_ELF_GOT_SIZE (output_bfd);
10793     }
10794
10795   /* Generate dynamic relocations for the non-primary gots.  */
10796   if (gg != NULL && gg->next)
10797     {
10798       Elf_Internal_Rela rel[3];
10799       bfd_vma addend = 0;
10800
10801       memset (rel, 0, sizeof (rel));
10802       rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_REL32);
10803
10804       for (g = gg->next; g->next != gg; g = g->next)
10805         {
10806           bfd_vma got_index = g->next->local_gotno + g->next->global_gotno
10807             + g->next->tls_gotno;
10808
10809           MIPS_ELF_PUT_WORD (output_bfd, 0, sgot->contents
10810                              + got_index++ * MIPS_ELF_GOT_SIZE (output_bfd));
10811           MIPS_ELF_PUT_WORD (output_bfd, MIPS_ELF_GNU_GOT1_MASK (output_bfd),
10812                              sgot->contents
10813                              + got_index++ * MIPS_ELF_GOT_SIZE (output_bfd));
10814
10815           if (! info->shared)
10816             continue;
10817
10818           while (got_index < g->assigned_gotno)
10819             {
10820               rel[0].r_offset = rel[1].r_offset = rel[2].r_offset
10821                 = got_index++ * MIPS_ELF_GOT_SIZE (output_bfd);
10822               if (!(mips_elf_create_dynamic_relocation
10823                     (output_bfd, info, rel, NULL,
10824                      bfd_abs_section_ptr,
10825                      0, &addend, sgot)))
10826                 return FALSE;
10827               BFD_ASSERT (addend == 0);
10828             }
10829         }
10830     }
10831
10832   /* The generation of dynamic relocations for the non-primary gots
10833      adds more dynamic relocations.  We cannot count them until
10834      here.  */
10835
10836   if (elf_hash_table (info)->dynamic_sections_created)
10837     {
10838       bfd_byte *b;
10839       bfd_boolean swap_out_p;
10840
10841       BFD_ASSERT (sdyn != NULL);
10842
10843       for (b = sdyn->contents;
10844            b < sdyn->contents + sdyn->size;
10845            b += MIPS_ELF_DYN_SIZE (dynobj))
10846         {
10847           Elf_Internal_Dyn dyn;
10848           asection *s;
10849
10850           /* Read in the current dynamic entry.  */
10851           (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
10852
10853           /* Assume that we're going to modify it and write it out.  */
10854           swap_out_p = TRUE;
10855
10856           switch (dyn.d_tag)
10857             {
10858             case DT_RELSZ:
10859               /* Reduce DT_RELSZ to account for any relocations we
10860                  decided not to make.  This is for the n64 irix rld,
10861                  which doesn't seem to apply any relocations if there
10862                  are trailing null entries.  */
10863               s = mips_elf_rel_dyn_section (info, FALSE);
10864               dyn.d_un.d_val = (s->reloc_count
10865                                 * (ABI_64_P (output_bfd)
10866                                    ? sizeof (Elf64_Mips_External_Rel)
10867                                    : sizeof (Elf32_External_Rel)));
10868               /* Adjust the section size too.  Tools like the prelinker
10869                  can reasonably expect the values to the same.  */
10870               elf_section_data (s->output_section)->this_hdr.sh_size
10871                 = dyn.d_un.d_val;
10872               break;
10873
10874             default:
10875               swap_out_p = FALSE;
10876               break;
10877             }
10878
10879           if (swap_out_p)
10880             (*get_elf_backend_data (dynobj)->s->swap_dyn_out)
10881               (dynobj, &dyn, b);
10882         }
10883     }
10884
10885   {
10886     asection *s;
10887     Elf32_compact_rel cpt;
10888
10889     if (SGI_COMPAT (output_bfd))
10890       {
10891         /* Write .compact_rel section out.  */
10892         s = bfd_get_linker_section (dynobj, ".compact_rel");
10893         if (s != NULL)
10894           {
10895             cpt.id1 = 1;
10896             cpt.num = s->reloc_count;
10897             cpt.id2 = 2;
10898             cpt.offset = (s->output_section->filepos
10899                           + sizeof (Elf32_External_compact_rel));
10900             cpt.reserved0 = 0;
10901             cpt.reserved1 = 0;
10902             bfd_elf32_swap_compact_rel_out (output_bfd, &cpt,
10903                                             ((Elf32_External_compact_rel *)
10904                                              s->contents));
10905
10906             /* Clean up a dummy stub function entry in .text.  */
10907             if (htab->sstubs != NULL)
10908               {
10909                 file_ptr dummy_offset;
10910
10911                 BFD_ASSERT (htab->sstubs->size >= htab->function_stub_size);
10912                 dummy_offset = htab->sstubs->size - htab->function_stub_size;
10913                 memset (htab->sstubs->contents + dummy_offset, 0,
10914                         htab->function_stub_size);
10915               }
10916           }
10917       }
10918
10919     /* The psABI says that the dynamic relocations must be sorted in
10920        increasing order of r_symndx.  The VxWorks EABI doesn't require
10921        this, and because the code below handles REL rather than RELA
10922        relocations, using it for VxWorks would be outright harmful.  */
10923     if (!htab->is_vxworks)
10924       {
10925         s = mips_elf_rel_dyn_section (info, FALSE);
10926         if (s != NULL
10927             && s->size > (bfd_vma)2 * MIPS_ELF_REL_SIZE (output_bfd))
10928           {
10929             reldyn_sorting_bfd = output_bfd;
10930
10931             if (ABI_64_P (output_bfd))
10932               qsort ((Elf64_External_Rel *) s->contents + 1,
10933                      s->reloc_count - 1, sizeof (Elf64_Mips_External_Rel),
10934                      sort_dynamic_relocs_64);
10935             else
10936               qsort ((Elf32_External_Rel *) s->contents + 1,
10937                      s->reloc_count - 1, sizeof (Elf32_External_Rel),
10938                      sort_dynamic_relocs);
10939           }
10940       }
10941   }
10942
10943   if (htab->splt && htab->splt->size > 0)
10944     {
10945       if (htab->is_vxworks)
10946         {
10947           if (info->shared)
10948             mips_vxworks_finish_shared_plt (output_bfd, info);
10949           else
10950             mips_vxworks_finish_exec_plt (output_bfd, info);
10951         }
10952       else
10953         {
10954           BFD_ASSERT (!info->shared);
10955           mips_finish_exec_plt (output_bfd, info);
10956         }
10957     }
10958   return TRUE;
10959 }
10960
10961
10962 /* Set ABFD's EF_MIPS_ARCH and EF_MIPS_MACH flags.  */
10963
10964 static void
10965 mips_set_isa_flags (bfd *abfd)
10966 {
10967   flagword val;
10968
10969   switch (bfd_get_mach (abfd))
10970     {
10971     default:
10972     case bfd_mach_mips3000:
10973       val = E_MIPS_ARCH_1;
10974       break;
10975
10976     case bfd_mach_mips3900:
10977       val = E_MIPS_ARCH_1 | E_MIPS_MACH_3900;
10978       break;
10979
10980     case bfd_mach_mips6000:
10981       val = E_MIPS_ARCH_2;
10982       break;
10983
10984     case bfd_mach_mips4000:
10985     case bfd_mach_mips4300:
10986     case bfd_mach_mips4400:
10987     case bfd_mach_mips4600:
10988       val = E_MIPS_ARCH_3;
10989       break;
10990
10991     case bfd_mach_mips4010:
10992       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4010;
10993       break;
10994
10995     case bfd_mach_mips4100:
10996       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4100;
10997       break;
10998
10999     case bfd_mach_mips4111:
11000       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4111;
11001       break;
11002
11003     case bfd_mach_mips4120:
11004       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4120;
11005       break;
11006
11007     case bfd_mach_mips4650:
11008       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4650;
11009       break;
11010
11011     case bfd_mach_mips5400:
11012       val = E_MIPS_ARCH_4 | E_MIPS_MACH_5400;
11013       break;
11014
11015     case bfd_mach_mips5500:
11016       val = E_MIPS_ARCH_4 | E_MIPS_MACH_5500;
11017       break;
11018
11019     case bfd_mach_mips5900:
11020       val = E_MIPS_ARCH_3 | E_MIPS_MACH_5900;
11021       break;
11022
11023     case bfd_mach_mips9000:
11024       val = E_MIPS_ARCH_4 | E_MIPS_MACH_9000;
11025       break;
11026
11027     case bfd_mach_mips5000:
11028     case bfd_mach_mips7000:
11029     case bfd_mach_mips8000:
11030     case bfd_mach_mips10000:
11031     case bfd_mach_mips12000:
11032     case bfd_mach_mips14000:
11033     case bfd_mach_mips16000:
11034       val = E_MIPS_ARCH_4;
11035       break;
11036
11037     case bfd_mach_mips5:
11038       val = E_MIPS_ARCH_5;
11039       break;
11040
11041     case bfd_mach_mips_loongson_2e:
11042       val = E_MIPS_ARCH_3 | E_MIPS_MACH_LS2E;
11043       break;
11044
11045     case bfd_mach_mips_loongson_2f:
11046       val = E_MIPS_ARCH_3 | E_MIPS_MACH_LS2F;
11047       break;
11048
11049     case bfd_mach_mips_sb1:
11050       val = E_MIPS_ARCH_64 | E_MIPS_MACH_SB1;
11051       break;
11052
11053     case bfd_mach_mips_loongson_3a:
11054       val = E_MIPS_ARCH_64 | E_MIPS_MACH_LS3A;
11055       break;
11056
11057     case bfd_mach_mips_octeon:
11058     case bfd_mach_mips_octeonp:
11059       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON;
11060       break;
11061
11062     case bfd_mach_mips_xlr:
11063       val = E_MIPS_ARCH_64 | E_MIPS_MACH_XLR;
11064       break;
11065
11066     case bfd_mach_mips_octeon2:
11067       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON2;
11068       break;
11069
11070     case bfd_mach_mipsisa32:
11071       val = E_MIPS_ARCH_32;
11072       break;
11073
11074     case bfd_mach_mipsisa64:
11075       val = E_MIPS_ARCH_64;
11076       break;
11077
11078     case bfd_mach_mipsisa32r2:
11079       val = E_MIPS_ARCH_32R2;
11080       break;
11081
11082     case bfd_mach_mipsisa64r2:
11083       val = E_MIPS_ARCH_64R2;
11084       break;
11085     }
11086   elf_elfheader (abfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH);
11087   elf_elfheader (abfd)->e_flags |= val;
11088
11089 }
11090
11091
11092 /* The final processing done just before writing out a MIPS ELF object
11093    file.  This gets the MIPS architecture right based on the machine
11094    number.  This is used by both the 32-bit and the 64-bit ABI.  */
11095
11096 void
11097 _bfd_mips_elf_final_write_processing (bfd *abfd,
11098                                       bfd_boolean linker ATTRIBUTE_UNUSED)
11099 {
11100   unsigned int i;
11101   Elf_Internal_Shdr **hdrpp;
11102   const char *name;
11103   asection *sec;
11104
11105   /* Keep the existing EF_MIPS_MACH and EF_MIPS_ARCH flags if the former
11106      is nonzero.  This is for compatibility with old objects, which used
11107      a combination of a 32-bit EF_MIPS_ARCH and a 64-bit EF_MIPS_MACH.  */
11108   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == 0)
11109     mips_set_isa_flags (abfd);
11110
11111   /* Set the sh_info field for .gptab sections and other appropriate
11112      info for each special section.  */
11113   for (i = 1, hdrpp = elf_elfsections (abfd) + 1;
11114        i < elf_numsections (abfd);
11115        i++, hdrpp++)
11116     {
11117       switch ((*hdrpp)->sh_type)
11118         {
11119         case SHT_MIPS_MSYM:
11120         case SHT_MIPS_LIBLIST:
11121           sec = bfd_get_section_by_name (abfd, ".dynstr");
11122           if (sec != NULL)
11123             (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
11124           break;
11125
11126         case SHT_MIPS_GPTAB:
11127           BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
11128           name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
11129           BFD_ASSERT (name != NULL
11130                       && CONST_STRNEQ (name, ".gptab."));
11131           sec = bfd_get_section_by_name (abfd, name + sizeof ".gptab" - 1);
11132           BFD_ASSERT (sec != NULL);
11133           (*hdrpp)->sh_info = elf_section_data (sec)->this_idx;
11134           break;
11135
11136         case SHT_MIPS_CONTENT:
11137           BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
11138           name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
11139           BFD_ASSERT (name != NULL
11140                       && CONST_STRNEQ (name, ".MIPS.content"));
11141           sec = bfd_get_section_by_name (abfd,
11142                                          name + sizeof ".MIPS.content" - 1);
11143           BFD_ASSERT (sec != NULL);
11144           (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
11145           break;
11146
11147         case SHT_MIPS_SYMBOL_LIB:
11148           sec = bfd_get_section_by_name (abfd, ".dynsym");
11149           if (sec != NULL)
11150             (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
11151           sec = bfd_get_section_by_name (abfd, ".liblist");
11152           if (sec != NULL)
11153             (*hdrpp)->sh_info = elf_section_data (sec)->this_idx;
11154           break;
11155
11156         case SHT_MIPS_EVENTS:
11157           BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
11158           name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
11159           BFD_ASSERT (name != NULL);
11160           if (CONST_STRNEQ (name, ".MIPS.events"))
11161             sec = bfd_get_section_by_name (abfd,
11162                                            name + sizeof ".MIPS.events" - 1);
11163           else
11164             {
11165               BFD_ASSERT (CONST_STRNEQ (name, ".MIPS.post_rel"));
11166               sec = bfd_get_section_by_name (abfd,
11167                                              (name
11168                                               + sizeof ".MIPS.post_rel" - 1));
11169             }
11170           BFD_ASSERT (sec != NULL);
11171           (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
11172           break;
11173
11174         }
11175     }
11176 }
11177 \f
11178 /* When creating an IRIX5 executable, we need REGINFO and RTPROC
11179    segments.  */
11180
11181 int
11182 _bfd_mips_elf_additional_program_headers (bfd *abfd,
11183                                           struct bfd_link_info *info ATTRIBUTE_UNUSED)
11184 {
11185   asection *s;
11186   int ret = 0;
11187
11188   /* See if we need a PT_MIPS_REGINFO segment.  */
11189   s = bfd_get_section_by_name (abfd, ".reginfo");
11190   if (s && (s->flags & SEC_LOAD))
11191     ++ret;
11192
11193   /* See if we need a PT_MIPS_OPTIONS segment.  */
11194   if (IRIX_COMPAT (abfd) == ict_irix6
11195       && bfd_get_section_by_name (abfd,
11196                                   MIPS_ELF_OPTIONS_SECTION_NAME (abfd)))
11197     ++ret;
11198
11199   /* See if we need a PT_MIPS_RTPROC segment.  */
11200   if (IRIX_COMPAT (abfd) == ict_irix5
11201       && bfd_get_section_by_name (abfd, ".dynamic")
11202       && bfd_get_section_by_name (abfd, ".mdebug"))
11203     ++ret;
11204
11205   /* Allocate a PT_NULL header in dynamic objects.  See
11206      _bfd_mips_elf_modify_segment_map for details.  */
11207   if (!SGI_COMPAT (abfd)
11208       && bfd_get_section_by_name (abfd, ".dynamic"))
11209     ++ret;
11210
11211   return ret;
11212 }
11213
11214 /* Modify the segment map for an IRIX5 executable.  */
11215
11216 bfd_boolean
11217 _bfd_mips_elf_modify_segment_map (bfd *abfd,
11218                                   struct bfd_link_info *info)
11219 {
11220   asection *s;
11221   struct elf_segment_map *m, **pm;
11222   bfd_size_type amt;
11223
11224   /* If there is a .reginfo section, we need a PT_MIPS_REGINFO
11225      segment.  */
11226   s = bfd_get_section_by_name (abfd, ".reginfo");
11227   if (s != NULL && (s->flags & SEC_LOAD) != 0)
11228     {
11229       for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
11230         if (m->p_type == PT_MIPS_REGINFO)
11231           break;
11232       if (m == NULL)
11233         {
11234           amt = sizeof *m;
11235           m = bfd_zalloc (abfd, amt);
11236           if (m == NULL)
11237             return FALSE;
11238
11239           m->p_type = PT_MIPS_REGINFO;
11240           m->count = 1;
11241           m->sections[0] = s;
11242
11243           /* We want to put it after the PHDR and INTERP segments.  */
11244           pm = &elf_tdata (abfd)->segment_map;
11245           while (*pm != NULL
11246                  && ((*pm)->p_type == PT_PHDR
11247                      || (*pm)->p_type == PT_INTERP))
11248             pm = &(*pm)->next;
11249
11250           m->next = *pm;
11251           *pm = m;
11252         }
11253     }
11254
11255   /* For IRIX 6, we don't have .mdebug sections, nor does anything but
11256      .dynamic end up in PT_DYNAMIC.  However, we do have to insert a
11257      PT_MIPS_OPTIONS segment immediately following the program header
11258      table.  */
11259   if (NEWABI_P (abfd)
11260       /* On non-IRIX6 new abi, we'll have already created a segment
11261          for this section, so don't create another.  I'm not sure this
11262          is not also the case for IRIX 6, but I can't test it right
11263          now.  */
11264       && IRIX_COMPAT (abfd) == ict_irix6)
11265     {
11266       for (s = abfd->sections; s; s = s->next)
11267         if (elf_section_data (s)->this_hdr.sh_type == SHT_MIPS_OPTIONS)
11268           break;
11269
11270       if (s)
11271         {
11272           struct elf_segment_map *options_segment;
11273
11274           pm = &elf_tdata (abfd)->segment_map;
11275           while (*pm != NULL
11276                  && ((*pm)->p_type == PT_PHDR
11277                      || (*pm)->p_type == PT_INTERP))
11278             pm = &(*pm)->next;
11279
11280           if (*pm == NULL || (*pm)->p_type != PT_MIPS_OPTIONS)
11281             {
11282               amt = sizeof (struct elf_segment_map);
11283               options_segment = bfd_zalloc (abfd, amt);
11284               options_segment->next = *pm;
11285               options_segment->p_type = PT_MIPS_OPTIONS;
11286               options_segment->p_flags = PF_R;
11287               options_segment->p_flags_valid = TRUE;
11288               options_segment->count = 1;
11289               options_segment->sections[0] = s;
11290               *pm = options_segment;
11291             }
11292         }
11293     }
11294   else
11295     {
11296       if (IRIX_COMPAT (abfd) == ict_irix5)
11297         {
11298           /* If there are .dynamic and .mdebug sections, we make a room
11299              for the RTPROC header.  FIXME: Rewrite without section names.  */
11300           if (bfd_get_section_by_name (abfd, ".interp") == NULL
11301               && bfd_get_section_by_name (abfd, ".dynamic") != NULL
11302               && bfd_get_section_by_name (abfd, ".mdebug") != NULL)
11303             {
11304               for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
11305                 if (m->p_type == PT_MIPS_RTPROC)
11306                   break;
11307               if (m == NULL)
11308                 {
11309                   amt = sizeof *m;
11310                   m = bfd_zalloc (abfd, amt);
11311                   if (m == NULL)
11312                     return FALSE;
11313
11314                   m->p_type = PT_MIPS_RTPROC;
11315
11316                   s = bfd_get_section_by_name (abfd, ".rtproc");
11317                   if (s == NULL)
11318                     {
11319                       m->count = 0;
11320                       m->p_flags = 0;
11321                       m->p_flags_valid = 1;
11322                     }
11323                   else
11324                     {
11325                       m->count = 1;
11326                       m->sections[0] = s;
11327                     }
11328
11329                   /* We want to put it after the DYNAMIC segment.  */
11330                   pm = &elf_tdata (abfd)->segment_map;
11331                   while (*pm != NULL && (*pm)->p_type != PT_DYNAMIC)
11332                     pm = &(*pm)->next;
11333                   if (*pm != NULL)
11334                     pm = &(*pm)->next;
11335
11336                   m->next = *pm;
11337                   *pm = m;
11338                 }
11339             }
11340         }
11341       /* On IRIX5, the PT_DYNAMIC segment includes the .dynamic,
11342          .dynstr, .dynsym, and .hash sections, and everything in
11343          between.  */
11344       for (pm = &elf_tdata (abfd)->segment_map; *pm != NULL;
11345            pm = &(*pm)->next)
11346         if ((*pm)->p_type == PT_DYNAMIC)
11347           break;
11348       m = *pm;
11349       if (m != NULL && IRIX_COMPAT (abfd) == ict_none)
11350         {
11351           /* For a normal mips executable the permissions for the PT_DYNAMIC
11352              segment are read, write and execute. We do that here since
11353              the code in elf.c sets only the read permission. This matters
11354              sometimes for the dynamic linker.  */
11355           if (bfd_get_section_by_name (abfd, ".dynamic") != NULL)
11356             {
11357               m->p_flags = PF_R | PF_W | PF_X;
11358               m->p_flags_valid = 1;
11359             }
11360         }
11361       /* GNU/Linux binaries do not need the extended PT_DYNAMIC section.
11362          glibc's dynamic linker has traditionally derived the number of
11363          tags from the p_filesz field, and sometimes allocates stack
11364          arrays of that size.  An overly-big PT_DYNAMIC segment can
11365          be actively harmful in such cases.  Making PT_DYNAMIC contain
11366          other sections can also make life hard for the prelinker,
11367          which might move one of the other sections to a different
11368          PT_LOAD segment.  */
11369       if (SGI_COMPAT (abfd)
11370           && m != NULL
11371           && m->count == 1
11372           && strcmp (m->sections[0]->name, ".dynamic") == 0)
11373         {
11374           static const char *sec_names[] =
11375           {
11376             ".dynamic", ".dynstr", ".dynsym", ".hash"
11377           };
11378           bfd_vma low, high;
11379           unsigned int i, c;
11380           struct elf_segment_map *n;
11381
11382           low = ~(bfd_vma) 0;
11383           high = 0;
11384           for (i = 0; i < sizeof sec_names / sizeof sec_names[0]; i++)
11385             {
11386               s = bfd_get_section_by_name (abfd, sec_names[i]);
11387               if (s != NULL && (s->flags & SEC_LOAD) != 0)
11388                 {
11389                   bfd_size_type sz;
11390
11391                   if (low > s->vma)
11392                     low = s->vma;
11393                   sz = s->size;
11394                   if (high < s->vma + sz)
11395                     high = s->vma + sz;
11396                 }
11397             }
11398
11399           c = 0;
11400           for (s = abfd->sections; s != NULL; s = s->next)
11401             if ((s->flags & SEC_LOAD) != 0
11402                 && s->vma >= low
11403                 && s->vma + s->size <= high)
11404               ++c;
11405
11406           amt = sizeof *n + (bfd_size_type) (c - 1) * sizeof (asection *);
11407           n = bfd_zalloc (abfd, amt);
11408           if (n == NULL)
11409             return FALSE;
11410           *n = *m;
11411           n->count = c;
11412
11413           i = 0;
11414           for (s = abfd->sections; s != NULL; s = s->next)
11415             {
11416               if ((s->flags & SEC_LOAD) != 0
11417                   && s->vma >= low
11418                   && s->vma + s->size <= high)
11419                 {
11420                   n->sections[i] = s;
11421                   ++i;
11422                 }
11423             }
11424
11425           *pm = n;
11426         }
11427     }
11428
11429   /* Allocate a spare program header in dynamic objects so that tools
11430      like the prelinker can add an extra PT_LOAD entry.
11431
11432      If the prelinker needs to make room for a new PT_LOAD entry, its
11433      standard procedure is to move the first (read-only) sections into
11434      the new (writable) segment.  However, the MIPS ABI requires
11435      .dynamic to be in a read-only segment, and the section will often
11436      start within sizeof (ElfNN_Phdr) bytes of the last program header.
11437
11438      Although the prelinker could in principle move .dynamic to a
11439      writable segment, it seems better to allocate a spare program
11440      header instead, and avoid the need to move any sections.
11441      There is a long tradition of allocating spare dynamic tags,
11442      so allocating a spare program header seems like a natural
11443      extension.
11444
11445      If INFO is NULL, we may be copying an already prelinked binary
11446      with objcopy or strip, so do not add this header.  */
11447   if (info != NULL
11448       && !SGI_COMPAT (abfd)
11449       && bfd_get_section_by_name (abfd, ".dynamic"))
11450     {
11451       for (pm = &elf_tdata (abfd)->segment_map; *pm != NULL; pm = &(*pm)->next)
11452         if ((*pm)->p_type == PT_NULL)
11453           break;
11454       if (*pm == NULL)
11455         {
11456           m = bfd_zalloc (abfd, sizeof (*m));
11457           if (m == NULL)
11458             return FALSE;
11459
11460           m->p_type = PT_NULL;
11461           *pm = m;
11462         }
11463     }
11464
11465   return TRUE;
11466 }
11467 \f
11468 /* Return the section that should be marked against GC for a given
11469    relocation.  */
11470
11471 asection *
11472 _bfd_mips_elf_gc_mark_hook (asection *sec,
11473                             struct bfd_link_info *info,
11474                             Elf_Internal_Rela *rel,
11475                             struct elf_link_hash_entry *h,
11476                             Elf_Internal_Sym *sym)
11477 {
11478   /* ??? Do mips16 stub sections need to be handled special?  */
11479
11480   if (h != NULL)
11481     switch (ELF_R_TYPE (sec->owner, rel->r_info))
11482       {
11483       case R_MIPS_GNU_VTINHERIT:
11484       case R_MIPS_GNU_VTENTRY:
11485         return NULL;
11486       }
11487
11488   return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
11489 }
11490
11491 /* Update the got entry reference counts for the section being removed.  */
11492
11493 bfd_boolean
11494 _bfd_mips_elf_gc_sweep_hook (bfd *abfd ATTRIBUTE_UNUSED,
11495                              struct bfd_link_info *info ATTRIBUTE_UNUSED,
11496                              asection *sec ATTRIBUTE_UNUSED,
11497                              const Elf_Internal_Rela *relocs ATTRIBUTE_UNUSED)
11498 {
11499 #if 0
11500   Elf_Internal_Shdr *symtab_hdr;
11501   struct elf_link_hash_entry **sym_hashes;
11502   bfd_signed_vma *local_got_refcounts;
11503   const Elf_Internal_Rela *rel, *relend;
11504   unsigned long r_symndx;
11505   struct elf_link_hash_entry *h;
11506
11507   if (info->relocatable)
11508     return TRUE;
11509
11510   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
11511   sym_hashes = elf_sym_hashes (abfd);
11512   local_got_refcounts = elf_local_got_refcounts (abfd);
11513
11514   relend = relocs + sec->reloc_count;
11515   for (rel = relocs; rel < relend; rel++)
11516     switch (ELF_R_TYPE (abfd, rel->r_info))
11517       {
11518       case R_MIPS16_GOT16:
11519       case R_MIPS16_CALL16:
11520       case R_MIPS_GOT16:
11521       case R_MIPS_CALL16:
11522       case R_MIPS_CALL_HI16:
11523       case R_MIPS_CALL_LO16:
11524       case R_MIPS_GOT_HI16:
11525       case R_MIPS_GOT_LO16:
11526       case R_MIPS_GOT_DISP:
11527       case R_MIPS_GOT_PAGE:
11528       case R_MIPS_GOT_OFST:
11529       case R_MICROMIPS_GOT16:
11530       case R_MICROMIPS_CALL16:
11531       case R_MICROMIPS_CALL_HI16:
11532       case R_MICROMIPS_CALL_LO16:
11533       case R_MICROMIPS_GOT_HI16:
11534       case R_MICROMIPS_GOT_LO16:
11535       case R_MICROMIPS_GOT_DISP:
11536       case R_MICROMIPS_GOT_PAGE:
11537       case R_MICROMIPS_GOT_OFST:
11538         /* ??? It would seem that the existing MIPS code does no sort
11539            of reference counting or whatnot on its GOT and PLT entries,
11540            so it is not possible to garbage collect them at this time.  */
11541         break;
11542
11543       default:
11544         break;
11545       }
11546 #endif
11547
11548   return TRUE;
11549 }
11550 \f
11551 /* Copy data from a MIPS ELF indirect symbol to its direct symbol,
11552    hiding the old indirect symbol.  Process additional relocation
11553    information.  Also called for weakdefs, in which case we just let
11554    _bfd_elf_link_hash_copy_indirect copy the flags for us.  */
11555
11556 void
11557 _bfd_mips_elf_copy_indirect_symbol (struct bfd_link_info *info,
11558                                     struct elf_link_hash_entry *dir,
11559                                     struct elf_link_hash_entry *ind)
11560 {
11561   struct mips_elf_link_hash_entry *dirmips, *indmips;
11562
11563   _bfd_elf_link_hash_copy_indirect (info, dir, ind);
11564
11565   dirmips = (struct mips_elf_link_hash_entry *) dir;
11566   indmips = (struct mips_elf_link_hash_entry *) ind;
11567   /* Any absolute non-dynamic relocations against an indirect or weak
11568      definition will be against the target symbol.  */
11569   if (indmips->has_static_relocs)
11570     dirmips->has_static_relocs = TRUE;
11571
11572   if (ind->root.type != bfd_link_hash_indirect)
11573     return;
11574
11575   dirmips->possibly_dynamic_relocs += indmips->possibly_dynamic_relocs;
11576   if (indmips->readonly_reloc)
11577     dirmips->readonly_reloc = TRUE;
11578   if (indmips->no_fn_stub)
11579     dirmips->no_fn_stub = TRUE;
11580   if (indmips->fn_stub)
11581     {
11582       dirmips->fn_stub = indmips->fn_stub;
11583       indmips->fn_stub = NULL;
11584     }
11585   if (indmips->need_fn_stub)
11586     {
11587       dirmips->need_fn_stub = TRUE;
11588       indmips->need_fn_stub = FALSE;
11589     }
11590   if (indmips->call_stub)
11591     {
11592       dirmips->call_stub = indmips->call_stub;
11593       indmips->call_stub = NULL;
11594     }
11595   if (indmips->call_fp_stub)
11596     {
11597       dirmips->call_fp_stub = indmips->call_fp_stub;
11598       indmips->call_fp_stub = NULL;
11599     }
11600   if (indmips->global_got_area < dirmips->global_got_area)
11601     dirmips->global_got_area = indmips->global_got_area;
11602   if (indmips->global_got_area < GGA_NONE)
11603     indmips->global_got_area = GGA_NONE;
11604   if (indmips->has_nonpic_branches)
11605     dirmips->has_nonpic_branches = TRUE;
11606
11607   if (dirmips->tls_type == 0)
11608     dirmips->tls_type = indmips->tls_type;
11609 }
11610 \f
11611 #define PDR_SIZE 32
11612
11613 bfd_boolean
11614 _bfd_mips_elf_discard_info (bfd *abfd, struct elf_reloc_cookie *cookie,
11615                             struct bfd_link_info *info)
11616 {
11617   asection *o;
11618   bfd_boolean ret = FALSE;
11619   unsigned char *tdata;
11620   size_t i, skip;
11621
11622   o = bfd_get_section_by_name (abfd, ".pdr");
11623   if (! o)
11624     return FALSE;
11625   if (o->size == 0)
11626     return FALSE;
11627   if (o->size % PDR_SIZE != 0)
11628     return FALSE;
11629   if (o->output_section != NULL
11630       && bfd_is_abs_section (o->output_section))
11631     return FALSE;
11632
11633   tdata = bfd_zmalloc (o->size / PDR_SIZE);
11634   if (! tdata)
11635     return FALSE;
11636
11637   cookie->rels = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
11638                                             info->keep_memory);
11639   if (!cookie->rels)
11640     {
11641       free (tdata);
11642       return FALSE;
11643     }
11644
11645   cookie->rel = cookie->rels;
11646   cookie->relend = cookie->rels + o->reloc_count;
11647
11648   for (i = 0, skip = 0; i < o->size / PDR_SIZE; i ++)
11649     {
11650       if (bfd_elf_reloc_symbol_deleted_p (i * PDR_SIZE, cookie))
11651         {
11652           tdata[i] = 1;
11653           skip ++;
11654         }
11655     }
11656
11657   if (skip != 0)
11658     {
11659       mips_elf_section_data (o)->u.tdata = tdata;
11660       o->size -= skip * PDR_SIZE;
11661       ret = TRUE;
11662     }
11663   else
11664     free (tdata);
11665
11666   if (! info->keep_memory)
11667     free (cookie->rels);
11668
11669   return ret;
11670 }
11671
11672 bfd_boolean
11673 _bfd_mips_elf_ignore_discarded_relocs (asection *sec)
11674 {
11675   if (strcmp (sec->name, ".pdr") == 0)
11676     return TRUE;
11677   return FALSE;
11678 }
11679
11680 bfd_boolean
11681 _bfd_mips_elf_write_section (bfd *output_bfd,
11682                              struct bfd_link_info *link_info ATTRIBUTE_UNUSED,
11683                              asection *sec, bfd_byte *contents)
11684 {
11685   bfd_byte *to, *from, *end;
11686   int i;
11687
11688   if (strcmp (sec->name, ".pdr") != 0)
11689     return FALSE;
11690
11691   if (mips_elf_section_data (sec)->u.tdata == NULL)
11692     return FALSE;
11693
11694   to = contents;
11695   end = contents + sec->size;
11696   for (from = contents, i = 0;
11697        from < end;
11698        from += PDR_SIZE, i++)
11699     {
11700       if ((mips_elf_section_data (sec)->u.tdata)[i] == 1)
11701         continue;
11702       if (to != from)
11703         memcpy (to, from, PDR_SIZE);
11704       to += PDR_SIZE;
11705     }
11706   bfd_set_section_contents (output_bfd, sec->output_section, contents,
11707                             sec->output_offset, sec->size);
11708   return TRUE;
11709 }
11710 \f
11711 /* microMIPS code retains local labels for linker relaxation.  Omit them
11712    from output by default for clarity.  */
11713
11714 bfd_boolean
11715 _bfd_mips_elf_is_target_special_symbol (bfd *abfd, asymbol *sym)
11716 {
11717   return _bfd_elf_is_local_label_name (abfd, sym->name);
11718 }
11719
11720 /* MIPS ELF uses a special find_nearest_line routine in order the
11721    handle the ECOFF debugging information.  */
11722
11723 struct mips_elf_find_line
11724 {
11725   struct ecoff_debug_info d;
11726   struct ecoff_find_line i;
11727 };
11728
11729 bfd_boolean
11730 _bfd_mips_elf_find_nearest_line (bfd *abfd, asection *section,
11731                                  asymbol **symbols, bfd_vma offset,
11732                                  const char **filename_ptr,
11733                                  const char **functionname_ptr,
11734                                  unsigned int *line_ptr)
11735 {
11736   asection *msec;
11737
11738   if (_bfd_dwarf1_find_nearest_line (abfd, section, symbols, offset,
11739                                      filename_ptr, functionname_ptr,
11740                                      line_ptr))
11741     return TRUE;
11742
11743   if (_bfd_dwarf2_find_nearest_line (abfd, dwarf_debug_sections,
11744                                      section, symbols, offset,
11745                                      filename_ptr, functionname_ptr,
11746                                      line_ptr, NULL, ABI_64_P (abfd) ? 8 : 0,
11747                                      &elf_tdata (abfd)->dwarf2_find_line_info))
11748     return TRUE;
11749
11750   msec = bfd_get_section_by_name (abfd, ".mdebug");
11751   if (msec != NULL)
11752     {
11753       flagword origflags;
11754       struct mips_elf_find_line *fi;
11755       const struct ecoff_debug_swap * const swap =
11756         get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
11757
11758       /* If we are called during a link, mips_elf_final_link may have
11759          cleared the SEC_HAS_CONTENTS field.  We force it back on here
11760          if appropriate (which it normally will be).  */
11761       origflags = msec->flags;
11762       if (elf_section_data (msec)->this_hdr.sh_type != SHT_NOBITS)
11763         msec->flags |= SEC_HAS_CONTENTS;
11764
11765       fi = elf_tdata (abfd)->find_line_info;
11766       if (fi == NULL)
11767         {
11768           bfd_size_type external_fdr_size;
11769           char *fraw_src;
11770           char *fraw_end;
11771           struct fdr *fdr_ptr;
11772           bfd_size_type amt = sizeof (struct mips_elf_find_line);
11773
11774           fi = bfd_zalloc (abfd, amt);
11775           if (fi == NULL)
11776             {
11777               msec->flags = origflags;
11778               return FALSE;
11779             }
11780
11781           if (! _bfd_mips_elf_read_ecoff_info (abfd, msec, &fi->d))
11782             {
11783               msec->flags = origflags;
11784               return FALSE;
11785             }
11786
11787           /* Swap in the FDR information.  */
11788           amt = fi->d.symbolic_header.ifdMax * sizeof (struct fdr);
11789           fi->d.fdr = bfd_alloc (abfd, amt);
11790           if (fi->d.fdr == NULL)
11791             {
11792               msec->flags = origflags;
11793               return FALSE;
11794             }
11795           external_fdr_size = swap->external_fdr_size;
11796           fdr_ptr = fi->d.fdr;
11797           fraw_src = (char *) fi->d.external_fdr;
11798           fraw_end = (fraw_src
11799                       + fi->d.symbolic_header.ifdMax * external_fdr_size);
11800           for (; fraw_src < fraw_end; fraw_src += external_fdr_size, fdr_ptr++)
11801             (*swap->swap_fdr_in) (abfd, fraw_src, fdr_ptr);
11802
11803           elf_tdata (abfd)->find_line_info = fi;
11804
11805           /* Note that we don't bother to ever free this information.
11806              find_nearest_line is either called all the time, as in
11807              objdump -l, so the information should be saved, or it is
11808              rarely called, as in ld error messages, so the memory
11809              wasted is unimportant.  Still, it would probably be a
11810              good idea for free_cached_info to throw it away.  */
11811         }
11812
11813       if (_bfd_ecoff_locate_line (abfd, section, offset, &fi->d, swap,
11814                                   &fi->i, filename_ptr, functionname_ptr,
11815                                   line_ptr))
11816         {
11817           msec->flags = origflags;
11818           return TRUE;
11819         }
11820
11821       msec->flags = origflags;
11822     }
11823
11824   /* Fall back on the generic ELF find_nearest_line routine.  */
11825
11826   return _bfd_elf_find_nearest_line (abfd, section, symbols, offset,
11827                                      filename_ptr, functionname_ptr,
11828                                      line_ptr);
11829 }
11830
11831 bfd_boolean
11832 _bfd_mips_elf_find_inliner_info (bfd *abfd,
11833                                  const char **filename_ptr,
11834                                  const char **functionname_ptr,
11835                                  unsigned int *line_ptr)
11836 {
11837   bfd_boolean found;
11838   found = _bfd_dwarf2_find_inliner_info (abfd, filename_ptr,
11839                                          functionname_ptr, line_ptr,
11840                                          & elf_tdata (abfd)->dwarf2_find_line_info);
11841   return found;
11842 }
11843
11844 \f
11845 /* When are writing out the .options or .MIPS.options section,
11846    remember the bytes we are writing out, so that we can install the
11847    GP value in the section_processing routine.  */
11848
11849 bfd_boolean
11850 _bfd_mips_elf_set_section_contents (bfd *abfd, sec_ptr section,
11851                                     const void *location,
11852                                     file_ptr offset, bfd_size_type count)
11853 {
11854   if (MIPS_ELF_OPTIONS_SECTION_NAME_P (section->name))
11855     {
11856       bfd_byte *c;
11857
11858       if (elf_section_data (section) == NULL)
11859         {
11860           bfd_size_type amt = sizeof (struct bfd_elf_section_data);
11861           section->used_by_bfd = bfd_zalloc (abfd, amt);
11862           if (elf_section_data (section) == NULL)
11863             return FALSE;
11864         }
11865       c = mips_elf_section_data (section)->u.tdata;
11866       if (c == NULL)
11867         {
11868           c = bfd_zalloc (abfd, section->size);
11869           if (c == NULL)
11870             return FALSE;
11871           mips_elf_section_data (section)->u.tdata = c;
11872         }
11873
11874       memcpy (c + offset, location, count);
11875     }
11876
11877   return _bfd_elf_set_section_contents (abfd, section, location, offset,
11878                                         count);
11879 }
11880
11881 /* This is almost identical to bfd_generic_get_... except that some
11882    MIPS relocations need to be handled specially.  Sigh.  */
11883
11884 bfd_byte *
11885 _bfd_elf_mips_get_relocated_section_contents
11886   (bfd *abfd,
11887    struct bfd_link_info *link_info,
11888    struct bfd_link_order *link_order,
11889    bfd_byte *data,
11890    bfd_boolean relocatable,
11891    asymbol **symbols)
11892 {
11893   /* Get enough memory to hold the stuff */
11894   bfd *input_bfd = link_order->u.indirect.section->owner;
11895   asection *input_section = link_order->u.indirect.section;
11896   bfd_size_type sz;
11897
11898   long reloc_size = bfd_get_reloc_upper_bound (input_bfd, input_section);
11899   arelent **reloc_vector = NULL;
11900   long reloc_count;
11901
11902   if (reloc_size < 0)
11903     goto error_return;
11904
11905   reloc_vector = bfd_malloc (reloc_size);
11906   if (reloc_vector == NULL && reloc_size != 0)
11907     goto error_return;
11908
11909   /* read in the section */
11910   sz = input_section->rawsize ? input_section->rawsize : input_section->size;
11911   if (!bfd_get_section_contents (input_bfd, input_section, data, 0, sz))
11912     goto error_return;
11913
11914   reloc_count = bfd_canonicalize_reloc (input_bfd,
11915                                         input_section,
11916                                         reloc_vector,
11917                                         symbols);
11918   if (reloc_count < 0)
11919     goto error_return;
11920
11921   if (reloc_count > 0)
11922     {
11923       arelent **parent;
11924       /* for mips */
11925       int gp_found;
11926       bfd_vma gp = 0x12345678;  /* initialize just to shut gcc up */
11927
11928       {
11929         struct bfd_hash_entry *h;
11930         struct bfd_link_hash_entry *lh;
11931         /* Skip all this stuff if we aren't mixing formats.  */
11932         if (abfd && input_bfd
11933             && abfd->xvec == input_bfd->xvec)
11934           lh = 0;
11935         else
11936           {
11937             h = bfd_hash_lookup (&link_info->hash->table, "_gp", FALSE, FALSE);
11938             lh = (struct bfd_link_hash_entry *) h;
11939           }
11940       lookup:
11941         if (lh)
11942           {
11943             switch (lh->type)
11944               {
11945               case bfd_link_hash_undefined:
11946               case bfd_link_hash_undefweak:
11947               case bfd_link_hash_common:
11948                 gp_found = 0;
11949                 break;
11950               case bfd_link_hash_defined:
11951               case bfd_link_hash_defweak:
11952                 gp_found = 1;
11953                 gp = lh->u.def.value;
11954                 break;
11955               case bfd_link_hash_indirect:
11956               case bfd_link_hash_warning:
11957                 lh = lh->u.i.link;
11958                 /* @@FIXME  ignoring warning for now */
11959                 goto lookup;
11960               case bfd_link_hash_new:
11961               default:
11962                 abort ();
11963               }
11964           }
11965         else
11966           gp_found = 0;
11967       }
11968       /* end mips */
11969       for (parent = reloc_vector; *parent != NULL; parent++)
11970         {
11971           char *error_message = NULL;
11972           bfd_reloc_status_type r;
11973
11974           /* Specific to MIPS: Deal with relocation types that require
11975              knowing the gp of the output bfd.  */
11976           asymbol *sym = *(*parent)->sym_ptr_ptr;
11977
11978           /* If we've managed to find the gp and have a special
11979              function for the relocation then go ahead, else default
11980              to the generic handling.  */
11981           if (gp_found
11982               && (*parent)->howto->special_function
11983               == _bfd_mips_elf32_gprel16_reloc)
11984             r = _bfd_mips_elf_gprel16_with_gp (input_bfd, sym, *parent,
11985                                                input_section, relocatable,
11986                                                data, gp);
11987           else
11988             r = bfd_perform_relocation (input_bfd, *parent, data,
11989                                         input_section,
11990                                         relocatable ? abfd : NULL,
11991                                         &error_message);
11992
11993           if (relocatable)
11994             {
11995               asection *os = input_section->output_section;
11996
11997               /* A partial link, so keep the relocs */
11998               os->orelocation[os->reloc_count] = *parent;
11999               os->reloc_count++;
12000             }
12001
12002           if (r != bfd_reloc_ok)
12003             {
12004               switch (r)
12005                 {
12006                 case bfd_reloc_undefined:
12007                   if (!((*link_info->callbacks->undefined_symbol)
12008                         (link_info, bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
12009                          input_bfd, input_section, (*parent)->address, TRUE)))
12010                     goto error_return;
12011                   break;
12012                 case bfd_reloc_dangerous:
12013                   BFD_ASSERT (error_message != NULL);
12014                   if (!((*link_info->callbacks->reloc_dangerous)
12015                         (link_info, error_message, input_bfd, input_section,
12016                          (*parent)->address)))
12017                     goto error_return;
12018                   break;
12019                 case bfd_reloc_overflow:
12020                   if (!((*link_info->callbacks->reloc_overflow)
12021                         (link_info, NULL,
12022                          bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
12023                          (*parent)->howto->name, (*parent)->addend,
12024                          input_bfd, input_section, (*parent)->address)))
12025                     goto error_return;
12026                   break;
12027                 case bfd_reloc_outofrange:
12028                 default:
12029                   abort ();
12030                   break;
12031                 }
12032
12033             }
12034         }
12035     }
12036   if (reloc_vector != NULL)
12037     free (reloc_vector);
12038   return data;
12039
12040 error_return:
12041   if (reloc_vector != NULL)
12042     free (reloc_vector);
12043   return NULL;
12044 }
12045 \f
12046 static bfd_boolean
12047 mips_elf_relax_delete_bytes (bfd *abfd,
12048                              asection *sec, bfd_vma addr, int count)
12049 {
12050   Elf_Internal_Shdr *symtab_hdr;
12051   unsigned int sec_shndx;
12052   bfd_byte *contents;
12053   Elf_Internal_Rela *irel, *irelend;
12054   Elf_Internal_Sym *isym;
12055   Elf_Internal_Sym *isymend;
12056   struct elf_link_hash_entry **sym_hashes;
12057   struct elf_link_hash_entry **end_hashes;
12058   struct elf_link_hash_entry **start_hashes;
12059   unsigned int symcount;
12060
12061   sec_shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
12062   contents = elf_section_data (sec)->this_hdr.contents;
12063
12064   irel = elf_section_data (sec)->relocs;
12065   irelend = irel + sec->reloc_count;
12066
12067   /* Actually delete the bytes.  */
12068   memmove (contents + addr, contents + addr + count,
12069            (size_t) (sec->size - addr - count));
12070   sec->size -= count;
12071
12072   /* Adjust all the relocs.  */
12073   for (irel = elf_section_data (sec)->relocs; irel < irelend; irel++)
12074     {
12075       /* Get the new reloc address.  */
12076       if (irel->r_offset > addr)
12077         irel->r_offset -= count;
12078     }
12079
12080   BFD_ASSERT (addr % 2 == 0);
12081   BFD_ASSERT (count % 2 == 0);
12082
12083   /* Adjust the local symbols defined in this section.  */
12084   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
12085   isym = (Elf_Internal_Sym *) symtab_hdr->contents;
12086   for (isymend = isym + symtab_hdr->sh_info; isym < isymend; isym++)
12087     if (isym->st_shndx == sec_shndx && isym->st_value > addr)
12088       isym->st_value -= count;
12089
12090   /* Now adjust the global symbols defined in this section.  */
12091   symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym)
12092               - symtab_hdr->sh_info);
12093   sym_hashes = start_hashes = elf_sym_hashes (abfd);
12094   end_hashes = sym_hashes + symcount;
12095
12096   for (; sym_hashes < end_hashes; sym_hashes++)
12097     {
12098       struct elf_link_hash_entry *sym_hash = *sym_hashes;
12099
12100       if ((sym_hash->root.type == bfd_link_hash_defined
12101            || sym_hash->root.type == bfd_link_hash_defweak)
12102           && sym_hash->root.u.def.section == sec)
12103         {
12104           bfd_vma value = sym_hash->root.u.def.value;
12105
12106           if (ELF_ST_IS_MICROMIPS (sym_hash->other))
12107             value &= MINUS_TWO;
12108           if (value > addr)
12109             sym_hash->root.u.def.value -= count;
12110         }
12111     }
12112
12113   return TRUE;
12114 }
12115
12116
12117 /* Opcodes needed for microMIPS relaxation as found in
12118    opcodes/micromips-opc.c.  */
12119
12120 struct opcode_descriptor {
12121   unsigned long match;
12122   unsigned long mask;
12123 };
12124
12125 /* The $ra register aka $31.  */
12126
12127 #define RA 31
12128
12129 /* 32-bit instruction format register fields.  */
12130
12131 #define OP32_SREG(opcode) (((opcode) >> 16) & 0x1f)
12132 #define OP32_TREG(opcode) (((opcode) >> 21) & 0x1f)
12133
12134 /* Check if a 5-bit register index can be abbreviated to 3 bits.  */
12135
12136 #define OP16_VALID_REG(r) \
12137   ((2 <= (r) && (r) <= 7) || (16 <= (r) && (r) <= 17))
12138
12139
12140 /* 32-bit and 16-bit branches.  */
12141
12142 static const struct opcode_descriptor b_insns_32[] = {
12143   { /* "b",     "p",            */ 0x40400000, 0xffff0000 }, /* bgez 0 */
12144   { /* "b",     "p",            */ 0x94000000, 0xffff0000 }, /* beq 0, 0 */
12145   { 0, 0 }  /* End marker for find_match().  */
12146 };
12147
12148 static const struct opcode_descriptor bc_insn_32 =
12149   { /* "bc(1|2)(ft)", "N,p",    */ 0x42800000, 0xfec30000 };
12150
12151 static const struct opcode_descriptor bz_insn_32 =
12152   { /* "b(g|l)(e|t)z", "s,p",   */ 0x40000000, 0xff200000 };
12153
12154 static const struct opcode_descriptor bzal_insn_32 =
12155   { /* "b(ge|lt)zal", "s,p",    */ 0x40200000, 0xffa00000 };
12156
12157 static const struct opcode_descriptor beq_insn_32 =
12158   { /* "b(eq|ne)", "s,t,p",     */ 0x94000000, 0xdc000000 };
12159
12160 static const struct opcode_descriptor b_insn_16 =
12161   { /* "b",     "mD",           */ 0xcc00,     0xfc00 };
12162
12163 static const struct opcode_descriptor bz_insn_16 =
12164   { /* "b(eq|ne)z", "md,mE",    */ 0x8c00,     0xdc00 };
12165
12166
12167 /* 32-bit and 16-bit branch EQ and NE zero.  */
12168
12169 /* NOTE: All opcode tables have BEQ/BNE in the same order: first the
12170    eq and second the ne.  This convention is used when replacing a
12171    32-bit BEQ/BNE with the 16-bit version.  */
12172
12173 #define BZC32_REG_FIELD(r) (((r) & 0x1f) << 16)
12174
12175 static const struct opcode_descriptor bz_rs_insns_32[] = {
12176   { /* "beqz",  "s,p",          */ 0x94000000, 0xffe00000 },
12177   { /* "bnez",  "s,p",          */ 0xb4000000, 0xffe00000 },
12178   { 0, 0 }  /* End marker for find_match().  */
12179 };
12180
12181 static const struct opcode_descriptor bz_rt_insns_32[] = {
12182   { /* "beqz",  "t,p",          */ 0x94000000, 0xfc01f000 },
12183   { /* "bnez",  "t,p",          */ 0xb4000000, 0xfc01f000 },
12184   { 0, 0 }  /* End marker for find_match().  */
12185 };
12186
12187 static const struct opcode_descriptor bzc_insns_32[] = {
12188   { /* "beqzc", "s,p",          */ 0x40e00000, 0xffe00000 },
12189   { /* "bnezc", "s,p",          */ 0x40a00000, 0xffe00000 },
12190   { 0, 0 }  /* End marker for find_match().  */
12191 };
12192
12193 static const struct opcode_descriptor bz_insns_16[] = {
12194   { /* "beqz",  "md,mE",        */ 0x8c00,     0xfc00 },
12195   { /* "bnez",  "md,mE",        */ 0xac00,     0xfc00 },
12196   { 0, 0 }  /* End marker for find_match().  */
12197 };
12198
12199 /* Switch between a 5-bit register index and its 3-bit shorthand.  */
12200
12201 #define BZ16_REG(opcode) ((((((opcode) >> 7) & 7) + 0x1e) & 0x17) + 2)
12202 #define BZ16_REG_FIELD(r) \
12203   (((2 <= (r) && (r) <= 7) ? (r) : ((r) - 16)) << 7)
12204
12205
12206 /* 32-bit instructions with a delay slot.  */
12207
12208 static const struct opcode_descriptor jal_insn_32_bd16 =
12209   { /* "jals",  "a",            */ 0x74000000, 0xfc000000 };
12210
12211 static const struct opcode_descriptor jal_insn_32_bd32 =
12212   { /* "jal",   "a",            */ 0xf4000000, 0xfc000000 };
12213
12214 static const struct opcode_descriptor jal_x_insn_32_bd32 =
12215   { /* "jal[x]", "a",           */ 0xf0000000, 0xf8000000 };
12216
12217 static const struct opcode_descriptor j_insn_32 =
12218   { /* "j",     "a",            */ 0xd4000000, 0xfc000000 };
12219
12220 static const struct opcode_descriptor jalr_insn_32 =
12221   { /* "jalr[.hb]", "t,s",      */ 0x00000f3c, 0xfc00efff };
12222
12223 /* This table can be compacted, because no opcode replacement is made.  */
12224
12225 static const struct opcode_descriptor ds_insns_32_bd16[] = {
12226   { /* "jals",  "a",            */ 0x74000000, 0xfc000000 },
12227
12228   { /* "jalrs[.hb]", "t,s",     */ 0x00004f3c, 0xfc00efff },
12229   { /* "b(ge|lt)zals", "s,p",   */ 0x42200000, 0xffa00000 },
12230
12231   { /* "b(g|l)(e|t)z", "s,p",   */ 0x40000000, 0xff200000 },
12232   { /* "b(eq|ne)", "s,t,p",     */ 0x94000000, 0xdc000000 },
12233   { /* "j",     "a",            */ 0xd4000000, 0xfc000000 },
12234   { 0, 0 }  /* End marker for find_match().  */
12235 };
12236
12237 /* This table can be compacted, because no opcode replacement is made.  */
12238
12239 static const struct opcode_descriptor ds_insns_32_bd32[] = {
12240   { /* "jal[x]", "a",           */ 0xf0000000, 0xf8000000 },
12241
12242   { /* "jalr[.hb]", "t,s",      */ 0x00000f3c, 0xfc00efff },
12243   { /* "b(ge|lt)zal", "s,p",    */ 0x40200000, 0xffa00000 },
12244   { 0, 0 }  /* End marker for find_match().  */
12245 };
12246
12247
12248 /* 16-bit instructions with a delay slot.  */
12249
12250 static const struct opcode_descriptor jalr_insn_16_bd16 =
12251   { /* "jalrs", "my,mj",        */ 0x45e0,     0xffe0 };
12252
12253 static const struct opcode_descriptor jalr_insn_16_bd32 =
12254   { /* "jalr",  "my,mj",        */ 0x45c0,     0xffe0 };
12255
12256 static const struct opcode_descriptor jr_insn_16 =
12257   { /* "jr",    "mj",           */ 0x4580,     0xffe0 };
12258
12259 #define JR16_REG(opcode) ((opcode) & 0x1f)
12260
12261 /* This table can be compacted, because no opcode replacement is made.  */
12262
12263 static const struct opcode_descriptor ds_insns_16_bd16[] = {
12264   { /* "jalrs", "my,mj",        */ 0x45e0,     0xffe0 },
12265
12266   { /* "b",     "mD",           */ 0xcc00,     0xfc00 },
12267   { /* "b(eq|ne)z", "md,mE",    */ 0x8c00,     0xdc00 },
12268   { /* "jr",    "mj",           */ 0x4580,     0xffe0 },
12269   { 0, 0 }  /* End marker for find_match().  */
12270 };
12271
12272
12273 /* LUI instruction.  */
12274
12275 static const struct opcode_descriptor lui_insn =
12276  { /* "lui",    "s,u",          */ 0x41a00000, 0xffe00000 };
12277
12278
12279 /* ADDIU instruction.  */
12280
12281 static const struct opcode_descriptor addiu_insn =
12282   { /* "addiu", "t,r,j",        */ 0x30000000, 0xfc000000 };
12283
12284 static const struct opcode_descriptor addiupc_insn =
12285   { /* "addiu", "mb,$pc,mQ",    */ 0x78000000, 0xfc000000 };
12286
12287 #define ADDIUPC_REG_FIELD(r) \
12288   (((2 <= (r) && (r) <= 7) ? (r) : ((r) - 16)) << 23)
12289
12290
12291 /* Relaxable instructions in a JAL delay slot: MOVE.  */
12292
12293 /* The 16-bit move has rd in 9:5 and rs in 4:0.  The 32-bit moves
12294    (ADDU, OR) have rd in 15:11 and rs in 10:16.  */
12295 #define MOVE32_RD(opcode) (((opcode) >> 11) & 0x1f)
12296 #define MOVE32_RS(opcode) (((opcode) >> 16) & 0x1f)
12297
12298 #define MOVE16_RD_FIELD(r) (((r) & 0x1f) << 5)
12299 #define MOVE16_RS_FIELD(r) (((r) & 0x1f)     )
12300
12301 static const struct opcode_descriptor move_insns_32[] = {
12302   { /* "move",  "d,s",          */ 0x00000150, 0xffe007ff }, /* addu d,s,$0 */
12303   { /* "move",  "d,s",          */ 0x00000290, 0xffe007ff }, /* or   d,s,$0 */
12304   { 0, 0 }  /* End marker for find_match().  */
12305 };
12306
12307 static const struct opcode_descriptor move_insn_16 =
12308   { /* "move",  "mp,mj",        */ 0x0c00,     0xfc00 };
12309
12310
12311 /* NOP instructions.  */
12312
12313 static const struct opcode_descriptor nop_insn_32 =
12314   { /* "nop",   "",             */ 0x00000000, 0xffffffff };
12315
12316 static const struct opcode_descriptor nop_insn_16 =
12317   { /* "nop",   "",             */ 0x0c00,     0xffff };
12318
12319
12320 /* Instruction match support.  */
12321
12322 #define MATCH(opcode, insn) ((opcode & insn.mask) == insn.match)
12323
12324 static int
12325 find_match (unsigned long opcode, const struct opcode_descriptor insn[])
12326 {
12327   unsigned long indx;
12328
12329   for (indx = 0; insn[indx].mask != 0; indx++)
12330     if (MATCH (opcode, insn[indx]))
12331       return indx;
12332
12333   return -1;
12334 }
12335
12336
12337 /* Branch and delay slot decoding support.  */
12338
12339 /* If PTR points to what *might* be a 16-bit branch or jump, then
12340    return the minimum length of its delay slot, otherwise return 0.
12341    Non-zero results are not definitive as we might be checking against
12342    the second half of another instruction.  */
12343
12344 static int
12345 check_br16_dslot (bfd *abfd, bfd_byte *ptr)
12346 {
12347   unsigned long opcode;
12348   int bdsize;
12349
12350   opcode = bfd_get_16 (abfd, ptr);
12351   if (MATCH (opcode, jalr_insn_16_bd32) != 0)
12352     /* 16-bit branch/jump with a 32-bit delay slot.  */
12353     bdsize = 4;
12354   else if (MATCH (opcode, jalr_insn_16_bd16) != 0
12355            || find_match (opcode, ds_insns_16_bd16) >= 0)
12356     /* 16-bit branch/jump with a 16-bit delay slot.  */
12357     bdsize = 2;
12358   else
12359     /* No delay slot.  */
12360     bdsize = 0;
12361
12362   return bdsize;
12363 }
12364
12365 /* If PTR points to what *might* be a 32-bit branch or jump, then
12366    return the minimum length of its delay slot, otherwise return 0.
12367    Non-zero results are not definitive as we might be checking against
12368    the second half of another instruction.  */
12369
12370 static int
12371 check_br32_dslot (bfd *abfd, bfd_byte *ptr)
12372 {
12373   unsigned long opcode;
12374   int bdsize;
12375
12376   opcode = bfd_get_micromips_32 (abfd, ptr);
12377   if (find_match (opcode, ds_insns_32_bd32) >= 0)
12378     /* 32-bit branch/jump with a 32-bit delay slot.  */
12379     bdsize = 4;
12380   else if (find_match (opcode, ds_insns_32_bd16) >= 0)
12381     /* 32-bit branch/jump with a 16-bit delay slot.  */
12382     bdsize = 2;
12383   else
12384     /* No delay slot.  */
12385     bdsize = 0;
12386
12387   return bdsize;
12388 }
12389
12390 /* If PTR points to a 16-bit branch or jump with a 32-bit delay slot
12391    that doesn't fiddle with REG, then return TRUE, otherwise FALSE.  */
12392
12393 static bfd_boolean
12394 check_br16 (bfd *abfd, bfd_byte *ptr, unsigned long reg)
12395 {
12396   unsigned long opcode;
12397
12398   opcode = bfd_get_16 (abfd, ptr);
12399   if (MATCH (opcode, b_insn_16)
12400                                                 /* B16  */
12401       || (MATCH (opcode, jr_insn_16) && reg != JR16_REG (opcode))
12402                                                 /* JR16  */
12403       || (MATCH (opcode, bz_insn_16) && reg != BZ16_REG (opcode))
12404                                                 /* BEQZ16, BNEZ16  */
12405       || (MATCH (opcode, jalr_insn_16_bd32)
12406                                                 /* JALR16  */
12407           && reg != JR16_REG (opcode) && reg != RA))
12408     return TRUE;
12409
12410   return FALSE;
12411 }
12412
12413 /* If PTR points to a 32-bit branch or jump that doesn't fiddle with REG,
12414    then return TRUE, otherwise FALSE.  */
12415
12416 static bfd_boolean
12417 check_br32 (bfd *abfd, bfd_byte *ptr, unsigned long reg)
12418 {
12419   unsigned long opcode;
12420
12421   opcode = bfd_get_micromips_32 (abfd, ptr);
12422   if (MATCH (opcode, j_insn_32)
12423                                                 /* J  */
12424       || MATCH (opcode, bc_insn_32)
12425                                                 /* BC1F, BC1T, BC2F, BC2T  */
12426       || (MATCH (opcode, jal_x_insn_32_bd32) && reg != RA)
12427                                                 /* JAL, JALX  */
12428       || (MATCH (opcode, bz_insn_32) && reg != OP32_SREG (opcode))
12429                                                 /* BGEZ, BGTZ, BLEZ, BLTZ  */
12430       || (MATCH (opcode, bzal_insn_32)
12431                                                 /* BGEZAL, BLTZAL  */
12432           && reg != OP32_SREG (opcode) && reg != RA)
12433       || ((MATCH (opcode, jalr_insn_32) || MATCH (opcode, beq_insn_32))
12434                                                 /* JALR, JALR.HB, BEQ, BNE  */
12435           && reg != OP32_SREG (opcode) && reg != OP32_TREG (opcode)))
12436     return TRUE;
12437
12438   return FALSE;
12439 }
12440
12441 /* If the instruction encoding at PTR and relocations [INTERNAL_RELOCS,
12442    IRELEND) at OFFSET indicate that there must be a compact branch there,
12443    then return TRUE, otherwise FALSE.  */
12444
12445 static bfd_boolean
12446 check_relocated_bzc (bfd *abfd, const bfd_byte *ptr, bfd_vma offset,
12447                      const Elf_Internal_Rela *internal_relocs,
12448                      const Elf_Internal_Rela *irelend)
12449 {
12450   const Elf_Internal_Rela *irel;
12451   unsigned long opcode;
12452
12453   opcode = bfd_get_micromips_32 (abfd, ptr);
12454   if (find_match (opcode, bzc_insns_32) < 0)
12455     return FALSE;
12456
12457   for (irel = internal_relocs; irel < irelend; irel++)
12458     if (irel->r_offset == offset
12459         && ELF32_R_TYPE (irel->r_info) == R_MICROMIPS_PC16_S1)
12460       return TRUE;
12461
12462   return FALSE;
12463 }
12464
12465 /* Bitsize checking.  */
12466 #define IS_BITSIZE(val, N)                                              \
12467   (((((val) & ((1ULL << (N)) - 1)) ^ (1ULL << ((N) - 1)))               \
12468     - (1ULL << ((N) - 1))) == (val))
12469
12470 \f
12471 bfd_boolean
12472 _bfd_mips_elf_relax_section (bfd *abfd, asection *sec,
12473                              struct bfd_link_info *link_info,
12474                              bfd_boolean *again)
12475 {
12476   Elf_Internal_Shdr *symtab_hdr;
12477   Elf_Internal_Rela *internal_relocs;
12478   Elf_Internal_Rela *irel, *irelend;
12479   bfd_byte *contents = NULL;
12480   Elf_Internal_Sym *isymbuf = NULL;
12481
12482   /* Assume nothing changes.  */
12483   *again = FALSE;
12484
12485   /* We don't have to do anything for a relocatable link, if
12486      this section does not have relocs, or if this is not a
12487      code section.  */
12488
12489   if (link_info->relocatable
12490       || (sec->flags & SEC_RELOC) == 0
12491       || sec->reloc_count == 0
12492       || (sec->flags & SEC_CODE) == 0)
12493     return TRUE;
12494
12495   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
12496
12497   /* Get a copy of the native relocations.  */
12498   internal_relocs = (_bfd_elf_link_read_relocs
12499                      (abfd, sec, NULL, (Elf_Internal_Rela *) NULL,
12500                       link_info->keep_memory));
12501   if (internal_relocs == NULL)
12502     goto error_return;
12503
12504   /* Walk through them looking for relaxing opportunities.  */
12505   irelend = internal_relocs + sec->reloc_count;
12506   for (irel = internal_relocs; irel < irelend; irel++)
12507     {
12508       unsigned long r_symndx = ELF32_R_SYM (irel->r_info);
12509       unsigned int r_type = ELF32_R_TYPE (irel->r_info);
12510       bfd_boolean target_is_micromips_code_p;
12511       unsigned long opcode;
12512       bfd_vma symval;
12513       bfd_vma pcrval;
12514       bfd_byte *ptr;
12515       int fndopc;
12516
12517       /* The number of bytes to delete for relaxation and from where
12518          to delete these bytes starting at irel->r_offset.  */
12519       int delcnt = 0;
12520       int deloff = 0;
12521
12522       /* If this isn't something that can be relaxed, then ignore
12523          this reloc.  */
12524       if (r_type != R_MICROMIPS_HI16
12525           && r_type != R_MICROMIPS_PC16_S1
12526           && r_type != R_MICROMIPS_26_S1)
12527         continue;
12528
12529       /* Get the section contents if we haven't done so already.  */
12530       if (contents == NULL)
12531         {
12532           /* Get cached copy if it exists.  */
12533           if (elf_section_data (sec)->this_hdr.contents != NULL)
12534             contents = elf_section_data (sec)->this_hdr.contents;
12535           /* Go get them off disk.  */
12536           else if (!bfd_malloc_and_get_section (abfd, sec, &contents))
12537             goto error_return;
12538         }
12539       ptr = contents + irel->r_offset;
12540
12541       /* Read this BFD's local symbols if we haven't done so already.  */
12542       if (isymbuf == NULL && symtab_hdr->sh_info != 0)
12543         {
12544           isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
12545           if (isymbuf == NULL)
12546             isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
12547                                             symtab_hdr->sh_info, 0,
12548                                             NULL, NULL, NULL);
12549           if (isymbuf == NULL)
12550             goto error_return;
12551         }
12552
12553       /* Get the value of the symbol referred to by the reloc.  */
12554       if (r_symndx < symtab_hdr->sh_info)
12555         {
12556           /* A local symbol.  */
12557           Elf_Internal_Sym *isym;
12558           asection *sym_sec;
12559
12560           isym = isymbuf + r_symndx;
12561           if (isym->st_shndx == SHN_UNDEF)
12562             sym_sec = bfd_und_section_ptr;
12563           else if (isym->st_shndx == SHN_ABS)
12564             sym_sec = bfd_abs_section_ptr;
12565           else if (isym->st_shndx == SHN_COMMON)
12566             sym_sec = bfd_com_section_ptr;
12567           else
12568             sym_sec = bfd_section_from_elf_index (abfd, isym->st_shndx);
12569           symval = (isym->st_value
12570                     + sym_sec->output_section->vma
12571                     + sym_sec->output_offset);
12572           target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (isym->st_other);
12573         }
12574       else
12575         {
12576           unsigned long indx;
12577           struct elf_link_hash_entry *h;
12578
12579           /* An external symbol.  */
12580           indx = r_symndx - symtab_hdr->sh_info;
12581           h = elf_sym_hashes (abfd)[indx];
12582           BFD_ASSERT (h != NULL);
12583
12584           if (h->root.type != bfd_link_hash_defined
12585               && h->root.type != bfd_link_hash_defweak)
12586             /* This appears to be a reference to an undefined
12587                symbol.  Just ignore it -- it will be caught by the
12588                regular reloc processing.  */
12589             continue;
12590
12591           symval = (h->root.u.def.value
12592                     + h->root.u.def.section->output_section->vma
12593                     + h->root.u.def.section->output_offset);
12594           target_is_micromips_code_p = (!h->needs_plt
12595                                         && ELF_ST_IS_MICROMIPS (h->other));
12596         }
12597
12598
12599       /* For simplicity of coding, we are going to modify the
12600          section contents, the section relocs, and the BFD symbol
12601          table.  We must tell the rest of the code not to free up this
12602          information.  It would be possible to instead create a table
12603          of changes which have to be made, as is done in coff-mips.c;
12604          that would be more work, but would require less memory when
12605          the linker is run.  */
12606
12607       /* Only 32-bit instructions relaxed.  */
12608       if (irel->r_offset + 4 > sec->size)
12609         continue;
12610
12611       opcode = bfd_get_micromips_32 (abfd, ptr);
12612
12613       /* This is the pc-relative distance from the instruction the
12614          relocation is applied to, to the symbol referred.  */
12615       pcrval = (symval
12616                 - (sec->output_section->vma + sec->output_offset)
12617                 - irel->r_offset);
12618
12619       /* R_MICROMIPS_HI16 / LUI relaxation to nil, performing relaxation
12620          of corresponding R_MICROMIPS_LO16 to R_MICROMIPS_HI0_LO16 or
12621          R_MICROMIPS_PC23_S2.  The R_MICROMIPS_PC23_S2 condition is
12622
12623            (symval % 4 == 0 && IS_BITSIZE (pcrval, 25))
12624
12625          where pcrval has first to be adjusted to apply against the LO16
12626          location (we make the adjustment later on, when we have figured
12627          out the offset).  */
12628       if (r_type == R_MICROMIPS_HI16 && MATCH (opcode, lui_insn))
12629         {
12630           bfd_boolean bzc = FALSE;
12631           unsigned long nextopc;
12632           unsigned long reg;
12633           bfd_vma offset;
12634
12635           /* Give up if the previous reloc was a HI16 against this symbol
12636              too.  */
12637           if (irel > internal_relocs
12638               && ELF32_R_TYPE (irel[-1].r_info) == R_MICROMIPS_HI16
12639               && ELF32_R_SYM (irel[-1].r_info) == r_symndx)
12640             continue;
12641
12642           /* Or if the next reloc is not a LO16 against this symbol.  */
12643           if (irel + 1 >= irelend
12644               || ELF32_R_TYPE (irel[1].r_info) != R_MICROMIPS_LO16
12645               || ELF32_R_SYM (irel[1].r_info) != r_symndx)
12646             continue;
12647
12648           /* Or if the second next reloc is a LO16 against this symbol too.  */
12649           if (irel + 2 >= irelend
12650               && ELF32_R_TYPE (irel[2].r_info) == R_MICROMIPS_LO16
12651               && ELF32_R_SYM (irel[2].r_info) == r_symndx)
12652             continue;
12653
12654           /* See if the LUI instruction *might* be in a branch delay slot.
12655              We check whether what looks like a 16-bit branch or jump is
12656              actually an immediate argument to a compact branch, and let
12657              it through if so.  */
12658           if (irel->r_offset >= 2
12659               && check_br16_dslot (abfd, ptr - 2)
12660               && !(irel->r_offset >= 4
12661                    && (bzc = check_relocated_bzc (abfd,
12662                                                   ptr - 4, irel->r_offset - 4,
12663                                                   internal_relocs, irelend))))
12664             continue;
12665           if (irel->r_offset >= 4
12666               && !bzc
12667               && check_br32_dslot (abfd, ptr - 4))
12668             continue;
12669
12670           reg = OP32_SREG (opcode);
12671
12672           /* We only relax adjacent instructions or ones separated with
12673              a branch or jump that has a delay slot.  The branch or jump
12674              must not fiddle with the register used to hold the address.
12675              Subtract 4 for the LUI itself.  */
12676           offset = irel[1].r_offset - irel[0].r_offset;
12677           switch (offset - 4)
12678             {
12679             case 0:
12680               break;
12681             case 2:
12682               if (check_br16 (abfd, ptr + 4, reg))
12683                 break;
12684               continue;
12685             case 4:
12686               if (check_br32 (abfd, ptr + 4, reg))
12687                 break;
12688               continue;
12689             default:
12690               continue;
12691             }
12692
12693           nextopc = bfd_get_micromips_32 (abfd, contents + irel[1].r_offset);
12694
12695           /* Give up unless the same register is used with both
12696              relocations.  */
12697           if (OP32_SREG (nextopc) != reg)
12698             continue;
12699
12700           /* Now adjust pcrval, subtracting the offset to the LO16 reloc
12701              and rounding up to take masking of the two LSBs into account.  */
12702           pcrval = ((pcrval - offset + 3) | 3) ^ 3;
12703
12704           /* R_MICROMIPS_LO16 relaxation to R_MICROMIPS_HI0_LO16.  */
12705           if (IS_BITSIZE (symval, 16))
12706             {
12707               /* Fix the relocation's type.  */
12708               irel[1].r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_HI0_LO16);
12709
12710               /* Instructions using R_MICROMIPS_LO16 have the base or
12711                  source register in bits 20:16.  This register becomes $0
12712                  (zero) as the result of the R_MICROMIPS_HI16 being 0.  */
12713               nextopc &= ~0x001f0000;
12714               bfd_put_16 (abfd, (nextopc >> 16) & 0xffff,
12715                           contents + irel[1].r_offset);
12716             }
12717
12718           /* R_MICROMIPS_LO16 / ADDIU relaxation to R_MICROMIPS_PC23_S2.
12719              We add 4 to take LUI deletion into account while checking
12720              the PC-relative distance.  */
12721           else if (symval % 4 == 0
12722                    && IS_BITSIZE (pcrval + 4, 25)
12723                    && MATCH (nextopc, addiu_insn)
12724                    && OP32_TREG (nextopc) == OP32_SREG (nextopc)
12725                    && OP16_VALID_REG (OP32_TREG (nextopc)))
12726             {
12727               /* Fix the relocation's type.  */
12728               irel[1].r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC23_S2);
12729
12730               /* Replace ADDIU with the ADDIUPC version.  */
12731               nextopc = (addiupc_insn.match
12732                          | ADDIUPC_REG_FIELD (OP32_TREG (nextopc)));
12733
12734               bfd_put_micromips_32 (abfd, nextopc,
12735                                     contents + irel[1].r_offset);
12736             }
12737
12738           /* Can't do anything, give up, sigh...  */
12739           else
12740             continue;
12741
12742           /* Fix the relocation's type.  */
12743           irel->r_info = ELF32_R_INFO (r_symndx, R_MIPS_NONE);
12744
12745           /* Delete the LUI instruction: 4 bytes at irel->r_offset.  */
12746           delcnt = 4;
12747           deloff = 0;
12748         }
12749
12750       /* Compact branch relaxation -- due to the multitude of macros
12751          employed by the compiler/assembler, compact branches are not
12752          always generated.  Obviously, this can/will be fixed elsewhere,
12753          but there is no drawback in double checking it here.  */
12754       else if (r_type == R_MICROMIPS_PC16_S1
12755                && irel->r_offset + 5 < sec->size
12756                && ((fndopc = find_match (opcode, bz_rs_insns_32)) >= 0
12757                    || (fndopc = find_match (opcode, bz_rt_insns_32)) >= 0)
12758                && MATCH (bfd_get_16 (abfd, ptr + 4), nop_insn_16))
12759         {
12760           unsigned long reg;
12761
12762           reg = OP32_SREG (opcode) ? OP32_SREG (opcode) : OP32_TREG (opcode);
12763
12764           /* Replace BEQZ/BNEZ with the compact version.  */
12765           opcode = (bzc_insns_32[fndopc].match
12766                     | BZC32_REG_FIELD (reg)
12767                     | (opcode & 0xffff));               /* Addend value.  */
12768
12769           bfd_put_micromips_32 (abfd, opcode, ptr);
12770
12771           /* Delete the 16-bit delay slot NOP: two bytes from
12772              irel->offset + 4.  */
12773           delcnt = 2;
12774           deloff = 4;
12775         }
12776
12777       /* R_MICROMIPS_PC16_S1 relaxation to R_MICROMIPS_PC10_S1.  We need
12778          to check the distance from the next instruction, so subtract 2.  */
12779       else if (r_type == R_MICROMIPS_PC16_S1
12780                && IS_BITSIZE (pcrval - 2, 11)
12781                && find_match (opcode, b_insns_32) >= 0)
12782         {
12783           /* Fix the relocation's type.  */
12784           irel->r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC10_S1);
12785
12786           /* Replace the 32-bit opcode with a 16-bit opcode.  */
12787           bfd_put_16 (abfd,
12788                       (b_insn_16.match
12789                        | (opcode & 0x3ff)),             /* Addend value.  */
12790                       ptr);
12791
12792           /* Delete 2 bytes from irel->r_offset + 2.  */
12793           delcnt = 2;
12794           deloff = 2;
12795         }
12796
12797       /* R_MICROMIPS_PC16_S1 relaxation to R_MICROMIPS_PC7_S1.  We need
12798          to check the distance from the next instruction, so subtract 2.  */
12799       else if (r_type == R_MICROMIPS_PC16_S1
12800                && IS_BITSIZE (pcrval - 2, 8)
12801                && (((fndopc = find_match (opcode, bz_rs_insns_32)) >= 0
12802                     && OP16_VALID_REG (OP32_SREG (opcode)))
12803                    || ((fndopc = find_match (opcode, bz_rt_insns_32)) >= 0
12804                        && OP16_VALID_REG (OP32_TREG (opcode)))))
12805         {
12806           unsigned long reg;
12807
12808           reg = OP32_SREG (opcode) ? OP32_SREG (opcode) : OP32_TREG (opcode);
12809
12810           /* Fix the relocation's type.  */
12811           irel->r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC7_S1);
12812
12813           /* Replace the 32-bit opcode with a 16-bit opcode.  */
12814           bfd_put_16 (abfd,
12815                       (bz_insns_16[fndopc].match
12816                        | BZ16_REG_FIELD (reg)
12817                        | (opcode & 0x7f)),              /* Addend value.  */
12818                       ptr);
12819
12820           /* Delete 2 bytes from irel->r_offset + 2.  */
12821           delcnt = 2;
12822           deloff = 2;
12823         }
12824
12825       /* R_MICROMIPS_26_S1 -- JAL to JALS relaxation for microMIPS targets.  */
12826       else if (r_type == R_MICROMIPS_26_S1
12827                && target_is_micromips_code_p
12828                && irel->r_offset + 7 < sec->size
12829                && MATCH (opcode, jal_insn_32_bd32))
12830         {
12831           unsigned long n32opc;
12832           bfd_boolean relaxed = FALSE;
12833
12834           n32opc = bfd_get_micromips_32 (abfd, ptr + 4);
12835
12836           if (MATCH (n32opc, nop_insn_32))
12837             {
12838               /* Replace delay slot 32-bit NOP with a 16-bit NOP.  */
12839               bfd_put_16 (abfd, nop_insn_16.match, ptr + 4);
12840
12841               relaxed = TRUE;
12842             }
12843           else if (find_match (n32opc, move_insns_32) >= 0)
12844             {
12845               /* Replace delay slot 32-bit MOVE with 16-bit MOVE.  */
12846               bfd_put_16 (abfd,
12847                           (move_insn_16.match
12848                            | MOVE16_RD_FIELD (MOVE32_RD (n32opc))
12849                            | MOVE16_RS_FIELD (MOVE32_RS (n32opc))),
12850                           ptr + 4);
12851
12852               relaxed = TRUE;
12853             }
12854           /* Other 32-bit instructions relaxable to 16-bit
12855              instructions will be handled here later.  */
12856
12857           if (relaxed)
12858             {
12859               /* JAL with 32-bit delay slot that is changed to a JALS
12860                  with 16-bit delay slot.  */
12861               bfd_put_micromips_32 (abfd, jal_insn_32_bd16.match, ptr);
12862
12863               /* Delete 2 bytes from irel->r_offset + 6.  */
12864               delcnt = 2;
12865               deloff = 6;
12866             }
12867         }
12868
12869       if (delcnt != 0)
12870         {
12871           /* Note that we've changed the relocs, section contents, etc.  */
12872           elf_section_data (sec)->relocs = internal_relocs;
12873           elf_section_data (sec)->this_hdr.contents = contents;
12874           symtab_hdr->contents = (unsigned char *) isymbuf;
12875
12876           /* Delete bytes depending on the delcnt and deloff.  */
12877           if (!mips_elf_relax_delete_bytes (abfd, sec,
12878                                             irel->r_offset + deloff, delcnt))
12879             goto error_return;
12880
12881           /* That will change things, so we should relax again.
12882              Note that this is not required, and it may be slow.  */
12883           *again = TRUE;
12884         }
12885     }
12886
12887   if (isymbuf != NULL
12888       && symtab_hdr->contents != (unsigned char *) isymbuf)
12889     {
12890       if (! link_info->keep_memory)
12891         free (isymbuf);
12892       else
12893         {
12894           /* Cache the symbols for elf_link_input_bfd.  */
12895           symtab_hdr->contents = (unsigned char *) isymbuf;
12896         }
12897     }
12898
12899   if (contents != NULL
12900       && elf_section_data (sec)->this_hdr.contents != contents)
12901     {
12902       if (! link_info->keep_memory)
12903         free (contents);
12904       else
12905         {
12906           /* Cache the section contents for elf_link_input_bfd.  */
12907           elf_section_data (sec)->this_hdr.contents = contents;
12908         }
12909     }
12910
12911   if (internal_relocs != NULL
12912       && elf_section_data (sec)->relocs != internal_relocs)
12913     free (internal_relocs);
12914
12915   return TRUE;
12916
12917  error_return:
12918   if (isymbuf != NULL
12919       && symtab_hdr->contents != (unsigned char *) isymbuf)
12920     free (isymbuf);
12921   if (contents != NULL
12922       && elf_section_data (sec)->this_hdr.contents != contents)
12923     free (contents);
12924   if (internal_relocs != NULL
12925       && elf_section_data (sec)->relocs != internal_relocs)
12926     free (internal_relocs);
12927
12928   return FALSE;
12929 }
12930 \f
12931 /* Create a MIPS ELF linker hash table.  */
12932
12933 struct bfd_link_hash_table *
12934 _bfd_mips_elf_link_hash_table_create (bfd *abfd)
12935 {
12936   struct mips_elf_link_hash_table *ret;
12937   bfd_size_type amt = sizeof (struct mips_elf_link_hash_table);
12938
12939   ret = bfd_zmalloc (amt);
12940   if (ret == NULL)
12941     return NULL;
12942
12943   if (!_bfd_elf_link_hash_table_init (&ret->root, abfd,
12944                                       mips_elf_link_hash_newfunc,
12945                                       sizeof (struct mips_elf_link_hash_entry),
12946                                       MIPS_ELF_DATA))
12947     {
12948       free (ret);
12949       return NULL;
12950     }
12951
12952   return &ret->root.root;
12953 }
12954
12955 /* Likewise, but indicate that the target is VxWorks.  */
12956
12957 struct bfd_link_hash_table *
12958 _bfd_mips_vxworks_link_hash_table_create (bfd *abfd)
12959 {
12960   struct bfd_link_hash_table *ret;
12961
12962   ret = _bfd_mips_elf_link_hash_table_create (abfd);
12963   if (ret)
12964     {
12965       struct mips_elf_link_hash_table *htab;
12966
12967       htab = (struct mips_elf_link_hash_table *) ret;
12968       htab->use_plts_and_copy_relocs = TRUE;
12969       htab->is_vxworks = TRUE;
12970     }
12971   return ret;
12972 }
12973
12974 /* A function that the linker calls if we are allowed to use PLTs
12975    and copy relocs.  */
12976
12977 void
12978 _bfd_mips_elf_use_plts_and_copy_relocs (struct bfd_link_info *info)
12979 {
12980   mips_elf_hash_table (info)->use_plts_and_copy_relocs = TRUE;
12981 }
12982 \f
12983 /* We need to use a special link routine to handle the .reginfo and
12984    the .mdebug sections.  We need to merge all instances of these
12985    sections together, not write them all out sequentially.  */
12986
12987 bfd_boolean
12988 _bfd_mips_elf_final_link (bfd *abfd, struct bfd_link_info *info)
12989 {
12990   asection *o;
12991   struct bfd_link_order *p;
12992   asection *reginfo_sec, *mdebug_sec, *gptab_data_sec, *gptab_bss_sec;
12993   asection *rtproc_sec;
12994   Elf32_RegInfo reginfo;
12995   struct ecoff_debug_info debug;
12996   struct mips_htab_traverse_info hti;
12997   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
12998   const struct ecoff_debug_swap *swap = bed->elf_backend_ecoff_debug_swap;
12999   HDRR *symhdr = &debug.symbolic_header;
13000   void *mdebug_handle = NULL;
13001   asection *s;
13002   EXTR esym;
13003   unsigned int i;
13004   bfd_size_type amt;
13005   struct mips_elf_link_hash_table *htab;
13006
13007   static const char * const secname[] =
13008   {
13009     ".text", ".init", ".fini", ".data",
13010     ".rodata", ".sdata", ".sbss", ".bss"
13011   };
13012   static const int sc[] =
13013   {
13014     scText, scInit, scFini, scData,
13015     scRData, scSData, scSBss, scBss
13016   };
13017
13018   /* Sort the dynamic symbols so that those with GOT entries come after
13019      those without.  */
13020   htab = mips_elf_hash_table (info);
13021   BFD_ASSERT (htab != NULL);
13022
13023   if (!mips_elf_sort_hash_table (abfd, info))
13024     return FALSE;
13025
13026   /* Create any scheduled LA25 stubs.  */
13027   hti.info = info;
13028   hti.output_bfd = abfd;
13029   hti.error = FALSE;
13030   htab_traverse (htab->la25_stubs, mips_elf_create_la25_stub, &hti);
13031   if (hti.error)
13032     return FALSE;
13033
13034   /* Get a value for the GP register.  */
13035   if (elf_gp (abfd) == 0)
13036     {
13037       struct bfd_link_hash_entry *h;
13038
13039       h = bfd_link_hash_lookup (info->hash, "_gp", FALSE, FALSE, TRUE);
13040       if (h != NULL && h->type == bfd_link_hash_defined)
13041         elf_gp (abfd) = (h->u.def.value
13042                          + h->u.def.section->output_section->vma
13043                          + h->u.def.section->output_offset);
13044       else if (htab->is_vxworks
13045                && (h = bfd_link_hash_lookup (info->hash,
13046                                              "_GLOBAL_OFFSET_TABLE_",
13047                                              FALSE, FALSE, TRUE))
13048                && h->type == bfd_link_hash_defined)
13049         elf_gp (abfd) = (h->u.def.section->output_section->vma
13050                          + h->u.def.section->output_offset
13051                          + h->u.def.value);
13052       else if (info->relocatable)
13053         {
13054           bfd_vma lo = MINUS_ONE;
13055
13056           /* Find the GP-relative section with the lowest offset.  */
13057           for (o = abfd->sections; o != NULL; o = o->next)
13058             if (o->vma < lo
13059                 && (elf_section_data (o)->this_hdr.sh_flags & SHF_MIPS_GPREL))
13060               lo = o->vma;
13061
13062           /* And calculate GP relative to that.  */
13063           elf_gp (abfd) = lo + ELF_MIPS_GP_OFFSET (info);
13064         }
13065       else
13066         {
13067           /* If the relocate_section function needs to do a reloc
13068              involving the GP value, it should make a reloc_dangerous
13069              callback to warn that GP is not defined.  */
13070         }
13071     }
13072
13073   /* Go through the sections and collect the .reginfo and .mdebug
13074      information.  */
13075   reginfo_sec = NULL;
13076   mdebug_sec = NULL;
13077   gptab_data_sec = NULL;
13078   gptab_bss_sec = NULL;
13079   for (o = abfd->sections; o != NULL; o = o->next)
13080     {
13081       if (strcmp (o->name, ".reginfo") == 0)
13082         {
13083           memset (&reginfo, 0, sizeof reginfo);
13084
13085           /* We have found the .reginfo section in the output file.
13086              Look through all the link_orders comprising it and merge
13087              the information together.  */
13088           for (p = o->map_head.link_order; p != NULL; p = p->next)
13089             {
13090               asection *input_section;
13091               bfd *input_bfd;
13092               Elf32_External_RegInfo ext;
13093               Elf32_RegInfo sub;
13094
13095               if (p->type != bfd_indirect_link_order)
13096                 {
13097                   if (p->type == bfd_data_link_order)
13098                     continue;
13099                   abort ();
13100                 }
13101
13102               input_section = p->u.indirect.section;
13103               input_bfd = input_section->owner;
13104
13105               if (! bfd_get_section_contents (input_bfd, input_section,
13106                                               &ext, 0, sizeof ext))
13107                 return FALSE;
13108
13109               bfd_mips_elf32_swap_reginfo_in (input_bfd, &ext, &sub);
13110
13111               reginfo.ri_gprmask |= sub.ri_gprmask;
13112               reginfo.ri_cprmask[0] |= sub.ri_cprmask[0];
13113               reginfo.ri_cprmask[1] |= sub.ri_cprmask[1];
13114               reginfo.ri_cprmask[2] |= sub.ri_cprmask[2];
13115               reginfo.ri_cprmask[3] |= sub.ri_cprmask[3];
13116
13117               /* ri_gp_value is set by the function
13118                  mips_elf32_section_processing when the section is
13119                  finally written out.  */
13120
13121               /* Hack: reset the SEC_HAS_CONTENTS flag so that
13122                  elf_link_input_bfd ignores this section.  */
13123               input_section->flags &= ~SEC_HAS_CONTENTS;
13124             }
13125
13126           /* Size has been set in _bfd_mips_elf_always_size_sections.  */
13127           BFD_ASSERT(o->size == sizeof (Elf32_External_RegInfo));
13128
13129           /* Skip this section later on (I don't think this currently
13130              matters, but someday it might).  */
13131           o->map_head.link_order = NULL;
13132
13133           reginfo_sec = o;
13134         }
13135
13136       if (strcmp (o->name, ".mdebug") == 0)
13137         {
13138           struct extsym_info einfo;
13139           bfd_vma last;
13140
13141           /* We have found the .mdebug section in the output file.
13142              Look through all the link_orders comprising it and merge
13143              the information together.  */
13144           symhdr->magic = swap->sym_magic;
13145           /* FIXME: What should the version stamp be?  */
13146           symhdr->vstamp = 0;
13147           symhdr->ilineMax = 0;
13148           symhdr->cbLine = 0;
13149           symhdr->idnMax = 0;
13150           symhdr->ipdMax = 0;
13151           symhdr->isymMax = 0;
13152           symhdr->ioptMax = 0;
13153           symhdr->iauxMax = 0;
13154           symhdr->issMax = 0;
13155           symhdr->issExtMax = 0;
13156           symhdr->ifdMax = 0;
13157           symhdr->crfd = 0;
13158           symhdr->iextMax = 0;
13159
13160           /* We accumulate the debugging information itself in the
13161              debug_info structure.  */
13162           debug.line = NULL;
13163           debug.external_dnr = NULL;
13164           debug.external_pdr = NULL;
13165           debug.external_sym = NULL;
13166           debug.external_opt = NULL;
13167           debug.external_aux = NULL;
13168           debug.ss = NULL;
13169           debug.ssext = debug.ssext_end = NULL;
13170           debug.external_fdr = NULL;
13171           debug.external_rfd = NULL;
13172           debug.external_ext = debug.external_ext_end = NULL;
13173
13174           mdebug_handle = bfd_ecoff_debug_init (abfd, &debug, swap, info);
13175           if (mdebug_handle == NULL)
13176             return FALSE;
13177
13178           esym.jmptbl = 0;
13179           esym.cobol_main = 0;
13180           esym.weakext = 0;
13181           esym.reserved = 0;
13182           esym.ifd = ifdNil;
13183           esym.asym.iss = issNil;
13184           esym.asym.st = stLocal;
13185           esym.asym.reserved = 0;
13186           esym.asym.index = indexNil;
13187           last = 0;
13188           for (i = 0; i < sizeof (secname) / sizeof (secname[0]); i++)
13189             {
13190               esym.asym.sc = sc[i];
13191               s = bfd_get_section_by_name (abfd, secname[i]);
13192               if (s != NULL)
13193                 {
13194                   esym.asym.value = s->vma;
13195                   last = s->vma + s->size;
13196                 }
13197               else
13198                 esym.asym.value = last;
13199               if (!bfd_ecoff_debug_one_external (abfd, &debug, swap,
13200                                                  secname[i], &esym))
13201                 return FALSE;
13202             }
13203
13204           for (p = o->map_head.link_order; p != NULL; p = p->next)
13205             {
13206               asection *input_section;
13207               bfd *input_bfd;
13208               const struct ecoff_debug_swap *input_swap;
13209               struct ecoff_debug_info input_debug;
13210               char *eraw_src;
13211               char *eraw_end;
13212
13213               if (p->type != bfd_indirect_link_order)
13214                 {
13215                   if (p->type == bfd_data_link_order)
13216                     continue;
13217                   abort ();
13218                 }
13219
13220               input_section = p->u.indirect.section;
13221               input_bfd = input_section->owner;
13222
13223               if (!is_mips_elf (input_bfd))
13224                 {
13225                   /* I don't know what a non MIPS ELF bfd would be
13226                      doing with a .mdebug section, but I don't really
13227                      want to deal with it.  */
13228                   continue;
13229                 }
13230
13231               input_swap = (get_elf_backend_data (input_bfd)
13232                             ->elf_backend_ecoff_debug_swap);
13233
13234               BFD_ASSERT (p->size == input_section->size);
13235
13236               /* The ECOFF linking code expects that we have already
13237                  read in the debugging information and set up an
13238                  ecoff_debug_info structure, so we do that now.  */
13239               if (! _bfd_mips_elf_read_ecoff_info (input_bfd, input_section,
13240                                                    &input_debug))
13241                 return FALSE;
13242
13243               if (! (bfd_ecoff_debug_accumulate
13244                      (mdebug_handle, abfd, &debug, swap, input_bfd,
13245                       &input_debug, input_swap, info)))
13246                 return FALSE;
13247
13248               /* Loop through the external symbols.  For each one with
13249                  interesting information, try to find the symbol in
13250                  the linker global hash table and save the information
13251                  for the output external symbols.  */
13252               eraw_src = input_debug.external_ext;
13253               eraw_end = (eraw_src
13254                           + (input_debug.symbolic_header.iextMax
13255                              * input_swap->external_ext_size));
13256               for (;
13257                    eraw_src < eraw_end;
13258                    eraw_src += input_swap->external_ext_size)
13259                 {
13260                   EXTR ext;
13261                   const char *name;
13262                   struct mips_elf_link_hash_entry *h;
13263
13264                   (*input_swap->swap_ext_in) (input_bfd, eraw_src, &ext);
13265                   if (ext.asym.sc == scNil
13266                       || ext.asym.sc == scUndefined
13267                       || ext.asym.sc == scSUndefined)
13268                     continue;
13269
13270                   name = input_debug.ssext + ext.asym.iss;
13271                   h = mips_elf_link_hash_lookup (mips_elf_hash_table (info),
13272                                                  name, FALSE, FALSE, TRUE);
13273                   if (h == NULL || h->esym.ifd != -2)
13274                     continue;
13275
13276                   if (ext.ifd != -1)
13277                     {
13278                       BFD_ASSERT (ext.ifd
13279                                   < input_debug.symbolic_header.ifdMax);
13280                       ext.ifd = input_debug.ifdmap[ext.ifd];
13281                     }
13282
13283                   h->esym = ext;
13284                 }
13285
13286               /* Free up the information we just read.  */
13287               free (input_debug.line);
13288               free (input_debug.external_dnr);
13289               free (input_debug.external_pdr);
13290               free (input_debug.external_sym);
13291               free (input_debug.external_opt);
13292               free (input_debug.external_aux);
13293               free (input_debug.ss);
13294               free (input_debug.ssext);
13295               free (input_debug.external_fdr);
13296               free (input_debug.external_rfd);
13297               free (input_debug.external_ext);
13298
13299               /* Hack: reset the SEC_HAS_CONTENTS flag so that
13300                  elf_link_input_bfd ignores this section.  */
13301               input_section->flags &= ~SEC_HAS_CONTENTS;
13302             }
13303
13304           if (SGI_COMPAT (abfd) && info->shared)
13305             {
13306               /* Create .rtproc section.  */
13307               rtproc_sec = bfd_get_linker_section (abfd, ".rtproc");
13308               if (rtproc_sec == NULL)
13309                 {
13310                   flagword flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY
13311                                     | SEC_LINKER_CREATED | SEC_READONLY);
13312
13313                   rtproc_sec = bfd_make_section_anyway_with_flags (abfd,
13314                                                                    ".rtproc",
13315                                                                    flags);
13316                   if (rtproc_sec == NULL
13317                       || ! bfd_set_section_alignment (abfd, rtproc_sec, 4))
13318                     return FALSE;
13319                 }
13320
13321               if (! mips_elf_create_procedure_table (mdebug_handle, abfd,
13322                                                      info, rtproc_sec,
13323                                                      &debug))
13324                 return FALSE;
13325             }
13326
13327           /* Build the external symbol information.  */
13328           einfo.abfd = abfd;
13329           einfo.info = info;
13330           einfo.debug = &debug;
13331           einfo.swap = swap;
13332           einfo.failed = FALSE;
13333           mips_elf_link_hash_traverse (mips_elf_hash_table (info),
13334                                        mips_elf_output_extsym, &einfo);
13335           if (einfo.failed)
13336             return FALSE;
13337
13338           /* Set the size of the .mdebug section.  */
13339           o->size = bfd_ecoff_debug_size (abfd, &debug, swap);
13340
13341           /* Skip this section later on (I don't think this currently
13342              matters, but someday it might).  */
13343           o->map_head.link_order = NULL;
13344
13345           mdebug_sec = o;
13346         }
13347
13348       if (CONST_STRNEQ (o->name, ".gptab."))
13349         {
13350           const char *subname;
13351           unsigned int c;
13352           Elf32_gptab *tab;
13353           Elf32_External_gptab *ext_tab;
13354           unsigned int j;
13355
13356           /* The .gptab.sdata and .gptab.sbss sections hold
13357              information describing how the small data area would
13358              change depending upon the -G switch.  These sections
13359              not used in executables files.  */
13360           if (! info->relocatable)
13361             {
13362               for (p = o->map_head.link_order; p != NULL; p = p->next)
13363                 {
13364                   asection *input_section;
13365
13366                   if (p->type != bfd_indirect_link_order)
13367                     {
13368                       if (p->type == bfd_data_link_order)
13369                         continue;
13370                       abort ();
13371                     }
13372
13373                   input_section = p->u.indirect.section;
13374
13375                   /* Hack: reset the SEC_HAS_CONTENTS flag so that
13376                      elf_link_input_bfd ignores this section.  */
13377                   input_section->flags &= ~SEC_HAS_CONTENTS;
13378                 }
13379
13380               /* Skip this section later on (I don't think this
13381                  currently matters, but someday it might).  */
13382               o->map_head.link_order = NULL;
13383
13384               /* Really remove the section.  */
13385               bfd_section_list_remove (abfd, o);
13386               --abfd->section_count;
13387
13388               continue;
13389             }
13390
13391           /* There is one gptab for initialized data, and one for
13392              uninitialized data.  */
13393           if (strcmp (o->name, ".gptab.sdata") == 0)
13394             gptab_data_sec = o;
13395           else if (strcmp (o->name, ".gptab.sbss") == 0)
13396             gptab_bss_sec = o;
13397           else
13398             {
13399               (*_bfd_error_handler)
13400                 (_("%s: illegal section name `%s'"),
13401                  bfd_get_filename (abfd), o->name);
13402               bfd_set_error (bfd_error_nonrepresentable_section);
13403               return FALSE;
13404             }
13405
13406           /* The linker script always combines .gptab.data and
13407              .gptab.sdata into .gptab.sdata, and likewise for
13408              .gptab.bss and .gptab.sbss.  It is possible that there is
13409              no .sdata or .sbss section in the output file, in which
13410              case we must change the name of the output section.  */
13411           subname = o->name + sizeof ".gptab" - 1;
13412           if (bfd_get_section_by_name (abfd, subname) == NULL)
13413             {
13414               if (o == gptab_data_sec)
13415                 o->name = ".gptab.data";
13416               else
13417                 o->name = ".gptab.bss";
13418               subname = o->name + sizeof ".gptab" - 1;
13419               BFD_ASSERT (bfd_get_section_by_name (abfd, subname) != NULL);
13420             }
13421
13422           /* Set up the first entry.  */
13423           c = 1;
13424           amt = c * sizeof (Elf32_gptab);
13425           tab = bfd_malloc (amt);
13426           if (tab == NULL)
13427             return FALSE;
13428           tab[0].gt_header.gt_current_g_value = elf_gp_size (abfd);
13429           tab[0].gt_header.gt_unused = 0;
13430
13431           /* Combine the input sections.  */
13432           for (p = o->map_head.link_order; p != NULL; p = p->next)
13433             {
13434               asection *input_section;
13435               bfd *input_bfd;
13436               bfd_size_type size;
13437               unsigned long last;
13438               bfd_size_type gpentry;
13439
13440               if (p->type != bfd_indirect_link_order)
13441                 {
13442                   if (p->type == bfd_data_link_order)
13443                     continue;
13444                   abort ();
13445                 }
13446
13447               input_section = p->u.indirect.section;
13448               input_bfd = input_section->owner;
13449
13450               /* Combine the gptab entries for this input section one
13451                  by one.  We know that the input gptab entries are
13452                  sorted by ascending -G value.  */
13453               size = input_section->size;
13454               last = 0;
13455               for (gpentry = sizeof (Elf32_External_gptab);
13456                    gpentry < size;
13457                    gpentry += sizeof (Elf32_External_gptab))
13458                 {
13459                   Elf32_External_gptab ext_gptab;
13460                   Elf32_gptab int_gptab;
13461                   unsigned long val;
13462                   unsigned long add;
13463                   bfd_boolean exact;
13464                   unsigned int look;
13465
13466                   if (! (bfd_get_section_contents
13467                          (input_bfd, input_section, &ext_gptab, gpentry,
13468                           sizeof (Elf32_External_gptab))))
13469                     {
13470                       free (tab);
13471                       return FALSE;
13472                     }
13473
13474                   bfd_mips_elf32_swap_gptab_in (input_bfd, &ext_gptab,
13475                                                 &int_gptab);
13476                   val = int_gptab.gt_entry.gt_g_value;
13477                   add = int_gptab.gt_entry.gt_bytes - last;
13478
13479                   exact = FALSE;
13480                   for (look = 1; look < c; look++)
13481                     {
13482                       if (tab[look].gt_entry.gt_g_value >= val)
13483                         tab[look].gt_entry.gt_bytes += add;
13484
13485                       if (tab[look].gt_entry.gt_g_value == val)
13486                         exact = TRUE;
13487                     }
13488
13489                   if (! exact)
13490                     {
13491                       Elf32_gptab *new_tab;
13492                       unsigned int max;
13493
13494                       /* We need a new table entry.  */
13495                       amt = (bfd_size_type) (c + 1) * sizeof (Elf32_gptab);
13496                       new_tab = bfd_realloc (tab, amt);
13497                       if (new_tab == NULL)
13498                         {
13499                           free (tab);
13500                           return FALSE;
13501                         }
13502                       tab = new_tab;
13503                       tab[c].gt_entry.gt_g_value = val;
13504                       tab[c].gt_entry.gt_bytes = add;
13505
13506                       /* Merge in the size for the next smallest -G
13507                          value, since that will be implied by this new
13508                          value.  */
13509                       max = 0;
13510                       for (look = 1; look < c; look++)
13511                         {
13512                           if (tab[look].gt_entry.gt_g_value < val
13513                               && (max == 0
13514                                   || (tab[look].gt_entry.gt_g_value
13515                                       > tab[max].gt_entry.gt_g_value)))
13516                             max = look;
13517                         }
13518                       if (max != 0)
13519                         tab[c].gt_entry.gt_bytes +=
13520                           tab[max].gt_entry.gt_bytes;
13521
13522                       ++c;
13523                     }
13524
13525                   last = int_gptab.gt_entry.gt_bytes;
13526                 }
13527
13528               /* Hack: reset the SEC_HAS_CONTENTS flag so that
13529                  elf_link_input_bfd ignores this section.  */
13530               input_section->flags &= ~SEC_HAS_CONTENTS;
13531             }
13532
13533           /* The table must be sorted by -G value.  */
13534           if (c > 2)
13535             qsort (tab + 1, c - 1, sizeof (tab[0]), gptab_compare);
13536
13537           /* Swap out the table.  */
13538           amt = (bfd_size_type) c * sizeof (Elf32_External_gptab);
13539           ext_tab = bfd_alloc (abfd, amt);
13540           if (ext_tab == NULL)
13541             {
13542               free (tab);
13543               return FALSE;
13544             }
13545
13546           for (j = 0; j < c; j++)
13547             bfd_mips_elf32_swap_gptab_out (abfd, tab + j, ext_tab + j);
13548           free (tab);
13549
13550           o->size = c * sizeof (Elf32_External_gptab);
13551           o->contents = (bfd_byte *) ext_tab;
13552
13553           /* Skip this section later on (I don't think this currently
13554              matters, but someday it might).  */
13555           o->map_head.link_order = NULL;
13556         }
13557     }
13558
13559   /* Invoke the regular ELF backend linker to do all the work.  */
13560   if (!bfd_elf_final_link (abfd, info))
13561     return FALSE;
13562
13563   /* Now write out the computed sections.  */
13564
13565   if (reginfo_sec != NULL)
13566     {
13567       Elf32_External_RegInfo ext;
13568
13569       bfd_mips_elf32_swap_reginfo_out (abfd, &reginfo, &ext);
13570       if (! bfd_set_section_contents (abfd, reginfo_sec, &ext, 0, sizeof ext))
13571         return FALSE;
13572     }
13573
13574   if (mdebug_sec != NULL)
13575     {
13576       BFD_ASSERT (abfd->output_has_begun);
13577       if (! bfd_ecoff_write_accumulated_debug (mdebug_handle, abfd, &debug,
13578                                                swap, info,
13579                                                mdebug_sec->filepos))
13580         return FALSE;
13581
13582       bfd_ecoff_debug_free (mdebug_handle, abfd, &debug, swap, info);
13583     }
13584
13585   if (gptab_data_sec != NULL)
13586     {
13587       if (! bfd_set_section_contents (abfd, gptab_data_sec,
13588                                       gptab_data_sec->contents,
13589                                       0, gptab_data_sec->size))
13590         return FALSE;
13591     }
13592
13593   if (gptab_bss_sec != NULL)
13594     {
13595       if (! bfd_set_section_contents (abfd, gptab_bss_sec,
13596                                       gptab_bss_sec->contents,
13597                                       0, gptab_bss_sec->size))
13598         return FALSE;
13599     }
13600
13601   if (SGI_COMPAT (abfd))
13602     {
13603       rtproc_sec = bfd_get_section_by_name (abfd, ".rtproc");
13604       if (rtproc_sec != NULL)
13605         {
13606           if (! bfd_set_section_contents (abfd, rtproc_sec,
13607                                           rtproc_sec->contents,
13608                                           0, rtproc_sec->size))
13609             return FALSE;
13610         }
13611     }
13612
13613   return TRUE;
13614 }
13615 \f
13616 /* Structure for saying that BFD machine EXTENSION extends BASE.  */
13617
13618 struct mips_mach_extension {
13619   unsigned long extension, base;
13620 };
13621
13622
13623 /* An array describing how BFD machines relate to one another.  The entries
13624    are ordered topologically with MIPS I extensions listed last.  */
13625
13626 static const struct mips_mach_extension mips_mach_extensions[] = {
13627   /* MIPS64r2 extensions.  */
13628   { bfd_mach_mips_octeon2, bfd_mach_mips_octeonp },
13629   { bfd_mach_mips_octeonp, bfd_mach_mips_octeon },
13630   { bfd_mach_mips_octeon, bfd_mach_mipsisa64r2 },
13631
13632   /* MIPS64 extensions.  */
13633   { bfd_mach_mipsisa64r2, bfd_mach_mipsisa64 },
13634   { bfd_mach_mips_sb1, bfd_mach_mipsisa64 },
13635   { bfd_mach_mips_xlr, bfd_mach_mipsisa64 },
13636   { bfd_mach_mips_loongson_3a, bfd_mach_mipsisa64 },
13637
13638   /* MIPS V extensions.  */
13639   { bfd_mach_mipsisa64, bfd_mach_mips5 },
13640
13641   /* R10000 extensions.  */
13642   { bfd_mach_mips12000, bfd_mach_mips10000 },
13643   { bfd_mach_mips14000, bfd_mach_mips10000 },
13644   { bfd_mach_mips16000, bfd_mach_mips10000 },
13645
13646   /* R5000 extensions.  Note: the vr5500 ISA is an extension of the core
13647      vr5400 ISA, but doesn't include the multimedia stuff.  It seems
13648      better to allow vr5400 and vr5500 code to be merged anyway, since
13649      many libraries will just use the core ISA.  Perhaps we could add
13650      some sort of ASE flag if this ever proves a problem.  */
13651   { bfd_mach_mips5500, bfd_mach_mips5400 },
13652   { bfd_mach_mips5400, bfd_mach_mips5000 },
13653
13654   /* MIPS IV extensions.  */
13655   { bfd_mach_mips5, bfd_mach_mips8000 },
13656   { bfd_mach_mips10000, bfd_mach_mips8000 },
13657   { bfd_mach_mips5000, bfd_mach_mips8000 },
13658   { bfd_mach_mips7000, bfd_mach_mips8000 },
13659   { bfd_mach_mips9000, bfd_mach_mips8000 },
13660
13661   /* VR4100 extensions.  */
13662   { bfd_mach_mips4120, bfd_mach_mips4100 },
13663   { bfd_mach_mips4111, bfd_mach_mips4100 },
13664
13665   /* MIPS III extensions.  */
13666   { bfd_mach_mips_loongson_2e, bfd_mach_mips4000 },
13667   { bfd_mach_mips_loongson_2f, bfd_mach_mips4000 },
13668   { bfd_mach_mips8000, bfd_mach_mips4000 },
13669   { bfd_mach_mips4650, bfd_mach_mips4000 },
13670   { bfd_mach_mips4600, bfd_mach_mips4000 },
13671   { bfd_mach_mips4400, bfd_mach_mips4000 },
13672   { bfd_mach_mips4300, bfd_mach_mips4000 },
13673   { bfd_mach_mips4100, bfd_mach_mips4000 },
13674   { bfd_mach_mips4010, bfd_mach_mips4000 },
13675   { bfd_mach_mips5900, bfd_mach_mips4000 },
13676
13677   /* MIPS32 extensions.  */
13678   { bfd_mach_mipsisa32r2, bfd_mach_mipsisa32 },
13679
13680   /* MIPS II extensions.  */
13681   { bfd_mach_mips4000, bfd_mach_mips6000 },
13682   { bfd_mach_mipsisa32, bfd_mach_mips6000 },
13683
13684   /* MIPS I extensions.  */
13685   { bfd_mach_mips6000, bfd_mach_mips3000 },
13686   { bfd_mach_mips3900, bfd_mach_mips3000 }
13687 };
13688
13689
13690 /* Return true if bfd machine EXTENSION is an extension of machine BASE.  */
13691
13692 static bfd_boolean
13693 mips_mach_extends_p (unsigned long base, unsigned long extension)
13694 {
13695   size_t i;
13696
13697   if (extension == base)
13698     return TRUE;
13699
13700   if (base == bfd_mach_mipsisa32
13701       && mips_mach_extends_p (bfd_mach_mipsisa64, extension))
13702     return TRUE;
13703
13704   if (base == bfd_mach_mipsisa32r2
13705       && mips_mach_extends_p (bfd_mach_mipsisa64r2, extension))
13706     return TRUE;
13707
13708   for (i = 0; i < ARRAY_SIZE (mips_mach_extensions); i++)
13709     if (extension == mips_mach_extensions[i].extension)
13710       {
13711         extension = mips_mach_extensions[i].base;
13712         if (extension == base)
13713           return TRUE;
13714       }
13715
13716   return FALSE;
13717 }
13718
13719
13720 /* Return true if the given ELF header flags describe a 32-bit binary.  */
13721
13722 static bfd_boolean
13723 mips_32bit_flags_p (flagword flags)
13724 {
13725   return ((flags & EF_MIPS_32BITMODE) != 0
13726           || (flags & EF_MIPS_ABI) == E_MIPS_ABI_O32
13727           || (flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32
13728           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1
13729           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2
13730           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32
13731           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2);
13732 }
13733
13734
13735 /* Merge object attributes from IBFD into OBFD.  Raise an error if
13736    there are conflicting attributes.  */
13737 static bfd_boolean
13738 mips_elf_merge_obj_attributes (bfd *ibfd, bfd *obfd)
13739 {
13740   obj_attribute *in_attr;
13741   obj_attribute *out_attr;
13742   bfd *abi_fp_bfd;
13743
13744   abi_fp_bfd = mips_elf_tdata (obfd)->abi_fp_bfd;
13745   in_attr = elf_known_obj_attributes (ibfd)[OBJ_ATTR_GNU];
13746   if (!abi_fp_bfd && in_attr[Tag_GNU_MIPS_ABI_FP].i != 0)
13747     mips_elf_tdata (obfd)->abi_fp_bfd = ibfd;
13748
13749   if (!elf_known_obj_attributes_proc (obfd)[0].i)
13750     {
13751       /* This is the first object.  Copy the attributes.  */
13752       _bfd_elf_copy_obj_attributes (ibfd, obfd);
13753
13754       /* Use the Tag_null value to indicate the attributes have been
13755          initialized.  */
13756       elf_known_obj_attributes_proc (obfd)[0].i = 1;
13757
13758       return TRUE;
13759     }
13760
13761   /* Check for conflicting Tag_GNU_MIPS_ABI_FP attributes and merge
13762      non-conflicting ones.  */
13763   out_attr = elf_known_obj_attributes (obfd)[OBJ_ATTR_GNU];
13764   if (in_attr[Tag_GNU_MIPS_ABI_FP].i != out_attr[Tag_GNU_MIPS_ABI_FP].i)
13765     {
13766       out_attr[Tag_GNU_MIPS_ABI_FP].type = 1;
13767       if (out_attr[Tag_GNU_MIPS_ABI_FP].i == 0)
13768         out_attr[Tag_GNU_MIPS_ABI_FP].i = in_attr[Tag_GNU_MIPS_ABI_FP].i;
13769       else if (in_attr[Tag_GNU_MIPS_ABI_FP].i != 0)
13770         switch (out_attr[Tag_GNU_MIPS_ABI_FP].i)
13771           {
13772           case 1:
13773             switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
13774               {
13775               case 2:
13776                 _bfd_error_handler
13777                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13778                    obfd, abi_fp_bfd, ibfd, "-mdouble-float", "-msingle-float");
13779                 break;
13780
13781               case 3:
13782                 _bfd_error_handler
13783                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13784                    obfd, abi_fp_bfd, ibfd, "-mhard-float", "-msoft-float");
13785                 break;
13786
13787               case 4:
13788                 _bfd_error_handler
13789                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13790                    obfd, abi_fp_bfd, ibfd,
13791                    "-mdouble-float", "-mips32r2 -mfp64");
13792                 break;
13793
13794               default:
13795                 _bfd_error_handler
13796                   (_("Warning: %B uses %s (set by %B), "
13797                      "%B uses unknown floating point ABI %d"),
13798                    obfd, abi_fp_bfd, ibfd,
13799                    "-mdouble-float", in_attr[Tag_GNU_MIPS_ABI_FP].i);
13800                 break;
13801               }
13802             break;
13803
13804           case 2:
13805             switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
13806               {
13807               case 1:
13808                 _bfd_error_handler
13809                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13810                    obfd, abi_fp_bfd, ibfd, "-msingle-float", "-mdouble-float");
13811                 break;
13812
13813               case 3:
13814                 _bfd_error_handler
13815                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13816                    obfd, abi_fp_bfd, ibfd, "-mhard-float", "-msoft-float");
13817                 break;
13818
13819               case 4:
13820                 _bfd_error_handler
13821                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13822                    obfd, abi_fp_bfd, ibfd,
13823                    "-msingle-float", "-mips32r2 -mfp64");
13824                 break;
13825
13826               default:
13827                 _bfd_error_handler
13828                   (_("Warning: %B uses %s (set by %B), "
13829                      "%B uses unknown floating point ABI %d"),
13830                    obfd, abi_fp_bfd, ibfd,
13831                    "-msingle-float", in_attr[Tag_GNU_MIPS_ABI_FP].i);
13832                 break;
13833               }
13834             break;
13835
13836           case 3:
13837             switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
13838               {
13839               case 1:
13840               case 2:
13841               case 4:
13842                 _bfd_error_handler
13843                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13844                    obfd, abi_fp_bfd, ibfd, "-msoft-float", "-mhard-float");
13845                 break;
13846
13847               default:
13848                 _bfd_error_handler
13849                   (_("Warning: %B uses %s (set by %B), "
13850                      "%B uses unknown floating point ABI %d"),
13851                    obfd, abi_fp_bfd, ibfd,
13852                    "-msoft-float", in_attr[Tag_GNU_MIPS_ABI_FP].i);
13853                 break;
13854               }
13855             break;
13856
13857           case 4:
13858             switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
13859               {
13860               case 1:
13861                 _bfd_error_handler
13862                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13863                    obfd, abi_fp_bfd, ibfd,
13864                    "-mips32r2 -mfp64", "-mdouble-float");
13865                 break;
13866
13867               case 2:
13868                 _bfd_error_handler
13869                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13870                    obfd, abi_fp_bfd, ibfd,
13871                    "-mips32r2 -mfp64", "-msingle-float");
13872                 break;
13873
13874               case 3:
13875                 _bfd_error_handler
13876                   (_("Warning: %B uses %s (set by %B), %B uses %s"),
13877                    obfd, abi_fp_bfd, ibfd, "-mhard-float", "-msoft-float");
13878                 break;
13879
13880               default:
13881                 _bfd_error_handler
13882                   (_("Warning: %B uses %s (set by %B), "
13883                      "%B uses unknown floating point ABI %d"),
13884                    obfd, abi_fp_bfd, ibfd,
13885                    "-mips32r2 -mfp64", in_attr[Tag_GNU_MIPS_ABI_FP].i);
13886                 break;
13887               }
13888             break;
13889
13890           default:
13891             switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
13892               {
13893               case 1:
13894                 _bfd_error_handler
13895                   (_("Warning: %B uses unknown floating point ABI %d "
13896                      "(set by %B), %B uses %s"),
13897                    obfd, abi_fp_bfd, ibfd,
13898                    out_attr[Tag_GNU_MIPS_ABI_FP].i, "-mdouble-float");
13899                 break;
13900
13901               case 2:
13902                 _bfd_error_handler
13903                   (_("Warning: %B uses unknown floating point ABI %d "
13904                      "(set by %B), %B uses %s"),
13905                    obfd, abi_fp_bfd, ibfd,
13906                    out_attr[Tag_GNU_MIPS_ABI_FP].i, "-msingle-float");
13907                 break;
13908
13909               case 3:
13910                 _bfd_error_handler
13911                   (_("Warning: %B uses unknown floating point ABI %d "
13912                      "(set by %B), %B uses %s"),
13913                    obfd, abi_fp_bfd, ibfd,
13914                    out_attr[Tag_GNU_MIPS_ABI_FP].i, "-msoft-float");
13915                 break;
13916
13917               case 4:
13918                 _bfd_error_handler
13919                   (_("Warning: %B uses unknown floating point ABI %d "
13920                      "(set by %B), %B uses %s"),
13921                    obfd, abi_fp_bfd, ibfd,
13922                    out_attr[Tag_GNU_MIPS_ABI_FP].i, "-mips32r2 -mfp64");
13923                 break;
13924
13925               default:
13926                 _bfd_error_handler
13927                   (_("Warning: %B uses unknown floating point ABI %d "
13928                      "(set by %B), %B uses unknown floating point ABI %d"),
13929                    obfd, abi_fp_bfd, ibfd,
13930                    out_attr[Tag_GNU_MIPS_ABI_FP].i,
13931                    in_attr[Tag_GNU_MIPS_ABI_FP].i);
13932                 break;
13933               }
13934             break;
13935           }
13936     }
13937
13938   /* Merge Tag_compatibility attributes and any common GNU ones.  */
13939   _bfd_elf_merge_object_attributes (ibfd, obfd);
13940
13941   return TRUE;
13942 }
13943
13944 /* Merge backend specific data from an object file to the output
13945    object file when linking.  */
13946
13947 bfd_boolean
13948 _bfd_mips_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
13949 {
13950   flagword old_flags;
13951   flagword new_flags;
13952   bfd_boolean ok;
13953   bfd_boolean null_input_bfd = TRUE;
13954   asection *sec;
13955
13956   /* Check if we have the same endianness.  */
13957   if (! _bfd_generic_verify_endian_match (ibfd, obfd))
13958     {
13959       (*_bfd_error_handler)
13960         (_("%B: endianness incompatible with that of the selected emulation"),
13961          ibfd);
13962       return FALSE;
13963     }
13964
13965   if (!is_mips_elf (ibfd) || !is_mips_elf (obfd))
13966     return TRUE;
13967
13968   if (strcmp (bfd_get_target (ibfd), bfd_get_target (obfd)) != 0)
13969     {
13970       (*_bfd_error_handler)
13971         (_("%B: ABI is incompatible with that of the selected emulation"),
13972          ibfd);
13973       return FALSE;
13974     }
13975
13976   if (!mips_elf_merge_obj_attributes (ibfd, obfd))
13977     return FALSE;
13978
13979   new_flags = elf_elfheader (ibfd)->e_flags;
13980   elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_NOREORDER;
13981   old_flags = elf_elfheader (obfd)->e_flags;
13982
13983   if (! elf_flags_init (obfd))
13984     {
13985       elf_flags_init (obfd) = TRUE;
13986       elf_elfheader (obfd)->e_flags = new_flags;
13987       elf_elfheader (obfd)->e_ident[EI_CLASS]
13988         = elf_elfheader (ibfd)->e_ident[EI_CLASS];
13989
13990       if (bfd_get_arch (obfd) == bfd_get_arch (ibfd)
13991           && (bfd_get_arch_info (obfd)->the_default
13992               || mips_mach_extends_p (bfd_get_mach (obfd),
13993                                       bfd_get_mach (ibfd))))
13994         {
13995           if (! bfd_set_arch_mach (obfd, bfd_get_arch (ibfd),
13996                                    bfd_get_mach (ibfd)))
13997             return FALSE;
13998         }
13999
14000       return TRUE;
14001     }
14002
14003   /* Check flag compatibility.  */
14004
14005   new_flags &= ~EF_MIPS_NOREORDER;
14006   old_flags &= ~EF_MIPS_NOREORDER;
14007
14008   /* Some IRIX 6 BSD-compatibility objects have this bit set.  It
14009      doesn't seem to matter.  */
14010   new_flags &= ~EF_MIPS_XGOT;
14011   old_flags &= ~EF_MIPS_XGOT;
14012
14013   /* MIPSpro generates ucode info in n64 objects.  Again, we should
14014      just be able to ignore this.  */
14015   new_flags &= ~EF_MIPS_UCODE;
14016   old_flags &= ~EF_MIPS_UCODE;
14017
14018   /* DSOs should only be linked with CPIC code.  */
14019   if ((ibfd->flags & DYNAMIC) != 0)
14020     new_flags |= EF_MIPS_PIC | EF_MIPS_CPIC;
14021
14022   if (new_flags == old_flags)
14023     return TRUE;
14024
14025   /* Check to see if the input BFD actually contains any sections.
14026      If not, its flags may not have been initialised either, but it cannot
14027      actually cause any incompatibility.  */
14028   for (sec = ibfd->sections; sec != NULL; sec = sec->next)
14029     {
14030       /* Ignore synthetic sections and empty .text, .data and .bss sections
14031          which are automatically generated by gas.  Also ignore fake
14032          (s)common sections, since merely defining a common symbol does
14033          not affect compatibility.  */
14034       if ((sec->flags & SEC_IS_COMMON) == 0
14035           && strcmp (sec->name, ".reginfo")
14036           && strcmp (sec->name, ".mdebug")
14037           && (sec->size != 0
14038               || (strcmp (sec->name, ".text")
14039                   && strcmp (sec->name, ".data")
14040                   && strcmp (sec->name, ".bss"))))
14041         {
14042           null_input_bfd = FALSE;
14043           break;
14044         }
14045     }
14046   if (null_input_bfd)
14047     return TRUE;
14048
14049   ok = TRUE;
14050
14051   if (((new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0)
14052       != ((old_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0))
14053     {
14054       (*_bfd_error_handler)
14055         (_("%B: warning: linking abicalls files with non-abicalls files"),
14056          ibfd);
14057       ok = TRUE;
14058     }
14059
14060   if (new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC))
14061     elf_elfheader (obfd)->e_flags |= EF_MIPS_CPIC;
14062   if (! (new_flags & EF_MIPS_PIC))
14063     elf_elfheader (obfd)->e_flags &= ~EF_MIPS_PIC;
14064
14065   new_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC);
14066   old_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC);
14067
14068   /* Compare the ISAs.  */
14069   if (mips_32bit_flags_p (old_flags) != mips_32bit_flags_p (new_flags))
14070     {
14071       (*_bfd_error_handler)
14072         (_("%B: linking 32-bit code with 64-bit code"),
14073          ibfd);
14074       ok = FALSE;
14075     }
14076   else if (!mips_mach_extends_p (bfd_get_mach (ibfd), bfd_get_mach (obfd)))
14077     {
14078       /* OBFD's ISA isn't the same as, or an extension of, IBFD's.  */
14079       if (mips_mach_extends_p (bfd_get_mach (obfd), bfd_get_mach (ibfd)))
14080         {
14081           /* Copy the architecture info from IBFD to OBFD.  Also copy
14082              the 32-bit flag (if set) so that we continue to recognise
14083              OBFD as a 32-bit binary.  */
14084           bfd_set_arch_info (obfd, bfd_get_arch_info (ibfd));
14085           elf_elfheader (obfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH);
14086           elf_elfheader (obfd)->e_flags
14087             |= new_flags & (EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
14088
14089           /* Copy across the ABI flags if OBFD doesn't use them
14090              and if that was what caused us to treat IBFD as 32-bit.  */
14091           if ((old_flags & EF_MIPS_ABI) == 0
14092               && mips_32bit_flags_p (new_flags)
14093               && !mips_32bit_flags_p (new_flags & ~EF_MIPS_ABI))
14094             elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ABI;
14095         }
14096       else
14097         {
14098           /* The ISAs aren't compatible.  */
14099           (*_bfd_error_handler)
14100             (_("%B: linking %s module with previous %s modules"),
14101              ibfd,
14102              bfd_printable_name (ibfd),
14103              bfd_printable_name (obfd));
14104           ok = FALSE;
14105         }
14106     }
14107
14108   new_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
14109   old_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
14110
14111   /* Compare ABIs.  The 64-bit ABI does not use EF_MIPS_ABI.  But, it
14112      does set EI_CLASS differently from any 32-bit ABI.  */
14113   if ((new_flags & EF_MIPS_ABI) != (old_flags & EF_MIPS_ABI)
14114       || (elf_elfheader (ibfd)->e_ident[EI_CLASS]
14115           != elf_elfheader (obfd)->e_ident[EI_CLASS]))
14116     {
14117       /* Only error if both are set (to different values).  */
14118       if (((new_flags & EF_MIPS_ABI) && (old_flags & EF_MIPS_ABI))
14119           || (elf_elfheader (ibfd)->e_ident[EI_CLASS]
14120               != elf_elfheader (obfd)->e_ident[EI_CLASS]))
14121         {
14122           (*_bfd_error_handler)
14123             (_("%B: ABI mismatch: linking %s module with previous %s modules"),
14124              ibfd,
14125              elf_mips_abi_name (ibfd),
14126              elf_mips_abi_name (obfd));
14127           ok = FALSE;
14128         }
14129       new_flags &= ~EF_MIPS_ABI;
14130       old_flags &= ~EF_MIPS_ABI;
14131     }
14132
14133   /* Compare ASEs.  Forbid linking MIPS16 and microMIPS ASE modules together
14134      and allow arbitrary mixing of the remaining ASEs (retain the union).  */
14135   if ((new_flags & EF_MIPS_ARCH_ASE) != (old_flags & EF_MIPS_ARCH_ASE))
14136     {
14137       int old_micro = old_flags & EF_MIPS_ARCH_ASE_MICROMIPS;
14138       int new_micro = new_flags & EF_MIPS_ARCH_ASE_MICROMIPS;
14139       int old_m16 = old_flags & EF_MIPS_ARCH_ASE_M16;
14140       int new_m16 = new_flags & EF_MIPS_ARCH_ASE_M16;
14141       int micro_mis = old_m16 && new_micro;
14142       int m16_mis = old_micro && new_m16;
14143
14144       if (m16_mis || micro_mis)
14145         {
14146           (*_bfd_error_handler)
14147             (_("%B: ASE mismatch: linking %s module with previous %s modules"),
14148              ibfd,
14149              m16_mis ? "MIPS16" : "microMIPS",
14150              m16_mis ? "microMIPS" : "MIPS16");
14151           ok = FALSE;
14152         }
14153
14154       elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ARCH_ASE;
14155
14156       new_flags &= ~ EF_MIPS_ARCH_ASE;
14157       old_flags &= ~ EF_MIPS_ARCH_ASE;
14158     }
14159
14160   /* Warn about any other mismatches */
14161   if (new_flags != old_flags)
14162     {
14163       (*_bfd_error_handler)
14164         (_("%B: uses different e_flags (0x%lx) fields than previous modules (0x%lx)"),
14165          ibfd, (unsigned long) new_flags,
14166          (unsigned long) old_flags);
14167       ok = FALSE;
14168     }
14169
14170   if (! ok)
14171     {
14172       bfd_set_error (bfd_error_bad_value);
14173       return FALSE;
14174     }
14175
14176   return TRUE;
14177 }
14178
14179 /* Function to keep MIPS specific file flags like as EF_MIPS_PIC.  */
14180
14181 bfd_boolean
14182 _bfd_mips_elf_set_private_flags (bfd *abfd, flagword flags)
14183 {
14184   BFD_ASSERT (!elf_flags_init (abfd)
14185               || elf_elfheader (abfd)->e_flags == flags);
14186
14187   elf_elfheader (abfd)->e_flags = flags;
14188   elf_flags_init (abfd) = TRUE;
14189   return TRUE;
14190 }
14191
14192 char *
14193 _bfd_mips_elf_get_target_dtag (bfd_vma dtag)
14194 {
14195   switch (dtag)
14196     {
14197     default: return "";
14198     case DT_MIPS_RLD_VERSION:
14199       return "MIPS_RLD_VERSION";
14200     case DT_MIPS_TIME_STAMP:
14201       return "MIPS_TIME_STAMP";
14202     case DT_MIPS_ICHECKSUM:
14203       return "MIPS_ICHECKSUM";
14204     case DT_MIPS_IVERSION:
14205       return "MIPS_IVERSION";
14206     case DT_MIPS_FLAGS:
14207       return "MIPS_FLAGS";
14208     case DT_MIPS_BASE_ADDRESS:
14209       return "MIPS_BASE_ADDRESS";
14210     case DT_MIPS_MSYM:
14211       return "MIPS_MSYM";
14212     case DT_MIPS_CONFLICT:
14213       return "MIPS_CONFLICT";
14214     case DT_MIPS_LIBLIST:
14215       return "MIPS_LIBLIST";
14216     case DT_MIPS_LOCAL_GOTNO:
14217       return "MIPS_LOCAL_GOTNO";
14218     case DT_MIPS_CONFLICTNO:
14219       return "MIPS_CONFLICTNO";
14220     case DT_MIPS_LIBLISTNO:
14221       return "MIPS_LIBLISTNO";
14222     case DT_MIPS_SYMTABNO:
14223       return "MIPS_SYMTABNO";
14224     case DT_MIPS_UNREFEXTNO:
14225       return "MIPS_UNREFEXTNO";
14226     case DT_MIPS_GOTSYM:
14227       return "MIPS_GOTSYM";
14228     case DT_MIPS_HIPAGENO:
14229       return "MIPS_HIPAGENO";
14230     case DT_MIPS_RLD_MAP:
14231       return "MIPS_RLD_MAP";
14232     case DT_MIPS_DELTA_CLASS:
14233       return "MIPS_DELTA_CLASS";
14234     case DT_MIPS_DELTA_CLASS_NO:
14235       return "MIPS_DELTA_CLASS_NO";
14236     case DT_MIPS_DELTA_INSTANCE:
14237       return "MIPS_DELTA_INSTANCE";
14238     case DT_MIPS_DELTA_INSTANCE_NO:
14239       return "MIPS_DELTA_INSTANCE_NO";
14240     case DT_MIPS_DELTA_RELOC:
14241       return "MIPS_DELTA_RELOC";
14242     case DT_MIPS_DELTA_RELOC_NO:
14243       return "MIPS_DELTA_RELOC_NO";
14244     case DT_MIPS_DELTA_SYM:
14245       return "MIPS_DELTA_SYM";
14246     case DT_MIPS_DELTA_SYM_NO:
14247       return "MIPS_DELTA_SYM_NO";
14248     case DT_MIPS_DELTA_CLASSSYM:
14249       return "MIPS_DELTA_CLASSSYM";
14250     case DT_MIPS_DELTA_CLASSSYM_NO:
14251       return "MIPS_DELTA_CLASSSYM_NO";
14252     case DT_MIPS_CXX_FLAGS:
14253       return "MIPS_CXX_FLAGS";
14254     case DT_MIPS_PIXIE_INIT:
14255       return "MIPS_PIXIE_INIT";
14256     case DT_MIPS_SYMBOL_LIB:
14257       return "MIPS_SYMBOL_LIB";
14258     case DT_MIPS_LOCALPAGE_GOTIDX:
14259       return "MIPS_LOCALPAGE_GOTIDX";
14260     case DT_MIPS_LOCAL_GOTIDX:
14261       return "MIPS_LOCAL_GOTIDX";
14262     case DT_MIPS_HIDDEN_GOTIDX:
14263       return "MIPS_HIDDEN_GOTIDX";
14264     case DT_MIPS_PROTECTED_GOTIDX:
14265       return "MIPS_PROTECTED_GOT_IDX";
14266     case DT_MIPS_OPTIONS:
14267       return "MIPS_OPTIONS";
14268     case DT_MIPS_INTERFACE:
14269       return "MIPS_INTERFACE";
14270     case DT_MIPS_DYNSTR_ALIGN:
14271       return "DT_MIPS_DYNSTR_ALIGN";
14272     case DT_MIPS_INTERFACE_SIZE:
14273       return "DT_MIPS_INTERFACE_SIZE";
14274     case DT_MIPS_RLD_TEXT_RESOLVE_ADDR:
14275       return "DT_MIPS_RLD_TEXT_RESOLVE_ADDR";
14276     case DT_MIPS_PERF_SUFFIX:
14277       return "DT_MIPS_PERF_SUFFIX";
14278     case DT_MIPS_COMPACT_SIZE:
14279       return "DT_MIPS_COMPACT_SIZE";
14280     case DT_MIPS_GP_VALUE:
14281       return "DT_MIPS_GP_VALUE";
14282     case DT_MIPS_AUX_DYNAMIC:
14283       return "DT_MIPS_AUX_DYNAMIC";
14284     case DT_MIPS_PLTGOT:
14285       return "DT_MIPS_PLTGOT";
14286     case DT_MIPS_RWPLT:
14287       return "DT_MIPS_RWPLT";
14288     }
14289 }
14290
14291 bfd_boolean
14292 _bfd_mips_elf_print_private_bfd_data (bfd *abfd, void *ptr)
14293 {
14294   FILE *file = ptr;
14295
14296   BFD_ASSERT (abfd != NULL && ptr != NULL);
14297
14298   /* Print normal ELF private data.  */
14299   _bfd_elf_print_private_bfd_data (abfd, ptr);
14300
14301   /* xgettext:c-format */
14302   fprintf (file, _("private flags = %lx:"), elf_elfheader (abfd)->e_flags);
14303
14304   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O32)
14305     fprintf (file, _(" [abi=O32]"));
14306   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O64)
14307     fprintf (file, _(" [abi=O64]"));
14308   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32)
14309     fprintf (file, _(" [abi=EABI32]"));
14310   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI64)
14311     fprintf (file, _(" [abi=EABI64]"));
14312   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI))
14313     fprintf (file, _(" [abi unknown]"));
14314   else if (ABI_N32_P (abfd))
14315     fprintf (file, _(" [abi=N32]"));
14316   else if (ABI_64_P (abfd))
14317     fprintf (file, _(" [abi=64]"));
14318   else
14319     fprintf (file, _(" [no abi set]"));
14320
14321   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1)
14322     fprintf (file, " [mips1]");
14323   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2)
14324     fprintf (file, " [mips2]");
14325   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_3)
14326     fprintf (file, " [mips3]");
14327   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_4)
14328     fprintf (file, " [mips4]");
14329   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_5)
14330     fprintf (file, " [mips5]");
14331   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32)
14332     fprintf (file, " [mips32]");
14333   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64)
14334     fprintf (file, " [mips64]");
14335   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2)
14336     fprintf (file, " [mips32r2]");
14337   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64R2)
14338     fprintf (file, " [mips64r2]");
14339   else
14340     fprintf (file, _(" [unknown ISA]"));
14341
14342   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MDMX)
14343     fprintf (file, " [mdmx]");
14344
14345   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_M16)
14346     fprintf (file, " [mips16]");
14347
14348   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MICROMIPS)
14349     fprintf (file, " [micromips]");
14350
14351   if (elf_elfheader (abfd)->e_flags & EF_MIPS_32BITMODE)
14352     fprintf (file, " [32bitmode]");
14353   else
14354     fprintf (file, _(" [not 32bitmode]"));
14355
14356   if (elf_elfheader (abfd)->e_flags & EF_MIPS_NOREORDER)
14357     fprintf (file, " [noreorder]");
14358
14359   if (elf_elfheader (abfd)->e_flags & EF_MIPS_PIC)
14360     fprintf (file, " [PIC]");
14361
14362   if (elf_elfheader (abfd)->e_flags & EF_MIPS_CPIC)
14363     fprintf (file, " [CPIC]");
14364
14365   if (elf_elfheader (abfd)->e_flags & EF_MIPS_XGOT)
14366     fprintf (file, " [XGOT]");
14367
14368   if (elf_elfheader (abfd)->e_flags & EF_MIPS_UCODE)
14369     fprintf (file, " [UCODE]");
14370
14371   fputc ('\n', file);
14372
14373   return TRUE;
14374 }
14375
14376 const struct bfd_elf_special_section _bfd_mips_elf_special_sections[] =
14377 {
14378   { STRING_COMMA_LEN (".lit4"),   0, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
14379   { STRING_COMMA_LEN (".lit8"),   0, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
14380   { STRING_COMMA_LEN (".mdebug"), 0, SHT_MIPS_DEBUG, 0 },
14381   { STRING_COMMA_LEN (".sbss"),  -2, SHT_NOBITS,     SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
14382   { STRING_COMMA_LEN (".sdata"), -2, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
14383   { STRING_COMMA_LEN (".ucode"),  0, SHT_MIPS_UCODE, 0 },
14384   { NULL,                     0,  0, 0,              0 }
14385 };
14386
14387 /* Merge non visibility st_other attributes.  Ensure that the
14388    STO_OPTIONAL flag is copied into h->other, even if this is not a
14389    definiton of the symbol.  */
14390 void
14391 _bfd_mips_elf_merge_symbol_attribute (struct elf_link_hash_entry *h,
14392                                       const Elf_Internal_Sym *isym,
14393                                       bfd_boolean definition,
14394                                       bfd_boolean dynamic ATTRIBUTE_UNUSED)
14395 {
14396   if ((isym->st_other & ~ELF_ST_VISIBILITY (-1)) != 0)
14397     {
14398       unsigned char other;
14399
14400       other = (definition ? isym->st_other : h->other);
14401       other &= ~ELF_ST_VISIBILITY (-1);
14402       h->other = other | ELF_ST_VISIBILITY (h->other);
14403     }
14404
14405   if (!definition
14406       && ELF_MIPS_IS_OPTIONAL (isym->st_other))
14407     h->other |= STO_OPTIONAL;
14408 }
14409
14410 /* Decide whether an undefined symbol is special and can be ignored.
14411    This is the case for OPTIONAL symbols on IRIX.  */
14412 bfd_boolean
14413 _bfd_mips_elf_ignore_undef_symbol (struct elf_link_hash_entry *h)
14414 {
14415   return ELF_MIPS_IS_OPTIONAL (h->other) ? TRUE : FALSE;
14416 }
14417
14418 bfd_boolean
14419 _bfd_mips_elf_common_definition (Elf_Internal_Sym *sym)
14420 {
14421   return (sym->st_shndx == SHN_COMMON
14422           || sym->st_shndx == SHN_MIPS_ACOMMON
14423           || sym->st_shndx == SHN_MIPS_SCOMMON);
14424 }
14425
14426 /* Return address for Ith PLT stub in section PLT, for relocation REL
14427    or (bfd_vma) -1 if it should not be included.  */
14428
14429 bfd_vma
14430 _bfd_mips_elf_plt_sym_val (bfd_vma i, const asection *plt,
14431                            const arelent *rel ATTRIBUTE_UNUSED)
14432 {
14433   return (plt->vma
14434           + 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry)
14435           + i * 4 * ARRAY_SIZE (mips_exec_plt_entry));
14436 }
14437
14438 void
14439 _bfd_mips_post_process_headers (bfd *abfd, struct bfd_link_info *link_info)
14440 {
14441   struct mips_elf_link_hash_table *htab;
14442   Elf_Internal_Ehdr *i_ehdrp;
14443
14444   i_ehdrp = elf_elfheader (abfd);
14445   if (link_info)
14446     {
14447       htab = mips_elf_hash_table (link_info);
14448       BFD_ASSERT (htab != NULL);
14449
14450       if (htab->use_plts_and_copy_relocs && !htab->is_vxworks)
14451         i_ehdrp->e_ident[EI_ABIVERSION] = 1;
14452     }
14453 }